UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

1 lines 8.26 kB
{"version":3,"sources":["../../../packages/core/data/uri-builder.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,WAAW,CAA6B;IAEhD;;;OAGG;gBACS,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG;IAiC9B,oDAAoD;IAC7C,QAAQ,EAAE,MAAM,CAAC;IAExB,qFAAqF;IAC9E,IAAI,EAAE,MAAM,CAAC;IAEpB,2DAA2D;IAC3D,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,2DAA2D;IAC3D,IAAW,IAAI,CAAC,KAAK,EAAE,MAAM,EA0B5B;IAED,+CAA+C;IACxC,IAAI,EAAE,MAAM,CAAC;IAEpB,sDAAsD;IACtD,IAAW,KAAK,IAAI,MAAM,CAmBzB;IAED,sDAAsD;IACtD,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAuB7B;IAED,+CAA+C;IACxC,MAAM,EAAE,MAAM,CAAC;IAEtB,wDAAwD;IACxD,IAAW,GAAG,IAAI,GAAG,CAEpB;IAED,OAAO,KAAK,gBAAgB,GA6B3B;IAED;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;;OAKG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3D,oDAAoD;IAC7C,QAAQ,IAAI,MAAM;IAsCzB,8DAA8D;IACvD,KAAK,IAAI,UAAU;CAkB7B","file":"uri-builder.d.ts","sourcesContent":["/** Represents an object that builds Uniform Resource Identifiers (URIs). */\r\nexport class UriBuilder {\r\n private segments = new Array<string>();\r\n private queryParams = new Map<string, string>();\r\n\r\n /**\r\n * Initializes a new instance of the UriBuilder.\r\n * @param uri The optional string or URL to initialize the builder from.\r\n */\r\n constructor(uri?: string | URL) {\r\n if (uri === undefined) {\r\n this.fragment = '';\r\n this.host = '';\r\n this.scheme = '';\r\n this.port = -1;\r\n return;\r\n }\r\n\r\n const url: URL = typeof uri === 'string' ? new URL(uri) : uri;\r\n\r\n this.fragment = url.hash ? url.hash.substring(1) : '';\r\n this.host = url.hostname || '';\r\n this.scheme = url.protocol ? url.protocol.substring(0, url.protocol.length - 1) : '';\r\n this.port = url.port ? this.port = Number.parseInt(url.port, 10) : -1;\r\n\r\n if (url.pathname) {\r\n const paths = url.pathname.substring(1).split('/');\r\n\r\n for (let i = 0; i < paths.length; i++) {\r\n const segment = paths[i];\r\n\r\n if (segment) {\r\n this.segments.push(segment);\r\n }\r\n }\r\n }\r\n\r\n url.searchParams.forEach((v, k) => {\r\n this.queryParams.set(k, v);\r\n });\r\n }\r\n\r\n /** Gets or sets the fragment portion of the URI. */\r\n public fragment: string;\r\n\r\n /** Gets or sets the Domain Name System (DNS) host name or IP address of a server. */\r\n public host: string;\r\n\r\n /** Gets the path to the resource referenced by the URI. */\r\n public get path(): string {\r\n return this.segments.join('/');\r\n }\r\n\r\n /** Sets the path to the resource referenced by the URI. */\r\n public set path(value: string) {\r\n this.segments = new Array<string>();\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n value = value.trim();\r\n\r\n if (value.length === 0) {\r\n return;\r\n }\r\n\r\n if (value[0] === '/') {\r\n value = value.substring(1, value.length);\r\n }\r\n\r\n if (value[value.length - 1] === '/') {\r\n value = value.substring(0, value.length - 1);\r\n }\r\n\r\n const newSegments = value.split('/');\r\n\r\n for (let i = 0; i < newSegments.length; i++) {\r\n this.segments.push(newSegments[i]);\r\n }\r\n }\r\n\r\n /** Gets or sets the port number of the URI. */\r\n public port: number;\r\n\r\n /** Gets any query information included in the URI. */\r\n public get query(): string {\r\n let value = '';\r\n\r\n const iterator = this.queryParams.entries();\r\n let result = iterator.next();\r\n\r\n if (!result.done) {\r\n let [k, v] = result.value;\r\n value += `${k}=${v}`;\r\n result = iterator.next();\r\n\r\n while (!result.done) {\r\n [k, v] = result.value;\r\n value += `&${k}=${v}`;\r\n result = iterator.next();\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /** Sets the query information included in the URI. */\r\n public set query(value: string) {\r\n this.queryParams.clear();\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n value = value.trim();\r\n\r\n if (value[0] === '?') {\r\n value = value.substring(1).trim();\r\n }\r\n\r\n if (value.length === 0) {\r\n return;\r\n }\r\n\r\n const pairs = value.split('&');\r\n\r\n for (let i = 0; i < pairs.length; i++) {\r\n const pair = pairs[i].trim().split('=');\r\n this.queryParams.set(pair[0], pair[1]);\r\n }\r\n }\r\n\r\n /** Gets or sets the scheme name of the URI. */\r\n public scheme: string;\r\n\r\n /** Gets the URL instance constructed by the builder. */\r\n public get uri(): URL {\r\n return new URL(this.toString());\r\n }\r\n\r\n private get usingDefaultPort(): boolean {\r\n\r\n if (!this.scheme) {\r\n return false;\r\n }\r\n\r\n // non-exhaustive list of common application protocol ports\r\n switch (this.scheme.toUpperCase()) {\r\n case 'HTTP':\r\n return this.port === 80;\r\n case 'HTTPS':\r\n return this.port === 443;\r\n case 'FTP':\r\n return this.port === 20 || this.port === 21;\r\n case 'SSH':\r\n return this.port === 22;\r\n case 'TELNET':\r\n return this.port === 23;\r\n case 'SMTP':\r\n return this.port === 25;\r\n case 'DNS':\r\n return this.port === 53;\r\n case 'POP3':\r\n return this.port === 113;\r\n case 'LDAP':\r\n return this.port === 389;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Appends the specified segment to the path.\r\n * @param segment The segment to append.\r\n */\r\n public appendSegment(segment: string): void {\r\n this.segments.push(segment);\r\n }\r\n\r\n /**\r\n * Sets the specified name/value pair in the query string.\r\n * Duplicate query parameters are not supported.\r\n * @param name The name of the query parameter.\r\n * @param value The value of the query parameter.\r\n */\r\n public setQueryParameter(name: string, value: string): void {\r\n this.queryParams.set(name, value);\r\n }\r\n\r\n /** Returns the string equivalent of the builder. */\r\n public toString(): string {\r\n let uri = '';\r\n\r\n if (this.scheme) {\r\n uri = this.scheme;\r\n }\r\n\r\n if (this.host) {\r\n if (uri.length > 0) {\r\n uri += '://';\r\n }\r\n\r\n uri += this.host;\r\n\r\n if (this.port >= 0 && !this.usingDefaultPort) {\r\n uri += ':' + this.port.toString();\r\n }\r\n }\r\n\r\n if (this.segments.length > 0) {\r\n if (uri.length > 0) {\r\n uri += '/';\r\n }\r\n\r\n uri += this.path;\r\n\r\n if (this.queryParams.size > 0) {\r\n uri += '?' + this.query;\r\n }\r\n\r\n if (this.fragment) {\r\n uri += '#' + this.fragment;\r\n }\r\n }\r\n\r\n return uri;\r\n }\r\n\r\n /** Creates and returns a deep copy of the current builder. */\r\n public clone(): UriBuilder {\r\n const builder = new UriBuilder();\r\n\r\n builder.fragment = this.fragment;\r\n builder.host = this.host;\r\n builder.scheme = this.scheme;\r\n builder.port = this.port;\r\n\r\n for (let i = 0; i < this.segments.length; i++) {\r\n builder.segments.push(this.segments[i]);\r\n }\r\n\r\n this.queryParams.forEach((v, k) => {\r\n builder.queryParams.set(k, v);\r\n });\r\n\r\n return builder;\r\n }\r\n}\r\n"]}