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_ciinterface NativeUri { 164d6c458bSopenharmony_ci new(input: string): NativeUri; 174d6c458bSopenharmony_ci normalize(): string; 184d6c458bSopenharmony_ci equals(other: NativeUri): boolean; 194d6c458bSopenharmony_ci equalsTo(other: NativeUri): boolean; 204d6c458bSopenharmony_ci checkIsAbsolute(): boolean; 214d6c458bSopenharmony_ci toString(): string; 224d6c458bSopenharmony_ci checkIsRelative(): boolean; 234d6c458bSopenharmony_ci checkIsOpaque(): boolean; 244d6c458bSopenharmony_ci checkIsHierarchical(): boolean; 254d6c458bSopenharmony_ci addQueryValue(key: string, value: string): string; 264d6c458bSopenharmony_ci addSegment(pathSegment: string):string; 274d6c458bSopenharmony_ci getSegment(): string[]; 284d6c458bSopenharmony_ci clearQuery(): string; 294d6c458bSopenharmony_ci scheme: string | null; 304d6c458bSopenharmony_ci authority: string | null; 314d6c458bSopenharmony_ci ssp: string; 324d6c458bSopenharmony_ci userInfo: string | null; 334d6c458bSopenharmony_ci host: string | null; 344d6c458bSopenharmony_ci port: string; 354d6c458bSopenharmony_ci path: string | null; 364d6c458bSopenharmony_ci query: string | null; 374d6c458bSopenharmony_ci fragment: string | null; 384d6c458bSopenharmony_ci isFailed: string; 394d6c458bSopenharmony_ci encodedUserInfo: string | null; 404d6c458bSopenharmony_ci encodedPath: string | null; 414d6c458bSopenharmony_ci encodedQuery: string | null; 424d6c458bSopenharmony_ci encodedFragment: string | null; 434d6c458bSopenharmony_ci encodedAuthority: string | null; 444d6c458bSopenharmony_ci encodedSSP: string | null; 454d6c458bSopenharmony_ci} 464d6c458bSopenharmony_ciinterface UriInterface { 474d6c458bSopenharmony_ci Uri: NativeUri; 484d6c458bSopenharmony_ci} 494d6c458bSopenharmony_cideclare function requireInternal(s: string): UriInterface; 504d6c458bSopenharmony_ciconst uri = requireInternal('uri'); 514d6c458bSopenharmony_ci 524d6c458bSopenharmony_ciconst TypeErrorCodeId = 401; 534d6c458bSopenharmony_ciconst SyntaxErrorCodeId = 10200002; 544d6c458bSopenharmony_ci 554d6c458bSopenharmony_ciclass BusinessError extends Error { 564d6c458bSopenharmony_ci code: number; 574d6c458bSopenharmony_ci constructor(msg: string) { 584d6c458bSopenharmony_ci super(msg); 594d6c458bSopenharmony_ci this.name = 'BusinessError'; 604d6c458bSopenharmony_ci this.code = TypeErrorCodeId; 614d6c458bSopenharmony_ci } 624d6c458bSopenharmony_ci} 634d6c458bSopenharmony_ci 644d6c458bSopenharmony_ciclass URI { 654d6c458bSopenharmony_ci uricalss: NativeUri; 664d6c458bSopenharmony_ci constructor(input: string) { 674d6c458bSopenharmony_ci if (typeof input !== 'string' || input.length === 0) { 684d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${input} must be string`); 694d6c458bSopenharmony_ci } 704d6c458bSopenharmony_ci this.uricalss = new uri.Uri(input); 714d6c458bSopenharmony_ci let errStr: string = this.uricalss.isFailed; 724d6c458bSopenharmony_ci if (errStr.length !== 0) { 734d6c458bSopenharmony_ci let err : BusinessError = new BusinessError(`Syntax Error. Invalid Uri string: The ${errStr}`); 744d6c458bSopenharmony_ci err.code = SyntaxErrorCodeId; 754d6c458bSopenharmony_ci throw err; 764d6c458bSopenharmony_ci } 774d6c458bSopenharmony_ci } 784d6c458bSopenharmony_ci 794d6c458bSopenharmony_ci static createFromParts(scheme: string, ssp: string, fragment: string): URI { 804d6c458bSopenharmony_ci if (scheme === null || typeof scheme !== 'string') { 814d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${scheme} must be string`); 824d6c458bSopenharmony_ci } 834d6c458bSopenharmony_ci if (ssp === null || typeof ssp !== 'string') { 844d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${ssp} must be string`); 854d6c458bSopenharmony_ci } 864d6c458bSopenharmony_ci if (typeof fragment !== 'string') { 874d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${fragment} must be string`); 884d6c458bSopenharmony_ci } 894d6c458bSopenharmony_ci let uriStr: string = scheme; 904d6c458bSopenharmony_ci uriStr += ':' + encodeURIComponent(ssp); 914d6c458bSopenharmony_ci if (fragment !== null && fragment !== '') { 924d6c458bSopenharmony_ci uriStr += '#' + encodeURIComponent(fragment); 934d6c458bSopenharmony_ci } 944d6c458bSopenharmony_ci return createNewUri(uriStr); 954d6c458bSopenharmony_ci } 964d6c458bSopenharmony_ci 974d6c458bSopenharmony_ci toString(): string { 984d6c458bSopenharmony_ci return toAscllString(this.uricalss.toString()); 994d6c458bSopenharmony_ci } 1004d6c458bSopenharmony_ci 1014d6c458bSopenharmony_ci equals(other: URI): boolean { 1024d6c458bSopenharmony_ci return this.uricalss.equals(other.uricalss); 1034d6c458bSopenharmony_ci } 1044d6c458bSopenharmony_ci 1054d6c458bSopenharmony_ci equalsTo(other: URI): boolean { 1064d6c458bSopenharmony_ci if (other instanceof URI) { 1074d6c458bSopenharmony_ci return this.uricalss.equals(other.uricalss); 1084d6c458bSopenharmony_ci } 1094d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${other} must be URI`); 1104d6c458bSopenharmony_ci } 1114d6c458bSopenharmony_ci 1124d6c458bSopenharmony_ci checkIsAbsolute(): boolean { 1134d6c458bSopenharmony_ci return this.uricalss.checkIsAbsolute(); 1144d6c458bSopenharmony_ci } 1154d6c458bSopenharmony_ci 1164d6c458bSopenharmony_ci checkRelative(): boolean { 1174d6c458bSopenharmony_ci return this.uricalss.checkIsRelative(); 1184d6c458bSopenharmony_ci } 1194d6c458bSopenharmony_ci 1204d6c458bSopenharmony_ci checkOpaque(): boolean { 1214d6c458bSopenharmony_ci return this.uricalss.checkIsOpaque(); 1224d6c458bSopenharmony_ci } 1234d6c458bSopenharmony_ci 1244d6c458bSopenharmony_ci checkHierarchical(): boolean { 1254d6c458bSopenharmony_ci return this.uricalss.checkIsHierarchical(); 1264d6c458bSopenharmony_ci } 1274d6c458bSopenharmony_ci 1284d6c458bSopenharmony_ci addQueryValue(key: string, value: string): URI { 1294d6c458bSopenharmony_ci if (key === null || typeof key !== 'string') { 1304d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${key} must be string`); 1314d6c458bSopenharmony_ci } 1324d6c458bSopenharmony_ci if (value === null || typeof value !== 'string') { 1334d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${value} must be string`); 1344d6c458bSopenharmony_ci } 1354d6c458bSopenharmony_ci let uriStr = this.uricalss.addQueryValue(encodeURIComponent(key), encodeURIComponent(value)); 1364d6c458bSopenharmony_ci return createNewUri(uriStr); 1374d6c458bSopenharmony_ci } 1384d6c458bSopenharmony_ci 1394d6c458bSopenharmony_ci addEncodedSegment(pathSegment: string): URI { 1404d6c458bSopenharmony_ci if (pathSegment === null || typeof pathSegment !== 'string') { 1414d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${pathSegment} must be string`); 1424d6c458bSopenharmony_ci } 1434d6c458bSopenharmony_ci let uriStr: string = this.uricalss.addSegment(pathSegment); 1444d6c458bSopenharmony_ci return createNewUri(uriStr); 1454d6c458bSopenharmony_ci } 1464d6c458bSopenharmony_ci 1474d6c458bSopenharmony_ci addSegment(pathSegment: string): URI { 1484d6c458bSopenharmony_ci if (pathSegment === null || typeof pathSegment !== 'string') { 1494d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${pathSegment} must be string`); 1504d6c458bSopenharmony_ci } 1514d6c458bSopenharmony_ci let uriStr = this.uricalss.addSegment(encodeURIComponent(pathSegment)); 1524d6c458bSopenharmony_ci return createNewUri(uriStr); 1534d6c458bSopenharmony_ci } 1544d6c458bSopenharmony_ci 1554d6c458bSopenharmony_ci getQueryValue(key: string): string | null { 1564d6c458bSopenharmony_ci if (key === null || typeof key !== 'string') { 1574d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${key} must be string`); 1584d6c458bSopenharmony_ci } 1594d6c458bSopenharmony_ci let value: string | null = null; 1604d6c458bSopenharmony_ci if (this.uricalss.query === null) { 1614d6c458bSopenharmony_ci return null; 1624d6c458bSopenharmony_ci } 1634d6c458bSopenharmony_ci let queryStrs: string[] = this.uricalss.query.split('&') || []; 1644d6c458bSopenharmony_ci for (let item of queryStrs) { 1654d6c458bSopenharmony_ci if (key === '' && item === '') { 1664d6c458bSopenharmony_ci return ''; 1674d6c458bSopenharmony_ci } 1684d6c458bSopenharmony_ci let str = item.split('=') || []; 1694d6c458bSopenharmony_ci if (str.length === 1 && this.decodeSafelyInner(str[0]) === key) { 1704d6c458bSopenharmony_ci return ''; 1714d6c458bSopenharmony_ci } else if (this.decodeSafelyInner(str[0]) === key) { 1724d6c458bSopenharmony_ci return this.decodeSafelyInner(item.substring(str[0].length + 1).replace(/\+/g, ' ')); 1734d6c458bSopenharmony_ci } 1744d6c458bSopenharmony_ci } 1754d6c458bSopenharmony_ci return value; 1764d6c458bSopenharmony_ci } 1774d6c458bSopenharmony_ci 1784d6c458bSopenharmony_ci decodeSafelyOut(input: string): string { 1794d6c458bSopenharmony_ci let decodedString: string = ''; 1804d6c458bSopenharmony_ci let decodedTemp: string = ''; 1814d6c458bSopenharmony_ci let index: number = 0; 1824d6c458bSopenharmony_ci while (index < input.length) { 1834d6c458bSopenharmony_ci if (input[index] === '%' && /[0-9A-Fa-f]{2}/.test(input.slice(index + 1, index + 3))) { 1844d6c458bSopenharmony_ci const encodedChar = input.slice(index, index + 3); 1854d6c458bSopenharmony_ci try { 1864d6c458bSopenharmony_ci decodedString += decodeURIComponent(decodedTemp + encodedChar); 1874d6c458bSopenharmony_ci decodedTemp = ''; 1884d6c458bSopenharmony_ci } catch (e) { 1894d6c458bSopenharmony_ci decodedTemp += encodedChar; 1904d6c458bSopenharmony_ci } 1914d6c458bSopenharmony_ci index += 3; 1924d6c458bSopenharmony_ci continue; 1934d6c458bSopenharmony_ci } 1944d6c458bSopenharmony_ci if (decodedTemp === '') { 1954d6c458bSopenharmony_ci decodedString += input[index]; 1964d6c458bSopenharmony_ci } else { 1974d6c458bSopenharmony_ci decodedString += decodedTemp; 1984d6c458bSopenharmony_ci decodedString += input[index]; 1994d6c458bSopenharmony_ci decodedTemp = ''; 2004d6c458bSopenharmony_ci } 2014d6c458bSopenharmony_ci index++; 2024d6c458bSopenharmony_ci } 2034d6c458bSopenharmony_ci return decodedTemp === '' ? decodedString : decodedString += decodedTemp; 2044d6c458bSopenharmony_ci } 2054d6c458bSopenharmony_ci 2064d6c458bSopenharmony_ci decodeSafelyInner(input: string): string { 2074d6c458bSopenharmony_ci if (input === undefined || input === '') { 2084d6c458bSopenharmony_ci return input; 2094d6c458bSopenharmony_ci } 2104d6c458bSopenharmony_ci let strVal: string = ''; 2114d6c458bSopenharmony_ci try { 2124d6c458bSopenharmony_ci strVal = decodeURIComponent(input); 2134d6c458bSopenharmony_ci } catch (e) { 2144d6c458bSopenharmony_ci strVal = this.decodeSafelyOut(input); 2154d6c458bSopenharmony_ci } 2164d6c458bSopenharmony_ci return strVal; 2174d6c458bSopenharmony_ci } 2184d6c458bSopenharmony_ci 2194d6c458bSopenharmony_ci getQueryNames(): string[] { 2204d6c458bSopenharmony_ci let names: Set<string> = new Set<string>(); 2214d6c458bSopenharmony_ci if (this.uricalss.query === null) { 2224d6c458bSopenharmony_ci return []; 2234d6c458bSopenharmony_ci } 2244d6c458bSopenharmony_ci let start: number = 0; 2254d6c458bSopenharmony_ci while (start < this.uricalss.query.length) { 2264d6c458bSopenharmony_ci let next: number = this.uricalss.query.indexOf('&', start); 2274d6c458bSopenharmony_ci let end: number = (next === -1) ? this.uricalss.query.length : next; 2284d6c458bSopenharmony_ci let separator: number = this.uricalss.query.indexOf('=', start); 2294d6c458bSopenharmony_ci if (separator > end || separator === -1) { 2304d6c458bSopenharmony_ci separator = end; 2314d6c458bSopenharmony_ci } 2324d6c458bSopenharmony_ci let name: string = this.uricalss.query.substring(start, separator); 2334d6c458bSopenharmony_ci names.add(this.decodeSafelyInner(name)); 2344d6c458bSopenharmony_ci start = end + 1; 2354d6c458bSopenharmony_ci } 2364d6c458bSopenharmony_ci return Array.from(names); 2374d6c458bSopenharmony_ci } 2384d6c458bSopenharmony_ci 2394d6c458bSopenharmony_ci getQueryValues(key: string): string[] { 2404d6c458bSopenharmony_ci if (key === null || typeof key !== 'string') { 2414d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${key} must be string`); 2424d6c458bSopenharmony_ci } 2434d6c458bSopenharmony_ci let values = new Array(); 2444d6c458bSopenharmony_ci if (this.uricalss.query === null) { 2454d6c458bSopenharmony_ci return values; 2464d6c458bSopenharmony_ci } 2474d6c458bSopenharmony_ci let queryStrs: string[] = this.uricalss.query.split('&') || []; 2484d6c458bSopenharmony_ci for (let item of queryStrs) { 2494d6c458bSopenharmony_ci if (key === '' && item === '') { 2504d6c458bSopenharmony_ci values.push(item); 2514d6c458bSopenharmony_ci } 2524d6c458bSopenharmony_ci let str = item.split('=') || []; 2534d6c458bSopenharmony_ci if (str.length === 1 && this.decodeSafelyInner(str[0]) === key) { 2544d6c458bSopenharmony_ci values.push(''); 2554d6c458bSopenharmony_ci } else if (this.decodeSafelyInner(str[0]) === key) { 2564d6c458bSopenharmony_ci values.push(this.decodeSafelyInner(item.substring(str[0].length + 1))); 2574d6c458bSopenharmony_ci } 2584d6c458bSopenharmony_ci } 2594d6c458bSopenharmony_ci return values; 2604d6c458bSopenharmony_ci } 2614d6c458bSopenharmony_ci 2624d6c458bSopenharmony_ci getBooleanQueryValue(key: string, defaultValue: boolean): boolean { 2634d6c458bSopenharmony_ci if (key === null || typeof key !== 'string') { 2644d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${key} must be string`); 2654d6c458bSopenharmony_ci } 2664d6c458bSopenharmony_ci if (defaultValue === null || typeof defaultValue !== 'boolean') { 2674d6c458bSopenharmony_ci throw new BusinessError(`Parameter error. The type of ${key} must be boolean`); 2684d6c458bSopenharmony_ci } 2694d6c458bSopenharmony_ci let flag = this.getQueryValue(key); 2704d6c458bSopenharmony_ci if (flag == null) { 2714d6c458bSopenharmony_ci return defaultValue; 2724d6c458bSopenharmony_ci } 2734d6c458bSopenharmony_ci flag = flag.toLocaleLowerCase(); 2744d6c458bSopenharmony_ci return 'false' !== flag && '0' !== flag; 2754d6c458bSopenharmony_ci } 2764d6c458bSopenharmony_ci 2774d6c458bSopenharmony_ci getLastSegment(): string { 2784d6c458bSopenharmony_ci let segments = this.uricalss.getSegment(); 2794d6c458bSopenharmony_ci if (!segments) { 2804d6c458bSopenharmony_ci return ''; 2814d6c458bSopenharmony_ci } 2824d6c458bSopenharmony_ci return this.decodeSafelyInner(segments[segments.length - 1]); 2834d6c458bSopenharmony_ci } 2844d6c458bSopenharmony_ci 2854d6c458bSopenharmony_ci getSegment(): string[] { 2864d6c458bSopenharmony_ci let array = new Array(); 2874d6c458bSopenharmony_ci let segments = this.uricalss.getSegment(); 2884d6c458bSopenharmony_ci if (segments) { 2894d6c458bSopenharmony_ci segments.forEach(element => { 2904d6c458bSopenharmony_ci array.push(this.decodeSafelyInner(element)); 2914d6c458bSopenharmony_ci }); 2924d6c458bSopenharmony_ci } 2934d6c458bSopenharmony_ci return array; 2944d6c458bSopenharmony_ci } 2954d6c458bSopenharmony_ci 2964d6c458bSopenharmony_ci clearQuery(): URI { 2974d6c458bSopenharmony_ci let uriStr: string = this.uricalss.clearQuery(); 2984d6c458bSopenharmony_ci return createNewUri(uriStr); 2994d6c458bSopenharmony_ci } 3004d6c458bSopenharmony_ci 3014d6c458bSopenharmony_ci normalize(): URI { 3024d6c458bSopenharmony_ci let uriStr: string = this.uricalss.normalize(); 3034d6c458bSopenharmony_ci return createNewUri(uriStr); 3044d6c458bSopenharmony_ci } 3054d6c458bSopenharmony_ci 3064d6c458bSopenharmony_ci get scheme(): string | null { 3074d6c458bSopenharmony_ci return this.uricalss.scheme; 3084d6c458bSopenharmony_ci } 3094d6c458bSopenharmony_ci 3104d6c458bSopenharmony_ci get authority(): string | null { 3114d6c458bSopenharmony_ci if (this.uricalss.authority === null) { 3124d6c458bSopenharmony_ci return null; 3134d6c458bSopenharmony_ci } 3144d6c458bSopenharmony_ci let thisAuthority: string = this.uricalss.authority; 3154d6c458bSopenharmony_ci if (thisAuthority.indexOf('[') !== -1) { 3164d6c458bSopenharmony_ci let arr: string[] = thisAuthority.split('['); 3174d6c458bSopenharmony_ci let brr: string[] = arr[1].split(']'); 3184d6c458bSopenharmony_ci arr[1] = '[' + brr[0] + ']'; 3194d6c458bSopenharmony_ci arr[2] = brr[1]; 3204d6c458bSopenharmony_ci arr[0] = this.decodeSafelyInner(arr[0]); 3214d6c458bSopenharmony_ci arr[2] = this.decodeSafelyInner(arr[2]); 3224d6c458bSopenharmony_ci return arr.join(''); 3234d6c458bSopenharmony_ci } else { 3244d6c458bSopenharmony_ci return this.decodeSafelyInner(thisAuthority); 3254d6c458bSopenharmony_ci } 3264d6c458bSopenharmony_ci } 3274d6c458bSopenharmony_ci 3284d6c458bSopenharmony_ci get ssp(): string { 3294d6c458bSopenharmony_ci let thisSsp: string = this.uricalss.ssp; 3304d6c458bSopenharmony_ci if (thisSsp.indexOf('[') !== -1) { 3314d6c458bSopenharmony_ci let arr: string[] = thisSsp.split('['); 3324d6c458bSopenharmony_ci let brr: string[] = arr[1].split(']'); 3334d6c458bSopenharmony_ci arr[1] = '[' + brr[0] + ']'; 3344d6c458bSopenharmony_ci arr[2] = brr[1]; 3354d6c458bSopenharmony_ci arr[0] = this.decodeSafelyInner(arr[0]); 3364d6c458bSopenharmony_ci arr[2] = this.decodeSafelyInner(arr[2]); 3374d6c458bSopenharmony_ci return arr.join(''); 3384d6c458bSopenharmony_ci } else { 3394d6c458bSopenharmony_ci return this.decodeSafelyInner(thisSsp); 3404d6c458bSopenharmony_ci } 3414d6c458bSopenharmony_ci } 3424d6c458bSopenharmony_ci 3434d6c458bSopenharmony_ci get userInfo(): string | null { 3444d6c458bSopenharmony_ci return this.uricalss.userInfo === null ? null : this.decodeSafelyInner(this.uricalss.userInfo); 3454d6c458bSopenharmony_ci } 3464d6c458bSopenharmony_ci 3474d6c458bSopenharmony_ci get host(): string | null { 3484d6c458bSopenharmony_ci return this.uricalss.host; 3494d6c458bSopenharmony_ci } 3504d6c458bSopenharmony_ci 3514d6c458bSopenharmony_ci get port(): string { 3524d6c458bSopenharmony_ci return this.uricalss.port; 3534d6c458bSopenharmony_ci } 3544d6c458bSopenharmony_ci 3554d6c458bSopenharmony_ci get path(): string | null { 3564d6c458bSopenharmony_ci return this.uricalss.path === null ? null : this.decodeSafelyInner(this.uricalss.path); 3574d6c458bSopenharmony_ci } 3584d6c458bSopenharmony_ci 3594d6c458bSopenharmony_ci get query(): string | null { 3604d6c458bSopenharmony_ci return this.uricalss.query === null ? null : this.decodeSafelyInner(this.uricalss.query); 3614d6c458bSopenharmony_ci } 3624d6c458bSopenharmony_ci 3634d6c458bSopenharmony_ci get fragment(): string | null { 3644d6c458bSopenharmony_ci return this.uricalss.fragment === null ? null : this.decodeSafelyInner(this.uricalss.fragment); 3654d6c458bSopenharmony_ci } 3664d6c458bSopenharmony_ci 3674d6c458bSopenharmony_ci get encodedUserInfo(): string | null { 3684d6c458bSopenharmony_ci return this.uricalss.userInfo; 3694d6c458bSopenharmony_ci } 3704d6c458bSopenharmony_ci 3714d6c458bSopenharmony_ci get encodedPath(): string | null { 3724d6c458bSopenharmony_ci return this.uricalss.path; 3734d6c458bSopenharmony_ci } 3744d6c458bSopenharmony_ci 3754d6c458bSopenharmony_ci get encodedQuery(): string | null { 3764d6c458bSopenharmony_ci return this.uricalss.query; 3774d6c458bSopenharmony_ci } 3784d6c458bSopenharmony_ci 3794d6c458bSopenharmony_ci get encodedFragment(): string | null { 3804d6c458bSopenharmony_ci return this.uricalss.fragment; 3814d6c458bSopenharmony_ci } 3824d6c458bSopenharmony_ci 3834d6c458bSopenharmony_ci get encodedAuthority(): string | null { 3844d6c458bSopenharmony_ci if (this.uricalss.authority === null) { 3854d6c458bSopenharmony_ci return null; 3864d6c458bSopenharmony_ci } 3874d6c458bSopenharmony_ci let thisAuthority: string = this.uricalss.authority; 3884d6c458bSopenharmony_ci if (thisAuthority.indexOf('[') !== -1) { 3894d6c458bSopenharmony_ci let arr: string[] = thisAuthority.split('['); 3904d6c458bSopenharmony_ci let brr: string[] = arr[1].split(']'); 3914d6c458bSopenharmony_ci arr[1] = '[' + brr[0] + ']'; 3924d6c458bSopenharmony_ci arr[2] = brr[1]; 3934d6c458bSopenharmony_ci return arr.join(''); 3944d6c458bSopenharmony_ci } else { 3954d6c458bSopenharmony_ci return thisAuthority; 3964d6c458bSopenharmony_ci } 3974d6c458bSopenharmony_ci } 3984d6c458bSopenharmony_ci 3994d6c458bSopenharmony_ci get encodedSSP(): string { 4004d6c458bSopenharmony_ci let thisSsp: string = this.uricalss.ssp; 4014d6c458bSopenharmony_ci if (thisSsp.indexOf('[') !== -1) { 4024d6c458bSopenharmony_ci let arr: string[] = thisSsp.split('['); 4034d6c458bSopenharmony_ci let brr: string[] = arr[1].split(']'); 4044d6c458bSopenharmony_ci arr[1] = '[' + brr[0] + ']'; 4054d6c458bSopenharmony_ci arr[2] = brr[1]; 4064d6c458bSopenharmony_ci return arr.join(''); 4074d6c458bSopenharmony_ci } else { 4084d6c458bSopenharmony_ci return thisSsp; 4094d6c458bSopenharmony_ci } 4104d6c458bSopenharmony_ci } 4114d6c458bSopenharmony_ci} 4124d6c458bSopenharmony_ci 4134d6c458bSopenharmony_cifunction toAscllString(uriStr: string): string { 4144d6c458bSopenharmony_ci return encodeURI(uriStr).replace(/%5B/g, '[').replace(/%5D/g, ']').replace(/%25/g, '%'); 4154d6c458bSopenharmony_ci} 4164d6c458bSopenharmony_ci 4174d6c458bSopenharmony_cifunction createNewUri(uriStr: string): URI { 4184d6c458bSopenharmony_ci return new URI(uriStr); 4194d6c458bSopenharmony_ci} 4204d6c458bSopenharmony_ci 4214d6c458bSopenharmony_ciexport default { 4224d6c458bSopenharmony_ci URI: URI 4234d6c458bSopenharmony_ci};