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};