canada-api 5.0.1 → 5.1.1
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/README.md +100 -28
- package/dist/ca.js +1 -1
- package/package.json +46 -37
- package/src/children.js +54 -0
- package/src/content.js +21 -0
- package/src/index.js +25 -0
- package/src/{meta.mjs → meta.js} +105 -117
- package/src/{normalize.mjs → normalize.js} +38 -36
- package/src/request.js +37 -0
- package/src/children.mjs +0 -68
- package/src/content.mjs +0 -29
- package/src/index.mjs +0 -25
- package/src/request.mjs +0 -14
- /package/src/{config.mjs → config.js} +0 -0
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
([Français](#canada-api-fr))
|
|
2
|
+
|
|
1
3
|
# canada-api
|
|
2
4
|
|
|
3
5
|
[](https://www.npmjs.com/package/canada-api) [](https://github.com/dnd-mdn/canada-api/blob/main/LICENSE.md)
|
|
@@ -7,7 +9,7 @@ Cross platform API for fetching public data from [canada.ca](https://www.canada.
|
|
|
7
9
|
## Browser
|
|
8
10
|
|
|
9
11
|
```html
|
|
10
|
-
<script src="https://cdn.jsdelivr.net/npm/canada-api@5.0
|
|
12
|
+
<script src="https://cdn.jsdelivr.net/npm/canada-api@5.1.0"></script>
|
|
11
13
|
```
|
|
12
14
|
|
|
13
15
|
## Node 18+
|
|
@@ -32,7 +34,7 @@ npm test
|
|
|
32
34
|
|
|
33
35
|
Tests use the built-in Node.js test runner (`node:test`) and require Node 18 or later.
|
|
34
36
|
|
|
35
|
-
##
|
|
37
|
+
## API
|
|
36
38
|
|
|
37
39
|
### `ca.normalize(url)`
|
|
38
40
|
|
|
@@ -44,30 +46,10 @@ Validates and normalizes a canada.ca URL. Strips the `/content/canadasite` prefi
|
|
|
44
46
|
Throws {TypeError} if `url` is not a string or URL object.
|
|
45
47
|
Throws {Error} if the URL is not on canada.ca or the path does not start with `/en/` or `/fr/`.
|
|
46
48
|
|
|
47
|
-
### `ca.request(url)`
|
|
48
|
-
|
|
49
|
-
- `url` {string|URL} - Relative or absolute URL on [canada.ca](https://www.canada.ca)
|
|
50
|
-
- Returns: {Promise} Fulfills with an axios response object
|
|
51
|
-
|
|
52
|
-
Raw HTTP client for canada.ca. No URL transformation is applied.
|
|
53
|
-
|
|
54
|
-
```json
|
|
55
|
-
{
|
|
56
|
-
"data": {},
|
|
57
|
-
"status": 200,
|
|
58
|
-
"statusText": "OK",
|
|
59
|
-
"headers": {},
|
|
60
|
-
"config": {},
|
|
61
|
-
"request": {}
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## Basic API
|
|
66
|
-
|
|
67
49
|
### `ca.children(url)`
|
|
68
50
|
|
|
69
51
|
- `url` {string|URL} - Absolute or relative URL
|
|
70
|
-
- Returns: {Promise} Fulfills with
|
|
52
|
+
- Returns: {Promise} Fulfills with a response whose `data` is an array of sitemap entries
|
|
71
53
|
|
|
72
54
|
Fetches and parses the sitemap for the given page, returning its child pages. Entries without a `<loc>` element are skipped.
|
|
73
55
|
|
|
@@ -78,27 +60,29 @@ Fetches and parses the sitemap for the given page, returning its child pages. En
|
|
|
78
60
|
"path": "/en/department-national-defence/maple-leaf",
|
|
79
61
|
"lastmod": "2022-09-20T00:00:00.000Z"
|
|
80
62
|
}
|
|
81
|
-
]
|
|
63
|
+
],
|
|
64
|
+
"status": 200
|
|
82
65
|
}
|
|
83
66
|
```
|
|
84
67
|
|
|
85
68
|
### `ca.content(url)`
|
|
86
69
|
|
|
87
70
|
- `url` {string|URL} - Absolute or relative URL
|
|
88
|
-
- Returns: {Promise} Fulfills with
|
|
71
|
+
- Returns: {Promise} Fulfills with a response whose `data` is the raw HTML string
|
|
89
72
|
|
|
90
73
|
Retrieves the HTML content of the page.
|
|
91
74
|
|
|
92
75
|
```json
|
|
93
76
|
{
|
|
94
|
-
"data": "<!DOCTYPE html>\r\n...."
|
|
77
|
+
"data": "<!DOCTYPE html>\r\n....",
|
|
78
|
+
"status": 200
|
|
95
79
|
}
|
|
96
80
|
```
|
|
97
81
|
|
|
98
82
|
### `ca.meta(url)`
|
|
99
83
|
|
|
100
84
|
- `url` {string|URL} - Absolute or relative URL
|
|
101
|
-
- Returns: {Promise} Fulfills with
|
|
85
|
+
- Returns: {Promise} Fulfills with a response whose `data` is a formatted metadata object
|
|
102
86
|
|
|
103
87
|
Fetches JCR metadata for the given page. The following transformations are applied:
|
|
104
88
|
|
|
@@ -115,6 +99,94 @@ Fetches JCR metadata for the given page. The following transformations are appli
|
|
|
115
99
|
"cq:lastModified": "2022-10-25T19:16:28.000Z",
|
|
116
100
|
"fluidWidth": false,
|
|
117
101
|
"peer": "/fr/ministere-defense-nationale/feuille-erable"
|
|
118
|
-
}
|
|
102
|
+
},
|
|
103
|
+
"status": 200
|
|
119
104
|
}
|
|
120
105
|
```
|
|
106
|
+
|
|
107
|
+
### `ca.request`
|
|
108
|
+
|
|
109
|
+
Raw HTTP client with `https://www.canada.ca` as the base URL. Use this for any requests not covered by the methods above. No URL transformation is applied.
|
|
110
|
+
|
|
111
|
+
```js
|
|
112
|
+
const response = await ca.request('/en/sr/srb/srvs/t-srvc-eng.html');
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
([English](#canada-api))
|
|
118
|
+
|
|
119
|
+
<a name="canada-api-fr"></a>
|
|
120
|
+
# canada-api
|
|
121
|
+
|
|
122
|
+
[](https://www.npmjs.com/package/canada-api) [](https://github.com/dnd-mdn/canada-api/blob/main/LICENSE.md)
|
|
123
|
+
|
|
124
|
+
API multiplateforme pour récupérer des données publiques de [canada.ca](https://www.canada.ca).
|
|
125
|
+
|
|
126
|
+
## Navigateur
|
|
127
|
+
|
|
128
|
+
```html
|
|
129
|
+
<script src="https://cdn.jsdelivr.net/npm/canada-api@5.1.0"></script>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Node 18+
|
|
133
|
+
|
|
134
|
+
### Installation
|
|
135
|
+
|
|
136
|
+
```shell
|
|
137
|
+
npm install canada-api
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Utilisation
|
|
141
|
+
|
|
142
|
+
```js
|
|
143
|
+
import ca from 'canada-api'
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## API
|
|
147
|
+
|
|
148
|
+
### `ca.normalize(url)`
|
|
149
|
+
|
|
150
|
+
- `url` {string|URL} - URL complète ou chemin relatif (p. ex. `'/fr/page'` ou `'https://www.canada.ca/fr/page'`)
|
|
151
|
+
- Retourne: {URL} Objet URL normalisé avec un chemin nettoyé
|
|
152
|
+
|
|
153
|
+
Valide et normalise une URL de canada.ca. Supprime le préfixe `/content/canadasite`, les extensions de fichier et les barres obliques finales.
|
|
154
|
+
|
|
155
|
+
Lève {TypeError} si `url` n'est pas une chaîne ou un objet URL.
|
|
156
|
+
Lève {Error} si l'URL n'est pas sur canada.ca ou si le chemin ne commence pas par `/en/` ou `/fr/`.
|
|
157
|
+
|
|
158
|
+
### `ca.children(url)`
|
|
159
|
+
|
|
160
|
+
- `url` {string|URL} - URL absolue ou relative
|
|
161
|
+
- Retourne: {Promise} Résout avec une réponse dont `data` est un tableau d'entrées du plan de site
|
|
162
|
+
|
|
163
|
+
Récupère et analyse le plan de site de la page donnée, retournant ses pages enfants. Les entrées sans élément `<loc>` sont ignorées.
|
|
164
|
+
|
|
165
|
+
### `ca.content(url)`
|
|
166
|
+
|
|
167
|
+
- `url` {string|URL} - URL absolue ou relative
|
|
168
|
+
- Retourne: {Promise} Résout avec une réponse dont `data` est la chaîne HTML brute
|
|
169
|
+
|
|
170
|
+
Récupère le contenu HTML de la page.
|
|
171
|
+
|
|
172
|
+
### `ca.meta(url)`
|
|
173
|
+
|
|
174
|
+
- `url` {string|URL} - URL absolue ou relative
|
|
175
|
+
- Retourne: {Promise} Résout avec une réponse dont `data` est un objet de métadonnées formaté
|
|
176
|
+
|
|
177
|
+
Récupère les métadonnées JCR de la page donnée. Les transformations suivantes sont appliquées :
|
|
178
|
+
|
|
179
|
+
- Les valeurs `"true"` / `"false"` sont converties en booléens
|
|
180
|
+
- Les propriétés `@TypeHint` sont supprimées
|
|
181
|
+
- Les tableaux vides sont supprimés
|
|
182
|
+
- Les chaînes de date sont converties en ISO 8601
|
|
183
|
+
- Les clés sont triées alphabétiquement
|
|
184
|
+
- Un champ `peer` normalisé est ajouté lorsque `gcAltLanguagePeer` est présent
|
|
185
|
+
|
|
186
|
+
### `ca.request`
|
|
187
|
+
|
|
188
|
+
Client HTTP brut avec `https://www.canada.ca` comme URL de base. Utilisez-le pour toute requête non couverte par les méthodes ci-dessus. Aucune transformation d'URL n'est appliquée.
|
|
189
|
+
|
|
190
|
+
```js
|
|
191
|
+
const response = await ca.request.get('/fr/sr/srb/srvs/t-srvc-fra.html');
|
|
192
|
+
```
|
package/dist/ca.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("ca",[],e):"object"==typeof exports?exports.ca=e():t.ca=e()}(Object("undefined"!=typeof self?self:this),()=>(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.r(e),t.d(e,{default:()=>or});var n={};t.r(n),t.d(n,{hasBrowserEnv:()=>ft,hasStandardBrowserEnv:()=>mt,hasStandardBrowserWebWorkerEnv:()=>bt,navigator:()=>gt,origin:()=>yt});const r="https://www.canada.ca",s=t=>{if("string"==typeof t)t=new URL(t,r);else if(!(t instanceof URL))throw new TypeError("string or URL object expected");if(t.origin!==r)throw new Error("URL must start with "+r);if(t.pathname=t.pathname.replace(/^\/content\/canadasite/,""),t.pathname=t.pathname.replace(/\.[^/]*$/,"").replace(/\/+$/,""),!t.pathname.startsWith("/en/")&&!t.pathname.startsWith("/fr/"))throw new Error(`Invalid path: "${t.pathname}" must start with /en/ or /fr/`);return t};function i(t,e){return function(){return t.apply(e,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:a}=Object,{iterator:l,toStringTag:c}=Symbol,u=(h=Object.create(null),t=>{const e=o.call(t);return h[e]||(h[e]=e.slice(8,-1).toLowerCase())});var h;const d=t=>(t=t.toLowerCase(),e=>u(e)===t),p=t=>e=>typeof e===t,{isArray:f}=Array,g=p("undefined");function m(t){return null!==t&&!g(t)&&null!==t.constructor&&!g(t.constructor)&&x(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}const b=d("ArrayBuffer"),y=p("string"),x=p("function"),E=p("number"),w=t=>null!==t&&"object"==typeof t,v=t=>{if("object"!==u(t))return!1;const e=a(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||c in t||l in t)},S=d("Date"),_=d("File"),N=d("Blob"),T=d("FileList"),O="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:{},A=void 0!==O.FormData?O.FormData:void 0,R=d("URLSearchParams"),[C,P,D,j]=["ReadableStream","Request","Response","Headers"].map(d);function I(t,e,{allOwnKeys:n=!1}={}){if(null==t)return;let r,s;if("object"!=typeof t&&(t=[t]),f(t))for(r=0,s=t.length;r<s;r++)e.call(null,t[r],r,t);else{if(m(t))return;const s=n?Object.getOwnPropertyNames(t):Object.keys(t),i=s.length;let o;for(r=0;r<i;r++)o=s[r],e.call(null,t[o],o,t)}}function L(t,e){if(m(t))return null;e=e.toLowerCase();const n=Object.keys(t);let r,s=n.length;for(;s-- >0;)if(r=n[s],e===r.toLowerCase())return r;return null}const U="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:t.g,k=t=>!g(t)&&t!==U,F=(B="undefined"!=typeof Uint8Array&&a(Uint8Array),t=>B&&t instanceof B);var B;const M=d("HTMLFormElement"),$=(({hasOwnProperty:t})=>(e,n)=>t.call(e,n))(Object.prototype),q=d("RegExp"),V=(t,e)=>{const n=Object.getOwnPropertyDescriptors(t),r={};I(n,(n,s)=>{let i;!1!==(i=e(n,s,t))&&(r[s]=i||n)}),Object.defineProperties(t,r)},W=d("AsyncFunction"),z=(J="function"==typeof setImmediate,H=x(U.postMessage),J?setImmediate:H?(K=`axios@${Math.random()}`,X=[],U.addEventListener("message",({source:t,data:e})=>{t===U&&e===K&&X.length&&X.shift()()},!1),t=>{X.push(t),U.postMessage(K,"*")}):t=>setTimeout(t));var J,H,K,X;const Y="undefined"!=typeof queueMicrotask?queueMicrotask.bind(U):"undefined"!=typeof process&&process.nextTick||z,G={isArray:f,isArrayBuffer:b,isBuffer:m,isFormData:t=>{let e;return t&&(A&&t instanceof A||x(t.append)&&("formdata"===(e=u(t))||"object"===e&&x(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){let e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&b(t.buffer),e},isString:y,isNumber:E,isBoolean:t=>!0===t||!1===t,isObject:w,isPlainObject:v,isEmptyObject:t=>{if(!w(t)||m(t))return!1;try{return 0===Object.keys(t).length&&Object.getPrototypeOf(t)===Object.prototype}catch(t){return!1}},isReadableStream:C,isRequest:P,isResponse:D,isHeaders:j,isUndefined:g,isDate:S,isFile:_,isReactNativeBlob:t=>!(!t||void 0===t.uri),isReactNative:t=>t&&void 0!==t.getParts,isBlob:N,isRegExp:q,isFunction:x,isStream:t=>w(t)&&x(t.pipe),isURLSearchParams:R,isTypedArray:F,isFileList:T,forEach:I,merge:function t(){const{caseless:e,skipUndefined:n}=k(this)&&this||{},r={},s=(s,i)=>{if("__proto__"===i||"constructor"===i||"prototype"===i)return;const o=e&&L(r,i)||i;v(r[o])&&v(s)?r[o]=t(r[o],s):v(s)?r[o]=t({},s):f(s)?r[o]=s.slice():n&&g(s)||(r[o]=s)};for(let t=0,e=arguments.length;t<e;t++)arguments[t]&&I(arguments[t],s);return r},extend:(t,e,n,{allOwnKeys:r}={})=>(I(e,(e,r)=>{n&&x(e)?Object.defineProperty(t,r,{value:i(e,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(t,r,{value:e,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),t),trim:t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:t=>(65279===t.charCodeAt(0)&&(t=t.slice(1)),t),inherits:(t,e,n,r)=>{t.prototype=Object.create(e.prototype,r),Object.defineProperty(t.prototype,"constructor",{value:t,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},toFlatObject:(t,e,n,r)=>{let s,i,o;const l={};if(e=e||{},null==t)return e;do{for(s=Object.getOwnPropertyNames(t),i=s.length;i-- >0;)o=s[i],r&&!r(o,t,e)||l[o]||(e[o]=t[o],l[o]=!0);t=!1!==n&&a(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:u,kindOfTest:d,endsWith:(t,e,n)=>{t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;const r=t.indexOf(e,n);return-1!==r&&r===n},toArray:t=>{if(!t)return null;if(f(t))return t;let e=t.length;if(!E(e))return null;const n=new Array(e);for(;e-- >0;)n[e]=t[e];return n},forEachEntry:(t,e)=>{const n=(t&&t[l]).call(t);let r;for(;(r=n.next())&&!r.done;){const n=r.value;e.call(t,n[0],n[1])}},matchAll:(t,e)=>{let n;const r=[];for(;null!==(n=t.exec(e));)r.push(n);return r},isHTMLForm:M,hasOwnProperty:$,hasOwnProp:$,reduceDescriptors:V,freezeMethods:t=>{V(t,(e,n)=>{if(x(t)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=t[n];x(r)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(t,e)=>{const n={},r=t=>{t.forEach(t=>{n[t]=!0})};return f(t)?r(t):r(String(t).split(e)),n},toCamelCase:t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,e,n){return e.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(t,e)=>null!=t&&Number.isFinite(t=+t)?t:e,findKey:L,global:U,isContextDefined:k,isSpecCompliantForm:function(t){return!!(t&&x(t.append)&&"FormData"===t[c]&&t[l])},toJSONObject:t=>{const e=new Array(10),n=(t,r)=>{if(w(t)){if(e.indexOf(t)>=0)return;if(m(t))return t;if(!("toJSON"in t)){e[r]=t;const s=f(t)?[]:{};return I(t,(t,e)=>{const i=n(t,r+1);!g(i)&&(s[e]=i)}),e[r]=void 0,s}}return t};return n(t,0)},isAsyncFn:W,isThenable:t=>t&&(w(t)||x(t))&&x(t.then)&&x(t.catch),setImmediate:z,asap:Y,isIterable:t=>null!=t&&x(t[l])};class Z extends Error{static from(t,e,n,r,s,i){const o=new Z(t.message,e||t.code,n,r,s);return o.cause=t,o.name=t.name,null!=t.status&&null==o.status&&(o.status=t.status),i&&Object.assign(o,i),o}constructor(t,e,n,r,s){super(t),Object.defineProperty(this,"message",{value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),s&&(this.response=s,this.status=s.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:G.toJSONObject(this.config),code:this.code,status:this.status}}}Z.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",Z.ERR_BAD_OPTION="ERR_BAD_OPTION",Z.ECONNABORTED="ECONNABORTED",Z.ETIMEDOUT="ETIMEDOUT",Z.ERR_NETWORK="ERR_NETWORK",Z.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",Z.ERR_DEPRECATED="ERR_DEPRECATED",Z.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",Z.ERR_BAD_REQUEST="ERR_BAD_REQUEST",Z.ERR_CANCELED="ERR_CANCELED",Z.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",Z.ERR_INVALID_URL="ERR_INVALID_URL";const Q=Z;function tt(t){return G.isPlainObject(t)||G.isArray(t)}function et(t){return G.endsWith(t,"[]")?t.slice(0,-2):t}function nt(t,e,n){return t?t.concat(e).map(function(t,e){return t=et(t),!n&&e?"["+t+"]":t}).join(n?".":""):e}const rt=G.toFlatObject(G,{},null,function(t){return/^is[A-Z]/.test(t)}),st=function(t,e,n){if(!G.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;const r=(n=G.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(t,e){return!G.isUndefined(e[t])})).metaTokens,s=n.visitor||c,i=n.dots,o=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&G.isSpecCompliantForm(e);if(!G.isFunction(s))throw new TypeError("visitor must be a function");function l(t){if(null===t)return"";if(G.isDate(t))return t.toISOString();if(G.isBoolean(t))return t.toString();if(!a&&G.isBlob(t))throw new Q("Blob is not supported. Use a Buffer instead.");return G.isArrayBuffer(t)||G.isTypedArray(t)?a&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,n,s){let a=t;if(G.isReactNative(e)&&G.isReactNativeBlob(t))return e.append(nt(s,n,i),l(t)),!1;if(t&&!s&&"object"==typeof t)if(G.endsWith(n,"{}"))n=r?n:n.slice(0,-2),t=JSON.stringify(t);else if(G.isArray(t)&&function(t){return G.isArray(t)&&!t.some(tt)}(t)||(G.isFileList(t)||G.endsWith(n,"[]"))&&(a=G.toArray(t)))return n=et(n),a.forEach(function(t,r){!G.isUndefined(t)&&null!==t&&e.append(!0===o?nt([n],r,i):null===o?n:n+"[]",l(t))}),!1;return!!tt(t)||(e.append(nt(s,n,i),l(t)),!1)}const u=[],h=Object.assign(rt,{defaultVisitor:c,convertValue:l,isVisitable:tt});if(!G.isObject(t))throw new TypeError("data must be an object");return function t(n,r){if(!G.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),G.forEach(n,function(n,i){!0===(!(G.isUndefined(n)||null===n)&&s.call(e,n,G.isString(i)?i.trim():i,r,h))&&t(n,r?r.concat(i):[i])}),u.pop()}}(t),e};function it(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(t){return e[t]})}function ot(t,e){this._pairs=[],t&&st(t,this,e)}const at=ot.prototype;at.append=function(t,e){this._pairs.push([t,e])},at.toString=function(t){const e=t?function(e){return t.call(this,e,it)}:it;return this._pairs.map(function(t){return e(t[0])+"="+e(t[1])},"").join("&")};const lt=ot;function ct(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function ut(t,e,n){if(!e)return t;const r=n&&n.encode||ct,s=G.isFunction(n)?{serialize:n}:n,i=s&&s.serialize;let o;if(o=i?i(e,s):G.isURLSearchParams(e)?e.toString():new lt(e,s).toString(r),o){const e=t.indexOf("#");-1!==e&&(t=t.slice(0,e)),t+=(-1===t.indexOf("?")?"?":"&")+o}return t}const ht=class{constructor(){this.handlers=[]}use(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){G.forEach(this.handlers,function(e){null!==e&&t(e)})}},dt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},pt={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:lt,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},ft="undefined"!=typeof window&&"undefined"!=typeof document,gt="object"==typeof navigator&&navigator||void 0,mt=ft&&(!gt||["ReactNative","NativeScript","NS"].indexOf(gt.product)<0),bt="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,yt=ft&&window.location.href||"http://localhost",xt={...n,...pt},Et=function(t){function e(t,n,r,s){let i=t[s++];if("__proto__"===i)return!0;const o=Number.isFinite(+i),a=s>=t.length;return i=!i&&G.isArray(r)?r.length:i,a?(G.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!o):(r[i]&&G.isObject(r[i])||(r[i]=[]),e(t,n,r[i],s)&&G.isArray(r[i])&&(r[i]=function(t){const e={},n=Object.keys(t);let r;const s=n.length;let i;for(r=0;r<s;r++)i=n[r],e[i]=t[i];return e}(r[i])),!o)}if(G.isFormData(t)&&G.isFunction(t.entries)){const n={};return G.forEachEntry(t,(t,r)=>{e(function(t){return G.matchAll(/\w+|\[(\w*)]/g,t).map(t=>"[]"===t[0]?"":t[1]||t[0])}(t),r,n,0)}),n}return null},wt={transitional:dt,adapter:["xhr","http","fetch"],transformRequest:[function(t,e){const n=e.getContentType()||"",r=n.indexOf("application/json")>-1,s=G.isObject(t);if(s&&G.isHTMLForm(t)&&(t=new FormData(t)),G.isFormData(t))return r?JSON.stringify(Et(t)):t;if(G.isArrayBuffer(t)||G.isBuffer(t)||G.isStream(t)||G.isFile(t)||G.isBlob(t)||G.isReadableStream(t))return t;if(G.isArrayBufferView(t))return t.buffer;if(G.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(s){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return st(t,new xt.classes.URLSearchParams,{visitor:function(t,e,n,r){return xt.isNode&&G.isBuffer(t)?(this.append(e,t.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...e})}(t,this.formSerializer).toString();if((i=G.isFileList(t))||n.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return st(i?{"files[]":t}:t,e&&new e,this.formSerializer)}}return s||r?(e.setContentType("application/json",!1),function(t){if(G.isString(t))try{return(0,JSON.parse)(t),G.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){const e=this.transitional||wt.transitional,n=e&&e.forcedJSONParsing,r="json"===this.responseType;if(G.isResponse(t)||G.isReadableStream(t))return t;if(t&&G.isString(t)&&(n&&!this.responseType||r)){const n=!(e&&e.silentJSONParsing)&&r;try{return JSON.parse(t,this.parseReviver)}catch(t){if(n){if("SyntaxError"===t.name)throw Q.from(t,Q.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:xt.classes.FormData,Blob:xt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};G.forEach(["delete","get","head","post","put","patch"],t=>{wt.headers[t]={}});const vt=wt,St=G.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),_t=t=>{const e={};let n,r,s;return t&&t.split("\n").forEach(function(t){s=t.indexOf(":"),n=t.substring(0,s).trim().toLowerCase(),r=t.substring(s+1).trim(),!n||e[n]&&St[n]||("set-cookie"===n?e[n]?e[n].push(r):e[n]=[r]:e[n]=e[n]?e[n]+", "+r:r)}),e};(Object.getOwnPropertyDescriptor(_t,"name")||{}).writable||Object.defineProperty(_t,"name",{value:"default",configurable:!0});const Nt=Symbol("internals");function Tt(t,e){if(!1!==t&&null!=t)if(G.isArray(t))t.forEach(t=>Tt(t,e));else if(!(t=>!/[\r\n]/.test(t))(String(t)))throw new Error(`Invalid character in header content ["${e}"]`)}function Ot(t){return t&&String(t).trim().toLowerCase()}function At(t){return!1===t||null==t?t:G.isArray(t)?t.map(At):function(t){let e=t.length;for(;e>0;){const n=t.charCodeAt(e-1);if(10!==n&&13!==n)break;e-=1}return e===t.length?t:t.slice(0,e)}(String(t))}function Rt(t,e,n,r,s){return G.isFunction(r)?r.call(this,e,n):(s&&(e=n),G.isString(e)?G.isString(r)?-1!==e.indexOf(r):G.isRegExp(r)?r.test(e):void 0:void 0)}class Ct{constructor(t){t&&this.set(t)}set(t,e,n){const r=this;function s(t,e,n){const s=Ot(e);if(!s)throw new Error("header name must be a non-empty string");const i=G.findKey(r,s);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(Tt(t,e),r[i||e]=At(t))}const i=(t,e)=>G.forEach(t,(t,n)=>s(t,n,e));if(G.isPlainObject(t)||t instanceof this.constructor)i(t,e);else if(G.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))i(_t(t),e);else if(G.isObject(t)&&G.isIterable(t)){let n,r,s={};for(const e of t){if(!G.isArray(e))throw TypeError("Object iterator must return a key-value pair");s[r=e[0]]=(n=s[r])?G.isArray(n)?[...n,e[1]]:[n,e[1]]:e[1]}i(s,e)}else null!=t&&s(e,t,n);return this}get(t,e){if(t=Ot(t)){const n=G.findKey(this,t);if(n){const t=this[n];if(!e)return t;if(!0===e)return function(t){const e=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(t);)e[r[1]]=r[2];return e}(t);if(G.isFunction(e))return e.call(this,t,n);if(G.isRegExp(e))return e.exec(t);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,e){if(t=Ot(t)){const n=G.findKey(this,t);return!(!n||void 0===this[n]||e&&!Rt(0,this[n],n,e))}return!1}delete(t,e){const n=this;let r=!1;function s(t){if(t=Ot(t)){const s=G.findKey(n,t);!s||e&&!Rt(0,n[s],s,e)||(delete n[s],r=!0)}}return G.isArray(t)?t.forEach(s):s(t),r}clear(t){const e=Object.keys(this);let n=e.length,r=!1;for(;n--;){const s=e[n];t&&!Rt(0,this[s],s,t,!0)||(delete this[s],r=!0)}return r}normalize(t){const e=this,n={};return G.forEach(this,(r,s)=>{const i=G.findKey(n,s);if(i)return e[i]=At(r),void delete e[s];const o=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,e,n)=>e.toUpperCase()+n)}(s):String(s).trim();o!==s&&delete e[s],e[o]=At(r),n[o]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const e=Object.create(null);return G.forEach(this,(n,r)=>{null!=n&&!1!==n&&(e[r]=t&&G.isArray(n)?n.join(", "):n)}),e}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,e])=>t+": "+e).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...e){const n=new this(t);return e.forEach(t=>n.set(t)),n}static accessor(t){const e=(this[Nt]=this[Nt]={accessors:{}}).accessors,n=this.prototype;function r(t){const r=Ot(t);e[r]||(function(t,e){const n=G.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(t,r+n,{value:function(t,n,s){return this[r].call(this,e,t,n,s)},configurable:!0})})}(n,t),e[r]=!0)}return G.isArray(t)?t.forEach(r):r(t),this}}Ct.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),G.reduceDescriptors(Ct.prototype,({value:t},e)=>{let n=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(t){this[n]=t}}}),G.freezeMethods(Ct);const Pt=Ct;function Dt(t,e){const n=this||vt,r=e||n,s=Pt.from(r.headers);let i=r.data;return G.forEach(t,function(t){i=t.call(n,i,s.normalize(),e?e.status:void 0)}),s.normalize(),i}function jt(t){return!(!t||!t.__CANCEL__)}const It=class extends Q{constructor(t,e,n){super(null==t?"canceled":t,Q.ERR_CANCELED,e,n),this.name="CanceledError",this.__CANCEL__=!0}};function Lt(t,e,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(new Q("Request failed with status code "+n.status,[Q.ERR_BAD_REQUEST,Q.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):t(n)}const Ut=(t,e,n=3)=>{let r=0;const s=function(t,e){t=t||10;const n=new Array(t),r=new Array(t);let s,i=0,o=0;return e=void 0!==e?e:1e3,function(a){const l=Date.now(),c=r[o];s||(s=l),n[i]=a,r[i]=l;let u=o,h=0;for(;u!==i;)h+=n[u++],u%=t;if(i=(i+1)%t,i===o&&(o=(o+1)%t),l-s<e)return;const d=c&&l-c;return d?Math.round(1e3*h/d):void 0}}(50,250);return function(t,e){let n,r,s=0,i=1e3/e;const o=(e,i=Date.now())=>{s=i,n=null,r&&(clearTimeout(r),r=null),t(...e)};return[(...t)=>{const e=Date.now(),a=e-s;a>=i?o(t,e):(n=t,r||(r=setTimeout(()=>{r=null,o(n)},i-a)))},()=>n&&o(n)]}(n=>{const i=n.loaded,o=n.lengthComputable?n.total:void 0,a=i-r,l=s(a);r=i,t({loaded:i,total:o,progress:o?i/o:void 0,bytes:a,rate:l||void 0,estimated:l&&o&&i<=o?(o-i)/l:void 0,event:n,lengthComputable:null!=o,[e?"download":"upload"]:!0})},n)},kt=(t,e)=>{const n=null!=t;return[r=>e[0]({lengthComputable:n,total:t,loaded:r}),e[1]]},Ft=t=>(...e)=>G.asap(()=>t(...e)),Bt=xt.hasStandardBrowserEnv?((t,e)=>n=>(n=new URL(n,xt.origin),t.protocol===n.protocol&&t.host===n.host&&(e||t.port===n.port)))(new URL(xt.origin),xt.navigator&&/(msie|trident)/i.test(xt.navigator.userAgent)):()=>!0,Mt=xt.hasStandardBrowserEnv?{write(t,e,n,r,s,i,o){if("undefined"==typeof document)return;const a=[`${t}=${encodeURIComponent(e)}`];G.isNumber(n)&&a.push(`expires=${new Date(n).toUTCString()}`),G.isString(r)&&a.push(`path=${r}`),G.isString(s)&&a.push(`domain=${s}`),!0===i&&a.push("secure"),G.isString(o)&&a.push(`SameSite=${o}`),document.cookie=a.join("; ")},read(t){if("undefined"==typeof document)return null;const e=document.cookie.match(new RegExp("(?:^|; )"+t+"=([^;]*)"));return e?decodeURIComponent(e[1]):null},remove(t){this.write(t,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function $t(t,e,n){let r=!("string"==typeof(s=e)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(s));var s;return t&&(r||0==n)?function(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}const qt=t=>t instanceof Pt?{...t}:t;function Vt(t,e){e=e||{};const n={};function r(t,e,n,r){return G.isPlainObject(t)&&G.isPlainObject(e)?G.merge.call({caseless:r},t,e):G.isPlainObject(e)?G.merge({},e):G.isArray(e)?e.slice():e}function s(t,e,n,s){return G.isUndefined(e)?G.isUndefined(t)?void 0:r(void 0,t,0,s):r(t,e,0,s)}function i(t,e){if(!G.isUndefined(e))return r(void 0,e)}function o(t,e){return G.isUndefined(e)?G.isUndefined(t)?void 0:r(void 0,t):r(void 0,e)}function a(n,s,i){return i in e?r(n,s):i in t?r(void 0,n):void 0}const l={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:a,headers:(t,e,n)=>s(qt(t),qt(e),0,!0)};return G.forEach(Object.keys({...t,...e}),function(r){if("__proto__"===r||"constructor"===r||"prototype"===r)return;const i=G.hasOwnProp(l,r)?l[r]:s,o=i(t[r],e[r],r);G.isUndefined(o)&&i!==a||(n[r]=o)}),n}const Wt=t=>{const e=Vt({},t);let{data:n,withXSRFToken:r,xsrfHeaderName:s,xsrfCookieName:i,headers:o,auth:a}=e;if(e.headers=o=Pt.from(o),e.url=ut($t(e.baseURL,e.url,e.allowAbsoluteUrls),t.params,t.paramsSerializer),a&&o.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):""))),G.isFormData(n))if(xt.hasStandardBrowserEnv||xt.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(G.isFunction(n.getHeaders)){const t=n.getHeaders(),e=["content-type","content-length"];Object.entries(t).forEach(([t,n])=>{e.includes(t.toLowerCase())&&o.set(t,n)})}if(xt.hasStandardBrowserEnv&&(r&&G.isFunction(r)&&(r=r(e)),r||!1!==r&&Bt(e.url))){const t=s&&i&&Mt.read(i);t&&o.set(s,t)}return e};(Object.getOwnPropertyDescriptor(Wt,"name")||{}).writable||Object.defineProperty(Wt,"name",{value:"default",configurable:!0});const zt="undefined"!=typeof XMLHttpRequest&&function(t){return new Promise(function(e,n){const r=Wt(t);let s=r.data;const i=Pt.from(r.headers).normalize();let o,a,l,c,u,{responseType:h,onUploadProgress:d,onDownloadProgress:p}=r;function f(){c&&c(),u&&u(),r.cancelToken&&r.cancelToken.unsubscribe(o),r.signal&&r.signal.removeEventListener("abort",o)}let g=new XMLHttpRequest;function m(){if(!g)return;const r=Pt.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());Lt(function(t){e(t),f()},function(t){n(t),f()},{data:h&&"text"!==h&&"json"!==h?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:r,config:t,request:g}),g=null}g.open(r.method.toUpperCase(),r.url,!0),g.timeout=r.timeout,"onloadend"in g?g.onloadend=m:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(m)},g.onabort=function(){g&&(n(new Q("Request aborted",Q.ECONNABORTED,t,g)),g=null)},g.onerror=function(e){const r=e&&e.message?e.message:"Network Error",s=new Q(r,Q.ERR_NETWORK,t,g);s.event=e||null,n(s),g=null},g.ontimeout=function(){let e=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const s=r.transitional||dt;r.timeoutErrorMessage&&(e=r.timeoutErrorMessage),n(new Q(e,s.clarifyTimeoutError?Q.ETIMEDOUT:Q.ECONNABORTED,t,g)),g=null},void 0===s&&i.setContentType(null),"setRequestHeader"in g&&G.forEach(i.toJSON(),function(t,e){g.setRequestHeader(e,t)}),G.isUndefined(r.withCredentials)||(g.withCredentials=!!r.withCredentials),h&&"json"!==h&&(g.responseType=r.responseType),p&&([l,u]=Ut(p,!0),g.addEventListener("progress",l)),d&&g.upload&&([a,c]=Ut(d),g.upload.addEventListener("progress",a),g.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(o=e=>{g&&(n(!e||e.type?new It(null,t,g):e),g.abort(),g=null)},r.cancelToken&&r.cancelToken.subscribe(o),r.signal&&(r.signal.aborted?o():r.signal.addEventListener("abort",o)));const b=function(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}(r.url);b&&-1===xt.protocols.indexOf(b)?n(new Q("Unsupported protocol "+b+":",Q.ERR_BAD_REQUEST,t)):g.send(s||null)})},Jt=(t,e)=>{const{length:n}=t=t?t.filter(Boolean):[];if(e||n){let n,r=new AbortController;const s=function(t){if(!n){n=!0,o();const e=t instanceof Error?t:this.reason;r.abort(e instanceof Q?e:new It(e instanceof Error?e.message:e))}};let i=e&&setTimeout(()=>{i=null,s(new Q(`timeout of ${e}ms exceeded`,Q.ETIMEDOUT))},e);const o=()=>{t&&(i&&clearTimeout(i),i=null,t.forEach(t=>{t.unsubscribe?t.unsubscribe(s):t.removeEventListener("abort",s)}),t=null)};t.forEach(t=>t.addEventListener("abort",s));const{signal:a}=r;return a.unsubscribe=()=>G.asap(o),a}},Ht=function*(t,e){let n=t.byteLength;if(!e||n<e)return void(yield t);let r,s=0;for(;s<n;)r=s+e,yield t.slice(s,r),s=r},Kt=(t,e,n,r)=>{const s=async function*(t,e){for await(const n of async function*(t){if(t[Symbol.asyncIterator])return void(yield*t);const e=t.getReader();try{for(;;){const{done:t,value:n}=await e.read();if(t)break;yield n}}finally{await e.cancel()}}(t))yield*Ht(n,e)}(t,e);let i,o=0,a=t=>{i||(i=!0,r&&r(t))};return new ReadableStream({async pull(t){try{const{done:e,value:r}=await s.next();if(e)return a(),void t.close();let i=r.byteLength;if(n){let t=o+=i;n(t)}t.enqueue(new Uint8Array(r))}catch(t){throw a(t),t}},cancel:t=>(a(t),s.return())},{highWaterMark:2})},{isFunction:Xt}=G,Yt=(({Request:t,Response:e})=>({Request:t,Response:e}))(G.global),{ReadableStream:Gt,TextEncoder:Zt}=G.global,Qt=(t,...e)=>{try{return!!t(...e)}catch(t){return!1}},te=t=>{t=G.merge.call({skipUndefined:!0},Yt,t);const{fetch:e,Request:n,Response:r}=t,s=e?Xt(e):"function"==typeof fetch,i=Xt(n),o=Xt(r);if(!s)return!1;const a=s&&Xt(Gt),l=s&&("function"==typeof Zt?(c=new Zt,t=>c.encode(t)):async t=>new Uint8Array(await new n(t).arrayBuffer()));var c;const u=i&&a&&Qt(()=>{let t=!1;const e=new Gt,r=new n(xt.origin,{body:e,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type");return e.cancel(),t&&!r}),h=o&&a&&Qt(()=>G.isReadableStream(new r("").body)),d={stream:h&&(t=>t.body)};s&&["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!d[t]&&(d[t]=(e,n)=>{let r=e&&e[t];if(r)return r.call(e);throw new Q(`Response type '${t}' is not supported`,Q.ERR_NOT_SUPPORT,n)})});return async t=>{let{url:s,method:o,data:a,signal:c,cancelToken:p,timeout:f,onDownloadProgress:g,onUploadProgress:m,responseType:b,headers:y,withCredentials:x="same-origin",fetchOptions:E}=Wt(t),w=e||fetch;b=b?(b+"").toLowerCase():"text";let v=Jt([c,p&&p.toAbortSignal()],f),S=null;const _=v&&v.unsubscribe&&(()=>{v.unsubscribe()});let N;try{if(m&&u&&"get"!==o&&"head"!==o&&0!==(N=await(async(t,e)=>{const r=G.toFiniteNumber(t.getContentLength());return null==r?(async t=>{if(null==t)return 0;if(G.isBlob(t))return t.size;if(G.isSpecCompliantForm(t)){const e=new n(xt.origin,{method:"POST",body:t});return(await e.arrayBuffer()).byteLength}return G.isArrayBufferView(t)||G.isArrayBuffer(t)?t.byteLength:(G.isURLSearchParams(t)&&(t+=""),G.isString(t)?(await l(t)).byteLength:void 0)})(e):r})(y,a))){let t,e=new n(s,{method:"POST",body:a,duplex:"half"});if(G.isFormData(a)&&(t=e.headers.get("content-type"))&&y.setContentType(t),e.body){const[t,n]=kt(N,Ut(Ft(m)));a=Kt(e.body,65536,t,n)}}G.isString(x)||(x=x?"include":"omit");const e=i&&"credentials"in n.prototype,c={...E,signal:v,method:o.toUpperCase(),headers:y.normalize().toJSON(),body:a,duplex:"half",credentials:e?x:void 0};S=i&&new n(s,c);let p=await(i?w(S,E):w(s,c));const f=h&&("stream"===b||"response"===b);if(h&&(g||f&&_)){const t={};["status","statusText","headers"].forEach(e=>{t[e]=p[e]});const e=G.toFiniteNumber(p.headers.get("content-length")),[n,s]=g&&kt(e,Ut(Ft(g),!0))||[];p=new r(Kt(p.body,65536,n,()=>{s&&s(),_&&_()}),t)}b=b||"text";let T=await d[G.findKey(d,b)||"text"](p,t);return!f&&_&&_(),await new Promise((e,n)=>{Lt(e,n,{data:T,headers:Pt.from(p.headers),status:p.status,statusText:p.statusText,config:t,request:S})})}catch(e){if(_&&_(),e&&"TypeError"===e.name&&/Load failed|fetch/i.test(e.message))throw Object.assign(new Q("Network Error",Q.ERR_NETWORK,t,S,e&&e.response),{cause:e.cause||e});throw Q.from(e,e&&e.code,t,S,e&&e.response)}}},ee=new Map,ne=t=>{let e=t&&t.env||{};const{fetch:n,Request:r,Response:s}=e,i=[r,s,n];let o,a,l=i.length,c=ee;for(;l--;)o=i[l],a=c.get(o),void 0===a&&c.set(o,a=l?new Map:te(e)),c=a;return a},re=(ne(),{http:null,xhr:zt,fetch:{get:ne}});G.forEach(re,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch(t){}Object.defineProperty(t,"adapterName",{value:e})}});const se=t=>`- ${t}`,ie=t=>G.isFunction(t)||null===t||!1===t,oe=function(t,e){t=G.isArray(t)?t:[t];const{length:n}=t;let r,s;const i={};for(let o=0;o<n;o++){let n;if(r=t[o],s=r,!ie(r)&&(s=re[(n=String(r)).toLowerCase()],void 0===s))throw new Q(`Unknown adapter '${n}'`);if(s&&(G.isFunction(s)||(s=s.get(e))))break;i[n||"#"+o]=s}if(!s){const t=Object.entries(i).map(([t,e])=>`adapter ${t} `+(!1===e?"is not supported by the environment":"is not available in the build"));let e=n?t.length>1?"since :\n"+t.map(se).join("\n"):" "+se(t[0]):"as no adapter specified";throw new Q("There is no suitable adapter to dispatch the request "+e,"ERR_NOT_SUPPORT")}return s};function ae(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new It(null,t)}function le(t){return ae(t),t.headers=Pt.from(t.headers),t.data=Dt.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1),oe(t.adapter||vt.adapter,t)(t).then(function(e){return ae(t),e.data=Dt.call(t,t.transformResponse,e),e.headers=Pt.from(e.headers),e},function(e){return jt(e)||(ae(t),e&&e.response&&(e.response.data=Dt.call(t,t.transformResponse,e.response),e.response.headers=Pt.from(e.response.headers))),Promise.reject(e)})}const ce="1.15.0",ue={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{ue[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}});const he={};ue.transitional=function(t,e,n){function r(t,e){return"[Axios v"+ce+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return(n,s,i)=>{if(!1===t)throw new Q(r(s," has been removed"+(e?" in "+e:"")),Q.ERR_DEPRECATED);return e&&!he[s]&&(he[s]=!0,console.warn(r(s," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,s,i)}},ue.spelling=function(t){return(e,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};const de={assertOptions:function(t,e,n){if("object"!=typeof t)throw new Q("options must be an object",Q.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let s=r.length;for(;s-- >0;){const i=r[s],o=e[i];if(o){const e=t[i],n=void 0===e||o(e,i,t);if(!0!==n)throw new Q("option "+i+" must be "+n,Q.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new Q("Unknown option "+i,Q.ERR_BAD_OPTION)}},validators:ue},pe=de.validators;class fe{constructor(t){this.defaults=t||{},this.interceptors={request:new ht,response:new ht}}async request(t,e){try{return await this._request(t,e)}catch(t){if(t instanceof Error){let e={};Error.captureStackTrace?Error.captureStackTrace(e):e=new Error;const n=(()=>{if(!e.stack)return"";const t=e.stack.indexOf("\n");return-1===t?"":e.stack.slice(t+1)})();try{if(t.stack){if(n){const e=n.indexOf("\n"),r=-1===e?-1:n.indexOf("\n",e+1),s=-1===r?"":n.slice(r+1);String(t.stack).endsWith(s)||(t.stack+="\n"+n)}}else t.stack=n}catch(t){}}throw t}}_request(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},e=Vt(this.defaults,e);const{transitional:n,paramsSerializer:r,headers:s}=e;void 0!==n&&de.assertOptions(n,{silentJSONParsing:pe.transitional(pe.boolean),forcedJSONParsing:pe.transitional(pe.boolean),clarifyTimeoutError:pe.transitional(pe.boolean),legacyInterceptorReqResOrdering:pe.transitional(pe.boolean)},!1),null!=r&&(G.isFunction(r)?e.paramsSerializer={serialize:r}:de.assertOptions(r,{encode:pe.function,serialize:pe.function},!0)),void 0!==e.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?e.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:e.allowAbsoluteUrls=!0),de.assertOptions(e,{baseUrl:pe.spelling("baseURL"),withXsrfToken:pe.spelling("withXSRFToken")},!0),e.method=(e.method||this.defaults.method||"get").toLowerCase();let i=s&&G.merge(s.common,s[e.method]);s&&G.forEach(["delete","get","head","post","put","patch","common"],t=>{delete s[t]}),e.headers=Pt.concat(i,s);const o=[];let a=!0;this.interceptors.request.forEach(function(t){if("function"==typeof t.runWhen&&!1===t.runWhen(e))return;a=a&&t.synchronous;const n=e.transitional||dt;n&&n.legacyInterceptorReqResOrdering?o.unshift(t.fulfilled,t.rejected):o.push(t.fulfilled,t.rejected)});const l=[];let c;this.interceptors.response.forEach(function(t){l.push(t.fulfilled,t.rejected)});let u,h=0;if(!a){const t=[le.bind(this),void 0];for(t.unshift(...o),t.push(...l),u=t.length,c=Promise.resolve(e);h<u;)c=c.then(t[h++],t[h++]);return c}u=o.length;let d=e;for(;h<u;){const t=o[h++],e=o[h++];try{d=t(d)}catch(t){e.call(this,t);break}}try{c=le.call(this,d)}catch(t){return Promise.reject(t)}for(h=0,u=l.length;h<u;)c=c.then(l[h++],l[h++]);return c}getUri(t){return ut($t((t=Vt(this.defaults,t)).baseURL,t.url,t.allowAbsoluteUrls),t.params,t.paramsSerializer)}}G.forEach(["delete","get","head","options"],function(t){fe.prototype[t]=function(e,n){return this.request(Vt(n||{},{method:t,url:e,data:(n||{}).data}))}}),G.forEach(["post","put","patch"],function(t){function e(e){return function(n,r,s){return this.request(Vt(s||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}fe.prototype[t]=e(),fe.prototype[t+"Form"]=e(!0)});const ge=fe;class me{constructor(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");let e;this.promise=new Promise(function(t){e=t});const n=this;this.promise.then(t=>{if(!n._listeners)return;let e=n._listeners.length;for(;e-- >0;)n._listeners[e](t);n._listeners=null}),this.promise.then=t=>{let e;const r=new Promise(t=>{n.subscribe(t),e=t}).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t(function(t,r,s){n.reason||(n.reason=new It(t,r,s),e(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}toAbortSignal(){const t=new AbortController,e=e=>{t.abort(e)};return this.subscribe(e),t.signal.unsubscribe=()=>this.unsubscribe(e),t.signal}static source(){let t;return{token:new me(function(e){t=e}),cancel:t}}}const be=me,ye={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ye).forEach(([t,e])=>{ye[e]=t});const xe=ye,Ee=function t(e){const n=new ge(e),r=i(ge.prototype.request,n);return G.extend(r,ge.prototype,n,{allOwnKeys:!0}),G.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return t(Vt(e,n))},r}(vt);Ee.Axios=ge,Ee.CanceledError=It,Ee.CancelToken=be,Ee.isCancel=jt,Ee.VERSION=ce,Ee.toFormData=st,Ee.AxiosError=Q,Ee.Cancel=Ee.CanceledError,Ee.all=function(t){return Promise.all(t)},Ee.spread=function(t){return function(e){return t.apply(null,e)}},Ee.isAxiosError=function(t){return G.isObject(t)&&!0===t.isAxiosError},Ee.mergeConfig=Vt,Ee.AxiosHeaders=Pt,Ee.formToJSON=t=>Et(G.isHTMLForm(t)?new FormData(t):t),Ee.getAdapter=oe,Ee.HttpStatusCode=xe,Ee.default=Ee;const we=Ee,ve=we.create({baseURL:r,timeout:3e4}),Se=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",_e=new RegExp("^["+Se+"]["+Se+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function Ne(t,e){const n=[];let r=e.exec(t);for(;r;){const s=[];s.startIndex=e.lastIndex-r[0].length;const i=r.length;for(let t=0;t<i;t++)s.push(r[t]);n.push(s),r=e.exec(t)}return n}const Te=function(t){return!(null==_e.exec(t))},Oe=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],Ae=["__proto__","constructor","prototype"],Re={allowBooleanAttributes:!1,unpairedTags:[]};function Ce(t,e){e=Object.assign({},Re,e);const n=[];let r=!1,s=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let i=0;i<t.length;i++)if("<"===t[i]&&"?"===t[i+1]){if(i+=2,i=De(t,i),i.err)return i}else{if("<"!==t[i]){if(Pe(t[i]))continue;return Me("InvalidChar","char '"+t[i]+"' is not expected.",Ve(t,i))}{let o=i;if(i++,"!"===t[i]){i=je(t,i);continue}{let a=!1;"/"===t[i]&&(a=!0,i++);let l="";for(;i<t.length&&">"!==t[i]&&" "!==t[i]&&"\t"!==t[i]&&"\n"!==t[i]&&"\r"!==t[i];i++)l+=t[i];if(l=l.trim(),"/"===l[l.length-1]&&(l=l.substring(0,l.length-1),i--),!qe(l)){let e;return e=0===l.trim().length?"Invalid space after '<'.":"Tag '"+l+"' is an invalid name.",Me("InvalidTag",e,Ve(t,i))}const c=Ue(t,i);if(!1===c)return Me("InvalidAttr","Attributes for '"+l+"' have open quote.",Ve(t,i));let u=c.value;if(i=c.index,"/"===u[u.length-1]){const n=i-u.length;u=u.substring(0,u.length-1);const s=Fe(u,e);if(!0!==s)return Me(s.err.code,s.err.msg,Ve(t,n+s.err.line));r=!0}else if(a){if(!c.tagClosed)return Me("InvalidTag","Closing tag '"+l+"' doesn't have proper closing.",Ve(t,i));if(u.trim().length>0)return Me("InvalidTag","Closing tag '"+l+"' can't have attributes or invalid starting.",Ve(t,o));if(0===n.length)return Me("InvalidTag","Closing tag '"+l+"' has not been opened.",Ve(t,o));{const e=n.pop();if(l!==e.tagName){let n=Ve(t,e.tagStartPos);return Me("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+n.line+", col "+n.col+") instead of closing tag '"+l+"'.",Ve(t,o))}0==n.length&&(s=!0)}}else{const a=Fe(u,e);if(!0!==a)return Me(a.err.code,a.err.msg,Ve(t,i-u.length+a.err.line));if(!0===s)return Me("InvalidXml","Multiple possible root nodes found.",Ve(t,i));-1!==e.unpairedTags.indexOf(l)||n.push({tagName:l,tagStartPos:o}),r=!0}for(i++;i<t.length;i++)if("<"===t[i]){if("!"===t[i+1]){i++,i=je(t,i);continue}if("?"!==t[i+1])break;if(i=De(t,++i),i.err)return i}else if("&"===t[i]){const e=Be(t,i);if(-1==e)return Me("InvalidChar","char '&' is not expected.",Ve(t,i));i=e}else if(!0===s&&!Pe(t[i]))return Me("InvalidXml","Extra text at the end",Ve(t,i));"<"===t[i]&&i--}}}return r?1==n.length?Me("InvalidTag","Unclosed tag '"+n[0].tagName+"'.",Ve(t,n[0].tagStartPos)):!(n.length>0)||Me("InvalidXml","Invalid '"+JSON.stringify(n.map(t=>t.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):Me("InvalidXml","Start tag expected.",1)}function Pe(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function De(t,e){const n=e;for(;e<t.length;e++)if("?"==t[e]||" "==t[e]){const r=t.substr(n,e-n);if(e>5&&"xml"===r)return Me("InvalidXml","XML declaration allowed only at the start of the document.",Ve(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}continue}return e}function je(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let n=1;for(e+=8;e<t.length;e++)if("<"===t[e])n++;else if(">"===t[e]&&(n--,0===n))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e<t.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}const Ie='"',Le="'";function Ue(t,e){let n="",r="",s=!1;for(;e<t.length;e++){if(t[e]===Ie||t[e]===Le)""===r?r=t[e]:r!==t[e]||(r="");else if(">"===t[e]&&""===r){s=!0;break}n+=t[e]}return""===r&&{value:n,index:e,tagClosed:s}}const ke=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function Fe(t,e){const n=Ne(t,ke),r={};for(let t=0;t<n.length;t++){if(0===n[t][1].length)return Me("InvalidAttr","Attribute '"+n[t][2]+"' has no space in starting.",We(n[t]));if(void 0!==n[t][3]&&void 0===n[t][4])return Me("InvalidAttr","Attribute '"+n[t][2]+"' is without value.",We(n[t]));if(void 0===n[t][3]&&!e.allowBooleanAttributes)return Me("InvalidAttr","boolean attribute '"+n[t][2]+"' is not allowed.",We(n[t]));const s=n[t][2];if(!$e(s))return Me("InvalidAttr","Attribute '"+s+"' is an invalid name.",We(n[t]));if(Object.prototype.hasOwnProperty.call(r,s))return Me("InvalidAttr","Attribute '"+s+"' is repeated.",We(n[t]));r[s]=1}return!0}function Be(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){let n=/\d/;for("x"===t[e]&&(e++,n=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(n))break}return-1}(t,++e);let n=0;for(;e<t.length;e++,n++)if(!(t[e].match(/\w/)&&n<20)){if(";"===t[e])break;return-1}return e}function Me(t,e,n){return{err:{code:t,msg:e,line:n.line||n,col:n.col}}}function $e(t){return Te(t)}function qe(t){return Te(t)}function Ve(t,e){const n=t.substring(0,e).split(/\r?\n/);return{line:n.length,col:n[n.length-1].length+1}}function We(t){return t.startIndex+t[1].length}const ze={validate:Ce},Je=t=>Oe.includes(t)?"__"+t:t,He={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,n){return t},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:Je};function Ke(t,e){if("string"!=typeof t)return;const n=t.toLowerCase();if(Oe.some(t=>n===t.toLowerCase()))throw new Error(`[SECURITY] Invalid ${e}: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`);if(Ae.some(t=>n===t.toLowerCase()))throw new Error(`[SECURITY] Invalid ${e}: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`)}function Xe(t){return"boolean"==typeof t?{enabled:t,maxEntitySize:1e4,maxExpansionDepth:10,maxTotalExpansions:1e3,maxExpandedLength:1e5,maxEntityCount:100,allowedTags:null,tagFilter:null}:"object"==typeof t&&null!==t?{enabled:!1!==t.enabled,maxEntitySize:Math.max(1,t.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,t.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,t.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,t.maxExpandedLength??1e5),maxEntityCount:Math.max(1,t.maxEntityCount??1e3),allowedTags:t.allowedTags??null,tagFilter:t.tagFilter??null}:Xe(!0)}const Ye=function(t){const e=Object.assign({},He,t),n=[{value:e.attributeNamePrefix,name:"attributeNamePrefix"},{value:e.attributesGroupName,name:"attributesGroupName"},{value:e.textNodeName,name:"textNodeName"},{value:e.cdataPropName,name:"cdataPropName"},{value:e.commentPropName,name:"commentPropName"}];for(const{value:t,name:e}of n)t&&Ke(t,e);return null===e.onDangerousProperty&&(e.onDangerousProperty=Je),e.processEntities=Xe(e.processEntities),e.unpairedTagsSet=new Set(e.unpairedTags),e.stopNodes&&Array.isArray(e.stopNodes)&&(e.stopNodes=e.stopNodes.map(t=>"string"==typeof t&&t.startsWith("*.")?".."+t.substring(2):t)),e};let Ge;Ge="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class Ze{constructor(t){this.tagname=t,this.child=[],this[":@"]=Object.create(null)}add(t,e){"__proto__"===t&&(t="#__proto__"),this.child.push({[t]:e})}addChild(t,e){"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),void 0!==e&&(this.child[this.child.length-1][Ge]={startIndex:e})}static getMetaDataSymbol(){return Ge}}class Qe{constructor(t){this.suppressValidationErr=!t,this.options=t}readDocType(t,e){const n=Object.create(null);let r=0;if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let s=1,i=!1,o=!1,a="";for(;e<t.length;e++)if("<"!==t[e]||o)if(">"===t[e]){if(o?"-"===t[e-1]&&"-"===t[e-2]&&(o=!1,s--):s--,0===s)break}else"["===t[e]?i=!0:a+=t[e];else{if(i&&en(t,"!ENTITY",e)){let s,i;if(e+=7,[s,i,e]=this.readEntityExp(t,e+1,this.suppressValidationErr),-1===i.indexOf("&")){if(!1!==this.options.enabled&&null!=this.options.maxEntityCount&&r>=this.options.maxEntityCount)throw new Error(`Entity count (${r+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);const t=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");n[s]={regx:RegExp(`&${t};`,"g"),val:i},r++}}else if(i&&en(t,"!ELEMENT",e)){e+=8;const{index:n}=this.readElementExp(t,e+1);e=n}else if(i&&en(t,"!ATTLIST",e))e+=8;else if(i&&en(t,"!NOTATION",e)){e+=9;const{index:n}=this.readNotationExp(t,e+1,this.suppressValidationErr);e=n}else{if(!en(t,"!--",e))throw new Error("Invalid DOCTYPE");o=!0}s++,a=""}if(0!==s)throw new Error("Unclosed DOCTYPE")}return{entities:n,i:e}}readEntityExp(t,e){const n=e=tn(t,e);for(;e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)e++;let r=t.substring(n,e);if(nn(r),e=tn(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}let s="";if([e,s]=this.readIdentifierVal(t,e,"entity"),!1!==this.options.enabled&&null!=this.options.maxEntitySize&&s.length>this.options.maxEntitySize)throw new Error(`Entity "${r}" size (${s.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return[r,s,--e]}readNotationExp(t,e){const n=e=tn(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let r=t.substring(n,e);!this.suppressValidationErr&&nn(r),e=tn(t,e);const s=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==s&&"PUBLIC"!==s)throw new Error(`Expected SYSTEM or PUBLIC, found "${s}"`);e+=s.length,e=tn(t,e);let i=null,o=null;if("PUBLIC"===s)[e,i]=this.readIdentifierVal(t,e,"publicIdentifier"),'"'!==t[e=tn(t,e)]&&"'"!==t[e]||([e,o]=this.readIdentifierVal(t,e,"systemIdentifier"));else if("SYSTEM"===s&&([e,o]=this.readIdentifierVal(t,e,"systemIdentifier"),!this.suppressValidationErr&&!o))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:r,publicIdentifier:i,systemIdentifier:o,index:--e}}readIdentifierVal(t,e,n){let r="";const s=t[e];if('"'!==s&&"'"!==s)throw new Error(`Expected quoted string, found "${s}"`);const i=++e;for(;e<t.length&&t[e]!==s;)e++;if(r=t.substring(i,e),t[e]!==s)throw new Error(`Unterminated ${n} value`);return[++e,r]}readElementExp(t,e){const n=e=tn(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let r=t.substring(n,e);if(!this.suppressValidationErr&&!Te(r))throw new Error(`Invalid element name: "${r}"`);let s="";if("E"===t[e=tn(t,e)]&&en(t,"MPTY",e))e+=4;else if("A"===t[e]&&en(t,"NY",e))e+=2;else if("("===t[e]){const n=++e;for(;e<t.length&&")"!==t[e];)e++;if(s=t.substring(n,e),")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[e]}"`);return{elementName:r,contentModel:s.trim(),index:e}}readAttlistExp(t,e){let n=e=tn(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let r=t.substring(n,e);for(nn(r),n=e=tn(t,e);e<t.length&&!/\s/.test(t[e]);)e++;let s=t.substring(n,e);if(!nn(s))throw new Error(`Invalid attribute name: "${s}"`);e=tn(t,e);let i="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(i="NOTATION","("!==t[e=tn(t,e+=8)])throw new Error(`Expected '(', found "${t[e]}"`);e++;let n=[];for(;e<t.length&&")"!==t[e];){const r=e;for(;e<t.length&&"|"!==t[e]&&")"!==t[e];)e++;let s=t.substring(r,e);if(s=s.trim(),!nn(s))throw new Error(`Invalid notation name: "${s}"`);n.push(s),"|"===t[e]&&(e++,e=tn(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,i+=" ("+n.join("|")+")"}else{const n=e;for(;e<t.length&&!/\s/.test(t[e]);)e++;i+=t.substring(n,e);const r=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!r.includes(i.toUpperCase()))throw new Error(`Invalid attribute type: "${i}"`)}e=tn(t,e);let o="";return"#REQUIRED"===t.substring(e,e+8).toUpperCase()?(o="#REQUIRED",e+=8):"#IMPLIED"===t.substring(e,e+7).toUpperCase()?(o="#IMPLIED",e+=7):[e,o]=this.readIdentifierVal(t,e,"ATTLIST"),{elementName:r,attributeName:s,attributeType:i,defaultValue:o,index:e}}}const tn=(t,e)=>{for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function en(t,e,n){for(let r=0;r<e.length;r++)if(e[r]!==t[n+r+1])return!1;return!0}function nn(t){if(Te(t))return t;throw new Error(`Invalid entity name ${t}`)}const rn=/^[-+]?0x[a-fA-F0-9]+$/,sn=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,on={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0,infinity:"original"};const an=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;class ln{constructor(t){this._matcher=t}get separator(){return this._matcher.separator}getCurrentTag(){const t=this._matcher.path;return t.length>0?t[t.length-1].tag:void 0}getCurrentNamespace(){const t=this._matcher.path;return t.length>0?t[t.length-1].namespace:void 0}getAttrValue(t){const e=this._matcher.path;if(0!==e.length)return e[e.length-1].values?.[t]}hasAttr(t){const e=this._matcher.path;if(0===e.length)return!1;const n=e[e.length-1];return void 0!==n.values&&t in n.values}getPosition(){const t=this._matcher.path;return 0===t.length?-1:t[t.length-1].position??0}getCounter(){const t=this._matcher.path;return 0===t.length?-1:t[t.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(t,e=!0){return this._matcher.toString(t,e)}toArray(){return this._matcher.path.map(t=>t.tag)}matches(t){return this._matcher.matches(t)}matchesAny(t){return t.matchesAny(this._matcher)}}class cn{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new ln(this)}push(t,e=null,n=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const r=this.path.length;this.siblingStacks[r]||(this.siblingStacks[r]=new Map);const s=this.siblingStacks[r],i=n?`${n}:${t}`:t,o=s.get(i)||0;let a=0;for(const t of s.values())a+=t;s.set(i,o+1);const l={tag:t,position:a,counter:o};null!=n&&(l.namespace=n),null!=e&&(l.values=e),this.path.push(l)}pop(){if(0===this.path.length)return;this._pathStringCache=null;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0!==this.path.length)return this.path[this.path.length-1].values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const n=t||this.separator;if(n===this.separator&&!0===e){if(null!==this._pathStringCache)return this._pathStringCache;const t=this.path.map(t=>t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(n);return this._pathStringCache=t,t}return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(n)}toArray(){return this.path.map(t=>t.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++)if(!this._matchSegment(t[e],this.path[e],e===this.path.length-1))return!1;return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,n=t.length-1;for(;n>=0&&e>=0;){const r=t[n];if("deep-wildcard"===r.type){if(n--,n<0)return!0;const r=t[n];let s=!1;for(let t=e;t>=0;t--)if(this._matchSegment(r,this.path[t],t===this.path.length-1)){e=t-1,n--,s=!0;break}if(!s)return!1}else{if(!this._matchSegment(r,this.path[e],e===this.path.length-1))return!1;e--,n--}}return n<0}_matchSegment(t,e,n){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!n)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue&&String(e.values[t.attrName])!==String(t.attrValue))return!1}if(void 0!==t.position){if(!n)return!1;const r=e.counter??0;if("first"===t.position&&0!==r)return!1;if("odd"===t.position&&r%2!=1)return!1;if("even"===t.position&&r%2!=0)return!1;if("nth"===t.position&&r!==t.positionValue)return!1}return!0}matchesAny(t){return t.matchesAny(this)}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this._pathStringCache=null,this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}readOnly(){return this._view}}class un{constructor(t,e={},n){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this.data=n,this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let n=0,r="";for(;n<t.length;)t[n]===this.separator?n+1<t.length&&t[n+1]===this.separator?(r.trim()&&(e.push(this._parseSegment(r.trim())),r=""),e.push({type:"deep-wildcard"}),n+=2):(r.trim()&&e.push(this._parseSegment(r.trim())),r="",n++):(r+=t[n],n++);return r.trim()&&e.push(this._parseSegment(r.trim())),e}_parseSegment(t){const e={type:"tag"};let n=null,r=t;const s=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(s&&(r=s[1]+s[3],s[2])){const t=s[2].slice(1,-1);t&&(n=t)}let i,o,a=r;if(r.includes("::")){const e=r.indexOf("::");if(i=r.substring(0,e).trim(),a=r.substring(e+2).trim(),!i)throw new Error(`Invalid namespace in pattern: ${t}`)}let l=null;if(a.includes(":")){const t=a.lastIndexOf(":"),e=a.substring(0,t).trim(),n=a.substring(t+1).trim();["first","last","odd","even"].includes(n)||/^nth\(\d+\)$/.test(n)?(o=e,l=n):o=a}else o=a;if(!o)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=o,i&&(e.namespace=i),n)if(n.includes("=")){const t=n.indexOf("=");e.attrName=n.substring(0,t).trim(),e.attrValue=n.substring(t+1).trim()}else e.attrName=n.trim();if(l){const t=l.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=l}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}class hn{constructor(){this._byDepthAndTag=new Map,this._wildcardByDepth=new Map,this._deepWildcards=[],this._patterns=new Set,this._sealed=!1}add(t){if(this._sealed)throw new TypeError("ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.");if(this._patterns.has(t.pattern))return this;if(this._patterns.add(t.pattern),t.hasDeepWildcard())return this._deepWildcards.push(t),this;const e=t.length,n=t.segments[t.segments.length-1],r=n?.tag;if(r&&"*"!==r){const n=`${e}:${r}`;this._byDepthAndTag.has(n)||this._byDepthAndTag.set(n,[]),this._byDepthAndTag.get(n).push(t)}else this._wildcardByDepth.has(e)||this._wildcardByDepth.set(e,[]),this._wildcardByDepth.get(e).push(t);return this}addAll(t){for(const e of t)this.add(e);return this}has(t){return this._patterns.has(t.pattern)}get size(){return this._patterns.size}seal(){return this._sealed=!0,this}get isSealed(){return this._sealed}matchesAny(t){return null!==this.findMatch(t)}findMatch(t){const e=t.getDepth(),n=`${e}:${t.getCurrentTag()}`,r=this._byDepthAndTag.get(n);if(r)for(let e=0;e<r.length;e++)if(t.matches(r[e]))return r[e];const s=this._wildcardByDepth.get(e);if(s)for(let e=0;e<s.length;e++)if(t.matches(s[e]))return s[e];for(let e=0;e<this._deepWildcards.length;e++)if(t.matches(this._deepWildcards[e]))return this._deepWildcards[e];return null}}const dn={apos:{regex:/&(apos|#0*39|#x0*27);/g,val:"'"},gt:{regex:/&(gt|#0*62|#x0*3[Ee]);/g,val:">"},lt:{regex:/&(lt|#0*60|#x0*3[Cc]);/g,val:"<"},quot:{regex:/&(quot|#0*34|#x0*22);/g,val:'"'}},pn=/&(amp|#0*38|#x0*26);/g,fn=new Set("!?\\\\/[]$%{}^&*()<>|+");function gn(t){for(const e of t)if(fn.has(e))throw new Error(`[EntityReplacer] Invalid character '${e}' in entity name: "${t}"`);return t}function mn(t){return t.replace(/[.\-+*:]/g,"\\$&")}function bn(t,e,n=!1){return!1===t||null===t?null:!0===t?e:void 0===t?n?e:null:"object"==typeof t?t:null}function yn(t){const e=[];for(const n of Object.keys(t)){const r=t[n];if("object"==typeof r&&null!==r&&void 0!==r.val)e.push([n,{regex:r.regex??r.regx,val:r.val}]);else if("string"==typeof r){if(-1!==r.indexOf("&"))continue;gn(n),e.push([n,{regex:new RegExp("&"+mn(n)+";","g"),val:r}])}}return e}class xn{constructor(t={}){var e;this._defaultTable=bn(t.default,dn,!0),this._systemTable=bn(t.system,null,!1),this._ampEnabled=!1!==t.amp&&null!==t.amp,this._maxTotalExpansions=t.maxTotalExpansions||0,this._maxExpandedLength=t.maxExpandedLength||0,this._applyLimitsTo="all"===(e=t.applyLimitsTo??"external")?"all":"string"==typeof e?new Set([e]):Array.isArray(e)?new Set(e):new Set(["external"]),this._postCheck="function"==typeof t.postCheck?t.postCheck:t=>t,this._limitExternal="all"===this._applyLimitsTo||this._applyLimitsTo instanceof Set&&this._applyLimitsTo.has("external"),this._limitSystem="all"===this._applyLimitsTo||this._applyLimitsTo instanceof Set&&this._applyLimitsTo.has("system"),this._limitDefault="all"===this._applyLimitsTo||this._applyLimitsTo instanceof Set&&this._applyLimitsTo.has("default"),this._defaultEntries=this._defaultTable?Object.entries(this._defaultTable):[],this._systemEntries=this._systemTable?Object.entries(this._systemTable):[],this._persistentEntries=[],this._inputEntries=[],this._totalExpansions=0,this._expandedLength=0}setExternalEntities(t){this._persistentEntries=yn(t)}addExternalEntity(t,e){gn(t),"string"==typeof e&&-1===e.indexOf("&")&&this._persistentEntries.push([t,{regex:new RegExp("&"+mn(t)+";","g"),val:e}])}addInputEntities(t){this._totalExpansions=0,this._expandedLength=0,this._inputEntries=yn(t)}reset(){this._inputEntries=[],this._totalExpansions=0,this._expandedLength=0}replace(t){if("string"!=typeof t||0===t.length)return t;if(-1===t.indexOf("&"))return t;const e=t;return this._persistentEntries.length>0&&(t=this._applyEntries(t,this._persistentEntries,this._limitExternal)),this._inputEntries.length>0&&-1!==t.indexOf("&")&&(t=this._applyEntries(t,this._inputEntries,this._limitExternal)),this._defaultEntries.length>0&&-1!==t.indexOf("&")&&(t=this._applyEntries(t,this._defaultEntries,this._limitDefault)),this._systemEntries.length>0&&-1!==t.indexOf("&")&&(t=this._applyEntries(t,this._systemEntries,this._limitSystem)),this._ampEnabled&&-1!==t.indexOf("&")&&(t=t.replace(pn,"&")),this._postCheck(t,e)}parse(t){return this.replace(t)}_applyEntries(t,e,n){const r=n&&this._maxTotalExpansions>0,s=n&&this._maxExpandedLength>0,i=r||s;for(let n=0;n<e.length&&-1!==t.indexOf("&");n++){const o=e[n][1];if(i)if(r&&!s){let e=0;if(t=t.replace(o.regex,(...t)=>(e++,"function"==typeof o.val?o.val(...t):o.val)),e>0&&(this._totalExpansions+=e,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`)}else if(s&&!r){const e=t.length,n=(t=t.replace(o.regex,o.val)).length-e;if(n>0&&(this._expandedLength+=n,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}else{const e=t.length;let n=0;if(t=t.replace(o.regex,(...t)=>(n++,"function"==typeof o.val?o.val(...t):o.val)),n>0&&(this._totalExpansions+=n,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);const r=t.length-e;if(r>0&&(this._expandedLength+=r,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}else t=t.replace(o.regex,o.val)}return t}}const En={nbsp:{regex:/&(nbsp|#0*160|#x0*[Aa]0);/g,val:" "},copy:{regex:/&(copy|#0*169|#x0*[Aa]9);/g,val:"©"},reg:{regex:/&(reg|#0*174|#x0*[Aa][Ee]);/g,val:"®"},trade:{regex:/&(trade|#0*8482|#x0*2122);/g,val:"™"},mdash:{regex:/&(mdash|#0*8212|#x0*2014);/g,val:"—"},ndash:{regex:/&(ndash|#0*8211|#x0*2013);/g,val:"–"},hellip:{regex:/&(hellip|#0*8230|#x0*2026);/g,val:"…"},laquo:{regex:/&(laquo|#0*171|#x0*[Aa][Bb]);/g,val:"«"},raquo:{regex:/&(raquo|#0*187|#x0*[Bb][Bb]);/g,val:"»"},lsquo:{regex:/&(lsquo|#0*8216|#x0*2018);/g,val:"‘"},rsquo:{regex:/&(rsquo|#0*8217|#x0*2019);/g,val:"’"},ldquo:{regex:/&(ldquo|#0*8220|#x0*201[Cc]);/g,val:"“"},rdquo:{regex:/&(rdquo|#0*8221|#x0*201[Dd]);/g,val:"”"},bull:{regex:/&(bull|#0*8226|#x0*2022);/g,val:"•"},para:{regex:/&(para|#0*182|#x0*[Bb]6);/g,val:"¶"},sect:{regex:/&(sect|#0*167|#x0*[Aa]7);/g,val:"§"},deg:{regex:/&(deg|#0*176|#x0*[Bb]0);/g,val:"°"},frac12:{regex:/&(frac12|#0*189|#x0*[Bb][Dd]);/g,val:"½"},frac14:{regex:/&(frac14|#0*188|#x0*[Bb][Cc]);/g,val:"¼"},frac34:{regex:/&(frac34|#0*190|#x0*[Bb][Ee]);/g,val:"¾"},inr:{regex:/&(inr|#0*8377);/g,val:"₹"}},wn={cent:{regex:/&(cent|#0*162|#x0*[Aa]2);/g,val:"¢"},pound:{regex:/&(pound|#0*163|#x0*[Aa]3);/g,val:"£"},yen:{regex:/&(yen|#0*165|#x0*[Aa]5);/g,val:"¥"},euro:{regex:/&(euro|#0*8364|#x0*20[Aa][Cc]);/g,val:"€"},inr:{regex:/&(inr|#0*8377|#x0*20[Bb]9);/g,val:"₹"},curren:{regex:/&(curren|#0*164|#x0*[Aa]4);/g,val:"¤"},fnof:{regex:/&(fnof|#0*402|#x0*192);/g,val:"ƒ"}},vn={num_dec:{regex:/�*([0-9]{1,7});/g,val:(t,e)=>Sn(e,10,"&#")},num_hex:{regex:/�*([0-9a-fA-F]{1,6});/g,val:(t,e)=>Sn(e,16,"&#x")}};function Sn(t,e,n){const r=Number.parseInt(t,e);return r>=0&&r<=1114111?String.fromCodePoint(r):n+t+";"}function _n(t,e){if(!t)return{};const n=e.attributesGroupName?t[e.attributesGroupName]:t;if(!n)return{};const r={};for(const t in n)t.startsWith(e.attributeNamePrefix)?r[t.substring(e.attributeNamePrefix.length)]=n[t]:r[t]=n[t];return r}function Nn(t){if(!t||"string"!=typeof t)return;const e=t.indexOf(":");if(-1!==e&&e>0){const n=t.substring(0,e);if("xmlns"!==n)return n}}class Tn{constructor(t){var e;this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.parseXml=Pn,this.parseTextData=On,this.resolveNameSpace=An,this.buildAttributesMap=Cn,this.isItStopNode=Ln,this.replaceEntitiesValue=jn,this.readStopNodeData=Bn,this.saveTextToParentTag=In,this.addChild=Dn,this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?t=>{for(const n of e){if("string"==typeof n&&t===n)return!0;if(n instanceof RegExp&&n.test(t))return!0}}:()=>!1,this.entityExpansionCount=0,this.currentExpandedLength=0,this.entityReplacer=new xn({default:!0,system:this.options.htmlEntities?{...En,...vn,...wn}:{},maxTotalExpansions:this.options.processEntities.maxTotalExpansions,maxExpandedLength:this.options.processEntities.maxExpandedLength,applyLimitsTo:"all"}),this.matcher=new cn,this.readonlyMatcher=this.matcher.readOnly(),this.isCurrentNodeStopNode=!1,this.stopNodeExpressionsSet=new hn;const n=this.options.stopNodes;if(n&&n.length>0){for(let t=0;t<n.length;t++){const e=n[t];"string"==typeof e?this.stopNodeExpressionsSet.add(new un(e)):e instanceof un&&this.stopNodeExpressionsSet.add(e)}this.stopNodeExpressionsSet.seal()}}}function On(t,e,n,r,s,i,o){const a=this.options;if(void 0!==t&&(a.trimValues&&!r&&(t=t.trim()),t.length>0)){o||(t=this.replaceEntitiesValue(t,e,n));const r=a.jPath?n.toString():n,l=a.tagValueProcessor(e,t,r,s,i);return null==l?t:typeof l!=typeof t||l!==t?l:a.trimValues||t.trim()===t?Mn(t,a.parseTagValue,a.numberParseOptions):t}}function An(t){if(this.options.removeNSPrefix){const e=t.split(":"),n="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=n+e[1])}return t}const Rn=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function Cn(t,e,n){const r=this.options;if(!0!==r.ignoreAttributes&&"string"==typeof t){const s=Ne(t,Rn),i=s.length,o={},a=new Array(i);let l=!1;const c={};for(let t=0;t<i;t++){const e=this.resolveNameSpace(s[t][1]),i=s[t][4];if(e.length&&void 0!==i){let s=i;r.trimValues&&(s=s.trim()),s=this.replaceEntitiesValue(s,n,this.readonlyMatcher),a[t]=s,c[e]=s,l=!0}}l&&"object"==typeof e&&e.updateCurrent&&e.updateCurrent(c);const u=r.jPath?e.toString():this.readonlyMatcher;let h=!1;for(let t=0;t<i;t++){const e=this.resolveNameSpace(s[t][1]);if(this.ignoreAttributesFn(e,u))continue;let n=r.attributeNamePrefix+e;if(e.length)if(r.transformAttributeName&&(n=r.transformAttributeName(n)),n=qn(n,r),void 0!==s[t][4]){const s=a[t],i=r.attributeValueProcessor(e,s,u);o[n]=null==i?s:typeof i!=typeof s||i!==s?i:Mn(s,r.parseAttributeValue,r.numberParseOptions),h=!0}else r.allowBooleanAttributes&&(o[n]=!0,h=!0)}if(!h)return;if(r.attributesGroupName){const t={};return t[r.attributesGroupName]=o,t}return o}}const Pn=function(t){t=t.replace(/\r\n?/g,"\n");const e=new Ze("!xml");let n=e,r="";this.matcher.reset(),this.entityExpansionCount=0,this.currentExpandedLength=0;const s=this.options,i=new Qe(s.processEntities),o=t.length;for(let a=0;a<o;a++)if("<"===t[a]){const l=t.charCodeAt(a+1);if(47===l){const e=Un(t,">",a,"Closing Tag is not closed.");let i=t.substring(a+2,e).trim();if(s.removeNSPrefix){const t=i.indexOf(":");-1!==t&&(i=i.substr(t+1))}i=$n(s.transformTagName,i,"",s).tagName,n&&(r=this.saveTextToParentTag(r,n,this.readonlyMatcher));const o=this.matcher.getCurrentTag();if(i&&s.unpairedTagsSet.has(i))throw new Error(`Unpaired tag can not be used as closing tag: </${i}>`);o&&s.unpairedTagsSet.has(o)&&(this.matcher.pop(),this.tagsNodeStack.pop()),this.matcher.pop(),this.isCurrentNodeStopNode=!1,n=this.tagsNodeStack.pop(),r="",a=e}else if(63===l){let e=Fn(t,a,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");if(r=this.saveTextToParentTag(r,n,this.readonlyMatcher),s.ignoreDeclaration&&"?xml"===e.tagName||s.ignorePiTags);else{const t=new Ze(e.tagName);t.add(s.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&(t[":@"]=this.buildAttributesMap(e.tagExp,this.matcher,e.tagName)),this.addChild(n,t,this.readonlyMatcher,a)}a=e.closeIndex+1}else if(33===l&&45===t.charCodeAt(a+2)&&45===t.charCodeAt(a+3)){const e=Un(t,"--\x3e",a+4,"Comment is not closed.");if(s.commentPropName){const i=t.substring(a+4,e-2);r=this.saveTextToParentTag(r,n,this.readonlyMatcher),n.add(s.commentPropName,[{[s.textNodeName]:i}])}a=e}else if(33===l&&68===t.charCodeAt(a+2)){const e=i.readDocType(t,a);this.entityReplacer.addInputEntities(e.entities),a=e.i}else if(33===l&&91===t.charCodeAt(a+2)){const e=Un(t,"]]>",a,"CDATA is not closed.")-2,i=t.substring(a+9,e);r=this.saveTextToParentTag(r,n,this.readonlyMatcher);let o=this.parseTextData(i,n.tagname,this.readonlyMatcher,!0,!1,!0,!0);null==o&&(o=""),s.cdataPropName?n.add(s.cdataPropName,[{[s.textNodeName]:i}]):n.add(s.textNodeName,o),a=e+2}else{let i=Fn(t,a,s.removeNSPrefix);if(!i){const e=t.substring(Math.max(0,a-50),Math.min(o,a+50));throw new Error(`readTagExp returned undefined at position ${a}. Context: "${e}"`)}let l=i.tagName;const c=i.rawTagName;let u=i.tagExp,h=i.attrExpPresent,d=i.closeIndex;if(({tagName:l,tagExp:u}=$n(s.transformTagName,l,u,s)),s.strictReservedNames&&(l===s.commentPropName||l===s.cdataPropName||l===s.textNodeName||l===s.attributesGroupName))throw new Error(`Invalid tag name: ${l}`);n&&r&&"!xml"!==n.tagname&&(r=this.saveTextToParentTag(r,n,this.readonlyMatcher,!1));const p=n;p&&s.unpairedTagsSet.has(p.tagname)&&(n=this.tagsNodeStack.pop(),this.matcher.pop());let f=!1;u.length>0&&u.lastIndexOf("/")===u.length-1&&(f=!0,"/"===l[l.length-1]?(l=l.substr(0,l.length-1),u=l):u=u.substr(0,u.length-1),h=l!==u);let g,m=null,b={};g=Nn(c),l!==e.tagname&&this.matcher.push(l,{},g),l!==u&&h&&(m=this.buildAttributesMap(u,this.matcher,l),m&&(b=_n(m,s))),l!==e.tagname&&(this.isCurrentNodeStopNode=this.isItStopNode());const y=a;if(this.isCurrentNodeStopNode){let e="";if(f)a=i.closeIndex;else if(s.unpairedTagsSet.has(l))a=i.closeIndex;else{const n=this.readStopNodeData(t,c,d+1);if(!n)throw new Error(`Unexpected end of ${c}`);a=n.i,e=n.tagContent}const r=new Ze(l);m&&(r[":@"]=m),r.add(s.textNodeName,e),this.matcher.pop(),this.isCurrentNodeStopNode=!1,this.addChild(n,r,this.readonlyMatcher,y)}else{if(f){({tagName:l,tagExp:u}=$n(s.transformTagName,l,u,s));const t=new Ze(l);m&&(t[":@"]=m),this.addChild(n,t,this.readonlyMatcher,y),this.matcher.pop(),this.isCurrentNodeStopNode=!1}else{if(s.unpairedTagsSet.has(l)){const t=new Ze(l);m&&(t[":@"]=m),this.addChild(n,t,this.readonlyMatcher,y),this.matcher.pop(),this.isCurrentNodeStopNode=!1,a=i.closeIndex;continue}{const t=new Ze(l);if(this.tagsNodeStack.length>s.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(n),m&&(t[":@"]=m),this.addChild(n,t,this.readonlyMatcher,y),n=t}}r="",a=d}}}else r+=t[a];return e.child};function Dn(t,e,n,r){this.options.captureMetaData||(r=void 0);const s=this.options.jPath?n.toString():n,i=this.options.updateTag(e.tagname,s,e[":@"]);!1===i||("string"==typeof i?(e.tagname=i,t.addChild(e,r)):t.addChild(e,r))}function jn(t,e,n){const r=this.options.processEntities;if(!r||!r.enabled)return t;if(r.allowedTags){const s=this.options.jPath?n.toString():n;if(!(Array.isArray(r.allowedTags)?r.allowedTags.includes(e):r.allowedTags(e,s)))return t}if(r.tagFilter){const s=this.options.jPath?n.toString():n;if(!r.tagFilter(e,s))return t}return this.entityReplacer.replace(t)}function In(t,e,n,r){return t&&(void 0===r&&(r=0===e.child.length),void 0!==(t=this.parseTextData(t,e.tagname,n,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,r))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function Ln(){return 0!==this.stopNodeExpressionsSet.size&&this.matcher.matchesAny(this.stopNodeExpressionsSet)}function Un(t,e,n,r){const s=t.indexOf(e,n);if(-1===s)throw new Error(r);return s+e.length-1}function kn(t,e,n,r){const s=t.indexOf(e,n);if(-1===s)throw new Error(r);return s}function Fn(t,e,n,r=">"){const s=function(t,e,n=">"){let r=0;const s=[],i=t.length,o=n.charCodeAt(0),a=n.length>1?n.charCodeAt(1):-1;for(let n=e;n<i;n++){const e=t.charCodeAt(n);if(r)e===r&&(r=0);else if(34===e||39===e)r=e;else if(e===o){if(-1===a)return{data:String.fromCharCode(...s),index:n};if(t.charCodeAt(n+1)===a)return{data:String.fromCharCode(...s),index:n}}else if(9===e){s.push(32);continue}s.push(e)}}(t,e+1,r);if(!s)return;let i=s.data;const o=s.index,a=i.search(/\s/);let l=i,c=!0;-1!==a&&(l=i.substring(0,a),i=i.substring(a+1).trimStart());const u=l;if(n){const t=l.indexOf(":");-1!==t&&(l=l.substr(t+1),c=l!==s.data.substr(t+1))}return{tagName:l,tagExp:i,closeIndex:o,attrExpPresent:c,rawTagName:u}}function Bn(t,e,n){const r=n;let s=1;const i=t.length;for(;n<i;n++)if("<"===t[n]){const i=t.charCodeAt(n+1);if(47===i){const i=kn(t,">",n,`${e} is not closed`);if(t.substring(n+2,i).trim()===e&&(s--,0===s))return{tagContent:t.substring(r,n),i};n=i}else if(63===i)n=Un(t,"?>",n+1,"StopNode is not closed.");else if(33===i&&45===t.charCodeAt(n+2)&&45===t.charCodeAt(n+3))n=Un(t,"--\x3e",n+3,"StopNode is not closed.");else if(33===i&&91===t.charCodeAt(n+2))n=Un(t,"]]>",n,"StopNode is not closed.")-2;else{const r=Fn(t,n,">");r&&((r&&r.tagName)===e&&"/"!==r.tagExp[r.tagExp.length-1]&&s++,n=r.closeIndex)}}}function Mn(t,e,n){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&function(t,e={}){if(e=Object.assign({},on,e),!t||"string"!=typeof t)return t;let n=t.trim();if(0===n.length)return t;if(void 0!==e.skipLike&&e.skipLike.test(n))return t;if("0"===n)return 0;if(e.hex&&rn.test(n))return function(t){if(parseInt)return parseInt(t,16);if(Number.parseInt)return Number.parseInt(t,16);if(window&&window.parseInt)return window.parseInt(t,16);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}(n);if(isFinite(n)){if(n.includes("e")||n.includes("E"))return function(t,e,n){if(!n.eNotation)return t;const r=e.match(an);if(r){let s=r[1]||"";const i=-1===r[3].indexOf("e")?"E":"e",o=r[2],a=s?t[o.length+1]===i:t[o.length]===i;return o.length>1&&a?t:(1!==o.length||!r[3].startsWith(`.${i}`)&&r[3][0]!==i)&&o.length>0?n.leadingZeros&&!a?(e=(r[1]||"")+r[3],Number(e)):t:Number(e)}return t}(t,n,e);{const s=sn.exec(n);if(s){const i=s[1]||"",o=s[2];let a=(r=s[3])&&-1!==r.indexOf(".")?("."===(r=r.replace(/0+$/,""))?r="0":"."===r[0]?r="0"+r:"."===r[r.length-1]&&(r=r.substring(0,r.length-1)),r):r;const l=i?"."===t[o.length+1]:"."===t[o.length];if(!e.leadingZeros&&(o.length>1||1===o.length&&!l))return t;{const r=Number(n),s=String(r);if(0===r)return r;if(-1!==s.search(/[eE]/))return e.eNotation?r:t;if(-1!==n.indexOf("."))return"0"===s||s===a||s===`${i}${a}`?r:t;let l=o?a:n;return o?l===s||i+l===s?r:t:l===s||l===i+s?r:t}}return t}}var r;return function(t,e,n){const r=e===1/0;switch(n.infinity.toLowerCase()){case"null":return null;case"infinity":return e;case"string":return r?"Infinity":"-Infinity";default:return t}}(t,Number(n),e)}(t,n)}return void 0!==t?t:""}function $n(t,e,n,r){if(t){const r=t(e);n===e&&(n=r),e=r}return{tagName:e=qn(e,r),tagExp:n}}function qn(t,e){if(Ae.includes(t))throw new Error(`[SECURITY] Invalid name: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`);return Oe.includes(t)?e.onDangerousProperty(t):t}const Vn=Ze.getMetaDataSymbol();function Wn(t,e){if(!t||"object"!=typeof t)return{};if(!e)return t;const n={};for(const r in t)r.startsWith(e)?n[r.substring(e.length)]=t[r]:n[r]=t[r];return n}function zn(t,e,n,r){return Jn(t,e,n,r)}function Jn(t,e,n,r){let s;const i={};for(let o=0;o<t.length;o++){const a=t[o],l=Hn(a);if(void 0!==l&&l!==e.textNodeName){const t=Wn(a[":@"]||{},e.attributeNamePrefix);n.push(l,t)}if(l===e.textNodeName)void 0===s?s=a[l]:s+=""+a[l];else{if(void 0===l)continue;if(a[l]){let t=Jn(a[l],e,n,r);const s=Xn(t,e);if(a[":@"]?Kn(t,a[":@"],r,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==a[Vn]&&"object"==typeof t&&null!==t&&(t[Vn]=a[Vn]),void 0!==i[l]&&Object.prototype.hasOwnProperty.call(i,l))Array.isArray(i[l])||(i[l]=[i[l]]),i[l].push(t);else{const n=e.jPath?r.toString():r;e.isArray(l,n,s)?i[l]=[t]:i[l]=t}void 0!==l&&l!==e.textNodeName&&n.pop()}}}return"string"==typeof s?s.length>0&&(i[e.textNodeName]=s):void 0!==s&&(i[e.textNodeName]=s),i}function Hn(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const n=e[t];if(":@"!==n)return n}}function Kn(t,e,n,r){if(e){const s=Object.keys(e),i=s.length;for(let o=0;o<i;o++){const i=s[o],a=i.startsWith(r.attributeNamePrefix)?i.substring(r.attributeNamePrefix.length):i,l=r.jPath?n.toString()+"."+a:n;r.isArray(i,l,!0,!0)?t[i]=[e[i]]:t[i]=e[i]}}}function Xn(t,e){const{textNodeName:n}=e,r=Object.keys(t).length;return 0===r||!(1!==r||!t[n]&&"boolean"!=typeof t[n]&&0!==t[n])}class Yn{constructor(t){this.externalEntities={},this.options=Ye(t)}parse(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});const n=Ce(t,e);if(!0!==n)throw Error(`${n.err.msg}:${n.err.line}:${n.err.col}`)}const n=new Tn(this.options);n.entityReplacer.setExternalEntities(this.externalEntities);const r=n.parseXml(t);return this.options.preserveOrder||void 0===r?r:zn(r,this.options,n.matcher,n.readonlyMatcher)}addEntity(t,e){if(-1!==e.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==t.indexOf("&")||-1!==t.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'");if("&"===e)throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=e}static getMetaDataSymbol(){return Ze.getMetaDataSymbol()}}const Gn=we.create({baseURL:r,timeout:3e4,maxRedirects:0});Gn.interceptors.request.use(t=>{const e=s(t.url);return e.pathname=e.pathname+".sitemap.xml",e.searchParams.set("_",Date.now()),t.url=e.toString(),t},t=>Promise.reject(t)),Gn.interceptors.response.use(t=>(t.data=Zn(t.data),t),t=>Promise.reject(t));const Zn=t=>{const e=ze.validate(t);if(!0!==e)throw new Error(e.err.msg);const n=(new Yn).parse(t),r=n.urlset?.url||[];return(Array.isArray(r)?r:[r]).filter(t=>t.loc).map(t=>({path:s(t.loc).pathname,lastmod:t.lastmod?new Date(t.lastmod).toISOString():null}))},Qn=Gn,tr=we.create({baseURL:r,timeout:5e3,maxRedirects:0});tr.interceptors.request.use(t=>{const e=s(t.url);return e.pathname=e.pathname+".html",e.searchParams.set("_",Date.now()),t.url=e.toString(),t},t=>Promise.reject(t));const er=tr,nr=we.create({baseURL:r,timeout:5e3,maxRedirects:0});nr.interceptors.request.use(t=>{const e=s(t.url);return e.pathname=e.pathname+"/_jcr_content.json",e.searchParams.set("_",Date.now()),t.url=e.toString(),t},t=>Promise.reject(t)),nr.interceptors.response.use(t=>(t.data=ir(t.data),t),t=>Promise.reject(t));const rr={Jan:"01",Feb:"02",Mar:"03",Apr:"04",May:"05",Jun:"06",Jul:"07",Aug:"08",Sep:"09",Oct:"10",Nov:"11",Dec:"12"};function sr(t){if(/^\d{4}-\d{2}-\d{2}$/.test(t))return new Date(t).toISOString();let e=/^\w{3} (\w{3}) (\d{2}) (\d{4}) ([\d:]{8}) GMT([\-+]\d{4})$/.exec(t);return e?new Date(`${e[3]}-${rr[e[1]]}-${e[2]}T${e[4]}${e[5]}`).toISOString():t}const ir=t=>{const e={};for(const[n,r]of Object.entries(t))n.endsWith("@TypeHint")||Array.isArray(r)&&0===r.length||("true"===r?e[n]=!0:"false"===r?e[n]=!1:"gcAltLanguagePeer"===n?(e[n]=r,e.peer=s(r).pathname):e[n]="string"==typeof r?sr(r.trim()):r);return Object.keys(e).sort().reduce((t,n)=>(t[n]=e[n],t),{})},or={normalize:s,request:ve,children:Qn,content:er,meta:nr};return e})());
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("ca",[],e):"object"==typeof exports?exports.ca=e():t.ca=e()}(Object("undefined"!=typeof self?self:this),()=>(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{default:()=>kt});const n="https://www.canada.ca",r=t=>{if("string"==typeof t)t=new URL(t,n);else{if(!(t instanceof URL))throw new TypeError("string or URL object expected");t=new URL(t.href)}if(t.origin!==n)throw new Error("URL must start with "+n);if(t.pathname=t.pathname.replace(/^\/content\/canadasite/,""),t.pathname=t.pathname.replace(/\.[^/]*$/,"").replace(/\/+$/,""),!t.pathname.startsWith("/en/")&&!t.pathname.startsWith("/fr/"))throw new Error(`Invalid path: "${t.pathname}" must start with /en/ or /fr/`);return t},i=async(t,e={})=>{const r=await fetch(new URL(t,n),{signal:AbortSignal.timeout(3e4),headers:{"User-Agent":"canada-api/5.0",Accept:"*/*",...e.headers},...e});if(!r.ok){const t=new Error(`${r.status} ${r.statusText}`);throw t.status=r.status,t}return{data:await r.text(),status:r.status,statusText:r.statusText,headers:r.headers}},s=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",a=new RegExp("^["+s+"]["+s+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function o(t,e){const n=[];let r=e.exec(t);for(;r;){const i=[];i.startIndex=e.lastIndex-r[0].length;const s=r.length;for(let t=0;t<s;t++)i.push(r[t]);n.push(i),r=e.exec(t)}return n}const l=function(t){return!(null==a.exec(t))},h=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],c=["__proto__","constructor","prototype"],u=t=>h.includes(t)?"__"+t:t,d={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,entityDecoder:null,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,n){return t},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:u};function p(t,e){if("string"!=typeof t)return;const n=t.toLowerCase();if(h.some(t=>n===t.toLowerCase()))throw new Error(`[SECURITY] Invalid ${e}: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`);if(c.some(t=>n===t.toLowerCase()))throw new Error(`[SECURITY] Invalid ${e}: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`)}function f(t,e){return"boolean"==typeof t?{enabled:t,maxEntitySize:1e4,maxExpansionDepth:1e4,maxTotalExpansions:1/0,maxExpandedLength:1e5,maxEntityCount:1e3,allowedTags:null,tagFilter:null,appliesTo:"all"}:"object"==typeof t&&null!==t?{enabled:!1!==t.enabled,maxEntitySize:Math.max(1,t.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,t.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,t.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,t.maxExpandedLength??1e5),maxEntityCount:Math.max(1,t.maxEntityCount??1e3),allowedTags:t.allowedTags??null,tagFilter:t.tagFilter??null,appliesTo:t.appliesTo??"all"}:f(!0)}const g=function(t){const e=Object.assign({},d,t),n=[{value:e.attributeNamePrefix,name:"attributeNamePrefix"},{value:e.attributesGroupName,name:"attributesGroupName"},{value:e.textNodeName,name:"textNodeName"},{value:e.cdataPropName,name:"cdataPropName"},{value:e.commentPropName,name:"commentPropName"}];for(const{value:t,name:e}of n)t&&p(t,e);return null===e.onDangerousProperty&&(e.onDangerousProperty=u),e.processEntities=f(e.processEntities,e.htmlEntities),e.unpairedTagsSet=new Set(e.unpairedTags),e.stopNodes&&Array.isArray(e.stopNodes)&&(e.stopNodes=e.stopNodes.map(t=>"string"==typeof t&&t.startsWith("*.")?".."+t.substring(2):t)),e};let m;m="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class x{constructor(t){this.tagname=t,this.child=[],this[":@"]=Object.create(null)}add(t,e){"__proto__"===t&&(t="#__proto__"),this.child.push({[t]:e})}addChild(t,e){"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),void 0!==e&&(this.child[this.child.length-1][m]={startIndex:e})}static getMetaDataSymbol(){return m}}class E{constructor(t){this.suppressValidationErr=!t,this.options=t}readDocType(t,e){const n=Object.create(null);let r=0;if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let i=1,s=!1,a=!1,o="";for(;e<t.length;e++)if("<"!==t[e]||a)if(">"===t[e]){if(a?"-"===t[e-1]&&"-"===t[e-2]&&(a=!1,i--):i--,0===i)break}else"["===t[e]?s=!0:o+=t[e];else{if(s&&y(t,"!ENTITY",e)){let i,s;if(e+=7,[i,s,e]=this.readEntityExp(t,e+1,this.suppressValidationErr),-1===s.indexOf("&")){if(!1!==this.options.enabled&&null!=this.options.maxEntityCount&&r>=this.options.maxEntityCount)throw new Error(`Entity count (${r+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);n[i]=s,r++}}else if(s&&y(t,"!ELEMENT",e)){e+=8;const{index:n}=this.readElementExp(t,e+1);e=n}else if(s&&y(t,"!ATTLIST",e))e+=8;else if(s&&y(t,"!NOTATION",e)){e+=9;const{index:n}=this.readNotationExp(t,e+1,this.suppressValidationErr);e=n}else{if(!y(t,"!--",e))throw new Error("Invalid DOCTYPE");a=!0}i++,o=""}if(0!==i)throw new Error("Unclosed DOCTYPE")}return{entities:n,i:e}}readEntityExp(t,e){const n=e=w(t,e);for(;e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)e++;let r=t.substring(n,e);if(b(r),e=w(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}let i="";if([e,i]=this.readIdentifierVal(t,e,"entity"),!1!==this.options.enabled&&null!=this.options.maxEntitySize&&i.length>this.options.maxEntitySize)throw new Error(`Entity "${r}" size (${i.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return[r,i,--e]}readNotationExp(t,e){const n=e=w(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let r=t.substring(n,e);!this.suppressValidationErr&&b(r),e=w(t,e);const i=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==i&&"PUBLIC"!==i)throw new Error(`Expected SYSTEM or PUBLIC, found "${i}"`);e+=i.length,e=w(t,e);let s=null,a=null;if("PUBLIC"===i)[e,s]=this.readIdentifierVal(t,e,"publicIdentifier"),'"'!==t[e=w(t,e)]&&"'"!==t[e]||([e,a]=this.readIdentifierVal(t,e,"systemIdentifier"));else if("SYSTEM"===i&&([e,a]=this.readIdentifierVal(t,e,"systemIdentifier"),!this.suppressValidationErr&&!a))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:r,publicIdentifier:s,systemIdentifier:a,index:--e}}readIdentifierVal(t,e,n){let r="";const i=t[e];if('"'!==i&&"'"!==i)throw new Error(`Expected quoted string, found "${i}"`);const s=++e;for(;e<t.length&&t[e]!==i;)e++;if(r=t.substring(s,e),t[e]!==i)throw new Error(`Unterminated ${n} value`);return[++e,r]}readElementExp(t,e){const n=e=w(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let r=t.substring(n,e);if(!this.suppressValidationErr&&!l(r))throw new Error(`Invalid element name: "${r}"`);let i="";if("E"===t[e=w(t,e)]&&y(t,"MPTY",e))e+=4;else if("A"===t[e]&&y(t,"NY",e))e+=2;else if("("===t[e]){const n=++e;for(;e<t.length&&")"!==t[e];)e++;if(i=t.substring(n,e),")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[e]}"`);return{elementName:r,contentModel:i.trim(),index:e}}readAttlistExp(t,e){let n=e=w(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let r=t.substring(n,e);for(b(r),n=e=w(t,e);e<t.length&&!/\s/.test(t[e]);)e++;let i=t.substring(n,e);if(!b(i))throw new Error(`Invalid attribute name: "${i}"`);e=w(t,e);let s="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(s="NOTATION","("!==t[e=w(t,e+=8)])throw new Error(`Expected '(', found "${t[e]}"`);e++;let n=[];for(;e<t.length&&")"!==t[e];){const r=e;for(;e<t.length&&"|"!==t[e]&&")"!==t[e];)e++;let i=t.substring(r,e);if(i=i.trim(),!b(i))throw new Error(`Invalid notation name: "${i}"`);n.push(i),"|"===t[e]&&(e++,e=w(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,s+=" ("+n.join("|")+")"}else{const n=e;for(;e<t.length&&!/\s/.test(t[e]);)e++;s+=t.substring(n,e);const r=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!r.includes(s.toUpperCase()))throw new Error(`Invalid attribute type: "${s}"`)}e=w(t,e);let a="";return"#REQUIRED"===t.substring(e,e+8).toUpperCase()?(a="#REQUIRED",e+=8):"#IMPLIED"===t.substring(e,e+7).toUpperCase()?(a="#IMPLIED",e+=7):[e,a]=this.readIdentifierVal(t,e,"ATTLIST"),{elementName:r,attributeName:i,attributeType:s,defaultValue:a,index:e}}}const w=(t,e)=>{for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function y(t,e,n){for(let r=0;r<e.length;r++)if(e[r]!==t[n+r+1])return!1;return!0}function b(t){if(l(t))return t;throw new Error(`Invalid entity name ${t}`)}const N=/^[-+]?0x[a-fA-F0-9]+$/,v=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,_={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0,infinity:"original"};const S=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;class T{constructor(t){this._matcher=t}get separator(){return this._matcher.separator}getCurrentTag(){const t=this._matcher.path;return t.length>0?t[t.length-1].tag:void 0}getCurrentNamespace(){const t=this._matcher.path;return t.length>0?t[t.length-1].namespace:void 0}getAttrValue(t){const e=this._matcher.path;if(0!==e.length)return e[e.length-1].values?.[t]}hasAttr(t){const e=this._matcher.path;if(0===e.length)return!1;const n=e[e.length-1];return void 0!==n.values&&t in n.values}getPosition(){const t=this._matcher.path;return 0===t.length?-1:t[t.length-1].position??0}getCounter(){const t=this._matcher.path;return 0===t.length?-1:t[t.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(t,e=!0){return this._matcher.toString(t,e)}toArray(){return this._matcher.path.map(t=>t.tag)}matches(t){return this._matcher.matches(t)}matchesAny(t){return t.matchesAny(this._matcher)}}class C{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new T(this)}push(t,e=null,n=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const r=this.path.length;this.siblingStacks[r]||(this.siblingStacks[r]=new Map);const i=this.siblingStacks[r],s=n?`${n}:${t}`:t,a=i.get(s)||0;let o=0;for(const t of i.values())o+=t;i.set(s,a+1);const l={tag:t,position:o,counter:a};null!=n&&(l.namespace=n),null!=e&&(l.values=e),this.path.push(l)}pop(){if(0===this.path.length)return;this._pathStringCache=null;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0!==this.path.length)return this.path[this.path.length-1].values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const n=t||this.separator;if(n===this.separator&&!0===e){if(null!==this._pathStringCache)return this._pathStringCache;const t=this.path.map(t=>t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(n);return this._pathStringCache=t,t}return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(n)}toArray(){return this.path.map(t=>t.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++)if(!this._matchSegment(t[e],this.path[e],e===this.path.length-1))return!1;return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,n=t.length-1;for(;n>=0&&e>=0;){const r=t[n];if("deep-wildcard"===r.type){if(n--,n<0)return!0;const r=t[n];let i=!1;for(let t=e;t>=0;t--)if(this._matchSegment(r,this.path[t],t===this.path.length-1)){e=t-1,n--,i=!0;break}if(!i)return!1}else{if(!this._matchSegment(r,this.path[e],e===this.path.length-1))return!1;e--,n--}}return n<0}_matchSegment(t,e,n){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!n)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue&&String(e.values[t.attrName])!==String(t.attrValue))return!1}if(void 0!==t.position){if(!n)return!1;const r=e.counter??0;if("first"===t.position&&0!==r)return!1;if("odd"===t.position&&r%2!=1)return!1;if("even"===t.position&&r%2!=0)return!1;if("nth"===t.position&&r!==t.positionValue)return!1}return!0}matchesAny(t){return t.matchesAny(this)}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this._pathStringCache=null,this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}readOnly(){return this._view}}class A{constructor(t,e={},n){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this.data=n,this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let n=0,r="";for(;n<t.length;)t[n]===this.separator?n+1<t.length&&t[n+1]===this.separator?(r.trim()&&(e.push(this._parseSegment(r.trim())),r=""),e.push({type:"deep-wildcard"}),n+=2):(r.trim()&&e.push(this._parseSegment(r.trim())),r="",n++):(r+=t[n],n++);return r.trim()&&e.push(this._parseSegment(r.trim())),e}_parseSegment(t){const e={type:"tag"};let n=null,r=t;const i=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(i&&(r=i[1]+i[3],i[2])){const t=i[2].slice(1,-1);t&&(n=t)}let s,a,o=r;if(r.includes("::")){const e=r.indexOf("::");if(s=r.substring(0,e).trim(),o=r.substring(e+2).trim(),!s)throw new Error(`Invalid namespace in pattern: ${t}`)}let l=null;if(o.includes(":")){const t=o.lastIndexOf(":"),e=o.substring(0,t).trim(),n=o.substring(t+1).trim();["first","last","odd","even"].includes(n)||/^nth\(\d+\)$/.test(n)?(a=e,l=n):a=o}else a=o;if(!a)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=a,s&&(e.namespace=s),n)if(n.includes("=")){const t=n.indexOf("=");e.attrName=n.substring(0,t).trim(),e.attrValue=n.substring(t+1).trim()}else e.attrName=n.trim();if(l){const t=l.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=l}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}class I{constructor(){this._byDepthAndTag=new Map,this._wildcardByDepth=new Map,this._deepWildcards=[],this._patterns=new Set,this._sealed=!1}add(t){if(this._sealed)throw new TypeError("ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.");if(this._patterns.has(t.pattern))return this;if(this._patterns.add(t.pattern),t.hasDeepWildcard())return this._deepWildcards.push(t),this;const e=t.length,n=t.segments[t.segments.length-1],r=n?.tag;if(r&&"*"!==r){const n=`${e}:${r}`;this._byDepthAndTag.has(n)||this._byDepthAndTag.set(n,[]),this._byDepthAndTag.get(n).push(t)}else this._wildcardByDepth.has(e)||this._wildcardByDepth.set(e,[]),this._wildcardByDepth.get(e).push(t);return this}addAll(t){for(const e of t)this.add(e);return this}has(t){return this._patterns.has(t.pattern)}get size(){return this._patterns.size}seal(){return this._sealed=!0,this}get isSealed(){return this._sealed}matchesAny(t){return null!==this.findMatch(t)}findMatch(t){const e=t.getDepth(),n=`${e}:${t.getCurrentTag()}`,r=this._byDepthAndTag.get(n);if(r)for(let e=0;e<r.length;e++)if(t.matches(r[e]))return r[e];const i=this._wildcardByDepth.get(e);if(i)for(let e=0;e<i.length;e++)if(t.matches(i[e]))return i[e];for(let e=0;e<this._deepWildcards.length;e++)if(t.matches(this._deepWildcards[e]))return this._deepWildcards[e];return null}}const P={cent:"¢",pound:"£",curren:"¤",yen:"¥",euro:"€",dollar:"$",euro:"€",fnof:"ƒ",inr:"₹",af:"؋",birr:"ብር",peso:"₱",rub:"₽",won:"₩",yuan:"¥",cedil:"¸"},D={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'},O={nbsp:" ",copy:"©",reg:"®",trade:"™",mdash:"—",ndash:"–",hellip:"…",laquo:"«",raquo:"»",lsquo:"‘",rsquo:"’",ldquo:"“",rdquo:"”",bull:"•",para:"¶",sect:"§",deg:"°",frac12:"½",frac14:"¼",frac34:"¾"},M=new Set("!?\\\\/[]$%{}^&*()<>|+");function $(t){if("#"===t[0])throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${t}"`);for(const e of t)if(M.has(e))throw new Error(`[EntityReplacer] Invalid character '${e}' in entity name: "${t}"`);return t}function L(...t){const e=Object.create(null);for(const n of t)if(n)for(const t of Object.keys(n)){const r=n[t];if("string"==typeof r)e[t]=r;else if(r&&"object"==typeof r&&void 0!==r.val){const n=r.val;"string"==typeof n&&(e[t]=n)}}return e}const k="external",j="base",V="all",F=Object.freeze({allow:0,leave:1,remove:2,throw:3}),R=new Set([9,10,13]);class U{constructor(t={}){var e;this._limit=t.limit||{},this._maxTotalExpansions=this._limit.maxTotalExpansions||0,this._maxExpandedLength=this._limit.maxExpandedLength||0,this._postCheck="function"==typeof t.postCheck?t.postCheck:t=>t,this._limitTiers=(e=this._limit.applyLimitsTo??k)&&e!==k?e===V?new Set([V]):e===j?new Set([j]):Array.isArray(e)?new Set(e):new Set([k]):new Set([k]),this._numericAllowed=t.numericAllowed??!0,this._baseMap=L(D,t.namedEntities||null),this._externalMap=Object.create(null),this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this._removeSet=new Set(t.remove&&Array.isArray(t.remove)?t.remove:[]),this._leaveSet=new Set(t.leave&&Array.isArray(t.leave)?t.leave:[]);const n=function(t){if(!t)return{xmlVersion:1,onLevel:F.allow,nullLevel:F.remove};const e=1.1===t.xmlVersion?1.1:1,n=F[t.onNCR]??F.allow,r=F[t.nullNCR]??F.remove;return{xmlVersion:e,onLevel:n,nullLevel:Math.max(r,F.remove)}}(t.ncr);this._ncrXmlVersion=n.xmlVersion,this._ncrOnLevel=n.onLevel,this._ncrNullLevel=n.nullLevel}setExternalEntities(t){if(t)for(const e of Object.keys(t))$(e);this._externalMap=L(t)}addExternalEntity(t,e){$(t),"string"==typeof e&&-1===e.indexOf("&")&&(this._externalMap[t]=e)}addInputEntities(t){this._totalExpansions=0,this._expandedLength=0,this._inputMap=L(t)}reset(){return this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this}setXmlVersion(t){this._ncrXmlVersion=1.1===t?1.1:1}decode(t){if("string"!=typeof t||0===t.length)return t;const e=t,n=[],r=t.length;let i=0,s=0;const a=this._maxTotalExpansions>0,o=this._maxExpandedLength>0,l=a||o;for(;s<r;){if(38!==t.charCodeAt(s)){s++;continue}let e=s+1;for(;e<r&&59!==t.charCodeAt(e)&&e-s<=32;)e++;if(e>=r||59!==t.charCodeAt(e)){s++;continue}const h=t.slice(s+1,e);if(0===h.length){s++;continue}let c,u;if(this._removeSet.has(h))c="",void 0===u&&(u=k);else{if(this._leaveSet.has(h)){s++;continue}if(35===h.charCodeAt(0)){const t=this._resolveNCR(h);if(void 0===t){s++;continue}c=t,u=j}else{const t=this._resolveName(h);c=t?.value,u=t?.tier}}if(void 0!==c){if(s>i&&n.push(t.slice(i,s)),n.push(c),i=e+1,s=i,l&&this._tierCounts(u)){if(a&&(this._totalExpansions++,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);if(o){const t=c.length-(h.length+2);if(t>0&&(this._expandedLength+=t,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}}}else s++}i<r&&n.push(t.slice(i));const h=0===n.length?t:n.join("");return this._postCheck(h,e)}_tierCounts(t){return!!this._limitTiers.has(V)||this._limitTiers.has(t)}_resolveName(t){return t in this._inputMap?{value:this._inputMap[t],tier:k}:t in this._externalMap?{value:this._externalMap[t],tier:k}:t in this._baseMap?{value:this._baseMap[t],tier:j}:void 0}_classifyNCR(t){return 0===t?this._ncrNullLevel:t>=55296&&t<=57343||1===this._ncrXmlVersion&&t>=1&&t<=31&&!R.has(t)?F.remove:-1}_applyNCRAction(t,e,n){switch(t){case F.allow:return String.fromCodePoint(n);case F.remove:return"";case F.leave:return;case F.throw:throw new Error(`[EntityDecoder] Prohibited numeric character reference &${e}; (U+${n.toString(16).toUpperCase().padStart(4,"0")})`);default:return String.fromCodePoint(n)}}_resolveNCR(t){const e=t.charCodeAt(1);let n;if(n=120===e||88===e?parseInt(t.slice(2),16):parseInt(t.slice(1),10),Number.isNaN(n)||n<0||n>1114111)return;const r=this._classifyNCR(n);if(!this._numericAllowed&&r<F.remove)return;const i=-1===r?this._ncrOnLevel:Math.max(this._ncrOnLevel,r);return this._applyNCRAction(i,t,n)}}function W(t,e){if(!t)return{};const n=e.attributesGroupName?t[e.attributesGroupName]:t;if(!n)return{};const r={};for(const t in n)t.startsWith(e.attributeNamePrefix)?r[t.substring(e.attributeNamePrefix.length)]=n[t]:r[t]=n[t];return r}function Y(t){if(!t||"string"!=typeof t)return;const e=t.indexOf(":");if(-1!==e&&e>0){const n=t.substring(0,e);if("xmlns"!==n)return n}}class X{constructor(t){var e;this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.parseXml=J,this.parseTextData=z,this.resolveNameSpace=B,this.buildAttributesMap=q,this.isItStopNode=H,this.replaceEntitiesValue=K,this.readStopNodeData=rt,this.saveTextToParentTag=Q,this.addChild=Z,this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?t=>{for(const n of e){if("string"==typeof n&&t===n)return!0;if(n instanceof RegExp&&n.test(t))return!0}}:()=>!1,this.entityExpansionCount=0,this.currentExpandedLength=0;let n={...D};this.options.entityDecoder?this.entityDecoder=this.options.entityDecoder:("object"==typeof this.options.htmlEntities?n=this.options.htmlEntities:!0===this.options.htmlEntities&&(n={...O,...P}),this.entityDecoder=new U({namedEntities:n,numericAllowed:this.options.htmlEntities,limit:{maxTotalExpansions:this.options.processEntities.maxTotalExpansions,maxExpandedLength:this.options.processEntities.maxExpandedLength,applyLimitsTo:this.options.processEntities.appliesTo}})),this.matcher=new C,this.readonlyMatcher=this.matcher.readOnly(),this.isCurrentNodeStopNode=!1,this.stopNodeExpressionsSet=new I;const r=this.options.stopNodes;if(r&&r.length>0){for(let t=0;t<r.length;t++){const e=r[t];"string"==typeof e?this.stopNodeExpressionsSet.add(new A(e)):e instanceof A&&this.stopNodeExpressionsSet.add(e)}this.stopNodeExpressionsSet.seal()}}}function z(t,e,n,r,i,s,a){const o=this.options;if(void 0!==t&&(o.trimValues&&!r&&(t=t.trim()),t.length>0)){a||(t=this.replaceEntitiesValue(t,e,n));const r=o.jPath?n.toString():n,l=o.tagValueProcessor(e,t,r,i,s);return null==l?t:typeof l!=typeof t||l!==t?l:o.trimValues||t.trim()===t?it(t,o.parseTagValue,o.numberParseOptions):t}}function B(t){if(this.options.removeNSPrefix){const e=t.split(":"),n="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=n+e[1])}return t}const G=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function q(t,e,n,r=!1){const i=this.options;if(!0===r||!0!==i.ignoreAttributes&&"string"==typeof t){const r=o(t,G),s=r.length,a={},l=new Array(s);let h=!1;const c={};for(let t=0;t<s;t++){const e=this.resolveNameSpace(r[t][1]),s=r[t][4];if(e.length&&void 0!==s){let r=s;i.trimValues&&(r=r.trim()),r=this.replaceEntitiesValue(r,n,this.readonlyMatcher),l[t]=r,c[e]=r,h=!0}}h&&"object"==typeof e&&e.updateCurrent&&e.updateCurrent(c);const u=i.jPath?e.toString():this.readonlyMatcher;let d=!1;for(let t=0;t<s;t++){const e=this.resolveNameSpace(r[t][1]);if(this.ignoreAttributesFn(e,u))continue;let n=i.attributeNamePrefix+e;if(e.length)if(i.transformAttributeName&&(n=i.transformAttributeName(n)),n=at(n,i),void 0!==r[t][4]){const r=l[t],s=i.attributeValueProcessor(e,r,u);a[n]=null==s?r:typeof s!=typeof r||s!==r?s:it(r,i.parseAttributeValue,i.numberParseOptions),d=!0}else i.allowBooleanAttributes&&(a[n]=!0,d=!0)}if(!d)return;if(i.attributesGroupName){const t={};return t[i.attributesGroupName]=a,t}return a}}const J=function(t){t=t.replace(/\r\n?/g,"\n");const e=new x("!xml");let n=e,r="";this.matcher.reset(),this.entityDecoder.reset(),this.entityExpansionCount=0,this.currentExpandedLength=0;const i=this.options,s=new E(i.processEntities),a=t.length;for(let o=0;o<a;o++)if("<"===t[o]){const l=t.charCodeAt(o+1);if(47===l){const e=tt(t,">",o,"Closing Tag is not closed.");let s=t.substring(o+2,e).trim();if(i.removeNSPrefix){const t=s.indexOf(":");-1!==t&&(s=s.substr(t+1))}s=st(i.transformTagName,s,"",i).tagName,n&&(r=this.saveTextToParentTag(r,n,this.readonlyMatcher));const a=this.matcher.getCurrentTag();if(s&&i.unpairedTagsSet.has(s))throw new Error(`Unpaired tag can not be used as closing tag: </${s}>`);a&&i.unpairedTagsSet.has(a)&&(this.matcher.pop(),this.tagsNodeStack.pop()),this.matcher.pop(),this.isCurrentNodeStopNode=!1,n=this.tagsNodeStack.pop(),r="",o=e}else if(63===l){let e=nt(t,o,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");r=this.saveTextToParentTag(r,n,this.readonlyMatcher);const s=this.buildAttributesMap(e.tagExp,this.matcher,e.tagName,!0);if(s){const t=s[this.options.attributeNamePrefix+"version"];this.entityDecoder.setXmlVersion(Number(t)||1)}if(i.ignoreDeclaration&&"?xml"===e.tagName||i.ignorePiTags);else{const t=new x(e.tagName);t.add(i.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&!0!==i.ignoreAttributes&&(t[":@"]=s),this.addChild(n,t,this.readonlyMatcher,o)}o=e.closeIndex+1}else if(33===l&&45===t.charCodeAt(o+2)&&45===t.charCodeAt(o+3)){const e=tt(t,"--\x3e",o+4,"Comment is not closed.");if(i.commentPropName){const s=t.substring(o+4,e-2);r=this.saveTextToParentTag(r,n,this.readonlyMatcher),n.add(i.commentPropName,[{[i.textNodeName]:s}])}o=e}else if(33===l&&68===t.charCodeAt(o+2)){const e=s.readDocType(t,o);this.entityDecoder.addInputEntities(e.entities),o=e.i}else if(33===l&&91===t.charCodeAt(o+2)){const e=tt(t,"]]>",o,"CDATA is not closed.")-2,s=t.substring(o+9,e);r=this.saveTextToParentTag(r,n,this.readonlyMatcher);let a=this.parseTextData(s,n.tagname,this.readonlyMatcher,!0,!1,!0,!0);null==a&&(a=""),i.cdataPropName?n.add(i.cdataPropName,[{[i.textNodeName]:s}]):n.add(i.textNodeName,a),o=e+2}else{let s=nt(t,o,i.removeNSPrefix);if(!s){const e=t.substring(Math.max(0,o-50),Math.min(a,o+50));throw new Error(`readTagExp returned undefined at position ${o}. Context: "${e}"`)}let l=s.tagName;const h=s.rawTagName;let c=s.tagExp,u=s.attrExpPresent,d=s.closeIndex;if(({tagName:l,tagExp:c}=st(i.transformTagName,l,c,i)),i.strictReservedNames&&(l===i.commentPropName||l===i.cdataPropName||l===i.textNodeName||l===i.attributesGroupName))throw new Error(`Invalid tag name: ${l}`);n&&r&&"!xml"!==n.tagname&&(r=this.saveTextToParentTag(r,n,this.readonlyMatcher,!1));const p=n;p&&i.unpairedTagsSet.has(p.tagname)&&(n=this.tagsNodeStack.pop(),this.matcher.pop());let f=!1;c.length>0&&c.lastIndexOf("/")===c.length-1&&(f=!0,"/"===l[l.length-1]?(l=l.substr(0,l.length-1),c=l):c=c.substr(0,c.length-1),u=l!==c);let g,m=null,E={};g=Y(h),l!==e.tagname&&this.matcher.push(l,{},g),l!==c&&u&&(m=this.buildAttributesMap(c,this.matcher,l),m&&(E=W(m,i))),l!==e.tagname&&(this.isCurrentNodeStopNode=this.isItStopNode());const w=o;if(this.isCurrentNodeStopNode){let e="";if(f)o=s.closeIndex;else if(i.unpairedTagsSet.has(l))o=s.closeIndex;else{const n=this.readStopNodeData(t,h,d+1);if(!n)throw new Error(`Unexpected end of ${h}`);o=n.i,e=n.tagContent}const r=new x(l);m&&(r[":@"]=m),r.add(i.textNodeName,e),this.matcher.pop(),this.isCurrentNodeStopNode=!1,this.addChild(n,r,this.readonlyMatcher,w)}else{if(f){({tagName:l,tagExp:c}=st(i.transformTagName,l,c,i));const t=new x(l);m&&(t[":@"]=m),this.addChild(n,t,this.readonlyMatcher,w),this.matcher.pop(),this.isCurrentNodeStopNode=!1}else{if(i.unpairedTagsSet.has(l)){const t=new x(l);m&&(t[":@"]=m),this.addChild(n,t,this.readonlyMatcher,w),this.matcher.pop(),this.isCurrentNodeStopNode=!1,o=s.closeIndex;continue}{const t=new x(l);if(this.tagsNodeStack.length>i.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(n),m&&(t[":@"]=m),this.addChild(n,t,this.readonlyMatcher,w),n=t}}r="",o=d}}}else r+=t[o];return e.child};function Z(t,e,n,r){this.options.captureMetaData||(r=void 0);const i=this.options.jPath?n.toString():n,s=this.options.updateTag(e.tagname,i,e[":@"]);!1===s||("string"==typeof s?(e.tagname=s,t.addChild(e,r)):t.addChild(e,r))}function K(t,e,n){const r=this.options.processEntities;if(!r||!r.enabled)return t;if(r.allowedTags){const i=this.options.jPath?n.toString():n;if(!(Array.isArray(r.allowedTags)?r.allowedTags.includes(e):r.allowedTags(e,i)))return t}if(r.tagFilter){const i=this.options.jPath?n.toString():n;if(!r.tagFilter(e,i))return t}return this.entityDecoder.decode(t)}function Q(t,e,n,r){return t&&(void 0===r&&(r=0===e.child.length),void 0!==(t=this.parseTextData(t,e.tagname,n,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,r))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function H(){return 0!==this.stopNodeExpressionsSet.size&&this.matcher.matchesAny(this.stopNodeExpressionsSet)}function tt(t,e,n,r){const i=t.indexOf(e,n);if(-1===i)throw new Error(r);return i+e.length-1}function et(t,e,n,r){const i=t.indexOf(e,n);if(-1===i)throw new Error(r);return i}function nt(t,e,n,r=">"){const i=function(t,e,n=">"){let r=0;const i=[],s=t.length,a=n.charCodeAt(0),o=n.length>1?n.charCodeAt(1):-1;for(let n=e;n<s;n++){const e=t.charCodeAt(n);if(r)e===r&&(r=0);else if(34===e||39===e)r=e;else if(e===a){if(-1===o)return{data:String.fromCharCode(...i),index:n};if(t.charCodeAt(n+1)===o)return{data:String.fromCharCode(...i),index:n}}else if(9===e){i.push(32);continue}i.push(e)}}(t,e+1,r);if(!i)return;let s=i.data;const a=i.index,o=s.search(/\s/);let l=s,h=!0;-1!==o&&(l=s.substring(0,o),s=s.substring(o+1).trimStart());const c=l;if(n){const t=l.indexOf(":");-1!==t&&(l=l.substr(t+1),h=l!==i.data.substr(t+1))}return{tagName:l,tagExp:s,closeIndex:a,attrExpPresent:h,rawTagName:c}}function rt(t,e,n){const r=n;let i=1;const s=t.length;for(;n<s;n++)if("<"===t[n]){const s=t.charCodeAt(n+1);if(47===s){const s=et(t,">",n,`${e} is not closed`);if(t.substring(n+2,s).trim()===e&&(i--,0===i))return{tagContent:t.substring(r,n),i:s};n=s}else if(63===s)n=tt(t,"?>",n+1,"StopNode is not closed.");else if(33===s&&45===t.charCodeAt(n+2)&&45===t.charCodeAt(n+3))n=tt(t,"--\x3e",n+3,"StopNode is not closed.");else if(33===s&&91===t.charCodeAt(n+2))n=tt(t,"]]>",n,"StopNode is not closed.")-2;else{const r=nt(t,n,">");r&&((r&&r.tagName)===e&&"/"!==r.tagExp[r.tagExp.length-1]&&i++,n=r.closeIndex)}}}function it(t,e,n){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&function(t,e={}){if(e=Object.assign({},_,e),!t||"string"!=typeof t)return t;let n=t.trim();if(0===n.length)return t;if(void 0!==e.skipLike&&e.skipLike.test(n))return t;if("0"===n)return 0;if(e.hex&&N.test(n))return function(t){if(parseInt)return parseInt(t,16);if(Number.parseInt)return Number.parseInt(t,16);if(window&&window.parseInt)return window.parseInt(t,16);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}(n);if(isFinite(n)){if(n.includes("e")||n.includes("E"))return function(t,e,n){if(!n.eNotation)return t;const r=e.match(S);if(r){let i=r[1]||"";const s=-1===r[3].indexOf("e")?"E":"e",a=r[2],o=i?t[a.length+1]===s:t[a.length]===s;return a.length>1&&o?t:(1!==a.length||!r[3].startsWith(`.${s}`)&&r[3][0]!==s)&&a.length>0?n.leadingZeros&&!o?(e=(r[1]||"")+r[3],Number(e)):t:Number(e)}return t}(t,n,e);{const i=v.exec(n);if(i){const s=i[1]||"",a=i[2];let o=(r=i[3])&&-1!==r.indexOf(".")?("."===(r=r.replace(/0+$/,""))?r="0":"."===r[0]?r="0"+r:"."===r[r.length-1]&&(r=r.substring(0,r.length-1)),r):r;const l=s?"."===t[a.length+1]:"."===t[a.length];if(!e.leadingZeros&&(a.length>1||1===a.length&&!l))return t;{const r=Number(n),i=String(r);if(0===r)return r;if(-1!==i.search(/[eE]/))return e.eNotation?r:t;if(-1!==n.indexOf("."))return"0"===i||i===o||i===`${s}${o}`?r:t;let l=a?o:n;return a?l===i||s+l===i?r:t:l===i||l===s+i?r:t}}return t}}var r;return function(t,e,n){const r=e===1/0;switch(n.infinity.toLowerCase()){case"null":return null;case"infinity":return e;case"string":return r?"Infinity":"-Infinity";default:return t}}(t,Number(n),e)}(t,n)}return void 0!==t?t:""}function st(t,e,n,r){if(t){const r=t(e);n===e&&(n=r),e=r}return{tagName:e=at(e,r),tagExp:n}}function at(t,e){if(c.includes(t))throw new Error(`[SECURITY] Invalid name: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`);return h.includes(t)?e.onDangerousProperty(t):t}const ot=x.getMetaDataSymbol();function lt(t,e){if(!t||"object"!=typeof t)return{};if(!e)return t;const n={};for(const r in t)r.startsWith(e)?n[r.substring(e.length)]=t[r]:n[r]=t[r];return n}function ht(t,e,n,r){return ct(t,e,n,r)}function ct(t,e,n,r){let i;const s={};for(let a=0;a<t.length;a++){const o=t[a],l=ut(o);if(void 0!==l&&l!==e.textNodeName){const t=lt(o[":@"]||{},e.attributeNamePrefix);n.push(l,t)}if(l===e.textNodeName)void 0===i?i=o[l]:i+=""+o[l];else{if(void 0===l)continue;if(o[l]){let t=ct(o[l],e,n,r);const i=pt(t,e);if(o[":@"]?dt(t,o[":@"],r,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==o[ot]&&"object"==typeof t&&null!==t&&(t[ot]=o[ot]),void 0!==s[l]&&Object.prototype.hasOwnProperty.call(s,l))Array.isArray(s[l])||(s[l]=[s[l]]),s[l].push(t);else{const n=e.jPath?r.toString():r;e.isArray(l,n,i)?s[l]=[t]:s[l]=t}void 0!==l&&l!==e.textNodeName&&n.pop()}}}return"string"==typeof i?i.length>0&&(s[e.textNodeName]=i):void 0!==i&&(s[e.textNodeName]=i),s}function ut(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const n=e[t];if(":@"!==n)return n}}function dt(t,e,n,r){if(e){const i=Object.keys(e),s=i.length;for(let a=0;a<s;a++){const s=i[a],o=s.startsWith(r.attributeNamePrefix)?s.substring(r.attributeNamePrefix.length):s,l=r.jPath?n.toString()+"."+o:n;r.isArray(s,l,!0,!0)?t[s]=[e[s]]:t[s]=e[s]}}}function pt(t,e){const{textNodeName:n}=e,r=Object.keys(t).length;return 0===r||!(1!==r||!t[n]&&"boolean"!=typeof t[n]&&0!==t[n])}const ft={allowBooleanAttributes:!1,unpairedTags:[]};function gt(t,e){e=Object.assign({},ft,e);const n=[];let r=!1,i=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let s=0;s<t.length;s++)if("<"===t[s]&&"?"===t[s+1]){if(s+=2,s=xt(t,s),s.err)return s}else{if("<"!==t[s]){if(mt(t[s]))continue;return St("InvalidChar","char '"+t[s]+"' is not expected.",At(t,s))}{let a=s;if(s++,"!"===t[s]){s=Et(t,s);continue}{let o=!1;"/"===t[s]&&(o=!0,s++);let l="";for(;s<t.length&&">"!==t[s]&&" "!==t[s]&&"\t"!==t[s]&&"\n"!==t[s]&&"\r"!==t[s];s++)l+=t[s];if(l=l.trim(),"/"===l[l.length-1]&&(l=l.substring(0,l.length-1),s--),!Ct(l)){let e;return e=0===l.trim().length?"Invalid space after '<'.":"Tag '"+l+"' is an invalid name.",St("InvalidTag",e,At(t,s))}const h=bt(t,s);if(!1===h)return St("InvalidAttr","Attributes for '"+l+"' have open quote.",At(t,s));let c=h.value;if(s=h.index,"/"===c[c.length-1]){const n=s-c.length;c=c.substring(0,c.length-1);const i=vt(c,e);if(!0!==i)return St(i.err.code,i.err.msg,At(t,n+i.err.line));r=!0}else if(o){if(!h.tagClosed)return St("InvalidTag","Closing tag '"+l+"' doesn't have proper closing.",At(t,s));if(c.trim().length>0)return St("InvalidTag","Closing tag '"+l+"' can't have attributes or invalid starting.",At(t,a));if(0===n.length)return St("InvalidTag","Closing tag '"+l+"' has not been opened.",At(t,a));{const e=n.pop();if(l!==e.tagName){let n=At(t,e.tagStartPos);return St("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+n.line+", col "+n.col+") instead of closing tag '"+l+"'.",At(t,a))}0==n.length&&(i=!0)}}else{const o=vt(c,e);if(!0!==o)return St(o.err.code,o.err.msg,At(t,s-c.length+o.err.line));if(!0===i)return St("InvalidXml","Multiple possible root nodes found.",At(t,s));-1!==e.unpairedTags.indexOf(l)||n.push({tagName:l,tagStartPos:a}),r=!0}for(s++;s<t.length;s++)if("<"===t[s]){if("!"===t[s+1]){s++,s=Et(t,s);continue}if("?"!==t[s+1])break;if(s=xt(t,++s),s.err)return s}else if("&"===t[s]){const e=_t(t,s);if(-1==e)return St("InvalidChar","char '&' is not expected.",At(t,s));s=e}else if(!0===i&&!mt(t[s]))return St("InvalidXml","Extra text at the end",At(t,s));"<"===t[s]&&s--}}}return r?1==n.length?St("InvalidTag","Unclosed tag '"+n[0].tagName+"'.",At(t,n[0].tagStartPos)):!(n.length>0)||St("InvalidXml","Invalid '"+JSON.stringify(n.map(t=>t.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):St("InvalidXml","Start tag expected.",1)}function mt(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function xt(t,e){const n=e;for(;e<t.length;e++)if("?"==t[e]||" "==t[e]){const r=t.substr(n,e-n);if(e>5&&"xml"===r)return St("InvalidXml","XML declaration allowed only at the start of the document.",At(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}continue}return e}function Et(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let n=1;for(e+=8;e<t.length;e++)if("<"===t[e])n++;else if(">"===t[e]&&(n--,0===n))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e<t.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}const wt='"',yt="'";function bt(t,e){let n="",r="",i=!1;for(;e<t.length;e++){if(t[e]===wt||t[e]===yt)""===r?r=t[e]:r!==t[e]||(r="");else if(">"===t[e]&&""===r){i=!0;break}n+=t[e]}return""===r&&{value:n,index:e,tagClosed:i}}const Nt=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function vt(t,e){const n=o(t,Nt),r={};for(let t=0;t<n.length;t++){if(0===n[t][1].length)return St("InvalidAttr","Attribute '"+n[t][2]+"' has no space in starting.",It(n[t]));if(void 0!==n[t][3]&&void 0===n[t][4])return St("InvalidAttr","Attribute '"+n[t][2]+"' is without value.",It(n[t]));if(void 0===n[t][3]&&!e.allowBooleanAttributes)return St("InvalidAttr","boolean attribute '"+n[t][2]+"' is not allowed.",It(n[t]));const i=n[t][2];if(!Tt(i))return St("InvalidAttr","Attribute '"+i+"' is an invalid name.",It(n[t]));if(Object.prototype.hasOwnProperty.call(r,i))return St("InvalidAttr","Attribute '"+i+"' is repeated.",It(n[t]));r[i]=1}return!0}function _t(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){let n=/\d/;for("x"===t[e]&&(e++,n=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(n))break}return-1}(t,++e);let n=0;for(;e<t.length;e++,n++)if(!(t[e].match(/\w/)&&n<20)){if(";"===t[e])break;return-1}return e}function St(t,e,n){return{err:{code:t,msg:e,line:n.line||n,col:n.col}}}function Tt(t){return l(t)}function Ct(t){return l(t)}function At(t,e){const n=t.substring(0,e).split(/\r?\n/);return{line:n.length,col:n[n.length-1].length+1}}function It(t){return t.startIndex+t[1].length}const Pt={validate:gt},Dt=new class{constructor(t){this.externalEntities={},this.options=g(t)}parse(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});const n=gt(t,e);if(!0!==n)throw Error(`${n.err.msg}:${n.err.line}:${n.err.col}`)}const n=new X(this.options);n.entityDecoder.setExternalEntities(this.externalEntities);const r=n.parseXml(t);return this.options.preserveOrder||void 0===r?r:ht(r,this.options,n.matcher,n.readonlyMatcher)}addEntity(t,e){if(-1!==e.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==t.indexOf("&")||-1!==t.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'");if("&"===e)throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=e}static getMetaDataSymbol(){return x.getMetaDataSymbol()}},Ot=t=>{const e=Pt.validate(t);if(!0!==e)throw new Error(e.err.msg);const n=Dt.parse(t),i=n.urlset?.url||[];return(Array.isArray(i)?i:[i]).filter(t=>t.loc).map(t=>({path:r(t.loc).pathname,lastmod:t.lastmod?new Date(t.lastmod).toISOString():null}))},Mt={Jan:"01",Feb:"02",Mar:"03",Apr:"04",May:"05",Jun:"06",Jul:"07",Aug:"08",Sep:"09",Oct:"10",Nov:"11",Dec:"12"};function $t(t){if(/^\d{4}-\d{2}-\d{2}$/.test(t))return new Date(t).toISOString();let e=/^\w{3} (\w{3}) (\d{2}) (\d{4}) ([\d:]{8}) GMT([\-+]\d{4})$/.exec(t);return e?new Date(`${e[3]}-${Mt[e[1]]}-${e[2]}T${e[4]}${e[5]}`).toISOString():t}const Lt=t=>{const e={};for(const[n,i]of Object.entries(t))n.endsWith("@TypeHint")||Array.isArray(i)&&0===i.length||("true"===i?e[n]=!0:"false"===i?e[n]=!1:"gcAltLanguagePeer"===n?(e[n]=i,e.peer=r(i).pathname):e[n]="string"==typeof i?$t(i.trim()):i);return Object.keys(e).sort().reduce((t,n)=>(t[n]=e[n],t),{})},kt={normalize:r,request:i,children:async t=>{const e=r(t);e.pathname+=".sitemap.xml",e.searchParams.set("_",Date.now());const n=await i(e,{redirect:"error"});return{...n,data:Ot(n.data)}},content:async t=>{const e=r(t);return e.pathname+=".html",e.searchParams.set("_",Date.now()),i(e,{signal:AbortSignal.timeout(1e4),redirect:"error"})},meta:async t=>{const e=r(t);e.pathname+="/_jcr_content.json",e.searchParams.set("_",Date.now());const n=await i(e,{signal:AbortSignal.timeout(1e4),redirect:"error"});return{...n,data:Lt(JSON.parse(n.data))}}};return e.default})());
|
package/package.json
CHANGED
|
@@ -1,37 +1,46 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "canada-api",
|
|
3
|
-
"version": "5.
|
|
4
|
-
"description": "Cross platform API to fetch data from canada.ca",
|
|
5
|
-
"
|
|
6
|
-
"main": "src/index.
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "canada-api",
|
|
3
|
+
"version": "5.1.1",
|
|
4
|
+
"description": "Cross platform API to fetch data from canada.ca",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "src/index.js",
|
|
7
|
+
"browser": "dist/ca.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"browser": "./dist/ca.js",
|
|
11
|
+
"default": "./src/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src",
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"test": "node --test tests/**/*.test.js",
|
|
20
|
+
"build": "webpack",
|
|
21
|
+
"dev": "webpack --mode development"
|
|
22
|
+
},
|
|
23
|
+
"author": "National Defence",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"canada",
|
|
30
|
+
"api",
|
|
31
|
+
"fetch"
|
|
32
|
+
],
|
|
33
|
+
"homepage": "https://github.com/dnd-mdn/canada-api#readme",
|
|
34
|
+
"bugs": "https://github.com/dnd-mdn/canada-api/issues",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/dnd-mdn/canada-api.git"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"fast-xml-parser": "^5.6.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"webpack": "^5.105.4",
|
|
44
|
+
"webpack-cli": "^7.0.2"
|
|
45
|
+
}
|
|
46
|
+
}
|
package/src/children.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { XMLParser, XMLValidator } from "fast-xml-parser";
|
|
2
|
+
import normalize from "./normalize.js";
|
|
3
|
+
import request from "./request.js";
|
|
4
|
+
|
|
5
|
+
const parser = new XMLParser();
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Represents a single URL entry from a sitemap
|
|
9
|
+
* @typedef {object} SitemapEntry
|
|
10
|
+
* @property {string} path - The normalized URL path (e.g., '/en/page')
|
|
11
|
+
* @property {string|null} lastmod - ISO 8601 timestamp or null if not present
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Parse XML sitemap data into structured URL entries
|
|
16
|
+
* @param {string} data - Raw XML sitemap content
|
|
17
|
+
* @returns {SitemapEntry[]} Array of sitemap entries with path and lastmod. Entries missing a `<loc>` element are skipped.
|
|
18
|
+
* @throws {Error} If the XML is malformed or invalid
|
|
19
|
+
*/
|
|
20
|
+
export const parseSitemap = (data) => {
|
|
21
|
+
const validation = XMLValidator.validate(data);
|
|
22
|
+
if (validation !== true) throw new Error(validation.err.msg);
|
|
23
|
+
|
|
24
|
+
const result = parser.parse(data);
|
|
25
|
+
const urls = result.urlset?.url || [];
|
|
26
|
+
|
|
27
|
+
return (Array.isArray(urls) ? urls : [urls]).filter(item => item.loc).map(item => ({
|
|
28
|
+
path: normalize(item.loc).pathname,
|
|
29
|
+
lastmod: item.lastmod ? new Date(item.lastmod).toISOString() : null
|
|
30
|
+
}));
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Fetch and parse sitemap children for a canada.ca page
|
|
35
|
+
* @param {string|URL} url - Absolute or relative URL
|
|
36
|
+
* @returns {Promise<{data: SitemapEntry[], status: number, statusText: string, headers: Headers}>}
|
|
37
|
+
* @throws {Error} If the request fails or returns a non-2xx status
|
|
38
|
+
*/
|
|
39
|
+
const children = async (url) => {
|
|
40
|
+
const target = normalize(url);
|
|
41
|
+
target.pathname += '.sitemap.xml';
|
|
42
|
+
target.searchParams.set('_', Date.now());
|
|
43
|
+
|
|
44
|
+
const response = await request(target, {
|
|
45
|
+
redirect: 'error'
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
...response,
|
|
50
|
+
data: parseSitemap(response.data)
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export default children;
|
package/src/content.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import normalize from "./normalize.js";
|
|
2
|
+
import request from "./request.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Fetch HTML content for a canada.ca page
|
|
6
|
+
* @param {string|URL} url - Absolute or relative URL
|
|
7
|
+
* @returns {Promise<{data: string, status: number, statusText: string, headers: Headers}>}
|
|
8
|
+
* @throws {Error} If the request fails or returns a non-2xx status
|
|
9
|
+
*/
|
|
10
|
+
const content = async (url) => {
|
|
11
|
+
const target = normalize(url);
|
|
12
|
+
target.pathname += '.html';
|
|
13
|
+
target.searchParams.set('_', Date.now());
|
|
14
|
+
|
|
15
|
+
return request(target, {
|
|
16
|
+
signal: AbortSignal.timeout(10000),
|
|
17
|
+
redirect: 'error'
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default content;
|
package/src/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import normalize from "./normalize.js";
|
|
2
|
+
import request from "./request.js";
|
|
3
|
+
import children from "./children.js";
|
|
4
|
+
import content from "./content.js";
|
|
5
|
+
import meta from "./meta.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {object} CanadaAPI
|
|
9
|
+
* @property {function} normalize - Normalize and validate canada.ca URLs
|
|
10
|
+
* @property {function} request - Raw HTTP client for canada.ca requests
|
|
11
|
+
* @property {function} children - Fetch and parse sitemap hierarchies
|
|
12
|
+
* @property {function} content - Fetch HTML content pages
|
|
13
|
+
* @property {function} meta - Fetch and format JCR metadata
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** @type {CanadaAPI} */
|
|
17
|
+
const ca = {
|
|
18
|
+
normalize,
|
|
19
|
+
request,
|
|
20
|
+
children,
|
|
21
|
+
content,
|
|
22
|
+
meta
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default ca
|
package/src/{meta.mjs → meta.js}
RENAMED
|
@@ -1,117 +1,105 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
* @
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
*
|
|
85
|
-
* @
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*/
|
|
89
|
-
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
result[key] = value
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Sort object keys alphabetically for readability
|
|
111
|
-
return Object.keys(result).sort().reduce((obj, key) => {
|
|
112
|
-
obj[key] = result[key]
|
|
113
|
-
return obj
|
|
114
|
-
}, {})
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export default meta;
|
|
1
|
+
import normalize from "./normalize.js";
|
|
2
|
+
import request from "./request.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Month name to number mapping
|
|
6
|
+
* @const {Record<string, string>}
|
|
7
|
+
* @private
|
|
8
|
+
*/
|
|
9
|
+
const months = {
|
|
10
|
+
'Jan': '01',
|
|
11
|
+
'Feb': '02',
|
|
12
|
+
'Mar': '03',
|
|
13
|
+
'Apr': '04',
|
|
14
|
+
'May': '05',
|
|
15
|
+
'Jun': '06',
|
|
16
|
+
'Jul': '07',
|
|
17
|
+
'Aug': '08',
|
|
18
|
+
'Sep': '09',
|
|
19
|
+
'Oct': '10',
|
|
20
|
+
'Nov': '11',
|
|
21
|
+
'Dec': '12'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Try to parse and format date strings from JCR into ISO 8601
|
|
26
|
+
* @param {string} text - Potential date string to format
|
|
27
|
+
* @returns {string} ISO 8601 timestamp or original text if not a recognized date
|
|
28
|
+
* @description Supports YYYY-MM-DD and JCR date format (e.g. "Wed Nov 20 2019 13:17:13 GMT-0500").
|
|
29
|
+
* Uses explicit parsing to ensure consistent output across Node.js and browsers.
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
32
|
+
function formatDate(text) {
|
|
33
|
+
// Simple YYYY-MM-DD format
|
|
34
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(text)) {
|
|
35
|
+
return new Date(text).toISOString()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// RFC1123 format
|
|
39
|
+
let m = /^\w{3} (\w{3}) (\d{2}) (\d{4}) ([\d:]{8}) GMT([\-+]\d{4})$/.exec(text)
|
|
40
|
+
if (m) {
|
|
41
|
+
return new Date(`${m[3]}-${months[m[1]]}-${m[2]}T${m[4]}${m[5]}`).toISOString()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return text
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Format and normalize metadata object
|
|
49
|
+
* @param {Record<string, any>} data - Raw metadata object from JCR
|
|
50
|
+
* @returns {Record<string, any>} Formatted metadata with normalized types and sorted keys
|
|
51
|
+
* @description Converts string booleans to native booleans, formats dates to ISO 8601,
|
|
52
|
+
* removes @TypeHint properties and empty arrays, sorts keys alphabetically, and adds a
|
|
53
|
+
* normalized `peer` field when `gcAltLanguagePeer` is present.
|
|
54
|
+
*/
|
|
55
|
+
export const formatMeta = (data) => {
|
|
56
|
+
const result = {}
|
|
57
|
+
|
|
58
|
+
for (const [key, value] of Object.entries(data)) {
|
|
59
|
+
if (key.endsWith('@TypeHint')) continue
|
|
60
|
+
if (Array.isArray(value) && value.length === 0) continue
|
|
61
|
+
|
|
62
|
+
if (value === 'true') {
|
|
63
|
+
result[key] = true
|
|
64
|
+
} else if (value === 'false') {
|
|
65
|
+
result[key] = false
|
|
66
|
+
} else if (key === 'gcAltLanguagePeer') {
|
|
67
|
+
result[key] = value
|
|
68
|
+
result['peer'] = normalize(value).pathname
|
|
69
|
+
} else if (typeof value === 'string') {
|
|
70
|
+
result[key] = formatDate(value.trim())
|
|
71
|
+
} else {
|
|
72
|
+
result[key] = value
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Sort object keys alphabetically for readability
|
|
77
|
+
return Object.keys(result).sort().reduce((obj, key) => {
|
|
78
|
+
obj[key] = result[key]
|
|
79
|
+
return obj
|
|
80
|
+
}, {})
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Fetch and format JCR metadata for a canada.ca page
|
|
85
|
+
* @param {string|URL} url - Absolute or relative URL
|
|
86
|
+
* @returns {Promise<{data: Record<string, any>, status: number, statusText: string, headers: Headers}>}
|
|
87
|
+
* @throws {Error} If the request fails or returns a non-2xx status
|
|
88
|
+
*/
|
|
89
|
+
const meta = async (url) => {
|
|
90
|
+
const target = normalize(url);
|
|
91
|
+
target.pathname += '/_jcr_content.json';
|
|
92
|
+
target.searchParams.set('_', Date.now());
|
|
93
|
+
|
|
94
|
+
const response = await request(target, {
|
|
95
|
+
signal: AbortSignal.timeout(10000),
|
|
96
|
+
redirect: 'error'
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
return {
|
|
100
|
+
...response,
|
|
101
|
+
data: formatMeta(JSON.parse(response.data))
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export default meta;
|
|
@@ -1,37 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
import { BASE_URL } from './config.
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Normalize a canada.ca URL to a clean pathname
|
|
6
|
-
* @param {string|URL} url - A full URL or relative path (e.g., 'https://www.canada.ca/en/page' or '/en/page')
|
|
7
|
-
* @returns {URL} Normalized URL object with cleaned pathname
|
|
8
|
-
* @throws {TypeError} If url is not a string or URL object
|
|
9
|
-
* @throws {Error} If URL is not from canada.ca or path doesn't start with /en/ or /fr/
|
|
10
|
-
*/
|
|
11
|
-
const normalize = (url) => {
|
|
12
|
-
|
|
13
|
-
if (typeof url === 'string') {
|
|
14
|
-
url = new URL(url, BASE_URL)
|
|
15
|
-
} else if (
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
1
|
+
|
|
2
|
+
import { BASE_URL } from './config.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Normalize a canada.ca URL to a clean pathname
|
|
6
|
+
* @param {string|URL} url - A full URL or relative path (e.g., 'https://www.canada.ca/en/page' or '/en/page')
|
|
7
|
+
* @returns {URL} Normalized URL object with cleaned pathname
|
|
8
|
+
* @throws {TypeError} If url is not a string or URL object
|
|
9
|
+
* @throws {Error} If URL is not from canada.ca or path doesn't start with /en/ or /fr/
|
|
10
|
+
*/
|
|
11
|
+
const normalize = (url) => {
|
|
12
|
+
|
|
13
|
+
if (typeof url === 'string') {
|
|
14
|
+
url = new URL(url, BASE_URL)
|
|
15
|
+
} else if (url instanceof URL) {
|
|
16
|
+
url = new URL(url.href)
|
|
17
|
+
} else {
|
|
18
|
+
throw new TypeError('string or URL object expected')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Verify domain
|
|
22
|
+
if (url.origin !== BASE_URL) {
|
|
23
|
+
throw new Error('URL must start with ' + BASE_URL)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
url.pathname = url.pathname.replace(/^\/content\/canadasite/, '');
|
|
27
|
+
|
|
28
|
+
// Remove file extensions (like .html, .xml) and trailing slashes
|
|
29
|
+
url.pathname = url.pathname.replace(/\.[^/]*$/, '').replace(/\/+$/, '');
|
|
30
|
+
|
|
31
|
+
// Verify root language
|
|
32
|
+
if (!url.pathname.startsWith('/en/') && !url.pathname.startsWith('/fr/')) {
|
|
33
|
+
throw new Error(`Invalid path: "${url.pathname}" must start with /en/ or /fr/`)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return url
|
|
37
|
+
}
|
|
38
|
+
|
|
37
39
|
export default normalize;
|
package/src/request.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BASE_URL } from "./config.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Raw HTTP client for canada.ca
|
|
5
|
+
* @param {string|URL} url - Relative or absolute URL on canada.ca
|
|
6
|
+
* @param {RequestInit} [options] - Fetch options
|
|
7
|
+
* @returns {Promise<{data: string, status: number, statusText: string, headers: Headers}>}
|
|
8
|
+
* @throws {Error} If the request fails or returns a non-2xx status
|
|
9
|
+
*/
|
|
10
|
+
const request = async (url, options = {}) => {
|
|
11
|
+
const response = await fetch(new URL(url, BASE_URL), {
|
|
12
|
+
signal: AbortSignal.timeout(30000),
|
|
13
|
+
headers: {
|
|
14
|
+
'User-Agent': 'canada-api/5.0',
|
|
15
|
+
'Accept': '*/*',
|
|
16
|
+
...options.headers
|
|
17
|
+
},
|
|
18
|
+
...options
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
const error = new Error(`${response.status} ${response.statusText}`);
|
|
23
|
+
error.status = response.status;
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const data = await response.text();
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
data,
|
|
31
|
+
status: response.status,
|
|
32
|
+
statusText: response.statusText,
|
|
33
|
+
headers: response.headers
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export default request;
|
package/src/children.mjs
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import { XMLParser, XMLValidator } from "fast-xml-parser";
|
|
3
|
-
import normalize from "./normalize.mjs";
|
|
4
|
-
import { BASE_URL } from "./config.mjs";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Axios instance configured for fetching sitemap URLs
|
|
8
|
-
* @type {import('axios').AxiosInstance}
|
|
9
|
-
* @description Returns normalized node list of sitemap children
|
|
10
|
-
*/
|
|
11
|
-
const children = axios.create({
|
|
12
|
-
baseURL: BASE_URL,
|
|
13
|
-
timeout: 30000,
|
|
14
|
-
maxRedirects: 0
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
// Transform URL
|
|
18
|
-
children.interceptors.request.use(config => {
|
|
19
|
-
const url = normalize(config.url);
|
|
20
|
-
|
|
21
|
-
url.pathname = url.pathname + '.sitemap.xml';
|
|
22
|
-
url.searchParams.set('_', Date.now());
|
|
23
|
-
|
|
24
|
-
config.url = url.toString();
|
|
25
|
-
return config;
|
|
26
|
-
}, error => {
|
|
27
|
-
return Promise.reject(error);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// Process response data
|
|
31
|
-
children.interceptors.response.use(response => {
|
|
32
|
-
response.data = parseSitemap(response.data);
|
|
33
|
-
|
|
34
|
-
return response;
|
|
35
|
-
}, error => {
|
|
36
|
-
return Promise.reject(error);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Represents a single URL entry from a sitemap
|
|
41
|
-
* @typedef {object} SitemapEntry
|
|
42
|
-
* @property {string} path - The normalized URL path (e.g., '/en/page')
|
|
43
|
-
* @property {string|null} lastmod - ISO 8601 timestamp or null if not present
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Parse XML sitemap data into structured URL entries
|
|
48
|
-
* @param {string} data - Raw XML sitemap content
|
|
49
|
-
* @returns {SitemapEntry[]} Array of sitemap entries with path and lastmod
|
|
50
|
-
* @throws {Error} If the XML is malformed or invalid
|
|
51
|
-
* @description Parses XML sitemap format and returns normalized entries with ISO timestamps.
|
|
52
|
-
* Entries missing a `<loc>` element are silently skipped.
|
|
53
|
-
*/
|
|
54
|
-
export const parseSitemap = (data) => {
|
|
55
|
-
const validation = XMLValidator.validate(data);
|
|
56
|
-
if (validation !== true) throw new Error(validation.err.msg);
|
|
57
|
-
|
|
58
|
-
const parser = new XMLParser();
|
|
59
|
-
const result = parser.parse(data);
|
|
60
|
-
|
|
61
|
-
const urls = result.urlset?.url || [];
|
|
62
|
-
return (Array.isArray(urls) ? urls : [urls]).filter(item => item.loc).map(item => ({
|
|
63
|
-
path: normalize(item.loc).pathname,
|
|
64
|
-
lastmod: item.lastmod ? new Date(item.lastmod).toISOString() : null
|
|
65
|
-
}));
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export default children;
|
package/src/content.mjs
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import normalize from "./normalize.mjs";
|
|
3
|
-
import { BASE_URL } from "./config.mjs";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Axios instance configured for fetching HTML content
|
|
7
|
-
* @type {import('axios').AxiosInstance}
|
|
8
|
-
* @description Returns raw HTML content
|
|
9
|
-
*/
|
|
10
|
-
const content = axios.create({
|
|
11
|
-
baseURL: BASE_URL,
|
|
12
|
-
timeout: 5000,
|
|
13
|
-
maxRedirects: 0
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Transform URL
|
|
17
|
-
content.interceptors.request.use(config => {
|
|
18
|
-
const url = normalize(config.url);
|
|
19
|
-
|
|
20
|
-
url.pathname = url.pathname + '.html';
|
|
21
|
-
url.searchParams.set('_', Date.now());
|
|
22
|
-
|
|
23
|
-
config.url = url.toString();
|
|
24
|
-
return config;
|
|
25
|
-
}, error => {
|
|
26
|
-
return Promise.reject(error);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
export default content;
|
package/src/index.mjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import normalize from "./normalize.mjs";
|
|
2
|
-
import request from "./request.mjs";
|
|
3
|
-
import children from "./children.mjs";
|
|
4
|
-
import content from "./content.mjs";
|
|
5
|
-
import meta from "./meta.mjs";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Canada API - Cross-platform client for fetching and parsing canada.ca data
|
|
9
|
-
*
|
|
10
|
-
* @typedef {object} CanadaAPI
|
|
11
|
-
* @property {function} normalize - Normalize and validate canada.ca URLs
|
|
12
|
-
* @property {import('axios').AxiosInstance} request - Raw HTTP client for canada.ca requests
|
|
13
|
-
* @property {import('axios').AxiosInstance} children - Fetch and parse sitemap hierarchies
|
|
14
|
-
* @property {import('axios').AxiosInstance} content - Fetch HTML content pages
|
|
15
|
-
* @property {import('axios').AxiosInstance} meta - Fetch and format JCR metadata
|
|
16
|
-
*/
|
|
17
|
-
const ca = {
|
|
18
|
-
normalize,
|
|
19
|
-
request,
|
|
20
|
-
children,
|
|
21
|
-
content,
|
|
22
|
-
meta
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export default ca
|
package/src/request.mjs
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import { BASE_URL } from "./config.mjs";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Axios instance configured for raw requests to canada.ca
|
|
6
|
-
* @type {import('axios').AxiosInstance}
|
|
7
|
-
* @description Base HTTP client for making raw requests.
|
|
8
|
-
*/
|
|
9
|
-
const request = axios.create({
|
|
10
|
-
baseURL: BASE_URL,
|
|
11
|
-
timeout: 30000
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
export default request;
|
|
File without changes
|