@naverpay/nurl 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";const i=require("npm-punycode"),f=/^:/,d=/^\[.*\]$/;function p(h){return f.test(h)||d.test(h)}function o(h){return h.split("/").filter(p)}function n(h){return h.slice(1,f.test(h)?void 0:-1)}function m(h,t){return o(h).reduce((s,e)=>{const r=n(e);return t[r]?s.replace(e,t[r]):s},h)}function u(h,t){return o(h).reduce((s,e)=>{const r=n(e),{[r]:_,...a}=s;return a},t)}const l=127;function P(h){return h.charCodeAt(0)>l}class c{constructor(t){if(this._href="",this._protocol="",this._host="",this._hostname="",this._port="",this._pathname="",this._search="",this._hash="",this._origin="",this._username="",this._password="",this._baseUrl="",this._searchParams=new URLSearchParams,this.punycodePrefix="xn--",this._searchParams=new URLSearchParams,typeof t=="string"||t instanceof URL)this.href=t.toString();else if(t){if(t.baseUrl&&(this.baseUrl=t.baseUrl),t.href&&(this.href=t.href),t.protocol&&(this.protocol=t.protocol),t.host&&(this.host=t.host),t.hostname&&(this.hostname=t.hostname),t.port&&(this.port=t.port),t.pathname&&(this.pathname=m(t.pathname,t.query??{})),t.search&&(this.search=t.search),t.hash&&(this.hash=t.hash),t.username&&(this.username=t.username),t.password&&(this.password=t.password),t.query){const s=u(t.pathname??"",t.query);Object.keys(s).length>0&&(this.search=new URLSearchParams(s).toString())}this.updateHref()}}static create(t){return new c(t)}static canParse(t){if(t.startsWith("/"))return/^\/[^?#]*(\?[^#]*)?(#.*)?$/.test(t);try{return new URL(t),!0}catch{return/^[^:/?#]+(\.[^:/?#]+)+(\/[^?#]*(\?[^#]*)?(#.*)?)?$/.test(t)}}get baseUrl(){return this._baseUrl}set baseUrl(t){this._baseUrl=t;try{const s=new URL(t);this._protocol=s.protocol,this._host=s.host,this._hostname=s.hostname,this._port=s.port,this._origin=s.origin,this._username=s.username,this._password=s.password,s.pathname!=="/"&&(this._pathname=s.pathname),s.search&&(this._search=s.search,this._searchParams=new URLSearchParams(s.search)),s.hash&&(this._hash=s.hash),this.updateHref()}catch(s){console.warn(`Invalid baseUrl: ${t}`,s)}}get href(){return this.pathname.length===1?`${this._href}/`:this._href}set href(t){try{const s=new URL(t);this._href=s.href,this._protocol=s.protocol,this._host=s.host,this._hostname=s.hostname,this._port=s.port,this._pathname=s.pathname,this._search=s.search,this._hash=s.hash,this._origin=s.origin,this._username=s.username,this._password=s.password,this._searchParams=s.searchParams}catch(s){console.warn(`Can not parse ${t}`,s)}}get protocol(){return this._protocol}set protocol(t){this._protocol=t,this.updateHref()}get host(){return this._host}set host(t){const[s,e]=t.split(":"),r=this.encodeHostname(s);this._host=e?`${r}:${e}`:r,this._hostname=r,this._port=e||"",this.updateHref()}get hostname(){return this._hostname}set hostname(t){const s=this.encodeHostname(t);this._hostname=s,this._host=this._port?`${s}:${this._port}`:s,this.updateHref()}get port(){return this._port}set port(t){this._port=t,this._host=`${this._hostname}${t?":"+t:""}`,this.updateHref()}get pathname(){return this._pathname}set pathname(t){const s=t.split("/").map(e=>p(e)?e:encodeURI(e)).join("/");this._pathname=s.startsWith("/")?s:`/${s}`,this.updateHref()}get search(){return this._search}set search(t){this._search=t.startsWith("?")?t:`?${t}`,this._searchParams=new URLSearchParams(t),this.updateHref()}setSearchParams(t){const s=new URLSearchParams(t);this._search=s.toString()?`?${s.toString()}`:"",this._searchParams=s,this.updateHref()}appendSearchParams(t){const s=new URLSearchParams(this._searchParams),e=o(this._pathname).map(n);Object.keys(t).forEach(r=>{e.includes(r)?this._pathname=m(this._pathname,{[r]:t[r]}):s.append(r,t[r])}),this._search=s.toString()?`?${s.toString()}`:"",this._searchParams=s,this.updateHref()}removeSearchParams(...t){const s=new URLSearchParams(this._searchParams);t.forEach(e=>{s.delete(e)}),this._search=s.toString()?`?${s.toString()}`:"",this._searchParams=s,this.updateHref()}get searchParams(){return new Proxy(this._searchParams,{get:(t,s,e)=>{const r=Reflect.get(t,s,e);return typeof r=="function"?(..._)=>{const a=r.apply(t,_);return this._search=this._searchParams.toString()?`?${this._searchParams.toString()}`:"",this.updateHref(),a}:r}})}get hash(){return this._hash}set hash(t){this._hash=t.startsWith("#")?t:`#${t}`,this.updateHref()}get origin(){return this._origin}get username(){return this._username}set username(t){this._username=t,this.updateHref()}get password(){return this._password}set password(t){this._password=t,this.updateHref()}updateHref(){if(this._baseUrl){const t=new URL(this._baseUrl);t.pathname=this._pathname,t.search=this._search,t.hash=this._hash,this._href=t.href,this._origin=t.origin}else this._href=`${this._protocol}${this._protocol&&"//"}${this._username}${this._password?":"+this._password:""}${this._username||this._password?"@":""}${this._hostname}${this._port?":"+this._port:""}${this._pathname==="/"?"":this._pathname}${this._search}${this._hash}`,this._origin=`${this._protocol}//${this._hostname}${this._port?":"+this._port:""}`}toString(){return this.href}toJSON(){return this.href}encodeHostname(t){return t.split(".").map(s=>{for(const e of s)if(P(e))return`${this.punycodePrefix}${i.encode(s)}`;return s}).join(".")}get decodedIDN(){let t=this._href;return this._hostname.split(".").forEach(s=>{t=t.replace(s,i.decode(s.replace(this.punycodePrefix,"")))}),t}get decodedHostname(){return this._hostname.split(".").map(t=>i.decode(t.replace(this.punycodePrefix,""))).join(".")}}module.exports=c;
1
+ "use strict";const y="-",L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},g=35,f=Math.floor,w=String.fromCharCode;function l(e){throw new RangeError(L[e])}function A(e){const t=[];let s=0;const r=e.length;for(;s<r;){const h=e.charCodeAt(s++);if(h>=55296&&h<=56319&&s<r){const a=e.charCodeAt(s++);(a&64512)==56320?t.push(((h&1023)<<10)+(a&1023)+65536):(t.push(h),s--)}else t.push(h)}return t}const E=e=>e>=48&&e<58?26+(e-48):e>=65&&e<91?e-65:e>=97&&e<123?e-97:36,x=(e,t)=>e+22+75*(e<26?1:0)-0,R=(e,t,s)=>{let r=0;for(e=s?f(e/700):e>>1,e+=f(e/t);e>g*26>>1;r+=36)e=f(e/g);return f(r+(g+1)*e/(e+38))},C=e=>{const t=[],s=e.length;let r=0,h=128,a=72,i=e.lastIndexOf(y);i<0&&(i=0);for(let n=0;n<i;++n)e.charCodeAt(n)>=128&&l("not-basic"),t.push(e.charCodeAt(n));for(let n=i>0?i+1:0;n<s;){const p=r;for(let m=1,c=36;;c+=36){n>=s&&l("invalid-input");const _=E(e.charCodeAt(n++));_>=36&&l("invalid-input"),_>f((2147483647-r)/m)&&l("overflow"),r+=_*m;const u=c<=a?1:c>=a+26?26:c-a;if(_<u)break;const d=36-u;m>f(2147483647/d)&&l("overflow"),m*=d}const o=t.length+1;a=R(r-p,o,p==0),f(r/o)>2147483647-h&&l("overflow"),h+=f(r/o),r%=o,t.splice(r++,0,h)}return String.fromCodePoint(...t)},v=e=>{const t=[],s=A(e),r=s.length;let h=128,a=0,i=72;for(const o of s)o<128&&t.push(w(o));const n=t.length;let p=n;for(n&&t.push(y);p<r;){let o=2147483647;for(const c of s)c>=h&&c<o&&(o=c);const m=p+1;o-h>f((2147483647-a)/m)&&l("overflow"),a+=(o-h)*m,h=o;for(const c of s)if(c<h&&++a>2147483647&&l("overflow"),c===h){let _=a;for(let u=36;;u+=36){const d=u<=i?1:u>=i+26?26:u-i;if(_<d)break;const S=_-d,U=36-d;t.push(w(x(d+S%U))),_=f(S/U)}t.push(w(x(_))),i=R(a,m,p===n),a=0,++p}++a,++h}return t.join("")},I=/^:/,O=/^\[.*\]$/;function M(e){return I.test(e)||O.test(e)}function P(e){return e.split("/").filter(M)}function b(e){return e.slice(1,I.test(e)?void 0:-1)}function H(e,t){return P(e).reduce((s,r)=>{const h=b(r);return t[h]?s.replace(r,t[h]):s},e)}function T(e,t){return P(e).reduce((s,r)=>{const h=b(r),{[h]:a,...i}=s;return i},t)}const N=127;function j(e){return e.charCodeAt(0)>N}class ${constructor(t){if(this._href="",this._protocol="",this._host="",this._hostname="",this._port="",this._pathname="",this._search="",this._hash="",this._origin="",this._username="",this._password="",this._baseUrl="",this._searchParams=new URLSearchParams,this.punycodePrefix="xn--",this._searchParams=new URLSearchParams,typeof t=="string"||t instanceof URL)this.href=t.toString();else if(t){if(t.baseUrl&&(this.baseUrl=t.baseUrl),t.href&&(this.href=t.href),t.protocol&&(this.protocol=t.protocol),t.host&&(this.host=t.host),t.hostname&&(this.hostname=t.hostname),t.port&&(this.port=t.port),t.pathname&&(this.pathname=H(t.pathname,t.query??{})),t.search&&(this.search=t.search),t.hash&&(this.hash=t.hash),t.username&&(this.username=t.username),t.password&&(this.password=t.password),t.query){const s=T(t.pathname??"",t.query);Object.keys(s).length>0&&(this.search=new URLSearchParams(s).toString())}this.updateHref()}}static create(t){return new $(t)}static canParse(t){if(t.startsWith("/"))return/^\/[^?#]*(\?[^#]*)?(#.*)?$/.test(t);try{return new URL(t),!0}catch{return/^[^:/?#]+(\.[^:/?#]+)+(\/[^?#]*(\?[^#]*)?(#.*)?)?$/.test(t)}}get baseUrl(){return this._baseUrl}set baseUrl(t){this._baseUrl=t;try{const s=new URL(t);this._protocol=s.protocol,this._host=s.host,this._hostname=s.hostname,this._port=s.port,this._origin=s.origin,this._username=s.username,this._password=s.password,s.pathname!=="/"&&(this._pathname=s.pathname),s.search&&(this._search=s.search,this._searchParams=new URLSearchParams(s.search)),s.hash&&(this._hash=s.hash),this.updateHref()}catch(s){console.warn(`Invalid baseUrl: ${t}`,s)}}get href(){return this.pathname.length===1?`${this._href}/`:this._href}set href(t){try{const s=new URL(t);this._href=s.href,this._protocol=s.protocol,this._host=s.host,this._hostname=s.hostname,this._port=s.port,this._pathname=s.pathname,this._search=s.search,this._hash=s.hash,this._origin=s.origin,this._username=s.username,this._password=s.password,this._searchParams=s.searchParams}catch(s){console.warn(`Can not parse ${t}`,s)}}get protocol(){return this._protocol}set protocol(t){this._protocol=t,this.updateHref()}get host(){return this._host}set host(t){const[s,r]=t.split(":"),h=this.encodeHostname(s);this._host=r?`${h}:${r}`:h,this._hostname=h,this._port=r||"",this.updateHref()}get hostname(){return this._hostname}set hostname(t){const s=this.encodeHostname(t);this._hostname=s,this._host=this._port?`${s}:${this._port}`:s,this.updateHref()}get port(){return this._port}set port(t){this._port=t,this._host=`${this._hostname}${t?":"+t:""}`,this.updateHref()}get pathname(){return this._pathname}set pathname(t){const s=t.split("/").map(r=>M(r)?r:encodeURI(r)).join("/");this._pathname=s.startsWith("/")?s:`/${s}`,this.updateHref()}get search(){return this._search}set search(t){this._search=t.startsWith("?")?t:`?${t}`,this._searchParams=new URLSearchParams(t),this.updateHref()}setSearchParams(t){const s=new URLSearchParams(t);this._search=s.toString()?`?${s.toString()}`:"",this._searchParams=s,this.updateHref()}appendSearchParams(t){const s=new URLSearchParams(this._searchParams),r=P(this._pathname).map(b);Object.keys(t).forEach(h=>{r.includes(h)?this._pathname=H(this._pathname,{[h]:t[h]}):s.append(h,t[h])}),this._search=s.toString()?`?${s.toString()}`:"",this._searchParams=s,this.updateHref()}removeSearchParams(...t){const s=new URLSearchParams(this._searchParams);t.forEach(r=>{s.delete(r)}),this._search=s.toString()?`?${s.toString()}`:"",this._searchParams=s,this.updateHref()}get searchParams(){return new Proxy(this._searchParams,{get:(t,s,r)=>{const h=Reflect.get(t,s,r);return typeof h=="function"?(...a)=>{const i=h.apply(t,a);return this._search=this._searchParams.toString()?`?${this._searchParams.toString()}`:"",this.updateHref(),i}:h}})}get hash(){return this._hash}set hash(t){this._hash=t.startsWith("#")?t:`#${t}`,this.updateHref()}get origin(){return this._origin}get username(){return this._username}set username(t){this._username=t,this.updateHref()}get password(){return this._password}set password(t){this._password=t,this.updateHref()}updateHref(){if(this._baseUrl){const t=new URL(this._baseUrl);t.pathname=this._pathname,t.search=this._search,t.hash=this._hash,this._href=t.href,this._origin=t.origin}else this._href=`${this._protocol}${this._protocol&&"//"}${this._username}${this._password?":"+this._password:""}${this._username||this._password?"@":""}${this._hostname}${this._port?":"+this._port:""}${this._pathname==="/"?"":this._pathname}${this._search}${this._hash}`,this._origin=`${this._protocol}//${this._hostname}${this._port?":"+this._port:""}`}toString(){return this.href}toJSON(){return this.href}encodeHostname(t){return t.split(".").map(s=>{for(const r of s)if(j(r))return`${this.punycodePrefix}${v(s)}`;return s}).join(".")}get decodedIDN(){let t=this._href;return this._hostname.split(".").forEach(s=>{t=t.replace(s,C(s.replace(this.punycodePrefix,"")))}),t}get decodedHostname(){return this._hostname.split(".").map(t=>C(t.replace(this.punycodePrefix,""))).join(".")}}module.exports=$;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/utils.ts","../../src/nurl.ts"],"sourcesContent":["const DYNAMIC_PATH_COLON_REGEXP = /^:/\nconst DYNAMIC_PATH_BRACKETS_REGEXP = /^\\[.*\\]$/\n\nexport function isDynamicPath(path: string) {\n return DYNAMIC_PATH_COLON_REGEXP.test(path) || DYNAMIC_PATH_BRACKETS_REGEXP.test(path)\n}\n\nexport function getDynamicPaths(pathname: string): string[] {\n return pathname.split('/').filter(isDynamicPath)\n}\n\nexport function extractPathKey(path: string): string {\n return path.slice(1, DYNAMIC_PATH_COLON_REGEXP.test(path) ? undefined : -1)\n}\n\n/**\n * Replaces dynamic paths in the pathname with values from the query\n * @param {string} pathname\n * @param {Record<string, string>} query\n * @returns {string} refined pathname\n */\nexport function refinePathnameWithQuery(pathname: string, query: Record<string, string>): string {\n return getDynamicPaths(pathname).reduce((acc, path) => {\n const pathKey = extractPathKey(path)\n return query[pathKey] ? acc.replace(path, query[pathKey]) : acc\n }, pathname)\n}\n\n/**\n * Removes queries that have already been used in the pathname.\n * @param {string} pathname\n * @param {Record<string, string>} query\n * @returns {Record<string, string>} refined query\n */\nexport function refineQueryWithPathname(pathname: string, query: Record<string, string>): Record<string, string> {\n return getDynamicPaths(pathname).reduce((acc, path) => {\n const pathKey = extractPathKey(path)\n const {[pathKey]: _, ...remainingQuery} = acc\n return remainingQuery\n }, query)\n}\n\nconst MAX_ASCII_CODE = 127\nexport function isASCIICodeChar(char: string) {\n return char.charCodeAt(0) > MAX_ASCII_CODE\n}\n","/**\n * Note: We use 'npm-punycode' alias instead of 'punycode/' to properly support dual packages in ESM.\n * This ensures that this third-party module is used instead of the built-in\n * Node.js 'punycode' module, which has been deprecated since Node.js v7.0.0.\n * @see https://github.com/mathiasbynens/punycode.js#installation\n * @see https://nodejs.org/api/punycode.html for deprecation info\n */\nimport punycode from 'npm-punycode'\n\nimport {\n extractPathKey,\n getDynamicPaths,\n isASCIICodeChar,\n isDynamicPath,\n refinePathnameWithQuery,\n refineQueryWithPathname,\n} from './utils'\n\ninterface URLOptions\n extends Partial<\n Pick<\n URL,\n | 'href'\n | 'protocol'\n | 'host'\n | 'hostname'\n | 'port'\n | 'pathname'\n | 'search'\n | 'hash'\n | 'username'\n | 'password'\n >\n > {\n baseUrl?: string\n query?: Record<string, string>\n}\n\nexport default class NURL implements URL {\n private _href: string = ''\n private _protocol: string = ''\n private _host: string = ''\n private _hostname: string = ''\n private _port: string = ''\n private _pathname: string = ''\n private _search: string = ''\n private _hash: string = ''\n private _origin: string = ''\n private _username: string = ''\n private _password: string = ''\n private _baseUrl: string = ''\n private _searchParams: URLSearchParams = new URLSearchParams()\n\n constructor(input?: string | URL | URLOptions) {\n this._searchParams = new URLSearchParams()\n if (typeof input === 'string' || input instanceof URL) {\n this.href = input.toString()\n } else if (input) {\n if (input.baseUrl) {\n this.baseUrl = input.baseUrl\n }\n if (input.href) {\n this.href = input.href\n }\n if (input.protocol) {\n this.protocol = input.protocol\n }\n if (input.host) {\n this.host = input.host\n }\n if (input.hostname) {\n this.hostname = input.hostname\n }\n if (input.port) {\n this.port = input.port\n }\n if (input.pathname) {\n this.pathname = refinePathnameWithQuery(input.pathname, input.query ?? {})\n }\n if (input.search) {\n this.search = input.search\n }\n if (input.hash) {\n this.hash = input.hash\n }\n if (input.username) {\n this.username = input.username\n }\n if (input.password) {\n this.password = input.password\n }\n if (input.query) {\n const refinedQuery = refineQueryWithPathname(input.pathname ?? '', input.query)\n if (Object.keys(refinedQuery).length > 0) {\n this.search = new URLSearchParams(refinedQuery).toString()\n }\n }\n this.updateHref()\n }\n }\n\n static create(input?: string | URL | URLOptions) {\n return new NURL(input)\n }\n\n static canParse(input: string): boolean {\n if (input.startsWith('/')) {\n return /^\\/[^?#]*(\\?[^#]*)?(#.*)?$/.test(input)\n }\n\n try {\n // eslint-disable-next-line no-new\n new URL(input)\n return true\n } catch {\n // URL 생성자로 파싱할 수 없는 경우, 추가적인 검사를 수행\n // 예: 'example.com' 또는 'example.com/path'와 같은 형식 허용\n return /^[^:/?#]+(\\.[^:/?#]+)+(\\/[^?#]*(\\?[^#]*)?(#.*)?)?$/.test(input)\n }\n }\n\n get baseUrl(): string {\n return this._baseUrl\n }\n\n set baseUrl(value: string) {\n this._baseUrl = value\n try {\n const url = new URL(value)\n this._protocol = url.protocol\n this._host = url.host\n this._hostname = url.hostname\n this._port = url.port\n this._origin = url.origin\n this._username = url.username\n this._password = url.password\n if (url.pathname !== '/') {\n this._pathname = url.pathname\n }\n if (url.search) {\n this._search = url.search\n this._searchParams = new URLSearchParams(url.search)\n }\n if (url.hash) {\n this._hash = url.hash\n }\n this.updateHref()\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Invalid baseUrl: ${value}`, error)\n }\n }\n\n get href(): string {\n return this.pathname.length === 1 ? `${this._href}/` : this._href\n }\n\n set href(value: string) {\n try {\n const url = new URL(value)\n this._href = url.href\n this._protocol = url.protocol\n this._host = url.host\n this._hostname = url.hostname\n this._port = url.port\n this._pathname = url.pathname\n this._search = url.search\n this._hash = url.hash\n this._origin = url.origin\n this._username = url.username\n this._password = url.password\n this._searchParams = url.searchParams\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Can not parse ${value}`, error)\n }\n }\n\n get protocol(): string {\n return this._protocol\n }\n\n set protocol(value: string) {\n this._protocol = value\n this.updateHref()\n }\n\n get host(): string {\n return this._host\n }\n\n set host(value: string) {\n const [hostname, port] = value.split(':')\n\n const encodedHostname = this.encodeHostname(hostname)\n\n this._host = port ? `${encodedHostname}:${port}` : encodedHostname\n this._hostname = encodedHostname\n this._port = port || ''\n this.updateHref()\n }\n\n get hostname(): string {\n return this._hostname\n }\n\n set hostname(value: string) {\n const encodedHostname = this.encodeHostname(value)\n\n this._hostname = encodedHostname\n this._host = this._port ? `${encodedHostname}:${this._port}` : encodedHostname\n this.updateHref()\n }\n\n get port(): string {\n return this._port\n }\n\n set port(value: string) {\n this._port = value\n this._host = `${this._hostname}${value ? ':' + value : ''}`\n this.updateHref()\n }\n\n get pathname(): string {\n return this._pathname\n }\n\n set pathname(pathname: string) {\n const encodedPathname = pathname\n .split('/')\n .map((segment) => (isDynamicPath(segment) ? segment : encodeURI(segment)))\n .join('/')\n\n this._pathname = encodedPathname.startsWith('/') ? encodedPathname : `/${encodedPathname}`\n this.updateHref()\n }\n\n get search(): string {\n return this._search\n }\n\n set search(search: string) {\n this._search = search.startsWith('?') ? search : `?${search}`\n this._searchParams = new URLSearchParams(search)\n this.updateHref()\n }\n\n setSearchParams(_params: Record<string, string>): void {\n const searchParams = new URLSearchParams(_params)\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n appendSearchParams(_params: Record<string, string>): void {\n const searchParams = new URLSearchParams(this._searchParams)\n const dynamicRoutes = getDynamicPaths(this._pathname).map(extractPathKey)\n\n Object.keys(_params).forEach((key) => {\n if (dynamicRoutes.includes(key)) {\n this._pathname = refinePathnameWithQuery(this._pathname, {[key]: _params[key]})\n } else {\n searchParams.append(key, _params[key])\n }\n })\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n removeSearchParams(..._keys: string[]): void {\n const searchParams = new URLSearchParams(this._searchParams)\n\n _keys.forEach((key) => {\n searchParams.delete(key)\n })\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n get searchParams(): URLSearchParams {\n return new Proxy(this._searchParams, {\n get: (target, prop, receiver) => {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return (...args: unknown[]) => {\n const result = value.apply(target, args)\n this._search = this._searchParams.toString() ? `?${this._searchParams.toString()}` : ''\n this.updateHref()\n return result\n }\n }\n return value\n },\n })\n }\n\n get hash(): string {\n return this._hash\n }\n\n set hash(value: string) {\n this._hash = value.startsWith('#') ? value : `#${value}`\n this.updateHref()\n }\n\n get origin(): string {\n return this._origin\n }\n\n get username(): string {\n return this._username\n }\n\n set username(value: string) {\n this._username = value\n this.updateHref()\n }\n\n get password(): string {\n return this._password\n }\n\n set password(value: string) {\n this._password = value\n this.updateHref()\n }\n\n private updateHref() {\n if (this._baseUrl) {\n const baseUrl = new URL(this._baseUrl)\n baseUrl.pathname = this._pathname\n baseUrl.search = this._search\n baseUrl.hash = this._hash\n this._href = baseUrl.href\n this._origin = baseUrl.origin\n } else {\n this._href = `${this._protocol}${this._protocol && '//'}${this._username}${this._password ? ':' + this._password : ''}${\n this._username || this._password ? '@' : ''\n }${this._hostname}${this._port ? ':' + this._port : ''}${this._pathname === '/' ? '' : this._pathname}${this._search}${this._hash}`\n\n this._origin = `${this._protocol}//${this._hostname}${this._port ? ':' + this._port : ''}`\n }\n }\n\n toString(): string {\n return this.href\n }\n\n toJSON(): string {\n return this.href\n }\n\n private punycodePrefix = 'xn--'\n\n private encodeHostname(hostname: string): string {\n return hostname\n .split('.')\n .map((segment) => {\n for (const char of segment) {\n if (isASCIICodeChar(char)) {\n return `${this.punycodePrefix}${punycode.encode(segment)}`\n }\n }\n return segment\n })\n .join('.')\n }\n\n get decodedIDN(): string {\n let href = this._href\n\n this._hostname.split('.').forEach((segment) => {\n href = href.replace(segment, punycode.decode(segment.replace(this.punycodePrefix, '')))\n })\n\n return href\n }\n\n get decodedHostname(): string {\n return this._hostname\n .split('.')\n .map((segment) => punycode.decode(segment.replace(this.punycodePrefix, '')))\n .join('.')\n }\n}\n"],"names":["DYNAMIC_PATH_COLON_REGEXP","DYNAMIC_PATH_BRACKETS_REGEXP","isDynamicPath","path","test","getDynamicPaths","pathname","split","filter","extractPathKey","slice","refinePathnameWithQuery","query","reduce","acc","pathKey","replace","refineQueryWithPathname","_","remainingQuery","MAX_ASCII_CODE","isASCIICodeChar","char","charCodeAt","NURL","constructor","input","_href","_protocol","_host","_hostname","_port","_pathname","_search","_hash","_origin","_username","_password","_baseUrl","_searchParams","URLSearchParams","punycodePrefix","URL","href","toString","baseUrl","protocol","host","hostname","port","search","hash","username","password","refinedQuery","Object","keys","length","updateHref","create","canParse","startsWith","value","url","origin","error","console","warn","searchParams","encodedHostname","encodeHostname","encodedPathname","map","segment","encodeURI","join","setSearchParams","_params","appendSearchParams","dynamicRoutes","forEach","key","includes","append","removeSearchParams","_keys","delete","Proxy","get","target","prop","receiver","Reflect","args","result","apply","toJSON","punycode","encode","decodedIDN","decode","decodedHostname"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/punycode.ts","../../src/utils.ts","../../src/nurl.ts"],"sourcesContent":["/* eslint-disable eqeqeq */\n/* eslint-disable no-param-reassign */\n\ninterface PunycodeStatic {\n version: string\n ucs2: {\n decode(string: string): number[]\n encode(codePoints: number[]): string\n }\n decode(input: string): string\n encode(input: string): string\n toASCII(input: string): string\n toUnicode(input: string): string\n}\n\ntype ErrorMessages = Record<string, string>\n\n/** Highest positive signed 32-bit float value */\nconst maxInt: number = 2147483647 // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base: number = 36\nconst tMin: number = 1\nconst tMax: number = 26\nconst skew: number = 38\nconst damp: number = 700\nconst initialBias: number = 72\nconst initialN: number = 128 // 0x80\nconst delimiter: string = '-' // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode: RegExp = /^xn--/\nconst regexNonASCII: RegExp = /[^\\0-\\x7F]/ // Note: U+007F DEL is excluded too.\nconst regexSeparators: RegExp = /[\\x2E\\u3002\\uFF0E\\uFF61]/g // RFC 3490 separators\n\n/** Error messages */\nconst errors: ErrorMessages = {\n overflow: 'Overflow: input needs wider integers to process',\n 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n 'invalid-input': 'Invalid input',\n}\n\n/** Convenience shortcuts */\nconst baseMinusTMin: number = base - tMin\nconst floor: (x: number) => number = Math.floor\nconst stringFromCharCode: (...codes: number[]) => string = String.fromCharCode\n\n/* -------------------------------------------------------------------------- */\n\n/**\n * A generic error utility function.\n * @private\n * @param {string} type The error type.\n * @throws {RangeError} with the applicable error message.\n */\nfunction error(type: string): never {\n throw new RangeError(errors[type])\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {T[]} array The array to iterate over.\n * @param {(value: T) => U} callback The function that gets called for every array item.\n * @returns {U[]} A new array of values returned by the callback function.\n */\nfunction map<T, U>(array: T[], callback: (value: T) => U): U[] {\n const result: U[] = new Array(array.length)\n let length: number = array.length\n while (length--) {\n result[length] = callback(array[length])\n }\n return result\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email addresses.\n * @private\n * @param {string} domain The domain name or email address.\n * @param {(string: string) => string} callback The function that gets called for every character.\n * @returns {string} A new string of characters returned by the callback function.\n */\nfunction mapDomain(domain: string, callback: (string: string) => string): string {\n const parts: string[] = domain.split('@')\n let result: string = ''\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + '@'\n domain = parts[1]\n }\n // Avoid `split(regex)` for IE8 compatibility. See #17.\n domain = domain.replace(regexSeparators, '\\x2E')\n const labels: string[] = domain.split('.')\n const encoded: string = map(labels, callback).join('.')\n return result + encoded\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string.\n * @param {string} string The Unicode input string (UCS-2).\n * @returns {number[]} The new array of code points.\n */\nfunction ucs2decode(string: string): number[] {\n const output: number[] = []\n let counter: number = 0\n const length: number = string.length\n\n while (counter < length) {\n const value: number = string.charCodeAt(counter++)\n if (value >= 0xd800 && value <= 0xdbff && counter < length) {\n // It's a high surrogate, and there is a next character.\n const extra: number = string.charCodeAt(counter++)\n if ((extra & 0xfc00) == 0xdc00) {\n // Low surrogate.\n output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000)\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value)\n counter--\n }\n } else {\n output.push(value)\n }\n }\n return output\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @param {number[]} codePoints The array of numeric code points.\n * @returns {string} The new Unicode string (UCS-2).\n */\nconst ucs2encode = (codePoints: number[]): string => String.fromCodePoint(...codePoints)\n\n/**\n * Converts a basic code point into a digit/integer.\n * @private\n * @param {number} codePoint The basic numeric code point value.\n * @returns {number} The numeric value of a basic code point.\n */\nconst basicToDigit = (codePoint: number): number => {\n if (codePoint >= 0x30 && codePoint < 0x3a) {\n return 26 + (codePoint - 0x30)\n }\n if (codePoint >= 0x41 && codePoint < 0x5b) {\n return codePoint - 0x41\n }\n if (codePoint >= 0x61 && codePoint < 0x7b) {\n return codePoint - 0x61\n }\n return base\n}\n\n/**\n * Converts a digit/integer into a basic code point.\n * @private\n * @param {number} digit The numeric value of a basic code point.\n * @param {number} flag The flag value.\n * @returns {number} The basic code point.\n */\nconst digitToBasic = (digit: number, flag: number): number => {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n // @descriptoin 원래 코드는 아래와 같았지만, 타입스크립트에서는 불리언 연산이 안되서 임의로 수정\n // return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5)\n return digit + 22 + 75 * (digit < 26 ? 1 : 0) - ((flag != 0 ? 1 : 0) << 5)\n}\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * @private\n * @param {number} delta The delta value.\n * @param {number} numPoints The number of points.\n * @param {boolean} firstTime Whether this is the first time.\n * @returns {number} The adapted bias.\n */\nconst adapt = (delta: number, numPoints: number, firstTime: boolean): number => {\n let k: number = 0\n delta = firstTime ? floor(delta / damp) : delta >> 1\n delta += floor(delta / numPoints)\n for (; /* no initialization */ delta > (baseMinusTMin * tMax) >> 1; k += base) {\n delta = floor(delta / baseMinusTMin)\n }\n return floor(k + ((baseMinusTMin + 1) * delta) / (delta + skew))\n}\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode symbols.\n * @param {string} input The Punycode string of ASCII-only symbols.\n * @returns {string} The resulting string of Unicode symbols.\n */\nconst decode = (input: string): string => {\n const output: number[] = []\n const inputLength: number = input.length\n let i: number = 0\n let n: number = initialN\n let bias: number = initialBias\n\n let basic: number = input.lastIndexOf(delimiter)\n if (basic < 0) {\n basic = 0\n }\n\n for (let j: number = 0; j < basic; ++j) {\n if (input.charCodeAt(j) >= 0x80) {\n error('not-basic')\n }\n output.push(input.charCodeAt(j))\n }\n\n for (let index: number = basic > 0 ? basic + 1 : 0; index < inputLength /* no final expression */; ) {\n const oldi: number = i\n for (let w: number = 1, k: number = base /* no condition */; ; k += base) {\n if (index >= inputLength) {\n error('invalid-input')\n }\n\n const digit: number = basicToDigit(input.charCodeAt(index++))\n\n if (digit >= base) {\n error('invalid-input')\n }\n if (digit > floor((maxInt - i) / w)) {\n error('overflow')\n }\n\n i += digit * w\n const t: number = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias\n\n if (digit < t) {\n break\n }\n\n const baseMinusT: number = base - t\n if (w > floor(maxInt / baseMinusT)) {\n error('overflow')\n }\n\n w *= baseMinusT\n }\n\n const out: number = output.length + 1\n bias = adapt(i - oldi, out, oldi == 0)\n\n if (floor(i / out) > maxInt - n) {\n error('overflow')\n }\n\n n += floor(i / out)\n i %= out\n\n output.splice(i++, 0, n)\n }\n\n return String.fromCodePoint(...output)\n}\n\n/**\n * Converts a string of Unicode symbols to a Punycode string of ASCII-only symbols.\n * @param {string} input The string of Unicode symbols.\n * @returns {string} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = (input: string): string => {\n const output: string[] = []\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n const inputArray: number[] = ucs2decode(input)\n\n // Cache the length.\n const inputLength: number = inputArray.length\n\n // Initialize the state.\n let n: number = initialN\n let delta: number = 0\n let bias: number = initialBias\n\n // Handle the basic code points.\n for (const currentValue of inputArray) {\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue))\n }\n }\n\n const basicLength: number = output.length\n let handledCPCount: number = basicLength\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter)\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n let m: number = maxInt\n for (const currentValue of inputArray) {\n if (currentValue >= n && currentValue < m) {\n m = currentValue\n }\n }\n\n const handledCPCountPlusOne: number = handledCPCount + 1\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error('overflow')\n }\n\n delta += (m - n) * handledCPCountPlusOne\n n = m\n\n for (const currentValue of inputArray) {\n if (currentValue < n && ++delta > maxInt) {\n error('overflow')\n }\n if (currentValue === n) {\n let q: number = delta\n for (let k: number = base /* no condition */; ; k += base) {\n const t: number = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias\n if (q < t) {\n break\n }\n const qMinusT: number = q - t\n const baseMinusT: number = base - t\n output.push(stringFromCharCode(digitToBasic(t + (qMinusT % baseMinusT), 0)))\n q = floor(qMinusT / baseMinusT)\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)))\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength)\n delta = 0\n ++handledCPCount\n }\n }\n\n ++delta\n ++n\n }\n return output.join('')\n}\n\n/**\n * Converts a Punycode string representing a domain name or an email address to Unicode.\n * @param {string} input The Punycoded domain name or email address.\n * @returns {string} The Unicode representation of the given Punycode string.\n */\nconst toUnicode = (input: string): string => {\n return mapDomain(input, (string: string): string => {\n return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string\n })\n}\n\n/**\n * Converts a Unicode string representing a domain name or an email address to Punycode.\n * @param {string} input The domain name or email address to convert.\n * @returns {string} The Punycode representation of the given domain name or email address.\n */\nconst toASCII = (input: string): string => {\n return mapDomain(input, (string: string): string => {\n return regexNonASCII.test(string) ? 'xn--' + encode(string) : string\n })\n}\n\n/** Define the public API */\n/**\n * @description originated from https://unpkg.com/browse/punycode@2.3.1/\n */\nconst punycode: PunycodeStatic = {\n version: '2.3.1',\n ucs2: {\n decode: ucs2decode,\n encode: ucs2encode,\n },\n decode,\n encode,\n toASCII,\n toUnicode,\n}\n\nexport {ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode}\nexport default punycode\n","const DYNAMIC_PATH_COLON_REGEXP = /^:/\nconst DYNAMIC_PATH_BRACKETS_REGEXP = /^\\[.*\\]$/\n\nexport function isDynamicPath(path: string) {\n return DYNAMIC_PATH_COLON_REGEXP.test(path) || DYNAMIC_PATH_BRACKETS_REGEXP.test(path)\n}\n\nexport function getDynamicPaths(pathname: string): string[] {\n return pathname.split('/').filter(isDynamicPath)\n}\n\nexport function extractPathKey(path: string): string {\n return path.slice(1, DYNAMIC_PATH_COLON_REGEXP.test(path) ? undefined : -1)\n}\n\n/**\n * Replaces dynamic paths in the pathname with values from the query\n * @param {string} pathname\n * @param {Record<string, string>} query\n * @returns {string} refined pathname\n */\nexport function refinePathnameWithQuery(pathname: string, query: Record<string, string>): string {\n return getDynamicPaths(pathname).reduce((acc, path) => {\n const pathKey = extractPathKey(path)\n return query[pathKey] ? acc.replace(path, query[pathKey]) : acc\n }, pathname)\n}\n\n/**\n * Removes queries that have already been used in the pathname.\n * @param {string} pathname\n * @param {Record<string, string>} query\n * @returns {Record<string, string>} refined query\n */\nexport function refineQueryWithPathname(pathname: string, query: Record<string, string>): Record<string, string> {\n return getDynamicPaths(pathname).reduce((acc, path) => {\n const pathKey = extractPathKey(path)\n const {[pathKey]: _, ...remainingQuery} = acc\n return remainingQuery\n }, query)\n}\n\nconst MAX_ASCII_CODE = 127\nexport function isASCIICodeChar(char: string) {\n return char.charCodeAt(0) > MAX_ASCII_CODE\n}\n","import {decode, encode} from './punycode'\nimport {\n extractPathKey,\n getDynamicPaths,\n isASCIICodeChar,\n isDynamicPath,\n refinePathnameWithQuery,\n refineQueryWithPathname,\n} from './utils'\n\ninterface URLOptions\n extends Partial<\n Pick<\n URL,\n | 'href'\n | 'protocol'\n | 'host'\n | 'hostname'\n | 'port'\n | 'pathname'\n | 'search'\n | 'hash'\n | 'username'\n | 'password'\n >\n > {\n baseUrl?: string\n query?: Record<string, string>\n}\n\nexport default class NURL implements URL {\n private _href: string = ''\n private _protocol: string = ''\n private _host: string = ''\n private _hostname: string = ''\n private _port: string = ''\n private _pathname: string = ''\n private _search: string = ''\n private _hash: string = ''\n private _origin: string = ''\n private _username: string = ''\n private _password: string = ''\n private _baseUrl: string = ''\n private _searchParams: URLSearchParams = new URLSearchParams()\n\n constructor(input?: string | URL | URLOptions) {\n this._searchParams = new URLSearchParams()\n if (typeof input === 'string' || input instanceof URL) {\n this.href = input.toString()\n } else if (input) {\n if (input.baseUrl) {\n this.baseUrl = input.baseUrl\n }\n if (input.href) {\n this.href = input.href\n }\n if (input.protocol) {\n this.protocol = input.protocol\n }\n if (input.host) {\n this.host = input.host\n }\n if (input.hostname) {\n this.hostname = input.hostname\n }\n if (input.port) {\n this.port = input.port\n }\n if (input.pathname) {\n this.pathname = refinePathnameWithQuery(input.pathname, input.query ?? {})\n }\n if (input.search) {\n this.search = input.search\n }\n if (input.hash) {\n this.hash = input.hash\n }\n if (input.username) {\n this.username = input.username\n }\n if (input.password) {\n this.password = input.password\n }\n if (input.query) {\n const refinedQuery = refineQueryWithPathname(input.pathname ?? '', input.query)\n if (Object.keys(refinedQuery).length > 0) {\n this.search = new URLSearchParams(refinedQuery).toString()\n }\n }\n this.updateHref()\n }\n }\n\n static create(input?: string | URL | URLOptions) {\n return new NURL(input)\n }\n\n static canParse(input: string): boolean {\n if (input.startsWith('/')) {\n return /^\\/[^?#]*(\\?[^#]*)?(#.*)?$/.test(input)\n }\n\n try {\n // eslint-disable-next-line no-new\n new URL(input)\n return true\n } catch {\n // URL 생성자로 파싱할 수 없는 경우, 추가적인 검사를 수행\n // 예: 'example.com' 또는 'example.com/path'와 같은 형식 허용\n return /^[^:/?#]+(\\.[^:/?#]+)+(\\/[^?#]*(\\?[^#]*)?(#.*)?)?$/.test(input)\n }\n }\n\n get baseUrl(): string {\n return this._baseUrl\n }\n\n set baseUrl(value: string) {\n this._baseUrl = value\n try {\n const url = new URL(value)\n this._protocol = url.protocol\n this._host = url.host\n this._hostname = url.hostname\n this._port = url.port\n this._origin = url.origin\n this._username = url.username\n this._password = url.password\n if (url.pathname !== '/') {\n this._pathname = url.pathname\n }\n if (url.search) {\n this._search = url.search\n this._searchParams = new URLSearchParams(url.search)\n }\n if (url.hash) {\n this._hash = url.hash\n }\n this.updateHref()\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Invalid baseUrl: ${value}`, error)\n }\n }\n\n get href(): string {\n return this.pathname.length === 1 ? `${this._href}/` : this._href\n }\n\n set href(value: string) {\n try {\n const url = new URL(value)\n this._href = url.href\n this._protocol = url.protocol\n this._host = url.host\n this._hostname = url.hostname\n this._port = url.port\n this._pathname = url.pathname\n this._search = url.search\n this._hash = url.hash\n this._origin = url.origin\n this._username = url.username\n this._password = url.password\n this._searchParams = url.searchParams\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Can not parse ${value}`, error)\n }\n }\n\n get protocol(): string {\n return this._protocol\n }\n\n set protocol(value: string) {\n this._protocol = value\n this.updateHref()\n }\n\n get host(): string {\n return this._host\n }\n\n set host(value: string) {\n const [hostname, port] = value.split(':')\n\n const encodedHostname = this.encodeHostname(hostname)\n\n this._host = port ? `${encodedHostname}:${port}` : encodedHostname\n this._hostname = encodedHostname\n this._port = port || ''\n this.updateHref()\n }\n\n get hostname(): string {\n return this._hostname\n }\n\n set hostname(value: string) {\n const encodedHostname = this.encodeHostname(value)\n\n this._hostname = encodedHostname\n this._host = this._port ? `${encodedHostname}:${this._port}` : encodedHostname\n this.updateHref()\n }\n\n get port(): string {\n return this._port\n }\n\n set port(value: string) {\n this._port = value\n this._host = `${this._hostname}${value ? ':' + value : ''}`\n this.updateHref()\n }\n\n get pathname(): string {\n return this._pathname\n }\n\n set pathname(pathname: string) {\n const encodedPathname = pathname\n .split('/')\n .map((segment) => (isDynamicPath(segment) ? segment : encodeURI(segment)))\n .join('/')\n\n this._pathname = encodedPathname.startsWith('/') ? encodedPathname : `/${encodedPathname}`\n this.updateHref()\n }\n\n get search(): string {\n return this._search\n }\n\n set search(search: string) {\n this._search = search.startsWith('?') ? search : `?${search}`\n this._searchParams = new URLSearchParams(search)\n this.updateHref()\n }\n\n setSearchParams(_params: Record<string, string>): void {\n const searchParams = new URLSearchParams(_params)\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n appendSearchParams(_params: Record<string, string>): void {\n const searchParams = new URLSearchParams(this._searchParams)\n const dynamicRoutes = getDynamicPaths(this._pathname).map(extractPathKey)\n\n Object.keys(_params).forEach((key) => {\n if (dynamicRoutes.includes(key)) {\n this._pathname = refinePathnameWithQuery(this._pathname, {[key]: _params[key]})\n } else {\n searchParams.append(key, _params[key])\n }\n })\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n removeSearchParams(..._keys: string[]): void {\n const searchParams = new URLSearchParams(this._searchParams)\n\n _keys.forEach((key) => {\n searchParams.delete(key)\n })\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n get searchParams(): URLSearchParams {\n return new Proxy(this._searchParams, {\n get: (target, prop, receiver) => {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return (...args: unknown[]) => {\n const result = value.apply(target, args)\n this._search = this._searchParams.toString() ? `?${this._searchParams.toString()}` : ''\n this.updateHref()\n return result\n }\n }\n return value\n },\n })\n }\n\n get hash(): string {\n return this._hash\n }\n\n set hash(value: string) {\n this._hash = value.startsWith('#') ? value : `#${value}`\n this.updateHref()\n }\n\n get origin(): string {\n return this._origin\n }\n\n get username(): string {\n return this._username\n }\n\n set username(value: string) {\n this._username = value\n this.updateHref()\n }\n\n get password(): string {\n return this._password\n }\n\n set password(value: string) {\n this._password = value\n this.updateHref()\n }\n\n private updateHref() {\n if (this._baseUrl) {\n const baseUrl = new URL(this._baseUrl)\n baseUrl.pathname = this._pathname\n baseUrl.search = this._search\n baseUrl.hash = this._hash\n this._href = baseUrl.href\n this._origin = baseUrl.origin\n } else {\n this._href = `${this._protocol}${this._protocol && '//'}${this._username}${this._password ? ':' + this._password : ''}${\n this._username || this._password ? '@' : ''\n }${this._hostname}${this._port ? ':' + this._port : ''}${this._pathname === '/' ? '' : this._pathname}${this._search}${this._hash}`\n\n this._origin = `${this._protocol}//${this._hostname}${this._port ? ':' + this._port : ''}`\n }\n }\n\n toString(): string {\n return this.href\n }\n\n toJSON(): string {\n return this.href\n }\n\n private punycodePrefix = 'xn--'\n\n private encodeHostname(hostname: string): string {\n return hostname\n .split('.')\n .map((segment) => {\n for (const char of segment) {\n if (isASCIICodeChar(char)) {\n return `${this.punycodePrefix}${encode(segment)}`\n }\n }\n return segment\n })\n .join('.')\n }\n\n get decodedIDN(): string {\n let href = this._href\n\n this._hostname.split('.').forEach((segment) => {\n href = href.replace(segment, decode(segment.replace(this.punycodePrefix, '')))\n })\n\n return href\n }\n\n get decodedHostname(): string {\n return this._hostname\n .split('.')\n .map((segment) => decode(segment.replace(this.punycodePrefix, '')))\n .join('.')\n }\n}\n"],"names":["delimiter","errors","overflow","baseMinusTMin","base","floor","Math","stringFromCharCode","String","fromCharCode","error","type","RangeError","ucs2decode","string","output","counter","length","value","charCodeAt","extra","push","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","damp","tMax","skew","decode","input","inputLength","i","n","initialN","bias","initialBias","basic","lastIndexOf","j","index","oldi","w","maxInt","t","tMin","baseMinusT","out","splice","fromCodePoint","encode","inputArray","currentValue","basicLength","handledCPCount","m","handledCPCountPlusOne","q","qMinusT","join","DYNAMIC_PATH_COLON_REGEXP","DYNAMIC_PATH_BRACKETS_REGEXP","isDynamicPath","path","test","getDynamicPaths","pathname","split","filter","extractPathKey","slice","refinePathnameWithQuery","query","reduce","acc","pathKey","replace","refineQueryWithPathname","_","remainingQuery","MAX_ASCII_CODE","isASCIICodeChar","char","NURL","constructor","_href","_protocol","_host","_hostname","_port","_pathname","_search","_hash","_origin","_username","_password","_baseUrl","_searchParams","URLSearchParams","punycodePrefix","URL","href","toString","baseUrl","protocol","host","hostname","port","search","hash","username","password","refinedQuery","Object","keys","updateHref","create","canParse","startsWith","url","origin","console","warn","searchParams","encodedHostname","encodeHostname","encodedPathname","map","segment","encodeURI","setSearchParams","_params","appendSearchParams","dynamicRoutes","forEach","key","includes","append","removeSearchParams","_keys","delete","Proxy","get","target","prop","receiver","Reflect","args","result","apply","toJSON","decodedIDN","decodedHostname"],"mappings":"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"}
@@ -1,47 +1,128 @@
1
- import i from "npm-punycode";
2
- const m = /^:/, d = /^\[.*\]$/;
3
- function f(h) {
4
- return m.test(h) || d.test(h);
1
+ const H = "-", L = {
2
+ overflow: "Overflow: input needs wider integers to process",
3
+ "not-basic": "Illegal input >= 0x80 (not a basic code point)",
4
+ "invalid-input": "Invalid input"
5
+ }, g = 35, f = Math.floor, w = String.fromCharCode;
6
+ function l(e) {
7
+ throw new RangeError(L[e]);
5
8
  }
6
- function o(h) {
7
- return h.split("/").filter(f);
9
+ function A(e) {
10
+ const t = [];
11
+ let s = 0;
12
+ const r = e.length;
13
+ for (; s < r; ) {
14
+ const h = e.charCodeAt(s++);
15
+ if (h >= 55296 && h <= 56319 && s < r) {
16
+ const a = e.charCodeAt(s++);
17
+ (a & 64512) == 56320 ? t.push(((h & 1023) << 10) + (a & 1023) + 65536) : (t.push(h), s--);
18
+ } else
19
+ t.push(h);
20
+ }
21
+ return t;
22
+ }
23
+ const E = (e) => e >= 48 && e < 58 ? 26 + (e - 48) : e >= 65 && e < 91 ? e - 65 : e >= 97 && e < 123 ? e - 97 : 36, U = (e, t) => e + 22 + 75 * (e < 26 ? 1 : 0) - 0, y = (e, t, s) => {
24
+ let r = 0;
25
+ for (
26
+ e = s ? f(e / 700) : e >> 1, e += f(e / t);
27
+ /* no initialization */
28
+ e > g * 26 >> 1;
29
+ r += 36
30
+ )
31
+ e = f(e / g);
32
+ return f(r + (g + 1) * e / (e + 38));
33
+ }, x = (e) => {
34
+ const t = [], s = e.length;
35
+ let r = 0, h = 128, a = 72, i = e.lastIndexOf(H);
36
+ i < 0 && (i = 0);
37
+ for (let n = 0; n < i; ++n)
38
+ e.charCodeAt(n) >= 128 && l("not-basic"), t.push(e.charCodeAt(n));
39
+ for (let n = i > 0 ? i + 1 : 0; n < s; ) {
40
+ const p = r;
41
+ for (let m = 1, c = 36; ; c += 36) {
42
+ n >= s && l("invalid-input");
43
+ const _ = E(e.charCodeAt(n++));
44
+ _ >= 36 && l("invalid-input"), _ > f((2147483647 - r) / m) && l("overflow"), r += _ * m;
45
+ const u = c <= a ? 1 : c >= a + 26 ? 26 : c - a;
46
+ if (_ < u)
47
+ break;
48
+ const d = 36 - u;
49
+ m > f(2147483647 / d) && l("overflow"), m *= d;
50
+ }
51
+ const o = t.length + 1;
52
+ a = y(r - p, o, p == 0), f(r / o) > 2147483647 - h && l("overflow"), h += f(r / o), r %= o, t.splice(r++, 0, h);
53
+ }
54
+ return String.fromCodePoint(...t);
55
+ }, v = (e) => {
56
+ const t = [], s = A(e), r = s.length;
57
+ let h = 128, a = 0, i = 72;
58
+ for (const o of s)
59
+ o < 128 && t.push(w(o));
60
+ const n = t.length;
61
+ let p = n;
62
+ for (n && t.push(H); p < r; ) {
63
+ let o = 2147483647;
64
+ for (const c of s)
65
+ c >= h && c < o && (o = c);
66
+ const m = p + 1;
67
+ o - h > f((2147483647 - a) / m) && l("overflow"), a += (o - h) * m, h = o;
68
+ for (const c of s)
69
+ if (c < h && ++a > 2147483647 && l("overflow"), c === h) {
70
+ let _ = a;
71
+ for (let u = 36; ; u += 36) {
72
+ const d = u <= i ? 1 : u >= i + 26 ? 26 : u - i;
73
+ if (_ < d)
74
+ break;
75
+ const $ = _ - d, S = 36 - d;
76
+ t.push(w(U(d + $ % S))), _ = f($ / S);
77
+ }
78
+ t.push(w(U(_))), i = y(a, m, p === n), a = 0, ++p;
79
+ }
80
+ ++a, ++h;
81
+ }
82
+ return t.join("");
83
+ }, R = /^:/, O = /^\[.*\]$/;
84
+ function I(e) {
85
+ return R.test(e) || O.test(e);
86
+ }
87
+ function P(e) {
88
+ return e.split("/").filter(I);
8
89
  }
9
- function n(h) {
10
- return h.slice(1, m.test(h) ? void 0 : -1);
90
+ function b(e) {
91
+ return e.slice(1, R.test(e) ? void 0 : -1);
11
92
  }
12
- function _(h, t) {
13
- return o(h).reduce((s, e) => {
14
- const r = n(e);
15
- return t[r] ? s.replace(e, t[r]) : s;
16
- }, h);
93
+ function C(e, t) {
94
+ return P(e).reduce((s, r) => {
95
+ const h = b(r);
96
+ return t[h] ? s.replace(r, t[h]) : s;
97
+ }, e);
17
98
  }
18
- function u(h, t) {
19
- return o(h).reduce((s, e) => {
20
- const r = n(e), {
21
- [r]: c,
22
- ...a
99
+ function T(e, t) {
100
+ return P(e).reduce((s, r) => {
101
+ const h = b(r), {
102
+ [h]: a,
103
+ ...i
23
104
  } = s;
24
- return a;
105
+ return i;
25
106
  }, t);
26
107
  }
27
- const l = 127;
28
- function P(h) {
29
- return h.charCodeAt(0) > l;
108
+ const N = 127;
109
+ function j(e) {
110
+ return e.charCodeAt(0) > N;
30
111
  }
31
- class p {
112
+ class M {
32
113
  constructor(t) {
33
114
  if (this._href = "", this._protocol = "", this._host = "", this._hostname = "", this._port = "", this._pathname = "", this._search = "", this._hash = "", this._origin = "", this._username = "", this._password = "", this._baseUrl = "", this._searchParams = new URLSearchParams(), this.punycodePrefix = "xn--", this._searchParams = new URLSearchParams(), typeof t == "string" || t instanceof URL)
34
115
  this.href = t.toString();
35
116
  else if (t) {
36
- if (t.baseUrl && (this.baseUrl = t.baseUrl), t.href && (this.href = t.href), t.protocol && (this.protocol = t.protocol), t.host && (this.host = t.host), t.hostname && (this.hostname = t.hostname), t.port && (this.port = t.port), t.pathname && (this.pathname = _(t.pathname, t.query ?? {})), t.search && (this.search = t.search), t.hash && (this.hash = t.hash), t.username && (this.username = t.username), t.password && (this.password = t.password), t.query) {
37
- const s = u(t.pathname ?? "", t.query);
117
+ if (t.baseUrl && (this.baseUrl = t.baseUrl), t.href && (this.href = t.href), t.protocol && (this.protocol = t.protocol), t.host && (this.host = t.host), t.hostname && (this.hostname = t.hostname), t.port && (this.port = t.port), t.pathname && (this.pathname = C(t.pathname, t.query ?? {})), t.search && (this.search = t.search), t.hash && (this.hash = t.hash), t.username && (this.username = t.username), t.password && (this.password = t.password), t.query) {
118
+ const s = T(t.pathname ?? "", t.query);
38
119
  Object.keys(s).length > 0 && (this.search = new URLSearchParams(s).toString());
39
120
  }
40
121
  this.updateHref();
41
122
  }
42
123
  }
43
124
  static create(t) {
44
- return new p(t);
125
+ return new M(t);
45
126
  }
46
127
  static canParse(t) {
47
128
  if (t.startsWith("/"))
@@ -85,8 +166,8 @@ class p {
85
166
  return this._host;
86
167
  }
87
168
  set host(t) {
88
- const [s, e] = t.split(":"), r = this.encodeHostname(s);
89
- this._host = e ? `${r}:${e}` : r, this._hostname = r, this._port = e || "", this.updateHref();
169
+ const [s, r] = t.split(":"), h = this.encodeHostname(s);
170
+ this._host = r ? `${h}:${r}` : h, this._hostname = h, this._port = r || "", this.updateHref();
90
171
  }
91
172
  get hostname() {
92
173
  return this._hostname;
@@ -105,7 +186,7 @@ class p {
105
186
  return this._pathname;
106
187
  }
107
188
  set pathname(t) {
108
- const s = t.split("/").map((e) => f(e) ? e : encodeURI(e)).join("/");
189
+ const s = t.split("/").map((r) => I(r) ? r : encodeURI(r)).join("/");
109
190
  this._pathname = s.startsWith("/") ? s : `/${s}`, this.updateHref();
110
191
  }
111
192
  get search() {
@@ -119,27 +200,27 @@ class p {
119
200
  this._search = s.toString() ? `?${s.toString()}` : "", this._searchParams = s, this.updateHref();
120
201
  }
121
202
  appendSearchParams(t) {
122
- const s = new URLSearchParams(this._searchParams), e = o(this._pathname).map(n);
123
- Object.keys(t).forEach((r) => {
124
- e.includes(r) ? this._pathname = _(this._pathname, {
125
- [r]: t[r]
126
- }) : s.append(r, t[r]);
203
+ const s = new URLSearchParams(this._searchParams), r = P(this._pathname).map(b);
204
+ Object.keys(t).forEach((h) => {
205
+ r.includes(h) ? this._pathname = C(this._pathname, {
206
+ [h]: t[h]
207
+ }) : s.append(h, t[h]);
127
208
  }), this._search = s.toString() ? `?${s.toString()}` : "", this._searchParams = s, this.updateHref();
128
209
  }
129
210
  removeSearchParams(...t) {
130
211
  const s = new URLSearchParams(this._searchParams);
131
- t.forEach((e) => {
132
- s.delete(e);
212
+ t.forEach((r) => {
213
+ s.delete(r);
133
214
  }), this._search = s.toString() ? `?${s.toString()}` : "", this._searchParams = s, this.updateHref();
134
215
  }
135
216
  get searchParams() {
136
217
  return new Proxy(this._searchParams, {
137
- get: (t, s, e) => {
138
- const r = Reflect.get(t, s, e);
139
- return typeof r == "function" ? (...c) => {
140
- const a = r.apply(t, c);
141
- return this._search = this._searchParams.toString() ? `?${this._searchParams.toString()}` : "", this.updateHref(), a;
142
- } : r;
218
+ get: (t, s, r) => {
219
+ const h = Reflect.get(t, s, r);
220
+ return typeof h == "function" ? (...a) => {
221
+ const i = h.apply(t, a);
222
+ return this._search = this._searchParams.toString() ? `?${this._searchParams.toString()}` : "", this.updateHref(), i;
223
+ } : h;
143
224
  }
144
225
  });
145
226
  }
@@ -179,23 +260,23 @@ class p {
179
260
  }
180
261
  encodeHostname(t) {
181
262
  return t.split(".").map((s) => {
182
- for (const e of s)
183
- if (P(e))
184
- return `${this.punycodePrefix}${i.encode(s)}`;
263
+ for (const r of s)
264
+ if (j(r))
265
+ return `${this.punycodePrefix}${v(s)}`;
185
266
  return s;
186
267
  }).join(".");
187
268
  }
188
269
  get decodedIDN() {
189
270
  let t = this._href;
190
271
  return this._hostname.split(".").forEach((s) => {
191
- t = t.replace(s, i.decode(s.replace(this.punycodePrefix, "")));
272
+ t = t.replace(s, x(s.replace(this.punycodePrefix, "")));
192
273
  }), t;
193
274
  }
194
275
  get decodedHostname() {
195
- return this._hostname.split(".").map((t) => i.decode(t.replace(this.punycodePrefix, ""))).join(".");
276
+ return this._hostname.split(".").map((t) => x(t.replace(this.punycodePrefix, ""))).join(".");
196
277
  }
197
278
  }
198
279
  export {
199
- p as default
280
+ M as default
200
281
  };
201
282
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/utils.ts","../../src/nurl.ts"],"sourcesContent":["const DYNAMIC_PATH_COLON_REGEXP = /^:/\nconst DYNAMIC_PATH_BRACKETS_REGEXP = /^\\[.*\\]$/\n\nexport function isDynamicPath(path: string) {\n return DYNAMIC_PATH_COLON_REGEXP.test(path) || DYNAMIC_PATH_BRACKETS_REGEXP.test(path)\n}\n\nexport function getDynamicPaths(pathname: string): string[] {\n return pathname.split('/').filter(isDynamicPath)\n}\n\nexport function extractPathKey(path: string): string {\n return path.slice(1, DYNAMIC_PATH_COLON_REGEXP.test(path) ? undefined : -1)\n}\n\n/**\n * Replaces dynamic paths in the pathname with values from the query\n * @param {string} pathname\n * @param {Record<string, string>} query\n * @returns {string} refined pathname\n */\nexport function refinePathnameWithQuery(pathname: string, query: Record<string, string>): string {\n return getDynamicPaths(pathname).reduce((acc, path) => {\n const pathKey = extractPathKey(path)\n return query[pathKey] ? acc.replace(path, query[pathKey]) : acc\n }, pathname)\n}\n\n/**\n * Removes queries that have already been used in the pathname.\n * @param {string} pathname\n * @param {Record<string, string>} query\n * @returns {Record<string, string>} refined query\n */\nexport function refineQueryWithPathname(pathname: string, query: Record<string, string>): Record<string, string> {\n return getDynamicPaths(pathname).reduce((acc, path) => {\n const pathKey = extractPathKey(path)\n const {[pathKey]: _, ...remainingQuery} = acc\n return remainingQuery\n }, query)\n}\n\nconst MAX_ASCII_CODE = 127\nexport function isASCIICodeChar(char: string) {\n return char.charCodeAt(0) > MAX_ASCII_CODE\n}\n","/**\n * Note: We use 'npm-punycode' alias instead of 'punycode/' to properly support dual packages in ESM.\n * This ensures that this third-party module is used instead of the built-in\n * Node.js 'punycode' module, which has been deprecated since Node.js v7.0.0.\n * @see https://github.com/mathiasbynens/punycode.js#installation\n * @see https://nodejs.org/api/punycode.html for deprecation info\n */\nimport punycode from 'npm-punycode'\n\nimport {\n extractPathKey,\n getDynamicPaths,\n isASCIICodeChar,\n isDynamicPath,\n refinePathnameWithQuery,\n refineQueryWithPathname,\n} from './utils'\n\ninterface URLOptions\n extends Partial<\n Pick<\n URL,\n | 'href'\n | 'protocol'\n | 'host'\n | 'hostname'\n | 'port'\n | 'pathname'\n | 'search'\n | 'hash'\n | 'username'\n | 'password'\n >\n > {\n baseUrl?: string\n query?: Record<string, string>\n}\n\nexport default class NURL implements URL {\n private _href: string = ''\n private _protocol: string = ''\n private _host: string = ''\n private _hostname: string = ''\n private _port: string = ''\n private _pathname: string = ''\n private _search: string = ''\n private _hash: string = ''\n private _origin: string = ''\n private _username: string = ''\n private _password: string = ''\n private _baseUrl: string = ''\n private _searchParams: URLSearchParams = new URLSearchParams()\n\n constructor(input?: string | URL | URLOptions) {\n this._searchParams = new URLSearchParams()\n if (typeof input === 'string' || input instanceof URL) {\n this.href = input.toString()\n } else if (input) {\n if (input.baseUrl) {\n this.baseUrl = input.baseUrl\n }\n if (input.href) {\n this.href = input.href\n }\n if (input.protocol) {\n this.protocol = input.protocol\n }\n if (input.host) {\n this.host = input.host\n }\n if (input.hostname) {\n this.hostname = input.hostname\n }\n if (input.port) {\n this.port = input.port\n }\n if (input.pathname) {\n this.pathname = refinePathnameWithQuery(input.pathname, input.query ?? {})\n }\n if (input.search) {\n this.search = input.search\n }\n if (input.hash) {\n this.hash = input.hash\n }\n if (input.username) {\n this.username = input.username\n }\n if (input.password) {\n this.password = input.password\n }\n if (input.query) {\n const refinedQuery = refineQueryWithPathname(input.pathname ?? '', input.query)\n if (Object.keys(refinedQuery).length > 0) {\n this.search = new URLSearchParams(refinedQuery).toString()\n }\n }\n this.updateHref()\n }\n }\n\n static create(input?: string | URL | URLOptions) {\n return new NURL(input)\n }\n\n static canParse(input: string): boolean {\n if (input.startsWith('/')) {\n return /^\\/[^?#]*(\\?[^#]*)?(#.*)?$/.test(input)\n }\n\n try {\n // eslint-disable-next-line no-new\n new URL(input)\n return true\n } catch {\n // URL 생성자로 파싱할 수 없는 경우, 추가적인 검사를 수행\n // 예: 'example.com' 또는 'example.com/path'와 같은 형식 허용\n return /^[^:/?#]+(\\.[^:/?#]+)+(\\/[^?#]*(\\?[^#]*)?(#.*)?)?$/.test(input)\n }\n }\n\n get baseUrl(): string {\n return this._baseUrl\n }\n\n set baseUrl(value: string) {\n this._baseUrl = value\n try {\n const url = new URL(value)\n this._protocol = url.protocol\n this._host = url.host\n this._hostname = url.hostname\n this._port = url.port\n this._origin = url.origin\n this._username = url.username\n this._password = url.password\n if (url.pathname !== '/') {\n this._pathname = url.pathname\n }\n if (url.search) {\n this._search = url.search\n this._searchParams = new URLSearchParams(url.search)\n }\n if (url.hash) {\n this._hash = url.hash\n }\n this.updateHref()\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Invalid baseUrl: ${value}`, error)\n }\n }\n\n get href(): string {\n return this.pathname.length === 1 ? `${this._href}/` : this._href\n }\n\n set href(value: string) {\n try {\n const url = new URL(value)\n this._href = url.href\n this._protocol = url.protocol\n this._host = url.host\n this._hostname = url.hostname\n this._port = url.port\n this._pathname = url.pathname\n this._search = url.search\n this._hash = url.hash\n this._origin = url.origin\n this._username = url.username\n this._password = url.password\n this._searchParams = url.searchParams\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Can not parse ${value}`, error)\n }\n }\n\n get protocol(): string {\n return this._protocol\n }\n\n set protocol(value: string) {\n this._protocol = value\n this.updateHref()\n }\n\n get host(): string {\n return this._host\n }\n\n set host(value: string) {\n const [hostname, port] = value.split(':')\n\n const encodedHostname = this.encodeHostname(hostname)\n\n this._host = port ? `${encodedHostname}:${port}` : encodedHostname\n this._hostname = encodedHostname\n this._port = port || ''\n this.updateHref()\n }\n\n get hostname(): string {\n return this._hostname\n }\n\n set hostname(value: string) {\n const encodedHostname = this.encodeHostname(value)\n\n this._hostname = encodedHostname\n this._host = this._port ? `${encodedHostname}:${this._port}` : encodedHostname\n this.updateHref()\n }\n\n get port(): string {\n return this._port\n }\n\n set port(value: string) {\n this._port = value\n this._host = `${this._hostname}${value ? ':' + value : ''}`\n this.updateHref()\n }\n\n get pathname(): string {\n return this._pathname\n }\n\n set pathname(pathname: string) {\n const encodedPathname = pathname\n .split('/')\n .map((segment) => (isDynamicPath(segment) ? segment : encodeURI(segment)))\n .join('/')\n\n this._pathname = encodedPathname.startsWith('/') ? encodedPathname : `/${encodedPathname}`\n this.updateHref()\n }\n\n get search(): string {\n return this._search\n }\n\n set search(search: string) {\n this._search = search.startsWith('?') ? search : `?${search}`\n this._searchParams = new URLSearchParams(search)\n this.updateHref()\n }\n\n setSearchParams(_params: Record<string, string>): void {\n const searchParams = new URLSearchParams(_params)\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n appendSearchParams(_params: Record<string, string>): void {\n const searchParams = new URLSearchParams(this._searchParams)\n const dynamicRoutes = getDynamicPaths(this._pathname).map(extractPathKey)\n\n Object.keys(_params).forEach((key) => {\n if (dynamicRoutes.includes(key)) {\n this._pathname = refinePathnameWithQuery(this._pathname, {[key]: _params[key]})\n } else {\n searchParams.append(key, _params[key])\n }\n })\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n removeSearchParams(..._keys: string[]): void {\n const searchParams = new URLSearchParams(this._searchParams)\n\n _keys.forEach((key) => {\n searchParams.delete(key)\n })\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n get searchParams(): URLSearchParams {\n return new Proxy(this._searchParams, {\n get: (target, prop, receiver) => {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return (...args: unknown[]) => {\n const result = value.apply(target, args)\n this._search = this._searchParams.toString() ? `?${this._searchParams.toString()}` : ''\n this.updateHref()\n return result\n }\n }\n return value\n },\n })\n }\n\n get hash(): string {\n return this._hash\n }\n\n set hash(value: string) {\n this._hash = value.startsWith('#') ? value : `#${value}`\n this.updateHref()\n }\n\n get origin(): string {\n return this._origin\n }\n\n get username(): string {\n return this._username\n }\n\n set username(value: string) {\n this._username = value\n this.updateHref()\n }\n\n get password(): string {\n return this._password\n }\n\n set password(value: string) {\n this._password = value\n this.updateHref()\n }\n\n private updateHref() {\n if (this._baseUrl) {\n const baseUrl = new URL(this._baseUrl)\n baseUrl.pathname = this._pathname\n baseUrl.search = this._search\n baseUrl.hash = this._hash\n this._href = baseUrl.href\n this._origin = baseUrl.origin\n } else {\n this._href = `${this._protocol}${this._protocol && '//'}${this._username}${this._password ? ':' + this._password : ''}${\n this._username || this._password ? '@' : ''\n }${this._hostname}${this._port ? ':' + this._port : ''}${this._pathname === '/' ? '' : this._pathname}${this._search}${this._hash}`\n\n this._origin = `${this._protocol}//${this._hostname}${this._port ? ':' + this._port : ''}`\n }\n }\n\n toString(): string {\n return this.href\n }\n\n toJSON(): string {\n return this.href\n }\n\n private punycodePrefix = 'xn--'\n\n private encodeHostname(hostname: string): string {\n return hostname\n .split('.')\n .map((segment) => {\n for (const char of segment) {\n if (isASCIICodeChar(char)) {\n return `${this.punycodePrefix}${punycode.encode(segment)}`\n }\n }\n return segment\n })\n .join('.')\n }\n\n get decodedIDN(): string {\n let href = this._href\n\n this._hostname.split('.').forEach((segment) => {\n href = href.replace(segment, punycode.decode(segment.replace(this.punycodePrefix, '')))\n })\n\n return href\n }\n\n get decodedHostname(): string {\n return this._hostname\n .split('.')\n .map((segment) => punycode.decode(segment.replace(this.punycodePrefix, '')))\n .join('.')\n }\n}\n"],"names":["DYNAMIC_PATH_COLON_REGEXP","DYNAMIC_PATH_BRACKETS_REGEXP","isDynamicPath","path","test","getDynamicPaths","pathname","split","filter","extractPathKey","slice","refinePathnameWithQuery","query","reduce","acc","pathKey","replace","refineQueryWithPathname","_","remainingQuery","MAX_ASCII_CODE","isASCIICodeChar","char","charCodeAt","NURL","constructor","input","_href","_protocol","_host","_hostname","_port","_pathname","_search","_hash","_origin","_username","_password","_baseUrl","_searchParams","URLSearchParams","punycodePrefix","URL","href","toString","baseUrl","protocol","host","hostname","port","search","hash","username","password","refinedQuery","Object","keys","length","updateHref","create","canParse","startsWith","value","url","origin","error","console","warn","searchParams","encodedHostname","encodeHostname","encodedPathname","map","segment","encodeURI","join","setSearchParams","_params","appendSearchParams","dynamicRoutes","forEach","key","includes","append","removeSearchParams","_keys","delete","Proxy","get","target","prop","receiver","Reflect","args","result","apply","toJSON","punycode","encode","decodedIDN","decode","decodedHostname"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/punycode.ts","../../src/utils.ts","../../src/nurl.ts"],"sourcesContent":["/* eslint-disable eqeqeq */\n/* eslint-disable no-param-reassign */\n\ninterface PunycodeStatic {\n version: string\n ucs2: {\n decode(string: string): number[]\n encode(codePoints: number[]): string\n }\n decode(input: string): string\n encode(input: string): string\n toASCII(input: string): string\n toUnicode(input: string): string\n}\n\ntype ErrorMessages = Record<string, string>\n\n/** Highest positive signed 32-bit float value */\nconst maxInt: number = 2147483647 // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base: number = 36\nconst tMin: number = 1\nconst tMax: number = 26\nconst skew: number = 38\nconst damp: number = 700\nconst initialBias: number = 72\nconst initialN: number = 128 // 0x80\nconst delimiter: string = '-' // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode: RegExp = /^xn--/\nconst regexNonASCII: RegExp = /[^\\0-\\x7F]/ // Note: U+007F DEL is excluded too.\nconst regexSeparators: RegExp = /[\\x2E\\u3002\\uFF0E\\uFF61]/g // RFC 3490 separators\n\n/** Error messages */\nconst errors: ErrorMessages = {\n overflow: 'Overflow: input needs wider integers to process',\n 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n 'invalid-input': 'Invalid input',\n}\n\n/** Convenience shortcuts */\nconst baseMinusTMin: number = base - tMin\nconst floor: (x: number) => number = Math.floor\nconst stringFromCharCode: (...codes: number[]) => string = String.fromCharCode\n\n/* -------------------------------------------------------------------------- */\n\n/**\n * A generic error utility function.\n * @private\n * @param {string} type The error type.\n * @throws {RangeError} with the applicable error message.\n */\nfunction error(type: string): never {\n throw new RangeError(errors[type])\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {T[]} array The array to iterate over.\n * @param {(value: T) => U} callback The function that gets called for every array item.\n * @returns {U[]} A new array of values returned by the callback function.\n */\nfunction map<T, U>(array: T[], callback: (value: T) => U): U[] {\n const result: U[] = new Array(array.length)\n let length: number = array.length\n while (length--) {\n result[length] = callback(array[length])\n }\n return result\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email addresses.\n * @private\n * @param {string} domain The domain name or email address.\n * @param {(string: string) => string} callback The function that gets called for every character.\n * @returns {string} A new string of characters returned by the callback function.\n */\nfunction mapDomain(domain: string, callback: (string: string) => string): string {\n const parts: string[] = domain.split('@')\n let result: string = ''\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + '@'\n domain = parts[1]\n }\n // Avoid `split(regex)` for IE8 compatibility. See #17.\n domain = domain.replace(regexSeparators, '\\x2E')\n const labels: string[] = domain.split('.')\n const encoded: string = map(labels, callback).join('.')\n return result + encoded\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string.\n * @param {string} string The Unicode input string (UCS-2).\n * @returns {number[]} The new array of code points.\n */\nfunction ucs2decode(string: string): number[] {\n const output: number[] = []\n let counter: number = 0\n const length: number = string.length\n\n while (counter < length) {\n const value: number = string.charCodeAt(counter++)\n if (value >= 0xd800 && value <= 0xdbff && counter < length) {\n // It's a high surrogate, and there is a next character.\n const extra: number = string.charCodeAt(counter++)\n if ((extra & 0xfc00) == 0xdc00) {\n // Low surrogate.\n output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000)\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value)\n counter--\n }\n } else {\n output.push(value)\n }\n }\n return output\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @param {number[]} codePoints The array of numeric code points.\n * @returns {string} The new Unicode string (UCS-2).\n */\nconst ucs2encode = (codePoints: number[]): string => String.fromCodePoint(...codePoints)\n\n/**\n * Converts a basic code point into a digit/integer.\n * @private\n * @param {number} codePoint The basic numeric code point value.\n * @returns {number} The numeric value of a basic code point.\n */\nconst basicToDigit = (codePoint: number): number => {\n if (codePoint >= 0x30 && codePoint < 0x3a) {\n return 26 + (codePoint - 0x30)\n }\n if (codePoint >= 0x41 && codePoint < 0x5b) {\n return codePoint - 0x41\n }\n if (codePoint >= 0x61 && codePoint < 0x7b) {\n return codePoint - 0x61\n }\n return base\n}\n\n/**\n * Converts a digit/integer into a basic code point.\n * @private\n * @param {number} digit The numeric value of a basic code point.\n * @param {number} flag The flag value.\n * @returns {number} The basic code point.\n */\nconst digitToBasic = (digit: number, flag: number): number => {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n // @descriptoin 원래 코드는 아래와 같았지만, 타입스크립트에서는 불리언 연산이 안되서 임의로 수정\n // return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5)\n return digit + 22 + 75 * (digit < 26 ? 1 : 0) - ((flag != 0 ? 1 : 0) << 5)\n}\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * @private\n * @param {number} delta The delta value.\n * @param {number} numPoints The number of points.\n * @param {boolean} firstTime Whether this is the first time.\n * @returns {number} The adapted bias.\n */\nconst adapt = (delta: number, numPoints: number, firstTime: boolean): number => {\n let k: number = 0\n delta = firstTime ? floor(delta / damp) : delta >> 1\n delta += floor(delta / numPoints)\n for (; /* no initialization */ delta > (baseMinusTMin * tMax) >> 1; k += base) {\n delta = floor(delta / baseMinusTMin)\n }\n return floor(k + ((baseMinusTMin + 1) * delta) / (delta + skew))\n}\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode symbols.\n * @param {string} input The Punycode string of ASCII-only symbols.\n * @returns {string} The resulting string of Unicode symbols.\n */\nconst decode = (input: string): string => {\n const output: number[] = []\n const inputLength: number = input.length\n let i: number = 0\n let n: number = initialN\n let bias: number = initialBias\n\n let basic: number = input.lastIndexOf(delimiter)\n if (basic < 0) {\n basic = 0\n }\n\n for (let j: number = 0; j < basic; ++j) {\n if (input.charCodeAt(j) >= 0x80) {\n error('not-basic')\n }\n output.push(input.charCodeAt(j))\n }\n\n for (let index: number = basic > 0 ? basic + 1 : 0; index < inputLength /* no final expression */; ) {\n const oldi: number = i\n for (let w: number = 1, k: number = base /* no condition */; ; k += base) {\n if (index >= inputLength) {\n error('invalid-input')\n }\n\n const digit: number = basicToDigit(input.charCodeAt(index++))\n\n if (digit >= base) {\n error('invalid-input')\n }\n if (digit > floor((maxInt - i) / w)) {\n error('overflow')\n }\n\n i += digit * w\n const t: number = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias\n\n if (digit < t) {\n break\n }\n\n const baseMinusT: number = base - t\n if (w > floor(maxInt / baseMinusT)) {\n error('overflow')\n }\n\n w *= baseMinusT\n }\n\n const out: number = output.length + 1\n bias = adapt(i - oldi, out, oldi == 0)\n\n if (floor(i / out) > maxInt - n) {\n error('overflow')\n }\n\n n += floor(i / out)\n i %= out\n\n output.splice(i++, 0, n)\n }\n\n return String.fromCodePoint(...output)\n}\n\n/**\n * Converts a string of Unicode symbols to a Punycode string of ASCII-only symbols.\n * @param {string} input The string of Unicode symbols.\n * @returns {string} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = (input: string): string => {\n const output: string[] = []\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n const inputArray: number[] = ucs2decode(input)\n\n // Cache the length.\n const inputLength: number = inputArray.length\n\n // Initialize the state.\n let n: number = initialN\n let delta: number = 0\n let bias: number = initialBias\n\n // Handle the basic code points.\n for (const currentValue of inputArray) {\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue))\n }\n }\n\n const basicLength: number = output.length\n let handledCPCount: number = basicLength\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter)\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n let m: number = maxInt\n for (const currentValue of inputArray) {\n if (currentValue >= n && currentValue < m) {\n m = currentValue\n }\n }\n\n const handledCPCountPlusOne: number = handledCPCount + 1\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error('overflow')\n }\n\n delta += (m - n) * handledCPCountPlusOne\n n = m\n\n for (const currentValue of inputArray) {\n if (currentValue < n && ++delta > maxInt) {\n error('overflow')\n }\n if (currentValue === n) {\n let q: number = delta\n for (let k: number = base /* no condition */; ; k += base) {\n const t: number = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias\n if (q < t) {\n break\n }\n const qMinusT: number = q - t\n const baseMinusT: number = base - t\n output.push(stringFromCharCode(digitToBasic(t + (qMinusT % baseMinusT), 0)))\n q = floor(qMinusT / baseMinusT)\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)))\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength)\n delta = 0\n ++handledCPCount\n }\n }\n\n ++delta\n ++n\n }\n return output.join('')\n}\n\n/**\n * Converts a Punycode string representing a domain name or an email address to Unicode.\n * @param {string} input The Punycoded domain name or email address.\n * @returns {string} The Unicode representation of the given Punycode string.\n */\nconst toUnicode = (input: string): string => {\n return mapDomain(input, (string: string): string => {\n return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string\n })\n}\n\n/**\n * Converts a Unicode string representing a domain name or an email address to Punycode.\n * @param {string} input The domain name or email address to convert.\n * @returns {string} The Punycode representation of the given domain name or email address.\n */\nconst toASCII = (input: string): string => {\n return mapDomain(input, (string: string): string => {\n return regexNonASCII.test(string) ? 'xn--' + encode(string) : string\n })\n}\n\n/** Define the public API */\n/**\n * @description originated from https://unpkg.com/browse/punycode@2.3.1/\n */\nconst punycode: PunycodeStatic = {\n version: '2.3.1',\n ucs2: {\n decode: ucs2decode,\n encode: ucs2encode,\n },\n decode,\n encode,\n toASCII,\n toUnicode,\n}\n\nexport {ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode}\nexport default punycode\n","const DYNAMIC_PATH_COLON_REGEXP = /^:/\nconst DYNAMIC_PATH_BRACKETS_REGEXP = /^\\[.*\\]$/\n\nexport function isDynamicPath(path: string) {\n return DYNAMIC_PATH_COLON_REGEXP.test(path) || DYNAMIC_PATH_BRACKETS_REGEXP.test(path)\n}\n\nexport function getDynamicPaths(pathname: string): string[] {\n return pathname.split('/').filter(isDynamicPath)\n}\n\nexport function extractPathKey(path: string): string {\n return path.slice(1, DYNAMIC_PATH_COLON_REGEXP.test(path) ? undefined : -1)\n}\n\n/**\n * Replaces dynamic paths in the pathname with values from the query\n * @param {string} pathname\n * @param {Record<string, string>} query\n * @returns {string} refined pathname\n */\nexport function refinePathnameWithQuery(pathname: string, query: Record<string, string>): string {\n return getDynamicPaths(pathname).reduce((acc, path) => {\n const pathKey = extractPathKey(path)\n return query[pathKey] ? acc.replace(path, query[pathKey]) : acc\n }, pathname)\n}\n\n/**\n * Removes queries that have already been used in the pathname.\n * @param {string} pathname\n * @param {Record<string, string>} query\n * @returns {Record<string, string>} refined query\n */\nexport function refineQueryWithPathname(pathname: string, query: Record<string, string>): Record<string, string> {\n return getDynamicPaths(pathname).reduce((acc, path) => {\n const pathKey = extractPathKey(path)\n const {[pathKey]: _, ...remainingQuery} = acc\n return remainingQuery\n }, query)\n}\n\nconst MAX_ASCII_CODE = 127\nexport function isASCIICodeChar(char: string) {\n return char.charCodeAt(0) > MAX_ASCII_CODE\n}\n","import {decode, encode} from './punycode'\nimport {\n extractPathKey,\n getDynamicPaths,\n isASCIICodeChar,\n isDynamicPath,\n refinePathnameWithQuery,\n refineQueryWithPathname,\n} from './utils'\n\ninterface URLOptions\n extends Partial<\n Pick<\n URL,\n | 'href'\n | 'protocol'\n | 'host'\n | 'hostname'\n | 'port'\n | 'pathname'\n | 'search'\n | 'hash'\n | 'username'\n | 'password'\n >\n > {\n baseUrl?: string\n query?: Record<string, string>\n}\n\nexport default class NURL implements URL {\n private _href: string = ''\n private _protocol: string = ''\n private _host: string = ''\n private _hostname: string = ''\n private _port: string = ''\n private _pathname: string = ''\n private _search: string = ''\n private _hash: string = ''\n private _origin: string = ''\n private _username: string = ''\n private _password: string = ''\n private _baseUrl: string = ''\n private _searchParams: URLSearchParams = new URLSearchParams()\n\n constructor(input?: string | URL | URLOptions) {\n this._searchParams = new URLSearchParams()\n if (typeof input === 'string' || input instanceof URL) {\n this.href = input.toString()\n } else if (input) {\n if (input.baseUrl) {\n this.baseUrl = input.baseUrl\n }\n if (input.href) {\n this.href = input.href\n }\n if (input.protocol) {\n this.protocol = input.protocol\n }\n if (input.host) {\n this.host = input.host\n }\n if (input.hostname) {\n this.hostname = input.hostname\n }\n if (input.port) {\n this.port = input.port\n }\n if (input.pathname) {\n this.pathname = refinePathnameWithQuery(input.pathname, input.query ?? {})\n }\n if (input.search) {\n this.search = input.search\n }\n if (input.hash) {\n this.hash = input.hash\n }\n if (input.username) {\n this.username = input.username\n }\n if (input.password) {\n this.password = input.password\n }\n if (input.query) {\n const refinedQuery = refineQueryWithPathname(input.pathname ?? '', input.query)\n if (Object.keys(refinedQuery).length > 0) {\n this.search = new URLSearchParams(refinedQuery).toString()\n }\n }\n this.updateHref()\n }\n }\n\n static create(input?: string | URL | URLOptions) {\n return new NURL(input)\n }\n\n static canParse(input: string): boolean {\n if (input.startsWith('/')) {\n return /^\\/[^?#]*(\\?[^#]*)?(#.*)?$/.test(input)\n }\n\n try {\n // eslint-disable-next-line no-new\n new URL(input)\n return true\n } catch {\n // URL 생성자로 파싱할 수 없는 경우, 추가적인 검사를 수행\n // 예: 'example.com' 또는 'example.com/path'와 같은 형식 허용\n return /^[^:/?#]+(\\.[^:/?#]+)+(\\/[^?#]*(\\?[^#]*)?(#.*)?)?$/.test(input)\n }\n }\n\n get baseUrl(): string {\n return this._baseUrl\n }\n\n set baseUrl(value: string) {\n this._baseUrl = value\n try {\n const url = new URL(value)\n this._protocol = url.protocol\n this._host = url.host\n this._hostname = url.hostname\n this._port = url.port\n this._origin = url.origin\n this._username = url.username\n this._password = url.password\n if (url.pathname !== '/') {\n this._pathname = url.pathname\n }\n if (url.search) {\n this._search = url.search\n this._searchParams = new URLSearchParams(url.search)\n }\n if (url.hash) {\n this._hash = url.hash\n }\n this.updateHref()\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Invalid baseUrl: ${value}`, error)\n }\n }\n\n get href(): string {\n return this.pathname.length === 1 ? `${this._href}/` : this._href\n }\n\n set href(value: string) {\n try {\n const url = new URL(value)\n this._href = url.href\n this._protocol = url.protocol\n this._host = url.host\n this._hostname = url.hostname\n this._port = url.port\n this._pathname = url.pathname\n this._search = url.search\n this._hash = url.hash\n this._origin = url.origin\n this._username = url.username\n this._password = url.password\n this._searchParams = url.searchParams\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Can not parse ${value}`, error)\n }\n }\n\n get protocol(): string {\n return this._protocol\n }\n\n set protocol(value: string) {\n this._protocol = value\n this.updateHref()\n }\n\n get host(): string {\n return this._host\n }\n\n set host(value: string) {\n const [hostname, port] = value.split(':')\n\n const encodedHostname = this.encodeHostname(hostname)\n\n this._host = port ? `${encodedHostname}:${port}` : encodedHostname\n this._hostname = encodedHostname\n this._port = port || ''\n this.updateHref()\n }\n\n get hostname(): string {\n return this._hostname\n }\n\n set hostname(value: string) {\n const encodedHostname = this.encodeHostname(value)\n\n this._hostname = encodedHostname\n this._host = this._port ? `${encodedHostname}:${this._port}` : encodedHostname\n this.updateHref()\n }\n\n get port(): string {\n return this._port\n }\n\n set port(value: string) {\n this._port = value\n this._host = `${this._hostname}${value ? ':' + value : ''}`\n this.updateHref()\n }\n\n get pathname(): string {\n return this._pathname\n }\n\n set pathname(pathname: string) {\n const encodedPathname = pathname\n .split('/')\n .map((segment) => (isDynamicPath(segment) ? segment : encodeURI(segment)))\n .join('/')\n\n this._pathname = encodedPathname.startsWith('/') ? encodedPathname : `/${encodedPathname}`\n this.updateHref()\n }\n\n get search(): string {\n return this._search\n }\n\n set search(search: string) {\n this._search = search.startsWith('?') ? search : `?${search}`\n this._searchParams = new URLSearchParams(search)\n this.updateHref()\n }\n\n setSearchParams(_params: Record<string, string>): void {\n const searchParams = new URLSearchParams(_params)\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n appendSearchParams(_params: Record<string, string>): void {\n const searchParams = new URLSearchParams(this._searchParams)\n const dynamicRoutes = getDynamicPaths(this._pathname).map(extractPathKey)\n\n Object.keys(_params).forEach((key) => {\n if (dynamicRoutes.includes(key)) {\n this._pathname = refinePathnameWithQuery(this._pathname, {[key]: _params[key]})\n } else {\n searchParams.append(key, _params[key])\n }\n })\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n removeSearchParams(..._keys: string[]): void {\n const searchParams = new URLSearchParams(this._searchParams)\n\n _keys.forEach((key) => {\n searchParams.delete(key)\n })\n\n this._search = searchParams.toString() ? `?${searchParams.toString()}` : ''\n this._searchParams = searchParams\n this.updateHref()\n }\n\n get searchParams(): URLSearchParams {\n return new Proxy(this._searchParams, {\n get: (target, prop, receiver) => {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return (...args: unknown[]) => {\n const result = value.apply(target, args)\n this._search = this._searchParams.toString() ? `?${this._searchParams.toString()}` : ''\n this.updateHref()\n return result\n }\n }\n return value\n },\n })\n }\n\n get hash(): string {\n return this._hash\n }\n\n set hash(value: string) {\n this._hash = value.startsWith('#') ? value : `#${value}`\n this.updateHref()\n }\n\n get origin(): string {\n return this._origin\n }\n\n get username(): string {\n return this._username\n }\n\n set username(value: string) {\n this._username = value\n this.updateHref()\n }\n\n get password(): string {\n return this._password\n }\n\n set password(value: string) {\n this._password = value\n this.updateHref()\n }\n\n private updateHref() {\n if (this._baseUrl) {\n const baseUrl = new URL(this._baseUrl)\n baseUrl.pathname = this._pathname\n baseUrl.search = this._search\n baseUrl.hash = this._hash\n this._href = baseUrl.href\n this._origin = baseUrl.origin\n } else {\n this._href = `${this._protocol}${this._protocol && '//'}${this._username}${this._password ? ':' + this._password : ''}${\n this._username || this._password ? '@' : ''\n }${this._hostname}${this._port ? ':' + this._port : ''}${this._pathname === '/' ? '' : this._pathname}${this._search}${this._hash}`\n\n this._origin = `${this._protocol}//${this._hostname}${this._port ? ':' + this._port : ''}`\n }\n }\n\n toString(): string {\n return this.href\n }\n\n toJSON(): string {\n return this.href\n }\n\n private punycodePrefix = 'xn--'\n\n private encodeHostname(hostname: string): string {\n return hostname\n .split('.')\n .map((segment) => {\n for (const char of segment) {\n if (isASCIICodeChar(char)) {\n return `${this.punycodePrefix}${encode(segment)}`\n }\n }\n return segment\n })\n .join('.')\n }\n\n get decodedIDN(): string {\n let href = this._href\n\n this._hostname.split('.').forEach((segment) => {\n href = href.replace(segment, decode(segment.replace(this.punycodePrefix, '')))\n })\n\n return href\n }\n\n get decodedHostname(): string {\n return this._hostname\n .split('.')\n .map((segment) => decode(segment.replace(this.punycodePrefix, '')))\n .join('.')\n }\n}\n"],"names":["delimiter","errors","overflow","baseMinusTMin","base","floor","Math","stringFromCharCode","String","fromCharCode","error","type","RangeError","ucs2decode","string","output","counter","length","value","charCodeAt","extra","push","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","damp","tMax","skew","decode","input","inputLength","i","n","initialN","bias","initialBias","basic","lastIndexOf","j","index","oldi","w","maxInt","t","tMin","baseMinusT","out","splice","fromCodePoint","encode","inputArray","currentValue","basicLength","handledCPCount","m","handledCPCountPlusOne","q","qMinusT","join","DYNAMIC_PATH_COLON_REGEXP","DYNAMIC_PATH_BRACKETS_REGEXP","isDynamicPath","path","test","getDynamicPaths","pathname","split","filter","extractPathKey","slice","refinePathnameWithQuery","query","reduce","acc","pathKey","replace","refineQueryWithPathname","_","remainingQuery","MAX_ASCII_CODE","isASCIICodeChar","char","NURL","constructor","_href","_protocol","_host","_hostname","_port","_pathname","_search","_hash","_origin","_username","_password","_baseUrl","_searchParams","URLSearchParams","punycodePrefix","URL","href","toString","baseUrl","protocol","host","hostname","port","search","hash","username","password","refinedQuery","Object","keys","updateHref","create","canParse","startsWith","url","origin","console","warn","searchParams","encodedHostname","encodeHostname","encodedPathname","map","segment","encodeURI","setSearchParams","_params","appendSearchParams","dynamicRoutes","forEach","key","includes","append","removeSearchParams","_keys","delete","Proxy","get","target","prop","receiver","Reflect","args","result","apply","toJSON","decodedIDN","decodedHostname"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naverpay/nurl",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "URL build library",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.mjs",
@@ -31,10 +31,6 @@
31
31
  "url": "https://github.com/NaverPayDev/nurl.git"
32
32
  },
33
33
  "license": "MIT",
34
- "dependencies": {
35
- "@babel/runtime-corejs3": "^7.25.6",
36
- "npm-punycode": "npm:punycode@^2.3.1"
37
- },
38
34
  "devDependencies": {
39
35
  "@babel/plugin-transform-runtime": "^7.25.4",
40
36
  "@babel/preset-env": "^7.25.4",
@@ -46,7 +42,7 @@
46
42
  "@naverpay/markdown-lint": "^0.0.3",
47
43
  "@naverpay/prettier-config": "^1.0.0",
48
44
  "@rollup/plugin-babel": "^6.0.4",
49
- "@types/npm-punycode": "npm:@types/punycode@^2.1.4",
45
+ "babel-plugin-polyfill-corejs3": "^0.11.0",
50
46
  "browserslist-to-esbuild": "^2.1.1",
51
47
  "tsup": "^8.2.4",
52
48
  "typescript": "^5.5.4",