14d6c458bSopenharmony_ci /* 24d6c458bSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License. 54d6c458bSopenharmony_ci * You may obtain a copy of the License at 64d6c458bSopenharmony_ci * 74d6c458bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84d6c458bSopenharmony_ci * 94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and 134d6c458bSopenharmony_ci * limitations under the License. 144d6c458bSopenharmony_ci */ 154d6c458bSopenharmony_ci 164d6c458bSopenharmony_ci#ifndef URL_JS_URL_H 174d6c458bSopenharmony_ci#define URL_JS_URL_H 184d6c458bSopenharmony_ci 194d6c458bSopenharmony_ci#include <algorithm> 204d6c458bSopenharmony_ci#include <bitset> 214d6c458bSopenharmony_ci#include <cmath> 224d6c458bSopenharmony_ci#include <cstdio> 234d6c458bSopenharmony_ci#include <cstdlib> 244d6c458bSopenharmony_ci#include <map> 254d6c458bSopenharmony_ci#include <string> 264d6c458bSopenharmony_ci#include <vector> 274d6c458bSopenharmony_ci#include "napi/native_api.h" 284d6c458bSopenharmony_ci#include "napi/native_node_api.h" 294d6c458bSopenharmony_cinamespace OHOS::Url { 304d6c458bSopenharmony_ci enum class BitsetStatusFlag { 314d6c458bSopenharmony_ci BIT0 = 0, // 0:Bit 0 Set to true,The URL analysis failed 324d6c458bSopenharmony_ci BIT1 = 1, // 1:Bit 1 Set to true,The protocol is the default protocol 334d6c458bSopenharmony_ci BIT2 = 2, // 2:Bit 2 Set to true,The URL has username 344d6c458bSopenharmony_ci BIT3 = 3, // 3:Bit 3 Set to true,The URL has password 354d6c458bSopenharmony_ci BIT4 = 4, // 4:Bit 4 Set to true,The URL has hostname 364d6c458bSopenharmony_ci BIT5 = 5, // 5:Bit 5 Set to true,The URL Port is the specially 374d6c458bSopenharmony_ci BIT6 = 6, // 6:Bit 6 Set to true,The URL has pathname 384d6c458bSopenharmony_ci BIT7 = 7, // 7:Bit 7 Set to true,The URL has query 394d6c458bSopenharmony_ci BIT8 = 8, // 8:Bit 8 Set to true,The URL has fragment 404d6c458bSopenharmony_ci BIT9 = 9, // 9:Bit 9 Set to true,The URL Can not be base 414d6c458bSopenharmony_ci BIT10 = 10, // 10:Bit 10 Set to true,The host is IPV6 424d6c458bSopenharmony_ci BIT_STATUS_11 = 11, // 11:Each bit of a BIT represents a different parsing state. 434d6c458bSopenharmony_ci BIT_ASCII_32 = 32, // 32:32-bit previously invalid control characters in ascii 444d6c458bSopenharmony_ci BIT_ASCII_127 = 127, // 127:127 bits in ascii are DEL characters 454d6c458bSopenharmony_ci MAX_BIT_SIZE = 128 // 128:ascii max range 464d6c458bSopenharmony_ci }; 474d6c458bSopenharmony_ci 484d6c458bSopenharmony_ci struct UrlData { 494d6c458bSopenharmony_ci int port = -1; 504d6c458bSopenharmony_ci bool isSpecialPath = false; 514d6c458bSopenharmony_ci std::vector<std::string> path; 524d6c458bSopenharmony_ci std::string password = ""; 534d6c458bSopenharmony_ci std::string scheme = ""; 544d6c458bSopenharmony_ci std::string query = ""; 554d6c458bSopenharmony_ci std::string username = ""; 564d6c458bSopenharmony_ci std::string fragment = ""; 574d6c458bSopenharmony_ci std::string host = ""; 584d6c458bSopenharmony_ci }; 594d6c458bSopenharmony_ci 604d6c458bSopenharmony_ci bool IsHexDigit(const char& ch); 614d6c458bSopenharmony_ci std::string DecodeSpecialChars(std::string input); 624d6c458bSopenharmony_ci void DeleteC0OrSpace(std::string& str); 634d6c458bSopenharmony_ci void DeleteTabOrNewline(std::string& str1); 644d6c458bSopenharmony_ci std::string DealIpv4(std::string str); 654d6c458bSopenharmony_ci std::string SplitNum(std::string num, size_t& number); 664d6c458bSopenharmony_ci void FormatIpv6(std::string& str); 674d6c458bSopenharmony_ci bool ISFileNohost(const std::string& input); 684d6c458bSopenharmony_ci bool AnalysisScheme(std::string& input, std::string& scheme, 694d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 704d6c458bSopenharmony_ci void AnalysisUsernameAndPasswd(std::string& input, std::string& username, std::string& password, 714d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 724d6c458bSopenharmony_ci void AnalysisPath(std::string& input, std::vector<std::string>& path, 734d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags, bool isSpecial); 744d6c458bSopenharmony_ci void AnalysisOpaqueHost(std::string input, std::string& host, 754d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 764d6c458bSopenharmony_ci void AnalyseIPv4(const std::string& input, std::string& host, 774d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 784d6c458bSopenharmony_ci void AnalysisHost(std::string& input, std::string& host, 794d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags, bool special); 804d6c458bSopenharmony_ci void AnalysisFilePath(std::string& input, UrlData& urlinfo, 814d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 824d6c458bSopenharmony_ci void AnalysisFilescheme(const std::string& input, UrlData& urlinfo, 834d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 844d6c458bSopenharmony_ci void AnalyInfoPath(std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)> &flags, 854d6c458bSopenharmony_ci UrlData& urlinfo, const std::string& input); 864d6c458bSopenharmony_ci void AnalyHostPath(std::string &strHost, std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags, 874d6c458bSopenharmony_ci UrlData& urlinfo); 884d6c458bSopenharmony_ci void AnalyStrHost(std::string &strHost, UrlData& urlinfo, 894d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)> &flags); 904d6c458bSopenharmony_ci void AnalysisNoDefaultProtocol(std::string& input, UrlData& urlinfo, 914d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 924d6c458bSopenharmony_ci void AnalysisOnlyHost(const std::string& input, UrlData& urlinfo, 934d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags, size_t pos); 944d6c458bSopenharmony_ci void FormatIpv4(std::vector<std::string> nums, std::string& host, 954d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)> &flags); 964d6c458bSopenharmony_ci void AnalysisSpecialFile(std::string& temp, size_t pos, UrlData& urlinfo, 974d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 984d6c458bSopenharmony_ci void AnalysisFile(std::string& input, UrlData& urlinfo, 994d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 1004d6c458bSopenharmony_ci void ParsingHostAndPath(std::string& input, UrlData& urlinfo, size_t& pos, 1014d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 1024d6c458bSopenharmony_ci void ShorteningPath(UrlData& urlData, UrlData& baseData, bool isFile); 1034d6c458bSopenharmony_ci void RemoveLeadingZeros(std::vector<std::string> &ipv6); 1044d6c458bSopenharmony_ci void IPv6Host(std::string& input, std::string& host, 1054d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)>& flags); 1064d6c458bSopenharmony_ci std::string BasePathToStr(UrlData& urlData); 1074d6c458bSopenharmony_ci class URL { 1084d6c458bSopenharmony_ci public: 1094d6c458bSopenharmony_ci /** 1104d6c458bSopenharmony_ci * URI constructor, which is used to instantiate a URI object. 1114d6c458bSopenharmony_ci * 1124d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1134d6c458bSopenharmony_ci */ 1144d6c458bSopenharmony_ci explicit URL(const std::string& input); 1154d6c458bSopenharmony_ci 1164d6c458bSopenharmony_ci /** 1174d6c458bSopenharmony_ci * URI constructor, which is used to instantiate a URI object. 1184d6c458bSopenharmony_ci * 1194d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1204d6c458bSopenharmony_ci * @param base The input parameter is a character string. 1214d6c458bSopenharmony_ci */ 1224d6c458bSopenharmony_ci URL(const std::string& input, const std::string& base); 1234d6c458bSopenharmony_ci 1244d6c458bSopenharmony_ci /** 1254d6c458bSopenharmony_ci * URI constructor, which is used to instantiate a URI object. 1264d6c458bSopenharmony_ci * 1274d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1284d6c458bSopenharmony_ci * @param base The input parameter is the URL object. 1294d6c458bSopenharmony_ci */ 1304d6c458bSopenharmony_ci URL(const std::string& input, const URL& base); 1314d6c458bSopenharmony_ci 1324d6c458bSopenharmony_ci /** 1334d6c458bSopenharmony_ci * 1344d6c458bSopenharmony_ci * @param env NAPI environment parameters. 1354d6c458bSopenharmony_ci * Gets the host name portion of the URL��not include the port. 1364d6c458bSopenharmony_ci */ 1374d6c458bSopenharmony_ci napi_value GetHostname(napi_env env) const; 1384d6c458bSopenharmony_ci 1394d6c458bSopenharmony_ci /** 1404d6c458bSopenharmony_ci * Sets the host name portion of the URL��not include the port. 1414d6c458bSopenharmony_ci * 1424d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1434d6c458bSopenharmony_ci */ 1444d6c458bSopenharmony_ci void SetHostname(const std::string& input); 1454d6c458bSopenharmony_ci 1464d6c458bSopenharmony_ci /** 1474d6c458bSopenharmony_ci * Sets the username name portion of the URL��not include the port. 1484d6c458bSopenharmony_ci * 1494d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1504d6c458bSopenharmony_ci */ 1514d6c458bSopenharmony_ci void SetUsername(const std::string& input); 1524d6c458bSopenharmony_ci 1534d6c458bSopenharmony_ci /** 1544d6c458bSopenharmony_ci * Sets the password portion of the URL��not include the port. 1554d6c458bSopenharmony_ci * 1564d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1574d6c458bSopenharmony_ci */ 1584d6c458bSopenharmony_ci void SetPassword(const std::string& input); 1594d6c458bSopenharmony_ci 1604d6c458bSopenharmony_ci /** 1614d6c458bSopenharmony_ci * Sets the scheme portion of the URL��not include the port. 1624d6c458bSopenharmony_ci * 1634d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1644d6c458bSopenharmony_ci */ 1654d6c458bSopenharmony_ci void SetScheme(const std::string& input); 1664d6c458bSopenharmony_ci 1674d6c458bSopenharmony_ci /** 1684d6c458bSopenharmony_ci * Sets the fragment portion of the URL��not include the port. 1694d6c458bSopenharmony_ci * 1704d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1714d6c458bSopenharmony_ci */ 1724d6c458bSopenharmony_ci void SetFragment(const std::string& input); 1734d6c458bSopenharmony_ci 1744d6c458bSopenharmony_ci /** 1754d6c458bSopenharmony_ci * Sets the search portion of the URL��not include the port. 1764d6c458bSopenharmony_ci * 1774d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1784d6c458bSopenharmony_ci */ 1794d6c458bSopenharmony_ci void SetSearch(const std::string& input); 1804d6c458bSopenharmony_ci 1814d6c458bSopenharmony_ci /** 1824d6c458bSopenharmony_ci * Sets the host portion of the URL��not include the port. 1834d6c458bSopenharmony_ci * 1844d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1854d6c458bSopenharmony_ci */ 1864d6c458bSopenharmony_ci void SetHost(const std::string& input); 1874d6c458bSopenharmony_ci 1884d6c458bSopenharmony_ci /** 1894d6c458bSopenharmony_ci * Sets the port portion of the URL��not include the port. 1904d6c458bSopenharmony_ci * 1914d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1924d6c458bSopenharmony_ci */ 1934d6c458bSopenharmony_ci void SetPort(const std::string& input); 1944d6c458bSopenharmony_ci 1954d6c458bSopenharmony_ci /** 1964d6c458bSopenharmony_ci * Sets the href portion of the URL��not include the port. 1974d6c458bSopenharmony_ci * 1984d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 1994d6c458bSopenharmony_ci */ 2004d6c458bSopenharmony_ci void SetHref(const std::string& input); 2014d6c458bSopenharmony_ci 2024d6c458bSopenharmony_ci /** 2034d6c458bSopenharmony_ci * Sets the path portion of the URL��not include the port. 2044d6c458bSopenharmony_ci * 2054d6c458bSopenharmony_ci * @param input Constructs a URI by parsing a given string. 2064d6c458bSopenharmony_ci */ 2074d6c458bSopenharmony_ci void SetPath(const std::string& input); 2084d6c458bSopenharmony_ci 2094d6c458bSopenharmony_ci /** 2104d6c458bSopenharmony_ci * Gets the search portion of the URL��not include the port. 2114d6c458bSopenharmony_ci * 2124d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2134d6c458bSopenharmony_ci */ 2144d6c458bSopenharmony_ci napi_value GetSearch(napi_env env) const; 2154d6c458bSopenharmony_ci 2164d6c458bSopenharmony_ci /** 2174d6c458bSopenharmony_ci * Gets the username portion of the URL��not include the port. 2184d6c458bSopenharmony_ci * 2194d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2204d6c458bSopenharmony_ci */ 2214d6c458bSopenharmony_ci napi_value GetUsername(napi_env env) const; 2224d6c458bSopenharmony_ci 2234d6c458bSopenharmony_ci /** 2244d6c458bSopenharmony_ci * Gets the password portion of the URL��not include the port. 2254d6c458bSopenharmony_ci * 2264d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2274d6c458bSopenharmony_ci */ 2284d6c458bSopenharmony_ci napi_value GetPassword(napi_env env) const; 2294d6c458bSopenharmony_ci 2304d6c458bSopenharmony_ci /** 2314d6c458bSopenharmony_ci * Gets the fragment portion of the URL��not include the port. 2324d6c458bSopenharmony_ci * 2334d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2344d6c458bSopenharmony_ci */ 2354d6c458bSopenharmony_ci napi_value GetFragment(napi_env env) const; 2364d6c458bSopenharmony_ci 2374d6c458bSopenharmony_ci /** 2384d6c458bSopenharmony_ci * Gets the scheme portion of the URL��not include the port. 2394d6c458bSopenharmony_ci * 2404d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2414d6c458bSopenharmony_ci */ 2424d6c458bSopenharmony_ci napi_value GetScheme(napi_env env) const; 2434d6c458bSopenharmony_ci 2444d6c458bSopenharmony_ci /** 2454d6c458bSopenharmony_ci * Gets the path portion of the URL��not include the port. 2464d6c458bSopenharmony_ci * 2474d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2484d6c458bSopenharmony_ci */ 2494d6c458bSopenharmony_ci napi_value GetPath(napi_env env) const; 2504d6c458bSopenharmony_ci 2514d6c458bSopenharmony_ci /** 2524d6c458bSopenharmony_ci * Gets the port portion of the URL��not include the port. 2534d6c458bSopenharmony_ci * 2544d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2554d6c458bSopenharmony_ci */ 2564d6c458bSopenharmony_ci napi_value GetPort(napi_env env) const; 2574d6c458bSopenharmony_ci 2584d6c458bSopenharmony_ci /** 2594d6c458bSopenharmony_ci * Judge whether it's on or off. 2604d6c458bSopenharmony_ci * 2614d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2624d6c458bSopenharmony_ci */ 2634d6c458bSopenharmony_ci napi_value GetOnOrOff(napi_env env) const; 2644d6c458bSopenharmony_ci 2654d6c458bSopenharmony_ci /** 2664d6c458bSopenharmony_ci * Judge whether it's Ipv6. 2674d6c458bSopenharmony_ci * 2684d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2694d6c458bSopenharmony_ci */ 2704d6c458bSopenharmony_ci napi_value GetIsIpv6(napi_env env) const; 2714d6c458bSopenharmony_ci 2724d6c458bSopenharmony_ci /** 2734d6c458bSopenharmony_ci * Gets the host name portion of the URL��not include the port. 2744d6c458bSopenharmony_ci * 2754d6c458bSopenharmony_ci * @param env NAPI environment parameters. 2764d6c458bSopenharmony_ci */ 2774d6c458bSopenharmony_ci napi_value GetHost(napi_env env) const; 2784d6c458bSopenharmony_ci 2794d6c458bSopenharmony_ci /** 2804d6c458bSopenharmony_ci * The destructor of the url 2814d6c458bSopenharmony_ci */ 2824d6c458bSopenharmony_ci virtual ~URL() {} 2834d6c458bSopenharmony_ci 2844d6c458bSopenharmony_ci private: 2854d6c458bSopenharmony_ci UrlData urlData_; 2864d6c458bSopenharmony_ci std::bitset<static_cast<size_t>(BitsetStatusFlag::BIT_STATUS_11)> flags_; 2874d6c458bSopenharmony_ci // bitset<11>:Similar to bool array, each bit status represents the real-time status of current URL parsing 2884d6c458bSopenharmony_ci }; 2894d6c458bSopenharmony_ci 2904d6c458bSopenharmony_ci class URLSearchParams { 2914d6c458bSopenharmony_ci public: 2924d6c458bSopenharmony_ci /** 2934d6c458bSopenharmony_ci * A parameterized constructor used to create an URLSearchParams instance. 2944d6c458bSopenharmony_ci */ 2954d6c458bSopenharmony_ci explicit URLSearchParams() {} 2964d6c458bSopenharmony_ci 2974d6c458bSopenharmony_ci /** 2984d6c458bSopenharmony_ci * Virtual destructor of URLSearchParams 2994d6c458bSopenharmony_ci */ 3004d6c458bSopenharmony_ci virtual ~URLSearchParams() {} 3014d6c458bSopenharmony_ci 3024d6c458bSopenharmony_ci /** 3034d6c458bSopenharmony_ci * Returns a Boolean that indicates whether a parameter with the specified name exists. 3044d6c458bSopenharmony_ci * 3054d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3064d6c458bSopenharmony_ci * @param name Specifies the name of a key-value pair. 3074d6c458bSopenharmony_ci */ 3084d6c458bSopenharmony_ci napi_value IsHas(napi_env env, napi_value name) const; 3094d6c458bSopenharmony_ci 3104d6c458bSopenharmony_ci /** 3114d6c458bSopenharmony_ci * Returns the first value associated to the given search parameter. 3124d6c458bSopenharmony_ci * 3134d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3144d6c458bSopenharmony_ci * @param buffer Returns the first value associated to the given search parameter. 3154d6c458bSopenharmony_ci */ 3164d6c458bSopenharmony_ci napi_value Get(napi_env env, napi_value buffer); 3174d6c458bSopenharmony_ci 3184d6c458bSopenharmony_ci /** 3194d6c458bSopenharmony_ci * Returns all key-value pairs associated with a given search parameter as an array. 3204d6c458bSopenharmony_ci * 3214d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3224d6c458bSopenharmony_ci * @param buffer Specifies the name of a key value. 3234d6c458bSopenharmony_ci */ 3244d6c458bSopenharmony_ci napi_value GetAll(napi_env env, napi_value buffer); 3254d6c458bSopenharmony_ci 3264d6c458bSopenharmony_ci /** 3274d6c458bSopenharmony_ci * Appends a specified key/value pair as a new search parameter. 3284d6c458bSopenharmony_ci * 3294d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3304d6c458bSopenharmony_ci * @param buffer Key name of the search parameter to be inserted. 3314d6c458bSopenharmony_ci * @param temp Values of search parameters to be inserted. 3324d6c458bSopenharmony_ci */ 3334d6c458bSopenharmony_ci void Append(napi_env env, napi_value buffer, napi_value temp); 3344d6c458bSopenharmony_ci 3354d6c458bSopenharmony_ci /** 3364d6c458bSopenharmony_ci * Deletes the given search parameter and its associated value,from the list of all search parameters. 3374d6c458bSopenharmony_ci * 3384d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3394d6c458bSopenharmony_ci * @param buffer Name of the key-value pair to be deleted. 3404d6c458bSopenharmony_ci */ 3414d6c458bSopenharmony_ci void Delete(napi_env env, napi_value buffer); 3424d6c458bSopenharmony_ci 3434d6c458bSopenharmony_ci /** 3444d6c458bSopenharmony_ci * Returns an ES6 iterator. Each item of the iterator is a JavaScript Array. 3454d6c458bSopenharmony_ci * 3464d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3474d6c458bSopenharmony_ci */ 3484d6c458bSopenharmony_ci napi_value Entries(napi_env env) const; 3494d6c458bSopenharmony_ci 3504d6c458bSopenharmony_ci /** 3514d6c458bSopenharmony_ci * Sets the value associated with a given search parameter to the 3524d6c458bSopenharmony_ci * given value. If there were several matching values, this method 3534d6c458bSopenharmony_ci * deletes the others. If the search parameter doesn't exist, this 3544d6c458bSopenharmony_ci * method creates it. 3554d6c458bSopenharmony_ci * 3564d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3574d6c458bSopenharmony_ci * @param name Key name of the parameter to be set. 3584d6c458bSopenharmony_ci * @param value Indicates the parameter value to be set. 3594d6c458bSopenharmony_ci */ 3604d6c458bSopenharmony_ci void Set(napi_env env, napi_value name, napi_value value); 3614d6c458bSopenharmony_ci 3624d6c458bSopenharmony_ci /** 3634d6c458bSopenharmony_ci * Sort all key/value pairs contained in this object in place and return undefined. 3644d6c458bSopenharmony_ci */ 3654d6c458bSopenharmony_ci void Sort(); 3664d6c458bSopenharmony_ci 3674d6c458bSopenharmony_ci /** 3684d6c458bSopenharmony_ci * Returns an iterator allowing to go through all keys contained in this object. 3694d6c458bSopenharmony_ci * 3704d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3714d6c458bSopenharmony_ci */ 3724d6c458bSopenharmony_ci napi_value IterByKeys(napi_env env); 3734d6c458bSopenharmony_ci 3744d6c458bSopenharmony_ci /** 3754d6c458bSopenharmony_ci * Returns an iterator allowing to go through all values contained in this object. 3764d6c458bSopenharmony_ci * 3774d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3784d6c458bSopenharmony_ci */ 3794d6c458bSopenharmony_ci napi_value IterByValues(napi_env env); 3804d6c458bSopenharmony_ci 3814d6c458bSopenharmony_ci /** 3824d6c458bSopenharmony_ci * Sets the string array of searchParams. 3834d6c458bSopenharmony_ci * 3844d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3854d6c458bSopenharmony_ci * @param input String array. 3864d6c458bSopenharmony_ci */ 3874d6c458bSopenharmony_ci void SetArray(napi_env env, std::vector<std::string> input); 3884d6c458bSopenharmony_ci 3894d6c458bSopenharmony_ci /** 3904d6c458bSopenharmony_ci * Gets the string array of searchParams. 3914d6c458bSopenharmony_ci * 3924d6c458bSopenharmony_ci * @param env NAPI environment parameters. 3934d6c458bSopenharmony_ci */ 3944d6c458bSopenharmony_ci napi_value GetArray(napi_env env) const; 3954d6c458bSopenharmony_ci 3964d6c458bSopenharmony_ci /** 3974d6c458bSopenharmony_ci * This function will decode the string and put the parsed key and value values into the 3984d6c458bSopenharmony_ci * vector container of urlsearchparams class according to the rules. 3994d6c458bSopenharmony_ci * 4004d6c458bSopenharmony_ci * @param env NAPI environment parameters. 4014d6c458bSopenharmony_ci * @param Stringpar The input parameter of urlsearchparams is string. 4024d6c458bSopenharmony_ci */ 4034d6c458bSopenharmony_ci std::vector<std::string> StringParmas(napi_env env, std::string Stringpar); 4044d6c458bSopenharmony_ci 4054d6c458bSopenharmony_ci private: 4064d6c458bSopenharmony_ci std::string ToUSVString(std::string inputStr); 4074d6c458bSopenharmony_ci void HandleIllegalChar(std::wstring& inputStr, std::wstring::const_iterator it); 4084d6c458bSopenharmony_ci std::vector<std::string> searchParams {}; 4094d6c458bSopenharmony_ci }; 4104d6c458bSopenharmony_ci} // namespace OHOS::Url 4114d6c458bSopenharmony_ci#endif // URL_JS_URL_H 412