diff --git a/package.json b/package.json
index e692887..1d7cd6e 100644
--- a/package.json
+++ b/package.json
@@ -67,7 +67,7 @@
"build": "directus-extension build",
"dev": "directus-extension build -w --no-minify",
"link": "directus-extension link",
- "directus": "directus start",
+ "directus": "npx directus start",
"lint": "eslint . --ext .ts",
"test": "vitest",
"test:coverage": "vitest run --coverage"
@@ -95,16 +95,16 @@
},
"devDependencies": {
"@directus/errors": "^0.0.2",
- "@directus/extensions-sdk": "^10.1.0",
+ "@directus/extensions-sdk": "^10.1.9",
"@directus/tsconfig": "^1.0.0",
- "@directus/types": "^10.1.3",
- "@directus/utils": "^10.0.8",
+ "@directus/types": "^10.1.5",
+ "@directus/utils": "^10.0.9",
"@istanbuljs/nyc-config-typescript": "^1.0.2",
"@semantic-release/changelog": "^6.0.3",
- "@semantic-release/commit-analyzer": "^10.0.1",
+ "@semantic-release/commit-analyzer": "^10.0.4",
"@semantic-release/exec": "^6.0.3",
"@semantic-release/github": "^9.0.4",
- "@semantic-release/npm": "^10.0.4",
+ "@semantic-release/npm": "^10.0.5",
"@types/chai": "^4.3.5",
"@types/chai-as-promised": "^7.1.5",
"@types/config": "^3.3.0",
@@ -115,29 +115,29 @@
"@types/jsonwebtoken": "^9.0.2",
"@types/lodash-es": "^4.17.8",
"@types/mocha": "^10.0.1",
- "@types/node": "^20.4.5",
- "@typescript-eslint/eslint-plugin": "^5.52.0",
- "@vitest/coverage-istanbul": "^0.34.1",
- "axios": "^1.4.0",
+ "@types/node": "^20.5.7",
+ "@typescript-eslint/eslint-plugin": "^5.62.0",
+ "@vitest/coverage-istanbul": "^0.34.3",
+ "axios": "^1.5.0",
"config": "^3.3.9",
"dotenv": "^16.3.1",
- "eslint": "^8.0.1",
+ "eslint": "^8.48.0",
"eslint-config-standard-with-typescript": "^37.0.0",
- "eslint-plugin-import": "^2.25.2",
- "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
+ "eslint-plugin-import": "^2.28.1",
+ "eslint-plugin-n": "^16.0.2",
"eslint-plugin-no-loops": "^0.3.0",
- "eslint-plugin-promise": "^6.0.0",
+ "eslint-plugin-promise": "^6.1.1",
"fs-extra": "^11.1.1",
"js-yaml": "^4.1.0",
"knex": "^2.5.1",
"lodash-es": "^4.17.21",
"nyc": "^15.1.0",
- "semantic-release": "^21.0.7",
+ "semantic-release": "^21.1.1",
"sqlite3": "^5.1.6",
"ts-mocha": "^10.0.0",
"ts-node": "^10.9.1",
- "typescript": "^5.1.6",
- "vitest": "^0.34.1"
+ "typescript": "^5.2.2",
+ "vitest": "^0.34.3"
},
"dependencies": {
"@keyv/redis": "^2.7.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b1e0883..fbf86ae 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,35 +26,35 @@ devDependencies:
specifier: ^0.0.2
version: 0.0.2
'@directus/extensions-sdk':
- specifier: ^10.1.0
- version: 10.1.0
+ specifier: ^10.1.9
+ version: 10.1.9(@types/node@20.5.7)(sqlite3@5.1.6)
'@directus/tsconfig':
specifier: ^1.0.0
version: 1.0.0
'@directus/types':
- specifier: ^10.1.3
- version: 10.1.3
+ specifier: ^10.1.5
+ version: 10.1.5(sqlite3@5.1.6)
'@directus/utils':
- specifier: ^10.0.8
- version: 10.0.8
+ specifier: ^10.0.9
+ version: 10.0.9
'@istanbuljs/nyc-config-typescript':
specifier: ^1.0.2
version: 1.0.2(nyc@15.1.0)
'@semantic-release/changelog':
specifier: ^6.0.3
- version: 6.0.3(semantic-release@21.0.7)
+ version: 6.0.3(semantic-release@21.1.1)
'@semantic-release/commit-analyzer':
- specifier: ^10.0.1
- version: 10.0.1(semantic-release@21.0.7)
+ specifier: ^10.0.4
+ version: 10.0.4(semantic-release@21.1.1)
'@semantic-release/exec':
specifier: ^6.0.3
- version: 6.0.3(semantic-release@21.0.7)
+ version: 6.0.3(semantic-release@21.1.1)
'@semantic-release/github':
specifier: ^9.0.4
- version: 9.0.4(semantic-release@21.0.7)
+ version: 9.0.4(semantic-release@21.1.1)
'@semantic-release/npm':
- specifier: ^10.0.4
- version: 10.0.4(semantic-release@21.0.7)
+ specifier: ^10.0.5
+ version: 10.0.5(semantic-release@21.1.1)
'@types/chai':
specifier: ^4.3.5
version: 4.3.5
@@ -86,17 +86,17 @@ devDependencies:
specifier: ^10.0.1
version: 10.0.1
'@types/node':
- specifier: ^20.4.5
- version: 20.4.5
+ specifier: ^20.5.7
+ version: 20.5.7
'@typescript-eslint/eslint-plugin':
- specifier: ^5.52.0
- version: 5.52.0(@typescript-eslint/parser@5.62.0)(eslint@8.0.1)(typescript@5.1.6)
+ specifier: ^5.62.0
+ version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2)
'@vitest/coverage-istanbul':
- specifier: ^0.34.1
- version: 0.34.1(vitest@0.34.1)
+ specifier: ^0.34.3
+ version: 0.34.3(vitest@0.34.3)
axios:
- specifier: ^1.4.0
- version: 1.4.0
+ specifier: ^1.5.0
+ version: 1.5.0
config:
specifier: ^3.3.9
version: 3.3.9
@@ -104,23 +104,23 @@ devDependencies:
specifier: ^16.3.1
version: 16.3.1
eslint:
- specifier: ^8.0.1
- version: 8.0.1
+ specifier: ^8.48.0
+ version: 8.48.0
eslint-config-standard-with-typescript:
specifier: ^37.0.0
- version: 37.0.0(@typescript-eslint/eslint-plugin@5.52.0)(eslint-plugin-import@2.25.2)(eslint-plugin-n@15.0.0)(eslint-plugin-promise@6.0.0)(eslint@8.0.1)(typescript@5.1.6)
+ version: 37.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint-plugin-import@2.28.1)(eslint-plugin-n@16.0.2)(eslint-plugin-promise@6.1.1)(eslint@8.48.0)(typescript@5.2.2)
eslint-plugin-import:
- specifier: ^2.25.2
- version: 2.25.2(@typescript-eslint/parser@5.62.0)(eslint@8.0.1)
+ specifier: ^2.28.1
+ version: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)
eslint-plugin-n:
- specifier: '^15.0.0 || ^16.0.0 '
- version: 15.0.0(eslint@8.0.1)
+ specifier: ^16.0.2
+ version: 16.0.2(eslint@8.48.0)
eslint-plugin-no-loops:
specifier: ^0.3.0
- version: 0.3.0(eslint@8.0.1)
+ version: 0.3.0(eslint@8.48.0)
eslint-plugin-promise:
- specifier: ^6.0.0
- version: 6.0.0(eslint@8.0.1)
+ specifier: ^6.1.1
+ version: 6.1.1(eslint@8.48.0)
fs-extra:
specifier: ^11.1.1
version: 11.1.1
@@ -137,8 +137,8 @@ devDependencies:
specifier: ^15.1.0
version: 15.1.0
semantic-release:
- specifier: ^21.0.7
- version: 21.0.7
+ specifier: ^21.1.1
+ version: 21.1.1
sqlite3:
specifier: ^5.1.6
version: 5.1.6
@@ -147,13 +147,13 @@ devDependencies:
version: 10.0.0(mocha@10.2.0)
ts-node:
specifier: ^10.9.1
- version: 10.9.1(@types/node@20.4.5)(typescript@5.1.6)
+ version: 10.9.1(@types/node@20.5.7)(typescript@5.2.2)
typescript:
- specifier: ^5.1.6
- version: 5.1.6
+ specifier: ^5.2.2
+ version: 5.2.2
vitest:
- specifier: ^0.34.1
- version: 0.34.1
+ specifier: ^0.34.3
+ version: 0.34.3
packages:
@@ -167,14 +167,15 @@ packages:
engines: {node: '>=6.0.0'}
dependencies:
'@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
+ '@jridgewell/trace-mapping': 0.3.19
dev: true
- /@babel/code-frame@7.22.5:
- resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==}
+ /@babel/code-frame@7.22.13:
+ resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/highlight': 7.22.5
+ '@babel/highlight': 7.22.13
+ chalk: 2.4.2
dev: true
/@babel/compat-data@7.22.9:
@@ -182,20 +183,20 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
- /@babel/core@7.22.9:
- resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==}
+ /@babel/core@7.22.11:
+ resolution: {integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
- '@babel/code-frame': 7.22.5
- '@babel/generator': 7.22.9
- '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9)
- '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9)
- '@babel/helpers': 7.22.6
- '@babel/parser': 7.22.7
+ '@babel/code-frame': 7.22.13
+ '@babel/generator': 7.22.10
+ '@babel/helper-compilation-targets': 7.22.10
+ '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11)
+ '@babel/helpers': 7.22.11
+ '@babel/parser': 7.22.13
'@babel/template': 7.22.5
- '@babel/traverse': 7.22.8
- '@babel/types': 7.22.5
+ '@babel/traverse': 7.22.11
+ '@babel/types': 7.22.11
convert-source-map: 1.9.0
debug: 4.3.4(supports-color@8.1.1)
gensync: 1.0.0-beta.2
@@ -205,24 +206,21 @@ packages:
- supports-color
dev: true
- /@babel/generator@7.22.9:
- resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==}
+ /@babel/generator@7.22.10:
+ resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.5
+ '@babel/types': 7.22.11
'@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
+ '@jridgewell/trace-mapping': 0.3.19
jsesc: 2.5.2
dev: true
- /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9):
- resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==}
+ /@babel/helper-compilation-targets@7.22.10:
+ resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
dependencies:
'@babel/compat-data': 7.22.9
- '@babel/core': 7.22.9
'@babel/helper-validator-option': 7.22.5
browserslist: 4.21.10
lru-cache: 5.1.1
@@ -239,30 +237,30 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.5
- '@babel/types': 7.22.5
+ '@babel/types': 7.22.11
dev: true
/@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.5
+ '@babel/types': 7.22.11
dev: true
/@babel/helper-module-imports@7.22.5:
resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.5
+ '@babel/types': 7.22.11
dev: true
- /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9):
+ /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11):
resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.9
+ '@babel/core': 7.22.11
'@babel/helper-environment-visitor': 7.22.5
'@babel/helper-module-imports': 7.22.5
'@babel/helper-simple-access': 7.22.5
@@ -274,14 +272,14 @@ packages:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.5
+ '@babel/types': 7.22.11
dev: true
/@babel/helper-split-export-declaration@7.22.6:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.5
+ '@babel/types': 7.22.11
dev: true
/@babel/helper-string-parser@7.22.5:
@@ -299,19 +297,19 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
- /@babel/helpers@7.22.6:
- resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==}
+ /@babel/helpers@7.22.11:
+ resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.5
- '@babel/traverse': 7.22.8
- '@babel/types': 7.22.5
+ '@babel/traverse': 7.22.11
+ '@babel/types': 7.22.11
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/highlight@7.22.5:
- resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==}
+ /@babel/highlight@7.22.13:
+ resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': 7.22.5
@@ -319,50 +317,50 @@ packages:
js-tokens: 4.0.0
dev: true
- /@babel/parser@7.22.7:
- resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==}
+ /@babel/parser@7.22.13:
+ resolution: {integrity: sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.22.5
+ '@babel/types': 7.22.11
dev: true
- /@babel/runtime@7.22.6:
- resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==}
+ /@babel/runtime@7.22.11:
+ resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==}
engines: {node: '>=6.9.0'}
dependencies:
- regenerator-runtime: 0.13.11
+ regenerator-runtime: 0.14.0
dev: true
/@babel/template@7.22.5:
resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.22.5
- '@babel/parser': 7.22.7
- '@babel/types': 7.22.5
+ '@babel/code-frame': 7.22.13
+ '@babel/parser': 7.22.13
+ '@babel/types': 7.22.11
dev: true
- /@babel/traverse@7.22.8:
- resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==}
+ /@babel/traverse@7.22.11:
+ resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.22.5
- '@babel/generator': 7.22.9
+ '@babel/code-frame': 7.22.13
+ '@babel/generator': 7.22.10
'@babel/helper-environment-visitor': 7.22.5
'@babel/helper-function-name': 7.22.5
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.22.7
- '@babel/types': 7.22.5
+ '@babel/parser': 7.22.13
+ '@babel/types': 7.22.11
debug: 4.3.4(supports-color@8.1.1)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/types@7.22.5:
- resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
+ /@babel/types@7.22.11:
+ resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.22.5
@@ -384,24 +382,21 @@ packages:
'@jridgewell/trace-mapping': 0.3.9
dev: true
- /@directus/composables@10.0.1:
- resolution: {integrity: sha512-ZdVLzMe1tXidwEIWNiDjIj+6l9TRYqh1SN5O9yBXgNcQPvLa5R+bSOfKkhi7AywTXycs21XENKyuuupNllvQ7w==}
+ /@directus/composables@10.1.1:
+ resolution: {integrity: sha512-ehCvjvmyMD9tgbBhCXe5P+Om4e4ZPK01Hf1q4MrT9SwzU0H8paSDOba0oACuiqTG1NbOzezh2muiId8VavguLQ==}
dependencies:
- '@directus/constants': 10.1.0
- '@directus/utils': 10.0.1
+ '@directus/constants': 10.2.3
+ '@directus/utils': 10.0.9
+ axios: 1.4.0
lodash-es: 4.17.21
nanoid: 4.0.2
- vue: 3.2.47
+ vue: 3.3.4
+ transitivePeerDependencies:
+ - debug
dev: true
- /@directus/constants@10.1.0:
- resolution: {integrity: sha512-yWMwCKcoc9oboTs6aTQiPxoIACPxqrmTCSPpZJzSz/xhVvn2ltdWZzHh+Hy0KczQHWqCcoBiSueBj8o+NBo5YQ==}
- dependencies:
- zod: 3.21.4
- dev: true
-
- /@directus/constants@10.2.2:
- resolution: {integrity: sha512-s3JbofEpyqUHpCCsEeSXIOa0scjlswVcesMlHkwvJFu59C1S+yXEw0DKd0Iz/rJgWzO1kiEjOoaHszPNbDfzFg==}
+ /@directus/constants@10.2.3:
+ resolution: {integrity: sha512-ygXWi0ptRjQ7qqUvRDXjFQ6ITXz1gOmjT/aQw06OmgaJPscbuHoc5BFzWn4l4nhapk0hkWYhq0xskfVeA5MMtQ==}
dependencies:
zod: 3.21.4
dev: true
@@ -410,66 +405,100 @@ packages:
resolution: {integrity: sha512-f3F37jQjTdf3QfPOuRibTjV/M2rYjJEWPDIU6dsLdl1iF3p5WRhTaWYuSoJlD4IpQf9YtV8quGwVQcYBGcw/vw==}
dev: true
- /@directus/extensions-sdk@10.1.0:
- resolution: {integrity: sha512-23XugqkmC1eUUnry/cwSVe9yVlZhMeWzGYuJx963X8eHExLPtW21JMDEI1WgZIQREKNkffRpibUrW/shpaBqFg==}
+ /@directus/extensions-sdk@10.1.9(@types/node@20.5.7)(sqlite3@5.1.6):
+ resolution: {integrity: sha512-b8m9ZHgTWJLv3ReQaJPy2HCwovZ+8fm6g8wEan1wFiMzf2RiuNUTNCWmk6JFuxqC58HiRiXXWxD2UDjnOvjtuA==}
engines: {node: '>=12.20.0'}
hasBin: true
dependencies:
- '@directus/composables': 10.0.1
- '@directus/constants': 10.1.0
- '@directus/types': 10.0.0
- '@directus/utils': 10.0.1
- '@rollup/plugin-commonjs': 24.1.0(rollup@3.20.7)
- '@rollup/plugin-json': 6.0.0(rollup@3.20.7)
- '@rollup/plugin-node-resolve': 15.0.2(rollup@3.20.7)
- '@rollup/plugin-replace': 5.0.2(rollup@3.20.7)
- '@rollup/plugin-terser': 0.4.1(rollup@3.20.7)
- '@rollup/plugin-virtual': 3.0.1(rollup@3.20.7)
- '@vue/compiler-sfc': 3.2.47
+ '@directus/composables': 10.1.1
+ '@directus/constants': 10.2.3
+ '@directus/types': 10.1.5(sqlite3@5.1.6)
+ '@directus/utils': 10.0.9
+ '@rollup/plugin-commonjs': 25.0.0(rollup@3.22.0)
+ '@rollup/plugin-json': 6.0.0(rollup@3.22.0)
+ '@rollup/plugin-node-resolve': 15.0.2(rollup@3.22.0)
+ '@rollup/plugin-replace': 5.0.2(rollup@3.22.0)
+ '@rollup/plugin-terser': 0.4.3(rollup@3.22.0)
+ '@rollup/plugin-virtual': 3.0.1(rollup@3.22.0)
+ '@vitejs/plugin-vue': 4.2.3(vite@4.3.7)(vue@3.3.4)
chalk: 5.2.0
commander: 10.0.1
- esbuild: 0.17.17
+ esbuild: 0.17.19
execa: 7.1.1
fs-extra: 11.1.1
- inquirer: 9.1.5
- ora: 6.3.0
- rollup: 3.20.7
- rollup-plugin-esbuild: 5.0.0(esbuild@0.17.17)(rollup@3.20.7)
- rollup-plugin-styles: 4.0.0(rollup@3.20.7)
- rollup-plugin-vue: 6.0.0(@vue/compiler-sfc@3.2.47)
+ inquirer: 9.2.4
+ ora: 6.3.1
+ rollup: 3.22.0
+ rollup-plugin-esbuild: 5.0.0(esbuild@0.17.19)(rollup@3.22.0)
+ rollup-plugin-styles: 4.0.0(rollup@3.22.0)
+ vite: 4.3.7(@types/node@20.5.7)
+ vue: 3.3.4
transitivePeerDependencies:
+ - '@types/node'
+ - better-sqlite3
+ - debug
+ - less
+ - mysql
+ - mysql2
+ - pg
+ - pg-native
+ - sass
+ - sqlite3
+ - stylus
+ - sugarss
- supports-color
+ - tedious
+ - terser
+ dev: true
+
+ /@directus/schema@10.0.2(sqlite3@5.1.6):
+ resolution: {integrity: sha512-9WSdceZN5Z6tZtHFZ8GbMqGWpTBnO+56lkhYECV9dO1JW1X/rF4d7HNBJCivN8OL+4GZIZN6ChrdQyUqycSwrA==}
+ dependencies:
+ knex: 2.4.2(sqlite3@5.1.6)
+ transitivePeerDependencies:
+ - better-sqlite3
+ - mysql
+ - mysql2
+ - pg
+ - pg-native
+ - sqlite3
+ - supports-color
+ - tedious
dev: true
/@directus/tsconfig@1.0.0:
resolution: {integrity: sha512-aDlUyhxEsqCzqHTdHMVsbAs3kgLeZrEW2V17Yp5oMpplBAKLbHUFuY00TxntERyUL31FZNDSMHW9bhsA4WmvyA==}
dev: true
- /@directus/types@10.0.0:
- resolution: {integrity: sha512-q78E5wW16LEBZfTft4yxY3hiEjdDzRG7H9ytx8G3lbclQFhYjml3PeqrXI7HzrDgwXozZm1/loC7zuVIYfbFQw==}
- dev: true
-
- /@directus/types@10.1.3:
- resolution: {integrity: sha512-2n2VTfFVzHYWwTxznOTbEsQUbCy/XIlpmiYt2HU3tqZe2cQiu+z5Sw+7YsdfDTmVjW78J20MdoweSjyHheqp6A==}
- dev: true
-
- /@directus/utils@10.0.1:
- resolution: {integrity: sha512-hAVO4dH53HNNksL4bnx8exsfl/aroqVhOTJlL6WmF5B+Y89uFn8X/lT+pf791mY/TuAHlQBhGE3aEz2o66RCLA==}
+ /@directus/types@10.1.5(sqlite3@5.1.6):
+ resolution: {integrity: sha512-Y7HeStRYKGIdoG6k2ooAQr7KKNv8wOjavrBZr8RKolvr5l/3RfjU/SzyghYSFXphFEOWpKuQYlREykKQI4tThw==}
dependencies:
- '@directus/constants': 10.1.0
- date-fns: 2.29.3
- fs-extra: 11.1.1
- joi: 17.9.1
- lodash-es: 4.17.21
- micromustache: 8.0.3
- tmp: 0.2.1
- vue: 3.2.47
+ '@directus/constants': 10.2.3
+ '@directus/schema': 10.0.2(sqlite3@5.1.6)
+ '@types/express': 4.17.17
+ '@types/geojson': 7946.0.10
+ express: 4.18.2
+ geojson: 0.5.0
+ knex: 2.4.2(sqlite3@5.1.6)
+ pino: 8.14.1
+ vue: 3.3.4
+ vue-router: 4.2.0(vue@3.3.4)
+ zod: 3.21.4
+ transitivePeerDependencies:
+ - better-sqlite3
+ - mysql
+ - mysql2
+ - pg
+ - pg-native
+ - sqlite3
+ - supports-color
+ - tedious
dev: true
- /@directus/utils@10.0.8:
- resolution: {integrity: sha512-rItMOVUWGGLnnkpp4bSMbS6c7SaABwKjGjZW9ydWJ7vIodCuyw/W7ZFWzEavCb1QJsfW2vwfSUQwBlYh22S3hQ==}
+ /@directus/utils@10.0.9:
+ resolution: {integrity: sha512-iRRRnwGADNk6w9nbodpufeAGRzOl3H7c7Ak82VypkaDtD8Ue+84HtrseEScrp++PMp/p9IxZhfaEvoUCRScSKg==}
dependencies:
- '@directus/constants': 10.2.2
+ '@directus/constants': 10.2.3
date-fns: 2.30.0
fs-extra: 11.1.1
joi: 17.9.2
@@ -479,8 +508,8 @@ packages:
vue: 3.3.4
dev: true
- /@esbuild/android-arm64@0.17.17:
- resolution: {integrity: sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg==}
+ /@esbuild/android-arm64@0.17.19:
+ resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@@ -488,8 +517,8 @@ packages:
dev: true
optional: true
- /@esbuild/android-arm64@0.18.17:
- resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==}
+ /@esbuild/android-arm64@0.18.20:
+ resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@@ -497,8 +526,8 @@ packages:
dev: true
optional: true
- /@esbuild/android-arm@0.17.17:
- resolution: {integrity: sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg==}
+ /@esbuild/android-arm@0.17.19:
+ resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
@@ -506,8 +535,8 @@ packages:
dev: true
optional: true
- /@esbuild/android-arm@0.18.17:
- resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==}
+ /@esbuild/android-arm@0.18.20:
+ resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
@@ -515,8 +544,8 @@ packages:
dev: true
optional: true
- /@esbuild/android-x64@0.17.17:
- resolution: {integrity: sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA==}
+ /@esbuild/android-x64@0.17.19:
+ resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
@@ -524,8 +553,8 @@ packages:
dev: true
optional: true
- /@esbuild/android-x64@0.18.17:
- resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==}
+ /@esbuild/android-x64@0.18.20:
+ resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
@@ -533,8 +562,8 @@ packages:
dev: true
optional: true
- /@esbuild/darwin-arm64@0.17.17:
- resolution: {integrity: sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ==}
+ /@esbuild/darwin-arm64@0.17.19:
+ resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@@ -542,8 +571,8 @@ packages:
dev: true
optional: true
- /@esbuild/darwin-arm64@0.18.17:
- resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==}
+ /@esbuild/darwin-arm64@0.18.20:
+ resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@@ -551,8 +580,8 @@ packages:
dev: true
optional: true
- /@esbuild/darwin-x64@0.17.17:
- resolution: {integrity: sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg==}
+ /@esbuild/darwin-x64@0.17.19:
+ resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@@ -560,8 +589,8 @@ packages:
dev: true
optional: true
- /@esbuild/darwin-x64@0.18.17:
- resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==}
+ /@esbuild/darwin-x64@0.18.20:
+ resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@@ -569,8 +598,8 @@ packages:
dev: true
optional: true
- /@esbuild/freebsd-arm64@0.17.17:
- resolution: {integrity: sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA==}
+ /@esbuild/freebsd-arm64@0.17.19:
+ resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@@ -578,8 +607,8 @@ packages:
dev: true
optional: true
- /@esbuild/freebsd-arm64@0.18.17:
- resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==}
+ /@esbuild/freebsd-arm64@0.18.20:
+ resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@@ -587,8 +616,8 @@ packages:
dev: true
optional: true
- /@esbuild/freebsd-x64@0.17.17:
- resolution: {integrity: sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw==}
+ /@esbuild/freebsd-x64@0.17.19:
+ resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@@ -596,8 +625,8 @@ packages:
dev: true
optional: true
- /@esbuild/freebsd-x64@0.18.17:
- resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==}
+ /@esbuild/freebsd-x64@0.18.20:
+ resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@@ -605,8 +634,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-arm64@0.17.17:
- resolution: {integrity: sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw==}
+ /@esbuild/linux-arm64@0.17.19:
+ resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@@ -614,8 +643,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-arm64@0.18.17:
- resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==}
+ /@esbuild/linux-arm64@0.18.20:
+ resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@@ -623,8 +652,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-arm@0.17.17:
- resolution: {integrity: sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg==}
+ /@esbuild/linux-arm@0.17.19:
+ resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@@ -632,8 +661,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-arm@0.18.17:
- resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==}
+ /@esbuild/linux-arm@0.18.20:
+ resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@@ -641,8 +670,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-ia32@0.17.17:
- resolution: {integrity: sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q==}
+ /@esbuild/linux-ia32@0.17.19:
+ resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@@ -650,8 +679,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-ia32@0.18.17:
- resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==}
+ /@esbuild/linux-ia32@0.18.20:
+ resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@@ -659,8 +688,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-loong64@0.17.17:
- resolution: {integrity: sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==}
+ /@esbuild/linux-loong64@0.17.19:
+ resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
@@ -668,8 +697,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-loong64@0.18.17:
- resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==}
+ /@esbuild/linux-loong64@0.18.20:
+ resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
@@ -677,8 +706,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-mips64el@0.17.17:
- resolution: {integrity: sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A==}
+ /@esbuild/linux-mips64el@0.17.19:
+ resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@@ -686,8 +715,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-mips64el@0.18.17:
- resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==}
+ /@esbuild/linux-mips64el@0.18.20:
+ resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@@ -695,8 +724,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-ppc64@0.17.17:
- resolution: {integrity: sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ==}
+ /@esbuild/linux-ppc64@0.17.19:
+ resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@@ -704,8 +733,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-ppc64@0.18.17:
- resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==}
+ /@esbuild/linux-ppc64@0.18.20:
+ resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@@ -713,8 +742,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-riscv64@0.17.17:
- resolution: {integrity: sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA==}
+ /@esbuild/linux-riscv64@0.17.19:
+ resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
@@ -722,8 +751,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-riscv64@0.18.17:
- resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==}
+ /@esbuild/linux-riscv64@0.18.20:
+ resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
@@ -731,8 +760,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-s390x@0.17.17:
- resolution: {integrity: sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ==}
+ /@esbuild/linux-s390x@0.17.19:
+ resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@@ -740,8 +769,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-s390x@0.18.17:
- resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==}
+ /@esbuild/linux-s390x@0.18.20:
+ resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@@ -749,8 +778,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-x64@0.17.17:
- resolution: {integrity: sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg==}
+ /@esbuild/linux-x64@0.17.19:
+ resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@@ -758,8 +787,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-x64@0.18.17:
- resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==}
+ /@esbuild/linux-x64@0.18.20:
+ resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@@ -767,8 +796,8 @@ packages:
dev: true
optional: true
- /@esbuild/netbsd-x64@0.17.17:
- resolution: {integrity: sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA==}
+ /@esbuild/netbsd-x64@0.17.19:
+ resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@@ -776,8 +805,8 @@ packages:
dev: true
optional: true
- /@esbuild/netbsd-x64@0.18.17:
- resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==}
+ /@esbuild/netbsd-x64@0.18.20:
+ resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@@ -785,8 +814,8 @@ packages:
dev: true
optional: true
- /@esbuild/openbsd-x64@0.17.17:
- resolution: {integrity: sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA==}
+ /@esbuild/openbsd-x64@0.17.19:
+ resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@@ -794,8 +823,8 @@ packages:
dev: true
optional: true
- /@esbuild/openbsd-x64@0.18.17:
- resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==}
+ /@esbuild/openbsd-x64@0.18.20:
+ resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@@ -803,8 +832,8 @@ packages:
dev: true
optional: true
- /@esbuild/sunos-x64@0.17.17:
- resolution: {integrity: sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q==}
+ /@esbuild/sunos-x64@0.17.19:
+ resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@@ -812,8 +841,8 @@ packages:
dev: true
optional: true
- /@esbuild/sunos-x64@0.18.17:
- resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==}
+ /@esbuild/sunos-x64@0.18.20:
+ resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@@ -821,8 +850,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-arm64@0.17.17:
- resolution: {integrity: sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q==}
+ /@esbuild/win32-arm64@0.17.19:
+ resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@@ -830,8 +859,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-arm64@0.18.17:
- resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==}
+ /@esbuild/win32-arm64@0.18.20:
+ resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@@ -839,8 +868,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-ia32@0.17.17:
- resolution: {integrity: sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ==}
+ /@esbuild/win32-ia32@0.17.19:
+ resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@@ -848,8 +877,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-ia32@0.18.17:
- resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==}
+ /@esbuild/win32-ia32@0.18.20:
+ resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@@ -857,8 +886,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-x64@0.17.17:
- resolution: {integrity: sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==}
+ /@esbuild/win32-x64@0.17.19:
+ resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@@ -866,8 +895,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-x64@0.18.17:
- resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==}
+ /@esbuild/win32-x64@0.18.20:
+ resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@@ -875,14 +904,29 @@ packages:
dev: true
optional: true
- /@eslint/eslintrc@1.4.1:
- resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0):
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: 8.48.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@eslint-community/regexpp@4.8.0:
+ resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ /@eslint/eslintrc@2.1.2:
+ resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
debug: 4.3.4(supports-color@8.1.1)
espree: 9.6.1
- globals: 13.20.0
+ globals: 13.21.0
ignore: 5.2.4
import-fresh: 3.3.0
js-yaml: 4.1.0
@@ -892,6 +936,11 @@ packages:
- supports-color
dev: true
+ /@eslint/js@8.48.0:
+ resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
/@gar/promisify@1.1.3:
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
requiresBuild: true
@@ -908,8 +957,8 @@ packages:
'@hapi/hoek': 9.3.0
dev: true
- /@humanwhocodes/config-array@0.6.0:
- resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==}
+ /@humanwhocodes/config-array@0.11.11:
+ resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==}
engines: {node: '>=10.10.0'}
dependencies:
'@humanwhocodes/object-schema': 1.2.1
@@ -919,6 +968,11 @@ packages:
- supports-color
dev: true
+ /@humanwhocodes/module-importer@1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+ dev: true
+
/@humanwhocodes/object-schema@1.2.1:
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
dev: true
@@ -953,28 +1007,28 @@ packages:
engines: {node: '>=8'}
dev: true
- /@jest/expect-utils@29.6.2:
- resolution: {integrity: sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==}
+ /@jest/expect-utils@29.6.4:
+ resolution: {integrity: sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- jest-get-type: 29.4.3
+ jest-get-type: 29.6.3
dev: true
- /@jest/schemas@29.6.0:
- resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==}
+ /@jest/schemas@29.6.3:
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@sinclair/typebox': 0.27.8
dev: true
- /@jest/types@29.6.1:
- resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==}
+ /@jest/types@29.6.3:
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- '@jest/schemas': 29.6.0
+ '@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
'@types/yargs': 17.0.24
chalk: 4.1.2
dev: true
@@ -985,12 +1039,7 @@ packages:
dependencies:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.18
- dev: true
-
- /@jridgewell/resolve-uri@3.1.0:
- resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
- engines: {node: '>=6.0.0'}
+ '@jridgewell/trace-mapping': 0.3.19
dev: true
/@jridgewell/resolve-uri@3.1.1:
@@ -1007,22 +1056,18 @@ packages:
resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
dependencies:
'@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
- dev: true
-
- /@jridgewell/sourcemap-codec@1.4.14:
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+ '@jridgewell/trace-mapping': 0.3.19
dev: true
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
dev: true
- /@jridgewell/trace-mapping@0.3.18:
- resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
+ /@jridgewell/trace-mapping@0.3.19:
+ resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
dev: true
/@jridgewell/trace-mapping@0.3.9:
@@ -1048,7 +1093,7 @@ packages:
detect-libc: 2.0.2
https-proxy-agent: 5.0.1
make-dir: 3.1.0
- node-fetch: 2.6.12
+ node-fetch: 2.7.0
nopt: 5.0.0
npmlog: 5.0.1
rimraf: 3.0.2
@@ -1220,8 +1265,8 @@ packages:
config-chain: 1.1.13
dev: true
- /@rollup/plugin-commonjs@24.1.0(rollup@3.20.7):
- resolution: {integrity: sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==}
+ /@rollup/plugin-commonjs@25.0.0(rollup@3.22.0):
+ resolution: {integrity: sha512-hoho2Kay9TZrLu0bnDsTTCaj4Npa+THk9snajP/XDNb9a9mmjTjh52EQM9sKl3HD1LsnihX7js+eA2sd2uKAhw==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^2.68.0||^3.0.0
@@ -1229,16 +1274,16 @@ packages:
rollup:
optional: true
dependencies:
- '@rollup/pluginutils': 5.0.2(rollup@3.20.7)
+ '@rollup/pluginutils': 5.0.4(rollup@3.22.0)
commondir: 1.0.1
estree-walker: 2.0.2
glob: 8.1.0
is-reference: 1.2.1
magic-string: 0.27.0
- rollup: 3.20.7
+ rollup: 3.22.0
dev: true
- /@rollup/plugin-json@6.0.0(rollup@3.20.7):
+ /@rollup/plugin-json@6.0.0(rollup@3.22.0):
resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -1247,11 +1292,11 @@ packages:
rollup:
optional: true
dependencies:
- '@rollup/pluginutils': 5.0.2(rollup@3.20.7)
- rollup: 3.20.7
+ '@rollup/pluginutils': 5.0.4(rollup@3.22.0)
+ rollup: 3.22.0
dev: true
- /@rollup/plugin-node-resolve@15.0.2(rollup@3.20.7):
+ /@rollup/plugin-node-resolve@15.0.2(rollup@3.22.0):
resolution: {integrity: sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -1260,16 +1305,16 @@ packages:
rollup:
optional: true
dependencies:
- '@rollup/pluginutils': 5.0.2(rollup@3.20.7)
+ '@rollup/pluginutils': 5.0.4(rollup@3.22.0)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-builtin-module: 3.2.1
is-module: 1.0.0
- resolve: 1.22.2
- rollup: 3.20.7
+ resolve: 1.22.4
+ rollup: 3.22.0
dev: true
- /@rollup/plugin-replace@5.0.2(rollup@3.20.7):
+ /@rollup/plugin-replace@5.0.2(rollup@3.22.0):
resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -1278,13 +1323,13 @@ packages:
rollup:
optional: true
dependencies:
- '@rollup/pluginutils': 5.0.2(rollup@3.20.7)
+ '@rollup/pluginutils': 5.0.4(rollup@3.22.0)
magic-string: 0.27.0
- rollup: 3.20.7
+ rollup: 3.22.0
dev: true
- /@rollup/plugin-terser@0.4.1(rollup@3.20.7):
- resolution: {integrity: sha512-aKS32sw5a7hy+fEXVy+5T95aDIwjpGHCTv833HXVtyKMDoVS7pBr5K3L9hEQoNqbJFjfANPrNpIXlTQ7is00eA==}
+ /@rollup/plugin-terser@0.4.3(rollup@3.22.0):
+ resolution: {integrity: sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^2.x || ^3.x
@@ -1292,13 +1337,13 @@ packages:
rollup:
optional: true
dependencies:
- rollup: 3.20.7
+ rollup: 3.22.0
serialize-javascript: 6.0.1
- smob: 0.0.6
- terser: 5.19.2
+ smob: 1.4.0
+ terser: 5.19.3
dev: true
- /@rollup/plugin-virtual@3.0.1(rollup@3.20.7):
+ /@rollup/plugin-virtual@3.0.1(rollup@3.22.0):
resolution: {integrity: sha512-fK8O0IL5+q+GrsMLuACVNk2x21g3yaw+sG2qn16SnUd3IlBsQyvWxLMGHmCmXRMecPjGRSZ/1LmZB4rjQm68og==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -1307,7 +1352,7 @@ packages:
rollup:
optional: true
dependencies:
- rollup: 3.20.7
+ rollup: 3.22.0
dev: true
/@rollup/pluginutils@4.2.1:
@@ -1318,8 +1363,8 @@ packages:
picomatch: 2.3.1
dev: true
- /@rollup/pluginutils@5.0.2(rollup@3.20.7):
- resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
+ /@rollup/pluginutils@5.0.4(rollup@3.22.0):
+ resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0
@@ -1330,10 +1375,10 @@ packages:
'@types/estree': 1.0.1
estree-walker: 2.0.2
picomatch: 2.3.1
- rollup: 3.20.7
+ rollup: 3.22.0
dev: true
- /@semantic-release/changelog@6.0.3(semantic-release@21.0.7):
+ /@semantic-release/changelog@6.0.3(semantic-release@21.1.1):
resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==}
engines: {node: '>=14.17'}
peerDependencies:
@@ -1343,23 +1388,23 @@ packages:
aggregate-error: 3.1.0
fs-extra: 11.1.1
lodash: 4.17.21
- semantic-release: 21.0.7
+ semantic-release: 21.1.1
dev: true
- /@semantic-release/commit-analyzer@10.0.1(semantic-release@21.0.7):
- resolution: {integrity: sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==}
+ /@semantic-release/commit-analyzer@10.0.4(semantic-release@21.1.1):
+ resolution: {integrity: sha512-pFGn99fn8w4/MHE0otb2A/l5kxgOuxaaauIh4u30ncoTJuqWj4hXTgEJ03REqjS+w1R2vPftSsO26WC61yOcpw==}
engines: {node: '>=18'}
peerDependencies:
semantic-release: '>=20.1.0'
dependencies:
conventional-changelog-angular: 6.0.0
conventional-commits-filter: 3.0.0
- conventional-commits-parser: 4.0.0
+ conventional-commits-parser: 5.0.0
debug: 4.3.4(supports-color@8.1.1)
import-from: 4.0.0
lodash-es: 4.17.21
micromatch: 4.0.5
- semantic-release: 21.0.7
+ semantic-release: 21.1.1
transitivePeerDependencies:
- supports-color
dev: true
@@ -1374,7 +1419,7 @@ packages:
engines: {node: '>=18'}
dev: true
- /@semantic-release/exec@6.0.3(semantic-release@21.0.7):
+ /@semantic-release/exec@6.0.3(semantic-release@21.1.1):
resolution: {integrity: sha512-bxAq8vLOw76aV89vxxICecEa8jfaWwYITw6X74zzlO0mc/Bgieqx9kBRz9z96pHectiTAtsCwsQcUyLYWnp3VQ==}
engines: {node: '>=14.17'}
peerDependencies:
@@ -1386,12 +1431,12 @@ packages:
execa: 5.1.1
lodash: 4.17.21
parse-json: 5.2.0
- semantic-release: 21.0.7
+ semantic-release: 21.1.1
transitivePeerDependencies:
- supports-color
dev: true
- /@semantic-release/github@9.0.4(semantic-release@21.0.7):
+ /@semantic-release/github@9.0.4(semantic-release@21.1.1):
resolution: {integrity: sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==}
engines: {node: '>=18'}
peerDependencies:
@@ -1412,51 +1457,51 @@ packages:
lodash-es: 4.17.21
mime: 3.0.0
p-filter: 3.0.0
- semantic-release: 21.0.7
+ semantic-release: 21.1.1
url-join: 5.0.0
transitivePeerDependencies:
- supports-color
dev: true
- /@semantic-release/npm@10.0.4(semantic-release@21.0.7):
- resolution: {integrity: sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==}
+ /@semantic-release/npm@10.0.5(semantic-release@21.1.1):
+ resolution: {integrity: sha512-cJnQ2M5pxJRwZEkb0A/+U3TG4UNmjrrLwV2PxJKljn5OPT0yJB8GzGgWbbKACayvxrT06YdTa4Amtq/piJcOIA==}
engines: {node: '>=18'}
peerDependencies:
semantic-release: '>=20.1.0'
dependencies:
'@semantic-release/error': 4.0.0
aggregate-error: 4.0.1
- execa: 7.1.1
+ execa: 8.0.1
fs-extra: 11.1.1
lodash-es: 4.17.21
nerf-dart: 1.0.0
normalize-url: 8.0.0
npm: 9.8.1
rc: 1.2.8
- read-pkg: 8.0.0
+ read-pkg: 8.1.0
registry-auth-token: 5.0.2
- semantic-release: 21.0.7
+ semantic-release: 21.1.1
semver: 7.5.4
tempy: 3.1.0
dev: true
- /@semantic-release/release-notes-generator@11.0.4(semantic-release@21.0.7):
- resolution: {integrity: sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==}
+ /@semantic-release/release-notes-generator@11.0.7(semantic-release@21.1.1):
+ resolution: {integrity: sha512-T09QB9ImmNx7Q6hY6YnnEbw/rEJ6a+22LBxfZq+pSAXg/OL/k0siwEm5cK4k1f9dE2Z2mPIjJKKohzUm0jbxcQ==}
engines: {node: '>=18'}
peerDependencies:
semantic-release: '>=20.1.0'
dependencies:
conventional-changelog-angular: 6.0.0
conventional-changelog-writer: 6.0.1
- conventional-commits-filter: 3.0.0
- conventional-commits-parser: 4.0.0
+ conventional-commits-filter: 4.0.0
+ conventional-commits-parser: 5.0.0
debug: 4.3.4(supports-color@8.1.1)
get-stream: 7.0.1
import-from: 4.0.0
into-stream: 7.0.0
lodash-es: 4.17.21
- read-pkg-up: 10.0.0
- semantic-release: 21.0.7
+ read-pkg-up: 10.1.0
+ semantic-release: 21.1.1
transitivePeerDependencies:
- supports-color
dev: true
@@ -1511,7 +1556,7 @@ packages:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies:
'@types/connect': 3.4.35
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
/@types/chai-as-promised@7.1.5:
resolution: {integrity: sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==}
@@ -1536,13 +1581,13 @@ packages:
/@types/connect@3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
- /@types/cssnano@5.1.0(postcss@8.4.27):
+ /@types/cssnano@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-ikR+18UpFGgvaWSur4og6SJYF/6QEYHXvrIt36dp81p1MG3cAPTYDMBJGeyWa3LCnqEbgNMHKRb+FP0NrXtoWQ==}
deprecated: This is a stub types definition. cssnano provides its own type definitions, so you do not need this installed.
dependencies:
- cssnano: 5.1.15(postcss@8.4.27)
+ cssnano: 5.1.15(postcss@8.4.29)
transitivePeerDependencies:
- postcss
dev: true
@@ -1555,13 +1600,13 @@ packages:
resolution: {integrity: sha512-aq5Z+YFBz5o2b6Sp1jigx5nsmoZMK5Ceurjwy6PZmRv7dEi1jLtkARfvB1ME+OXJUG+7TZUDcv3WoCr/aor6dQ==}
deprecated: This is a stub types definition. expect provides its own type definitions, so you do not need this installed.
dependencies:
- expect: 29.6.2
+ expect: 29.6.4
dev: true
- /@types/express-serve-static-core@4.17.35:
- resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==}
+ /@types/express-serve-static-core@4.17.36:
+ resolution: {integrity: sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==}
dependencies:
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
'@types/send': 0.17.1
@@ -1570,7 +1615,7 @@ packages:
resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==}
dependencies:
'@types/body-parser': 1.19.2
- '@types/express-serve-static-core': 4.17.35
+ '@types/express-serve-static-core': 4.17.36
'@types/qs': 6.9.7
'@types/serve-static': 1.15.2
@@ -1578,7 +1623,11 @@ packages:
resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==}
dependencies:
'@types/jsonfile': 6.1.1
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
+ dev: true
+
+ /@types/geojson@7946.0.10:
+ resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==}
dev: true
/@types/http-errors@2.0.1:
@@ -1616,22 +1665,22 @@ packages:
/@types/jsonfile@6.1.1:
resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==}
dependencies:
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
dev: true
/@types/jsonwebtoken@9.0.2:
resolution: {integrity: sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==}
dependencies:
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
/@types/lodash-es@4.17.8:
resolution: {integrity: sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==}
dependencies:
- '@types/lodash': 4.14.196
+ '@types/lodash': 4.14.197
dev: true
- /@types/lodash@4.14.196:
- resolution: {integrity: sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==}
+ /@types/lodash@4.14.197:
+ resolution: {integrity: sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==}
dev: true
/@types/mime@1.3.2:
@@ -1648,8 +1697,8 @@ packages:
resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==}
dev: true
- /@types/node@20.4.5:
- resolution: {integrity: sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==}
+ /@types/node@20.5.7:
+ resolution: {integrity: sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==}
/@types/normalize-package-data@2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
@@ -1669,22 +1718,22 @@ packages:
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
dev: true
- /@types/semver@7.5.0:
- resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==}
+ /@types/semver@7.5.1:
+ resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==}
dev: true
/@types/send@0.17.1:
resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==}
dependencies:
'@types/mime': 1.3.2
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
/@types/serve-static@1.15.2:
resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==}
dependencies:
'@types/http-errors': 2.0.1
'@types/mime': 3.0.1
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
/@types/stack-utils@2.0.1:
resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
@@ -1700,8 +1749,8 @@ packages:
'@types/yargs-parser': 21.0.0
dev: true
- /@typescript-eslint/eslint-plugin@5.52.0(@typescript-eslint/parser@5.62.0)(eslint@8.0.1)(typescript@5.1.6):
- resolution: {integrity: sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==}
+ /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
@@ -1711,24 +1760,24 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.62.0(eslint@8.0.1)(typescript@5.1.6)
- '@typescript-eslint/scope-manager': 5.52.0
- '@typescript-eslint/type-utils': 5.52.0(eslint@8.0.1)(typescript@5.1.6)
- '@typescript-eslint/utils': 5.52.0(eslint@8.0.1)(typescript@5.1.6)
+ '@eslint-community/regexpp': 4.8.0
+ '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/type-utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
+ '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
debug: 4.3.4(supports-color@8.1.1)
- eslint: 8.0.1
- grapheme-splitter: 1.0.4
+ eslint: 8.48.0
+ graphemer: 1.4.0
ignore: 5.2.4
natural-compare-lite: 1.4.0
- regexpp: 3.2.0
semver: 7.5.4
- tsutils: 3.21.0(typescript@5.1.6)
- typescript: 5.1.6
+ tsutils: 3.21.0(typescript@5.2.2)
+ typescript: 5.2.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/parser@5.62.0(eslint@8.0.1)(typescript@5.1.6):
+ /@typescript-eslint/parser@5.62.0(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -1740,22 +1789,14 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0
- '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6)
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
debug: 4.3.4(supports-color@8.1.1)
- eslint: 8.0.1
- typescript: 5.1.6
+ eslint: 8.48.0
+ typescript: 5.2.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/scope-manager@5.52.0:
- resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- '@typescript-eslint/types': 5.52.0
- '@typescript-eslint/visitor-keys': 5.52.0
- dev: true
-
/@typescript-eslint/scope-manager@5.62.0:
resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1764,8 +1805,8 @@ packages:
'@typescript-eslint/visitor-keys': 5.62.0
dev: true
- /@typescript-eslint/type-utils@5.52.0(eslint@8.0.1)(typescript@5.1.6):
- resolution: {integrity: sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==}
+ /@typescript-eslint/type-utils@5.62.0(eslint@8.48.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -1774,48 +1815,22 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 5.52.0(typescript@5.1.6)
- '@typescript-eslint/utils': 5.52.0(eslint@8.0.1)(typescript@5.1.6)
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
+ '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
debug: 4.3.4(supports-color@8.1.1)
- eslint: 8.0.1
- tsutils: 3.21.0(typescript@5.1.6)
- typescript: 5.1.6
+ eslint: 8.48.0
+ tsutils: 3.21.0(typescript@5.2.2)
+ typescript: 5.2.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/types@5.52.0:
- resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
-
/@typescript-eslint/types@5.62.0:
resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /@typescript-eslint/typescript-estree@5.52.0(typescript@5.1.6):
- resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/types': 5.52.0
- '@typescript-eslint/visitor-keys': 5.52.0
- debug: 4.3.4(supports-color@8.1.1)
- globby: 11.1.0
- is-glob: 4.0.3
- semver: 7.5.4
- tsutils: 3.21.0(typescript@5.1.6)
- typescript: 5.1.6
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6):
+ /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2):
resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -1830,50 +1845,53 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.5.4
- tsutils: 3.21.0(typescript@5.1.6)
- typescript: 5.1.6
+ tsutils: 3.21.0(typescript@5.2.2)
+ typescript: 5.2.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/utils@5.52.0(eslint@8.0.1)(typescript@5.1.6):
- resolution: {integrity: sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==}
+ /@typescript-eslint/utils@5.62.0(eslint@8.48.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
'@types/json-schema': 7.0.12
- '@types/semver': 7.5.0
- '@typescript-eslint/scope-manager': 5.52.0
- '@typescript-eslint/types': 5.52.0
- '@typescript-eslint/typescript-estree': 5.52.0(typescript@5.1.6)
- eslint: 8.0.1
+ '@types/semver': 7.5.1
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
+ eslint: 8.48.0
eslint-scope: 5.1.1
- eslint-utils: 3.0.0(eslint@8.0.1)
semver: 7.5.4
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /@typescript-eslint/visitor-keys@5.52.0:
- resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- '@typescript-eslint/types': 5.52.0
- eslint-visitor-keys: 3.4.2
- dev: true
-
/@typescript-eslint/visitor-keys@5.62.0:
resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
'@typescript-eslint/types': 5.62.0
- eslint-visitor-keys: 3.4.2
+ eslint-visitor-keys: 3.4.3
dev: true
- /@vitest/coverage-istanbul@0.34.1(vitest@0.34.1):
- resolution: {integrity: sha512-5GprlyY2t1g6+RrssWcN/w5RnZV3qIOM0eoaSDJw3jXbHpBpMvAfTg791zXo7PIqNYs5ORUqBWXIIU0gyAfZxA==}
+ /@vitejs/plugin-vue@4.2.3(vite@4.3.7)(vue@3.3.4):
+ resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: 4.3.7(@types/node@20.5.7)
+ vue: 3.3.4
+ dev: true
+
+ /@vitest/coverage-istanbul@0.34.3(vitest@0.34.3):
+ resolution: {integrity: sha512-RdEGzydbbalyDLmmJ5Qm+T3Lrubw/U9iCnhzM2B1V57t4cVa1t6uyfIHdv68d1au4PRzkLhY7Xouwuhb7BeG+Q==}
peerDependencies:
vitest: '>=0.32.0 <1'
dependencies:
@@ -1883,74 +1901,58 @@ packages:
istanbul-lib-source-maps: 4.0.1
istanbul-reports: 3.1.6
test-exclude: 6.0.0
- vitest: 0.34.1
+ vitest: 0.34.3
transitivePeerDependencies:
- supports-color
dev: true
- /@vitest/expect@0.34.1:
- resolution: {integrity: sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==}
+ /@vitest/expect@0.34.3:
+ resolution: {integrity: sha512-F8MTXZUYRBVsYL1uoIft1HHWhwDbSzwAU9Zgh8S6WFC3YgVb4AnFV2GXO3P5Em8FjEYaZtTnQYoNwwBrlOMXgg==}
dependencies:
- '@vitest/spy': 0.34.1
- '@vitest/utils': 0.34.1
- chai: 4.3.7
+ '@vitest/spy': 0.34.3
+ '@vitest/utils': 0.34.3
+ chai: 4.3.8
dev: true
- /@vitest/runner@0.34.1:
- resolution: {integrity: sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==}
+ /@vitest/runner@0.34.3:
+ resolution: {integrity: sha512-lYNq7N3vR57VMKMPLVvmJoiN4bqwzZ1euTW+XXYH5kzr3W/+xQG3b41xJn9ChJ3AhYOSoweu974S1V3qDcFESA==}
dependencies:
- '@vitest/utils': 0.34.1
+ '@vitest/utils': 0.34.3
p-limit: 4.0.0
pathe: 1.1.1
dev: true
- /@vitest/snapshot@0.34.1:
- resolution: {integrity: sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==}
+ /@vitest/snapshot@0.34.3:
+ resolution: {integrity: sha512-QyPaE15DQwbnIBp/yNJ8lbvXTZxS00kRly0kfFgAD5EYmCbYcA+1EEyRalc93M0gosL/xHeg3lKAClIXYpmUiQ==}
dependencies:
- magic-string: 0.30.2
+ magic-string: 0.30.3
pathe: 1.1.1
- pretty-format: 29.6.2
+ pretty-format: 29.6.3
dev: true
- /@vitest/spy@0.34.1:
- resolution: {integrity: sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==}
+ /@vitest/spy@0.34.3:
+ resolution: {integrity: sha512-N1V0RFQ6AI7CPgzBq9kzjRdPIgThC340DGjdKdPSE8r86aUSmeliTUgkTqLSgtEwWWsGfBQ+UetZWhK0BgJmkQ==}
dependencies:
tinyspy: 2.1.1
dev: true
- /@vitest/utils@0.34.1:
- resolution: {integrity: sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==}
+ /@vitest/utils@0.34.3:
+ resolution: {integrity: sha512-kiSnzLG6m/tiT0XEl4U2H8JDBjFtwVlaE8I3QfGiMFR0QvnRDfYfdP3YvTBWM/6iJDAyaPY6yVQiCTUc7ZzTHA==}
dependencies:
- diff-sequences: 29.4.3
+ diff-sequences: 29.6.3
loupe: 2.3.6
- pretty-format: 29.6.2
- dev: true
-
- /@vue/compiler-core@3.2.47:
- resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
- dependencies:
- '@babel/parser': 7.22.7
- '@vue/shared': 3.2.47
- estree-walker: 2.0.2
- source-map: 0.6.1
+ pretty-format: 29.6.3
dev: true
/@vue/compiler-core@3.3.4:
resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
dependencies:
- '@babel/parser': 7.22.7
+ '@babel/parser': 7.22.13
'@vue/shared': 3.3.4
estree-walker: 2.0.2
source-map-js: 1.0.2
dev: true
- /@vue/compiler-dom@3.2.47:
- resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
- dependencies:
- '@vue/compiler-core': 3.2.47
- '@vue/shared': 3.2.47
- dev: true
-
/@vue/compiler-dom@3.3.4:
resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
dependencies:
@@ -1958,43 +1960,21 @@ packages:
'@vue/shared': 3.3.4
dev: true
- /@vue/compiler-sfc@3.2.47:
- resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
- dependencies:
- '@babel/parser': 7.22.7
- '@vue/compiler-core': 3.2.47
- '@vue/compiler-dom': 3.2.47
- '@vue/compiler-ssr': 3.2.47
- '@vue/reactivity-transform': 3.2.47
- '@vue/shared': 3.2.47
- estree-walker: 2.0.2
- magic-string: 0.25.9
- postcss: 8.4.27
- source-map: 0.6.1
- dev: true
-
/@vue/compiler-sfc@3.3.4:
resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
dependencies:
- '@babel/parser': 7.22.7
+ '@babel/parser': 7.22.13
'@vue/compiler-core': 3.3.4
'@vue/compiler-dom': 3.3.4
'@vue/compiler-ssr': 3.3.4
'@vue/reactivity-transform': 3.3.4
'@vue/shared': 3.3.4
estree-walker: 2.0.2
- magic-string: 0.30.2
- postcss: 8.4.27
+ magic-string: 0.30.3
+ postcss: 8.4.29
source-map-js: 1.0.2
dev: true
- /@vue/compiler-ssr@3.2.47:
- resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
- dependencies:
- '@vue/compiler-dom': 3.2.47
- '@vue/shared': 3.2.47
- dev: true
-
/@vue/compiler-ssr@3.3.4:
resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
dependencies:
@@ -2002,30 +1982,18 @@ packages:
'@vue/shared': 3.3.4
dev: true
- /@vue/reactivity-transform@3.2.47:
- resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
- dependencies:
- '@babel/parser': 7.22.7
- '@vue/compiler-core': 3.2.47
- '@vue/shared': 3.2.47
- estree-walker: 2.0.2
- magic-string: 0.25.9
+ /@vue/devtools-api@6.5.0:
+ resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
dev: true
/@vue/reactivity-transform@3.3.4:
resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
dependencies:
- '@babel/parser': 7.22.7
+ '@babel/parser': 7.22.13
'@vue/compiler-core': 3.3.4
'@vue/shared': 3.3.4
estree-walker: 2.0.2
- magic-string: 0.30.2
- dev: true
-
- /@vue/reactivity@3.2.47:
- resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
- dependencies:
- '@vue/shared': 3.2.47
+ magic-string: 0.30.3
dev: true
/@vue/reactivity@3.3.4:
@@ -2034,13 +2002,6 @@ packages:
'@vue/shared': 3.3.4
dev: true
- /@vue/runtime-core@3.2.47:
- resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
- dependencies:
- '@vue/reactivity': 3.2.47
- '@vue/shared': 3.2.47
- dev: true
-
/@vue/runtime-core@3.3.4:
resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
dependencies:
@@ -2048,14 +2009,6 @@ packages:
'@vue/shared': 3.3.4
dev: true
- /@vue/runtime-dom@3.2.47:
- resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
- dependencies:
- '@vue/runtime-core': 3.2.47
- '@vue/shared': 3.2.47
- csstype: 2.6.21
- dev: true
-
/@vue/runtime-dom@3.3.4:
resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
dependencies:
@@ -2064,16 +2017,6 @@ packages:
csstype: 3.1.2
dev: true
- /@vue/server-renderer@3.2.47(vue@3.2.47):
- resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
- peerDependencies:
- vue: 3.2.47
- dependencies:
- '@vue/compiler-ssr': 3.2.47
- '@vue/shared': 3.2.47
- vue: 3.2.47
- dev: true
-
/@vue/server-renderer@3.3.4(vue@3.3.4):
resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
peerDependencies:
@@ -2084,10 +2027,6 @@ packages:
vue: 3.3.4
dev: true
- /@vue/shared@3.2.47:
- resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
- dev: true
-
/@vue/shared@3.3.4:
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
dev: true
@@ -2105,6 +2044,21 @@ packages:
requiresBuild: true
dev: true
+ /abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+ dependencies:
+ event-target-shim: 5.0.1
+ dev: true
+
+ /accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+ dev: true
+
/acorn-jsx@5.3.2(acorn@8.10.0):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -2142,16 +2096,12 @@ packages:
- supports-color
dev: true
- /agentkeepalive@4.3.0:
- resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==}
+ /agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
engines: {node: '>= 8.0.0'}
requiresBuild: true
dependencies:
- debug: 4.3.4(supports-color@8.1.1)
- depd: 2.0.0
humanize-ms: 1.2.1
- transitivePeerDependencies:
- - supports-color
dev: true
optional: true
@@ -2185,9 +2135,11 @@ packages:
engines: {node: '>=6'}
dev: true
- /ansi-colors@4.1.3:
- resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
- engines: {node: '>=6'}
+ /ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.21.3
dev: true
/ansi-escapes@6.2.0:
@@ -2226,11 +2178,6 @@ packages:
engines: {node: '>=10'}
dev: true
- /ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
- engines: {node: '>=12'}
- dev: true
-
/ansicolors@0.3.2:
resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
dev: true
@@ -2301,6 +2248,10 @@ packages:
is-array-buffer: 3.0.2
dev: true
+ /array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+ dev: true
+
/array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
dev: true
@@ -2321,6 +2272,17 @@ packages:
engines: {node: '>=8'}
dev: true
+ /array.prototype.findlastindex@1.2.3:
+ resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.22.1
+ es-shim-unscopables: 1.0.0
+ get-intrinsic: 1.2.1
+ dev: true
+
/array.prototype.flat@1.3.1:
resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
engines: {node: '>= 0.4'}
@@ -2331,6 +2293,16 @@ packages:
es-shim-unscopables: 1.0.0
dev: true
+ /array.prototype.flatmap@1.3.1:
+ resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.22.1
+ es-shim-unscopables: 1.0.0
+ dev: true
+
/arraybuffer.prototype.slice@1.0.1:
resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==}
engines: {node: '>= 0.4'}
@@ -2356,6 +2328,11 @@ packages:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
dev: true
+ /atomic-sleep@1.0.0:
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+ engines: {node: '>=8.0.0'}
+ dev: true
+
/available-typed-arrays@1.0.5:
resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
engines: {node: '>= 0.4'}
@@ -2371,6 +2348,16 @@ packages:
- debug
dev: true
+ /axios@1.5.0:
+ resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==}
+ dependencies:
+ follow-redirects: 1.15.2
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: true
@@ -2388,6 +2375,14 @@ packages:
engines: {node: '>=8'}
dev: true
+ /bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
/bl@5.1.0:
resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
dependencies:
@@ -2396,6 +2391,26 @@ packages:
readable-stream: 3.6.2
dev: true
+ /body-parser@1.20.1:
+ resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.11.0
+ raw-body: 2.5.1
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
dev: true
@@ -2433,8 +2448,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001518
- electron-to-chromium: 1.4.480
+ caniuse-lite: 1.0.30001524
+ electron-to-chromium: 1.4.505
node-releases: 2.0.13
update-browserslist-db: 1.0.11(browserslist@4.21.10)
dev: true
@@ -2447,6 +2462,13 @@ packages:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
dev: true
+ /buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: true
+
/buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
dependencies:
@@ -2459,6 +2481,17 @@ packages:
engines: {node: '>=6'}
dev: true
+ /builtins@5.0.1:
+ resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
+ dependencies:
+ semver: 7.5.4
+ dev: true
+
+ /bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
/cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
@@ -2537,13 +2570,13 @@ packages:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
dependencies:
browserslist: 4.21.10
- caniuse-lite: 1.0.30001518
+ caniuse-lite: 1.0.30001524
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
dev: true
- /caniuse-lite@1.0.30001518:
- resolution: {integrity: sha512-rup09/e3I0BKjncL+FesTayKtPrdwKhUufQFd3riFw1hHg8JmIFoInYfB102cFcY/pPgGmdyl/iy+jgiDi2vdA==}
+ /caniuse-lite@1.0.30001524:
+ resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==}
dev: true
/cardinal@2.1.1:
@@ -2554,8 +2587,8 @@ packages:
redeyed: 2.1.1
dev: true
- /chai@4.3.7:
- resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
+ /chai@4.3.8:
+ resolution: {integrity: sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==}
engines: {node: '>=4'}
dependencies:
assertion-error: 1.1.0
@@ -2589,6 +2622,11 @@ packages:
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
+ /chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: true
+
/chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
dev: true
@@ -2609,7 +2647,7 @@ packages:
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
/chownr@2.0.0:
@@ -2634,6 +2672,13 @@ packages:
escape-string-regexp: 5.0.0
dev: true
+ /cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+ dependencies:
+ restore-cursor: 3.1.0
+ dev: true
+
/cli-cursor@4.0.0:
resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2655,8 +2700,8 @@ packages:
'@colors/colors': 1.5.0
dev: true
- /cli-width@4.0.0:
- resolution: {integrity: sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==}
+ /cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
dev: true
@@ -2750,6 +2795,11 @@ packages:
engines: {node: '>= 10'}
dev: true
+ /commander@9.5.0:
+ resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+ engines: {node: ^12.20.0 || >=14}
+ dev: true
+
/commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
dev: true
@@ -2783,6 +2833,18 @@ packages:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
dev: true
+ /content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/conventional-changelog-angular@6.0.0:
resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==}
engines: {node: '>=14'}
@@ -2812,21 +2874,35 @@ packages:
modify-values: 1.0.1
dev: true
- /conventional-commits-parser@4.0.0:
- resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==}
- engines: {node: '>=14'}
+ /conventional-commits-filter@4.0.0:
+ resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-commits-parser@5.0.0:
+ resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==}
+ engines: {node: '>=16'}
hasBin: true
dependencies:
JSONStream: 1.3.5
- is-text-path: 1.0.1
- meow: 8.1.2
- split2: 3.2.2
+ is-text-path: 2.0.0
+ meow: 12.1.1
+ split2: 4.2.0
dev: true
/convert-source-map@1.9.0:
resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
dev: true
+ /cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+ dev: true
+
+ /cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
@@ -2872,13 +2948,13 @@ packages:
type-fest: 1.4.0
dev: true
- /css-declaration-sorter@6.4.1(postcss@8.4.27):
+ /css-declaration-sorter@6.4.1(postcss@8.4.29):
resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==}
engines: {node: ^10 || ^12 || >=14}
peerDependencies:
postcss: ^8.0.9
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
/css-select@4.3.0:
@@ -2910,62 +2986,62 @@ packages:
hasBin: true
dev: true
- /cssnano-preset-default@5.2.14(postcss@8.4.27):
+ /cssnano-preset-default@5.2.14(postcss@8.4.29):
resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- css-declaration-sorter: 6.4.1(postcss@8.4.27)
- cssnano-utils: 3.1.0(postcss@8.4.27)
- postcss: 8.4.27
- postcss-calc: 8.2.4(postcss@8.4.27)
- postcss-colormin: 5.3.1(postcss@8.4.27)
- postcss-convert-values: 5.1.3(postcss@8.4.27)
- postcss-discard-comments: 5.1.2(postcss@8.4.27)
- postcss-discard-duplicates: 5.1.0(postcss@8.4.27)
- postcss-discard-empty: 5.1.1(postcss@8.4.27)
- postcss-discard-overridden: 5.1.0(postcss@8.4.27)
- postcss-merge-longhand: 5.1.7(postcss@8.4.27)
- postcss-merge-rules: 5.1.4(postcss@8.4.27)
- postcss-minify-font-values: 5.1.0(postcss@8.4.27)
- postcss-minify-gradients: 5.1.1(postcss@8.4.27)
- postcss-minify-params: 5.1.4(postcss@8.4.27)
- postcss-minify-selectors: 5.2.1(postcss@8.4.27)
- postcss-normalize-charset: 5.1.0(postcss@8.4.27)
- postcss-normalize-display-values: 5.1.0(postcss@8.4.27)
- postcss-normalize-positions: 5.1.1(postcss@8.4.27)
- postcss-normalize-repeat-style: 5.1.1(postcss@8.4.27)
- postcss-normalize-string: 5.1.0(postcss@8.4.27)
- postcss-normalize-timing-functions: 5.1.0(postcss@8.4.27)
- postcss-normalize-unicode: 5.1.1(postcss@8.4.27)
- postcss-normalize-url: 5.1.0(postcss@8.4.27)
- postcss-normalize-whitespace: 5.1.1(postcss@8.4.27)
- postcss-ordered-values: 5.1.3(postcss@8.4.27)
- postcss-reduce-initial: 5.1.2(postcss@8.4.27)
- postcss-reduce-transforms: 5.1.0(postcss@8.4.27)
- postcss-svgo: 5.1.0(postcss@8.4.27)
- postcss-unique-selectors: 5.1.1(postcss@8.4.27)
+ css-declaration-sorter: 6.4.1(postcss@8.4.29)
+ cssnano-utils: 3.1.0(postcss@8.4.29)
+ postcss: 8.4.29
+ postcss-calc: 8.2.4(postcss@8.4.29)
+ postcss-colormin: 5.3.1(postcss@8.4.29)
+ postcss-convert-values: 5.1.3(postcss@8.4.29)
+ postcss-discard-comments: 5.1.2(postcss@8.4.29)
+ postcss-discard-duplicates: 5.1.0(postcss@8.4.29)
+ postcss-discard-empty: 5.1.1(postcss@8.4.29)
+ postcss-discard-overridden: 5.1.0(postcss@8.4.29)
+ postcss-merge-longhand: 5.1.7(postcss@8.4.29)
+ postcss-merge-rules: 5.1.4(postcss@8.4.29)
+ postcss-minify-font-values: 5.1.0(postcss@8.4.29)
+ postcss-minify-gradients: 5.1.1(postcss@8.4.29)
+ postcss-minify-params: 5.1.4(postcss@8.4.29)
+ postcss-minify-selectors: 5.2.1(postcss@8.4.29)
+ postcss-normalize-charset: 5.1.0(postcss@8.4.29)
+ postcss-normalize-display-values: 5.1.0(postcss@8.4.29)
+ postcss-normalize-positions: 5.1.1(postcss@8.4.29)
+ postcss-normalize-repeat-style: 5.1.1(postcss@8.4.29)
+ postcss-normalize-string: 5.1.0(postcss@8.4.29)
+ postcss-normalize-timing-functions: 5.1.0(postcss@8.4.29)
+ postcss-normalize-unicode: 5.1.1(postcss@8.4.29)
+ postcss-normalize-url: 5.1.0(postcss@8.4.29)
+ postcss-normalize-whitespace: 5.1.1(postcss@8.4.29)
+ postcss-ordered-values: 5.1.3(postcss@8.4.29)
+ postcss-reduce-initial: 5.1.2(postcss@8.4.29)
+ postcss-reduce-transforms: 5.1.0(postcss@8.4.29)
+ postcss-svgo: 5.1.0(postcss@8.4.29)
+ postcss-unique-selectors: 5.1.1(postcss@8.4.29)
dev: true
- /cssnano-utils@3.1.0(postcss@8.4.27):
+ /cssnano-utils@3.1.0(postcss@8.4.29):
resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
- /cssnano@5.1.15(postcss@8.4.27):
+ /cssnano@5.1.15(postcss@8.4.29):
resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- cssnano-preset-default: 5.2.14(postcss@8.4.27)
+ cssnano-preset-default: 5.2.14(postcss@8.4.29)
lilconfig: 2.1.0
- postcss: 8.4.27
+ postcss: 8.4.29
yaml: 1.10.2
dev: true
@@ -2976,24 +3052,15 @@ packages:
css-tree: 1.1.3
dev: true
- /csstype@2.6.21:
- resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
- dev: true
-
/csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
dev: true
- /date-fns@2.29.3:
- resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==}
- engines: {node: '>=0.11'}
- dev: true
-
/date-fns@2.30.0:
resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
engines: {node: '>=0.11'}
dependencies:
- '@babel/runtime': 7.22.6
+ '@babel/runtime': 7.22.11
dev: true
/dateformat@3.0.3:
@@ -3118,19 +3185,23 @@ packages:
engines: {node: '>= 0.8'}
requiresBuild: true
dev: true
- optional: true
/deprecation@2.3.1:
resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
dev: true
+ /destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ dev: true
+
/detect-libc@2.0.2:
resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
engines: {node: '>=8'}
dev: true
- /diff-sequences@29.4.3:
- resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==}
+ /diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dev: true
@@ -3215,26 +3286,27 @@ packages:
readable-stream: 2.3.8
dev: true
- /eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- dev: true
-
/ecdsa-sig-formatter@1.0.11:
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
dependencies:
safe-buffer: 5.2.1
dev: false
- /electron-to-chromium@1.4.480:
- resolution: {integrity: sha512-IXTgg+bITkQv/FLP9FjX6f9KFCs5hQWeh5uNSKxB9mqYj/JXhHDbu+ekS43LVvbkL3eW6/oZy4+r9Om6lan1Uw==}
+ /ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+ dev: true
+
+ /electron-to-chromium@1.4.505:
+ resolution: {integrity: sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ==}
dev: true
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
- /emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ /encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
dev: true
/encoding@0.1.13:
@@ -3245,14 +3317,6 @@ packages:
dev: true
optional: true
- /enquirer@2.4.1:
- resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
- engines: {node: '>=8.6'}
- dependencies:
- ansi-colors: 4.1.3
- strip-ansi: 6.0.1
- dev: true
-
/entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
dev: true
@@ -3261,7 +3325,7 @@ packages:
resolution: {integrity: sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==}
engines: {node: ^16.14 || >=18}
dependencies:
- execa: 7.1.1
+ execa: 7.2.0
java-properties: 1.0.2
dev: true
@@ -3294,7 +3358,7 @@ packages:
call-bind: 1.0.2
es-set-tostringtag: 2.0.1
es-to-primitive: 1.2.1
- function.prototype.name: 1.1.5
+ function.prototype.name: 1.1.6
get-intrinsic: 1.2.1
get-symbol-description: 1.0.0
globalthis: 1.0.3
@@ -3361,64 +3425,64 @@ packages:
resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
dev: true
- /esbuild@0.17.17:
- resolution: {integrity: sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==}
+ /esbuild@0.17.19:
+ resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
- '@esbuild/android-arm': 0.17.17
- '@esbuild/android-arm64': 0.17.17
- '@esbuild/android-x64': 0.17.17
- '@esbuild/darwin-arm64': 0.17.17
- '@esbuild/darwin-x64': 0.17.17
- '@esbuild/freebsd-arm64': 0.17.17
- '@esbuild/freebsd-x64': 0.17.17
- '@esbuild/linux-arm': 0.17.17
- '@esbuild/linux-arm64': 0.17.17
- '@esbuild/linux-ia32': 0.17.17
- '@esbuild/linux-loong64': 0.17.17
- '@esbuild/linux-mips64el': 0.17.17
- '@esbuild/linux-ppc64': 0.17.17
- '@esbuild/linux-riscv64': 0.17.17
- '@esbuild/linux-s390x': 0.17.17
- '@esbuild/linux-x64': 0.17.17
- '@esbuild/netbsd-x64': 0.17.17
- '@esbuild/openbsd-x64': 0.17.17
- '@esbuild/sunos-x64': 0.17.17
- '@esbuild/win32-arm64': 0.17.17
- '@esbuild/win32-ia32': 0.17.17
- '@esbuild/win32-x64': 0.17.17
+ '@esbuild/android-arm': 0.17.19
+ '@esbuild/android-arm64': 0.17.19
+ '@esbuild/android-x64': 0.17.19
+ '@esbuild/darwin-arm64': 0.17.19
+ '@esbuild/darwin-x64': 0.17.19
+ '@esbuild/freebsd-arm64': 0.17.19
+ '@esbuild/freebsd-x64': 0.17.19
+ '@esbuild/linux-arm': 0.17.19
+ '@esbuild/linux-arm64': 0.17.19
+ '@esbuild/linux-ia32': 0.17.19
+ '@esbuild/linux-loong64': 0.17.19
+ '@esbuild/linux-mips64el': 0.17.19
+ '@esbuild/linux-ppc64': 0.17.19
+ '@esbuild/linux-riscv64': 0.17.19
+ '@esbuild/linux-s390x': 0.17.19
+ '@esbuild/linux-x64': 0.17.19
+ '@esbuild/netbsd-x64': 0.17.19
+ '@esbuild/openbsd-x64': 0.17.19
+ '@esbuild/sunos-x64': 0.17.19
+ '@esbuild/win32-arm64': 0.17.19
+ '@esbuild/win32-ia32': 0.17.19
+ '@esbuild/win32-x64': 0.17.19
dev: true
- /esbuild@0.18.17:
- resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==}
+ /esbuild@0.18.20:
+ resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
- '@esbuild/android-arm': 0.18.17
- '@esbuild/android-arm64': 0.18.17
- '@esbuild/android-x64': 0.18.17
- '@esbuild/darwin-arm64': 0.18.17
- '@esbuild/darwin-x64': 0.18.17
- '@esbuild/freebsd-arm64': 0.18.17
- '@esbuild/freebsd-x64': 0.18.17
- '@esbuild/linux-arm': 0.18.17
- '@esbuild/linux-arm64': 0.18.17
- '@esbuild/linux-ia32': 0.18.17
- '@esbuild/linux-loong64': 0.18.17
- '@esbuild/linux-mips64el': 0.18.17
- '@esbuild/linux-ppc64': 0.18.17
- '@esbuild/linux-riscv64': 0.18.17
- '@esbuild/linux-s390x': 0.18.17
- '@esbuild/linux-x64': 0.18.17
- '@esbuild/netbsd-x64': 0.18.17
- '@esbuild/openbsd-x64': 0.18.17
- '@esbuild/sunos-x64': 0.18.17
- '@esbuild/win32-arm64': 0.18.17
- '@esbuild/win32-ia32': 0.18.17
- '@esbuild/win32-x64': 0.18.17
+ '@esbuild/android-arm': 0.18.20
+ '@esbuild/android-arm64': 0.18.20
+ '@esbuild/android-x64': 0.18.20
+ '@esbuild/darwin-arm64': 0.18.20
+ '@esbuild/darwin-x64': 0.18.20
+ '@esbuild/freebsd-arm64': 0.18.20
+ '@esbuild/freebsd-x64': 0.18.20
+ '@esbuild/linux-arm': 0.18.20
+ '@esbuild/linux-arm64': 0.18.20
+ '@esbuild/linux-ia32': 0.18.20
+ '@esbuild/linux-loong64': 0.18.20
+ '@esbuild/linux-mips64el': 0.18.20
+ '@esbuild/linux-ppc64': 0.18.20
+ '@esbuild/linux-riscv64': 0.18.20
+ '@esbuild/linux-s390x': 0.18.20
+ '@esbuild/linux-x64': 0.18.20
+ '@esbuild/netbsd-x64': 0.18.20
+ '@esbuild/openbsd-x64': 0.18.20
+ '@esbuild/sunos-x64': 0.18.20
+ '@esbuild/win32-arm64': 0.18.20
+ '@esbuild/win32-ia32': 0.18.20
+ '@esbuild/win32-x64': 0.18.20
dev: true
/escalade@3.1.1:
@@ -3426,6 +3490,10 @@ packages:
engines: {node: '>=6'}
dev: true
+ /escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+ dev: true
+
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
@@ -3446,7 +3514,7 @@ packages:
engines: {node: '>=12'}
dev: true
- /eslint-config-standard-with-typescript@37.0.0(@typescript-eslint/eslint-plugin@5.52.0)(eslint-plugin-import@2.25.2)(eslint-plugin-n@15.0.0)(eslint-plugin-promise@6.0.0)(eslint@8.0.1)(typescript@5.1.6):
+ /eslint-config-standard-with-typescript@37.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint-plugin-import@2.28.1)(eslint-plugin-n@16.0.2)(eslint-plugin-promise@6.1.1)(eslint@8.48.0)(typescript@5.2.2):
resolution: {integrity: sha512-V8I/Q1eFf9tiOuFHkbksUdWO3p1crFmewecfBtRxXdnvb71BCJx+1xAknlIRZMwZioMX3/bPtMVCZsf1+AjjOw==}
peerDependencies:
'@typescript-eslint/eslint-plugin': ^5.52.0
@@ -3456,19 +3524,19 @@ packages:
eslint-plugin-promise: ^6.0.0
typescript: '*'
dependencies:
- '@typescript-eslint/eslint-plugin': 5.52.0(@typescript-eslint/parser@5.62.0)(eslint@8.0.1)(typescript@5.1.6)
- '@typescript-eslint/parser': 5.62.0(eslint@8.0.1)(typescript@5.1.6)
- eslint: 8.0.1
- eslint-config-standard: 17.1.0(eslint-plugin-import@2.25.2)(eslint-plugin-n@15.0.0)(eslint-plugin-promise@6.0.0)(eslint@8.0.1)
- eslint-plugin-import: 2.25.2(@typescript-eslint/parser@5.62.0)(eslint@8.0.1)
- eslint-plugin-n: 15.0.0(eslint@8.0.1)
- eslint-plugin-promise: 6.0.0(eslint@8.0.1)
- typescript: 5.1.6
+ '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2)
+ '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
+ eslint: 8.48.0
+ eslint-config-standard: 17.1.0(eslint-plugin-import@2.28.1)(eslint-plugin-n@16.0.2)(eslint-plugin-promise@6.1.1)(eslint@8.48.0)
+ eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)
+ eslint-plugin-n: 16.0.2(eslint@8.48.0)
+ eslint-plugin-promise: 6.1.1(eslint@8.48.0)
+ typescript: 5.2.2
transitivePeerDependencies:
- supports-color
dev: true
- /eslint-config-standard@17.1.0(eslint-plugin-import@2.25.2)(eslint-plugin-n@15.0.0)(eslint-plugin-promise@6.0.0)(eslint@8.0.1):
+ /eslint-config-standard@17.1.0(eslint-plugin-import@2.28.1)(eslint-plugin-n@16.0.2)(eslint-plugin-promise@6.1.1)(eslint@8.48.0):
resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==}
engines: {node: '>=12.0.0'}
peerDependencies:
@@ -3477,23 +3545,23 @@ packages:
eslint-plugin-n: '^15.0.0 || ^16.0.0 '
eslint-plugin-promise: ^6.0.0
dependencies:
- eslint: 8.0.1
- eslint-plugin-import: 2.25.2(@typescript-eslint/parser@5.62.0)(eslint@8.0.1)
- eslint-plugin-n: 15.0.0(eslint@8.0.1)
- eslint-plugin-promise: 6.0.0(eslint@8.0.1)
+ eslint: 8.48.0
+ eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)
+ eslint-plugin-n: 16.0.2(eslint@8.48.0)
+ eslint-plugin-promise: 6.1.1(eslint@8.48.0)
dev: true
- /eslint-import-resolver-node@0.3.7:
- resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
+ /eslint-import-resolver-node@0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
dependencies:
debug: 3.2.7
- is-core-module: 2.12.1
- resolve: 1.22.2
+ is-core-module: 2.13.0
+ resolve: 1.22.4
transitivePeerDependencies:
- supports-color
dev: true
- /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint@8.0.1):
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.48.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@@ -3514,27 +3582,27 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.62.0(eslint@8.0.1)(typescript@5.1.6)
+ '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
debug: 3.2.7
- eslint: 8.0.1
- eslint-import-resolver-node: 0.3.7
+ eslint: 8.48.0
+ eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
dev: true
- /eslint-plugin-es@4.1.0(eslint@8.0.1):
- resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==}
- engines: {node: '>=8.10.0'}
+ /eslint-plugin-es-x@7.2.0(eslint@8.48.0):
+ resolution: {integrity: sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
- eslint: '>=4.19.1'
+ eslint: '>=8'
dependencies:
- eslint: 8.0.1
- eslint-utils: 2.1.0
- regexpp: 3.2.0
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
+ '@eslint-community/regexpp': 4.8.0
+ eslint: 8.48.0
dev: true
- /eslint-plugin-import@2.25.2(@typescript-eslint/parser@5.62.0)(eslint@8.0.1):
- resolution: {integrity: sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==}
+ /eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.48.0):
+ resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
@@ -3543,20 +3611,24 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 5.62.0(eslint@8.0.1)(typescript@5.1.6)
+ '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2)
array-includes: 3.1.6
+ array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.1
- debug: 2.6.9
+ array.prototype.flatmap: 1.3.1
+ debug: 3.2.7
doctrine: 2.1.0
- eslint: 8.0.1
- eslint-import-resolver-node: 0.3.7
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint@8.0.1)
+ eslint: 8.48.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.48.0)
has: 1.0.3
- is-core-module: 2.12.1
+ is-core-module: 2.13.0
is-glob: 4.0.3
minimatch: 3.1.2
- object.values: 1.1.6
- resolve: 1.22.2
+ object.fromentries: 2.0.7
+ object.groupby: 1.0.1
+ object.values: 1.1.7
+ semver: 6.3.1
tsconfig-paths: 3.14.2
transitivePeerDependencies:
- eslint-import-resolver-typescript
@@ -3564,37 +3636,38 @@ packages:
- supports-color
dev: true
- /eslint-plugin-n@15.0.0(eslint@8.0.1):
- resolution: {integrity: sha512-cb70VSsNjteEL+sInXvlyewuE4OCW9CFmcOQKxyQzdAsoK+7pWpygf2q/Vsw/5dKSniO7qbawLjDqAakaILCIw==}
- engines: {node: '>=12.22.0'}
+ /eslint-plugin-n@16.0.2(eslint@8.48.0):
+ resolution: {integrity: sha512-Y66uDfUNbBzypsr0kELWrIz+5skicECrLUqlWuXawNSLUq3ltGlCwu6phboYYOTSnoTdHgTLrc+5Ydo6KjzZog==}
+ engines: {node: '>=16.0.0'}
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.0.1
- eslint-plugin-es: 4.1.0(eslint@8.0.1)
- eslint-utils: 3.0.0(eslint@8.0.1)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
+ builtins: 5.0.1
+ eslint: 8.48.0
+ eslint-plugin-es-x: 7.2.0(eslint@8.48.0)
ignore: 5.2.4
- is-core-module: 2.12.1
+ is-core-module: 2.13.0
minimatch: 3.1.2
- resolve: 1.22.2
- semver: 6.3.1
+ resolve: 1.22.4
+ semver: 7.5.4
dev: true
- /eslint-plugin-no-loops@0.3.0(eslint@8.0.1):
+ /eslint-plugin-no-loops@0.3.0(eslint@8.48.0):
resolution: {integrity: sha512-qI0oMgD0mA2Kpad2P/WncEqeVzvJKpHs/6+PA1SW4E6gXSXRmeV2cPv6+fnEgFwC7i+QtFRay2jUQ8DCH02nZg==}
peerDependencies:
eslint: '>=2.0.0'
dependencies:
- eslint: 8.0.1
+ eslint: 8.48.0
dev: true
- /eslint-plugin-promise@6.0.0(eslint@8.0.1):
- resolution: {integrity: sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==}
+ /eslint-plugin-promise@6.1.1(eslint@8.48.0):
+ resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
dependencies:
- eslint: 8.0.1
+ eslint: 8.48.0
dev: true
/eslint-scope@5.1.1:
@@ -3605,75 +3678,52 @@ packages:
estraverse: 4.3.0
dev: true
- /eslint-scope@6.0.0:
- resolution: {integrity: sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==}
+ /eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
dev: true
- /eslint-utils@2.1.0:
- resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
- engines: {node: '>=6'}
- dependencies:
- eslint-visitor-keys: 1.3.0
- dev: true
-
- /eslint-utils@3.0.0(eslint@8.0.1):
- resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
- engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
- peerDependencies:
- eslint: '>=5'
- dependencies:
- eslint: 8.0.1
- eslint-visitor-keys: 2.1.0
- dev: true
-
- /eslint-visitor-keys@1.3.0:
- resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
- engines: {node: '>=4'}
- dev: true
-
- /eslint-visitor-keys@2.1.0:
- resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
- engines: {node: '>=10'}
- dev: true
-
- /eslint-visitor-keys@3.4.2:
- resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==}
+ /eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /eslint@8.0.1:
- resolution: {integrity: sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==}
+ /eslint@8.48.0:
+ resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
- '@eslint/eslintrc': 1.4.1
- '@humanwhocodes/config-array': 0.6.0
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
+ '@eslint-community/regexpp': 4.8.0
+ '@eslint/eslintrc': 2.1.2
+ '@eslint/js': 8.48.0
+ '@humanwhocodes/config-array': 0.11.11
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
debug: 4.3.4(supports-color@8.1.1)
doctrine: 3.0.0
- enquirer: 2.4.1
escape-string-regexp: 4.0.0
- eslint-scope: 6.0.0
- eslint-utils: 3.0.0(eslint@8.0.1)
- eslint-visitor-keys: 3.4.2
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
espree: 9.6.1
esquery: 1.5.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
file-entry-cache: 6.0.1
- functional-red-black-tree: 1.0.1
+ find-up: 5.0.0
glob-parent: 6.0.2
- globals: 13.20.0
- ignore: 4.0.6
- import-fresh: 3.3.0
+ globals: 13.21.0
+ graphemer: 1.4.0
+ ignore: 5.2.4
imurmurhash: 0.1.4
is-glob: 4.0.3
+ is-path-inside: 3.0.3
js-yaml: 4.1.0
json-stable-stringify-without-jsonify: 1.0.1
levn: 0.4.1
@@ -3681,13 +3731,8 @@ packages:
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.3
- progress: 2.0.3
- regexpp: 3.2.0
- semver: 7.5.4
strip-ansi: 6.0.1
- strip-json-comments: 3.1.1
text-table: 0.2.0
- v8-compile-cache: 2.3.0
transitivePeerDependencies:
- supports-color
dev: true
@@ -3703,7 +3748,7 @@ packages:
dependencies:
acorn: 8.10.0
acorn-jsx: 5.3.2(acorn@8.10.0)
- eslint-visitor-keys: 3.4.2
+ eslint-visitor-keys: 3.4.3
dev: true
/esprima@4.0.1:
@@ -3736,10 +3781,6 @@ packages:
engines: {node: '>=4.0'}
dev: true
- /estree-walker@0.6.1:
- resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
- dev: true
-
/estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
dev: true
@@ -3749,10 +3790,25 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+ dev: true
+
/eventemitter3@4.0.7:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
dev: true
+ /events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+ dev: true
+
/execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@@ -3783,16 +3839,84 @@ packages:
strip-final-newline: 3.0.0
dev: true
- /expect@29.6.2:
- resolution: {integrity: sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==}
+ /execa@7.2.0:
+ resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
+ engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 4.3.1
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.1.0
+ onetime: 6.0.0
+ signal-exit: 3.0.7
+ strip-final-newline: 3.0.0
+ dev: true
+
+ /execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.1.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+ dev: true
+
+ /expect@29.6.4:
+ resolution: {integrity: sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- '@jest/expect-utils': 29.6.2
- '@types/node': 20.4.5
- jest-get-type: 29.4.3
- jest-matcher-utils: 29.6.2
- jest-message-util: 29.6.2
- jest-util: 29.6.2
+ '@jest/expect-utils': 29.6.4
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.6.4
+ jest-message-util: 29.6.3
+ jest-util: 29.6.3
+ dev: true
+
+ /express@4.18.2:
+ resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
+ engines: {node: '>= 0.10.0'}
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.1
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.5.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.2.0
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.11.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
dev: true
/external-editor@3.1.0:
@@ -3827,6 +3951,11 @@ packages:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
dev: true
+ /fast-redact@3.3.0:
+ resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==}
+ engines: {node: '>=6'}
+ dev: true
+
/fastq@1.15.0:
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
dependencies:
@@ -3852,7 +3981,7 @@ packages:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
- flat-cache: 3.0.4
+ flat-cache: 3.1.0
dev: true
/fill-range@7.0.1:
@@ -3867,6 +3996,21 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /finalhandler@1.2.0:
+ resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/find-cache-dir@3.3.2:
resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
engines: {node: '>=8'}
@@ -3914,11 +4058,12 @@ packages:
semver-regex: 4.0.5
dev: true
- /flat-cache@3.0.4:
- resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ /flat-cache@3.1.0:
+ resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==}
+ engines: {node: '>=12.0.0'}
dependencies:
flatted: 3.2.7
+ keyv: 4.5.3
rimraf: 3.0.2
dev: true
@@ -3964,6 +4109,16 @@ packages:
mime-types: 2.1.35
dev: true
+ /forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/from2@2.3.0:
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
dependencies:
@@ -4004,8 +4159,8 @@ packages:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
@@ -4016,8 +4171,8 @@ packages:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: true
- /function.prototype.name@1.1.5:
- resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
+ /function.prototype.name@1.1.6:
+ resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
@@ -4026,10 +4181,6 @@ packages:
functions-have-names: 1.2.3
dev: true
- /functional-red-black-tree@1.0.1:
- resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
- dev: true
-
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
dev: true
@@ -4070,6 +4221,11 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
+ /geojson@0.5.0:
+ resolution: {integrity: sha512-/Bx5lEn+qRF4TfQ5aLu6NH+UKtvIv7Lhc487y/c8BdludrCTpiWf9wyI0RTyqg49MFefIAvFDuEi5Dfd/zgNxQ==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
/get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -4103,6 +4259,11 @@ packages:
engines: {node: '>=16'}
dev: true
+ /get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+ dev: true
+
/get-symbol-description@1.0.0:
resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
engines: {node: '>= 0.4'}
@@ -4178,8 +4339,8 @@ packages:
engines: {node: '>=4'}
dev: true
- /globals@13.20.0:
- resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
+ /globals@13.21.0:
+ resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==}
engines: {node: '>=8'}
dependencies:
type-fest: 0.20.2
@@ -4229,8 +4390,8 @@ packages:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
dev: true
- /grapheme-splitter@1.0.4:
- resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
+ /graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
dev: true
/handlebars@4.7.8:
@@ -4298,10 +4459,6 @@ packages:
function-bind: 1.1.1
dev: true
- /hash-sum@2.0.0:
- resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
- dev: true
-
/hasha@5.2.2:
resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==}
engines: {node: '>=8'}
@@ -4331,11 +4488,11 @@ packages:
lru-cache: 6.0.0
dev: true
- /hosted-git-info@6.1.1:
- resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ /hosted-git-info@7.0.0:
+ resolution: {integrity: sha512-ICclEpTLhHj+zCuSb2/usoNXSVkxUSIopre+b1w8NDY9Dntp9LO4vLdHYI336TH8sAqwrRgnSfdkBG2/YpisHA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
dependencies:
- lru-cache: 7.18.3
+ lru-cache: 10.0.1
dev: true
/html-escaper@2.0.2:
@@ -4348,6 +4505,17 @@ packages:
dev: true
optional: true
+ /http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+ dev: true
+
/http-proxy-agent@4.0.1:
resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==}
engines: {node: '>= 6'}
@@ -4401,6 +4569,11 @@ packages:
engines: {node: '>=14.18.0'}
dev: true
+ /human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+ dev: true
+
/humanize-ms@1.2.1:
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
requiresBuild: true
@@ -4425,24 +4598,19 @@ packages:
dev: true
optional: true
- /icss-utils@5.1.0(postcss@8.4.27):
+ /icss-utils@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
dev: true
- /ignore@4.0.6:
- resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==}
- engines: {node: '>= 4'}
- dev: true
-
/ignore@5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'}
@@ -4497,25 +4665,25 @@ packages:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
dev: true
- /inquirer@9.1.5:
- resolution: {integrity: sha512-3ygAIh8gcZavV9bj6MTdYddG2zPSYswP808fKS46NOwlF0zZljVpnLCHODDqItWJDbDpLb3aouAxGaJbkxoppA==}
+ /inquirer@9.2.4:
+ resolution: {integrity: sha512-Q2KnguYUxC/GqkAWJBTWpXH1E3Qqh5VZaCqxK5HYYnQmaePKGLgscVfb3L3/32oF6NRW5VpGqUr75uDjtHHqRw==}
engines: {node: '>=14.18.0'}
dependencies:
- ansi-escapes: 6.2.0
+ ansi-escapes: 4.3.2
chalk: 5.2.0
- cli-cursor: 4.0.0
- cli-width: 4.0.0
+ cli-cursor: 3.1.0
+ cli-width: 4.1.0
external-editor: 3.1.0
figures: 5.0.0
lodash: 4.17.21
mute-stream: 1.0.0
- ora: 6.3.0
- run-async: 2.4.1
+ ora: 5.4.1
+ run-async: 3.0.0
rxjs: 7.8.1
- string-width: 5.1.2
- strip-ansi: 7.1.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
through: 2.3.8
- wrap-ansi: 8.1.0
+ wrap-ansi: 6.2.0
dev: true
/internal-slot@1.0.5:
@@ -4563,6 +4731,11 @@ packages:
dev: true
optional: true
+ /ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
/is-array-buffer@3.0.2:
resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
dependencies:
@@ -4608,8 +4781,8 @@ packages:
engines: {node: '>= 0.4'}
dev: true
- /is-core-module@2.12.1:
- resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==}
+ /is-core-module@2.13.0:
+ resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
dependencies:
has: 1.0.3
dev: true
@@ -4638,6 +4811,11 @@ packages:
is-extglob: 2.1.1
dev: true
+ /is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+ dev: true
+
/is-interactive@2.0.0:
resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
engines: {node: '>=12'}
@@ -4675,6 +4853,11 @@ packages:
engines: {node: '>=8'}
dev: true
+ /is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
/is-plain-obj@1.1.0:
resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
engines: {node: '>=0.10.0'}
@@ -4734,11 +4917,11 @@ packages:
has-symbols: 1.0.3
dev: true
- /is-text-path@1.0.1:
- resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
- engines: {node: '>=0.10.0'}
+ /is-text-path@2.0.0:
+ resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==}
+ engines: {node: '>=8'}
dependencies:
- text-extensions: 1.9.0
+ text-extensions: 2.4.0
dev: true
/is-typed-array@1.1.12:
@@ -4812,7 +4995,7 @@ packages:
resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==}
engines: {node: '>=8'}
dependencies:
- '@babel/core': 7.22.9
+ '@babel/core': 7.22.11
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.0
semver: 6.3.1
@@ -4824,8 +5007,8 @@ packages:
resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==}
engines: {node: '>=10'}
dependencies:
- '@babel/core': 7.22.9
- '@babel/parser': 7.22.7
+ '@babel/core': 7.22.11
+ '@babel/parser': 7.22.13
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.0
semver: 7.5.4
@@ -4878,68 +5061,58 @@ packages:
engines: {node: '>= 0.6.0'}
dev: true
- /jest-diff@29.6.2:
- resolution: {integrity: sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==}
+ /jest-diff@29.6.4:
+ resolution: {integrity: sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.2
- diff-sequences: 29.4.3
- jest-get-type: 29.4.3
- pretty-format: 29.6.2
+ diff-sequences: 29.6.3
+ jest-get-type: 29.6.3
+ pretty-format: 29.6.3
dev: true
- /jest-get-type@29.4.3:
- resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==}
+ /jest-get-type@29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dev: true
- /jest-matcher-utils@29.6.2:
- resolution: {integrity: sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==}
+ /jest-matcher-utils@29.6.4:
+ resolution: {integrity: sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.2
- jest-diff: 29.6.2
- jest-get-type: 29.4.3
- pretty-format: 29.6.2
+ jest-diff: 29.6.4
+ jest-get-type: 29.6.3
+ pretty-format: 29.6.3
dev: true
- /jest-message-util@29.6.2:
- resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==}
+ /jest-message-util@29.6.3:
+ resolution: {integrity: sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- '@babel/code-frame': 7.22.5
- '@jest/types': 29.6.1
+ '@babel/code-frame': 7.22.13
+ '@jest/types': 29.6.3
'@types/stack-utils': 2.0.1
chalk: 4.1.2
graceful-fs: 4.2.11
micromatch: 4.0.5
- pretty-format: 29.6.2
+ pretty-format: 29.6.3
slash: 3.0.0
stack-utils: 2.0.6
dev: true
- /jest-util@29.6.2:
- resolution: {integrity: sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==}
+ /jest-util@29.6.3:
+ resolution: {integrity: sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- '@jest/types': 29.6.1
- '@types/node': 20.4.5
+ '@jest/types': 29.6.3
+ '@types/node': 20.5.7
chalk: 4.1.2
ci-info: 3.8.0
graceful-fs: 4.2.11
picomatch: 2.3.1
dev: true
- /joi@17.9.1:
- resolution: {integrity: sha512-FariIi9j6QODKATGBrEX7HZcja8Bsh3rfdGYy/Sb65sGlZWK/QWesU1ghk7aJWDj95knjXlQfSmzFSPPkLVsfw==}
- dependencies:
- '@hapi/hoek': 9.3.0
- '@hapi/topo': 5.1.0
- '@sideway/address': 4.1.4
- '@sideway/formula': 3.0.1
- '@sideway/pinpoint': 2.0.0
- dev: true
-
/joi@17.9.2:
resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==}
dependencies:
@@ -4986,7 +5159,6 @@ packages:
/json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
- dev: false
/json-parse-better-errors@1.0.2:
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
@@ -5087,13 +5259,59 @@ packages:
resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==}
dependencies:
json-buffer: 3.0.1
- dev: false
/kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
dev: true
+ /knex@2.4.2(sqlite3@5.1.6):
+ resolution: {integrity: sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ better-sqlite3: '*'
+ mysql: '*'
+ mysql2: '*'
+ pg: '*'
+ pg-native: '*'
+ sqlite3: '*'
+ tedious: '*'
+ peerDependenciesMeta:
+ better-sqlite3:
+ optional: true
+ mysql:
+ optional: true
+ mysql2:
+ optional: true
+ pg:
+ optional: true
+ pg-native:
+ optional: true
+ sqlite3:
+ optional: true
+ tedious:
+ optional: true
+ dependencies:
+ colorette: 2.0.19
+ commander: 9.5.0
+ debug: 4.3.4(supports-color@8.1.1)
+ escalade: 3.1.1
+ esm: 3.2.25
+ get-package-type: 0.1.0
+ getopts: 2.3.0
+ interpret: 2.2.0
+ lodash: 4.17.21
+ pg-connection-string: 2.5.0
+ rechoir: 0.8.0
+ resolve-from: 5.0.0
+ sqlite3: 5.1.6
+ tarn: 3.0.2
+ tildify: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/knex@2.5.1(sqlite3@5.1.6):
resolution: {integrity: sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA==}
engines: {node: '>=12'}
@@ -5292,6 +5510,11 @@ packages:
get-func-name: 2.0.0
dev: true
+ /lru-cache@10.0.1:
+ resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==}
+ engines: {node: 14 || >=16.14}
+ dev: true
+
/lru-cache@4.0.2:
resolution: {integrity: sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==}
dependencies:
@@ -5311,11 +5534,6 @@ packages:
dependencies:
yallist: 4.0.0
- /lru-cache@7.18.3:
- resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
- engines: {node: '>=12'}
- dev: true
-
/lru-memoizer@2.2.0:
resolution: {integrity: sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==}
dependencies:
@@ -5323,12 +5541,6 @@ packages:
lru-cache: 4.0.2
dev: false
- /magic-string@0.25.9:
- resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
- dependencies:
- sourcemap-codec: 1.4.8
- dev: true
-
/magic-string@0.27.0:
resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
engines: {node: '>=12'}
@@ -5336,8 +5548,8 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
- /magic-string@0.30.2:
- resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==}
+ /magic-string@0.30.3:
+ resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==}
engines: {node: '>=12'}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
@@ -5366,7 +5578,7 @@ packages:
engines: {node: '>= 10'}
requiresBuild: true
dependencies:
- agentkeepalive: 4.3.0
+ agentkeepalive: 4.5.0
cacache: 15.3.0
http-cache-semantics: 4.1.1
http-proxy-agent: 4.0.1
@@ -5406,7 +5618,7 @@ packages:
dependencies:
ansi-escapes: 6.2.0
cardinal: 2.1.1
- chalk: 5.2.0
+ chalk: 5.3.0
cli-table3: 0.6.3
marked: 5.1.2
node-emoji: 1.11.0
@@ -5423,6 +5635,16 @@ packages:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
dev: true
+ /media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /meow@12.1.1:
+ resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
+ engines: {node: '>=16.10'}
+ dev: true
+
/meow@8.1.2:
resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
engines: {node: '>=10'}
@@ -5437,7 +5659,11 @@ packages:
redent: 3.0.0
trim-newlines: 3.0.1
type-fest: 0.18.1
- yargs-parser: 20.2.4
+ yargs-parser: 20.2.9
+ dev: true
+
+ /merge-descriptors@1.0.1:
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
dev: true
/merge-stream@2.0.0:
@@ -5449,6 +5675,11 @@ packages:
engines: {node: '>= 8'}
dev: true
+ /methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
@@ -5474,6 +5705,12 @@ packages:
mime-db: 1.52.0
dev: true
+ /mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
/mime@3.0.0:
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
engines: {node: '>=10.0.0'}
@@ -5610,13 +5847,13 @@ packages:
hasBin: true
dev: true
- /mlly@1.4.0:
- resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==}
+ /mlly@1.4.1:
+ resolution: {integrity: sha512-SCDs78Q2o09jiZiE2WziwVBEqXQ02XkGdUy45cbJf+BpYRIjArXRJ1Wbowxkb+NaM9DWvS3UC9GiO/6eqvQ/pg==}
dependencies:
acorn: 8.10.0
pathe: 1.1.1
pkg-types: 1.0.3
- ufo: 1.2.0
+ ufo: 1.3.0
dev: true
/mocha@10.2.0:
@@ -5698,7 +5935,6 @@ packages:
engines: {node: '>= 0.6'}
requiresBuild: true
dev: true
- optional: true
/neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
@@ -5718,8 +5954,8 @@ packages:
lodash: 4.17.21
dev: true
- /node-fetch@2.6.12:
- resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==}
+ /node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0}
peerDependencies:
encoding: ^0.1.0
@@ -5775,7 +6011,7 @@ packages:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
hosted-git-info: 2.8.9
- resolve: 1.22.2
+ resolve: 1.22.4
semver: 5.7.2
validate-npm-package-license: 3.0.4
dev: true
@@ -5785,17 +6021,17 @@ packages:
engines: {node: '>=10'}
dependencies:
hosted-git-info: 4.1.0
- is-core-module: 2.12.1
+ is-core-module: 2.13.0
semver: 7.5.4
validate-npm-package-license: 3.0.4
dev: true
- /normalize-package-data@5.0.0:
- resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ /normalize-package-data@6.0.0:
+ resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
dependencies:
- hosted-git-info: 6.1.1
- is-core-module: 2.12.1
+ hosted-git-info: 7.0.0
+ is-core-module: 2.13.0
semver: 7.5.4
validate-npm-package-license: 3.0.4
dev: true
@@ -5996,8 +6232,26 @@ packages:
object-keys: 1.1.1
dev: true
- /object.values@1.1.6:
- resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
+ /object.fromentries@2.0.7:
+ resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.22.1
+ dev: true
+
+ /object.groupby@1.0.1:
+ resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.22.1
+ get-intrinsic: 1.2.1
+ dev: true
+
+ /object.values@1.1.7:
+ resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
@@ -6010,6 +6264,17 @@ packages:
engines: {node: ^10.13.0 || >=12.0.0}
dev: false
+ /on-exit-leak-free@2.1.0:
+ resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==}
+ dev: true
+
+ /on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ ee-first: 1.1.1
+ dev: true
+
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
@@ -6051,8 +6316,23 @@ packages:
type-check: 0.4.0
dev: true
- /ora@6.3.0:
- resolution: {integrity: sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==}
+ /ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.0
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+ dev: true
+
+ /ora@6.3.1:
+ resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
chalk: 5.2.0
@@ -6231,7 +6511,7 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
dependencies:
- '@babel/code-frame': 7.22.5
+ '@babel/code-frame': 7.22.13
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -6241,13 +6521,18 @@ packages:
resolution: {integrity: sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==}
engines: {node: '>=16'}
dependencies:
- '@babel/code-frame': 7.22.5
+ '@babel/code-frame': 7.22.13
error-ex: 1.3.2
json-parse-even-better-errors: 3.0.0
lines-and-columns: 2.0.3
type-fest: 3.13.1
dev: true
+ /parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
/path-exists@3.0.0:
resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
engines: {node: '>=4'}
@@ -6282,6 +6567,10 @@ packages:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
+ /path-to-regexp@0.1.7:
+ resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+ dev: true
+
/path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -6295,6 +6584,10 @@ packages:
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
dev: true
+ /pg-connection-string@2.5.0:
+ resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==}
+ dev: true
+
/pg-connection-string@2.6.1:
resolution: {integrity: sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==}
dev: true
@@ -6313,6 +6606,34 @@ packages:
engines: {node: '>=4'}
dev: true
+ /pino-abstract-transport@1.0.0:
+ resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==}
+ dependencies:
+ readable-stream: 4.4.2
+ split2: 4.2.0
+ dev: true
+
+ /pino-std-serializers@6.2.2:
+ resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==}
+ dev: true
+
+ /pino@8.14.1:
+ resolution: {integrity: sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==}
+ hasBin: true
+ dependencies:
+ atomic-sleep: 1.0.0
+ fast-redact: 3.3.0
+ on-exit-leak-free: 2.1.0
+ pino-abstract-transport: 1.0.0
+ pino-std-serializers: 6.2.2
+ process-warning: 2.2.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.4.3
+ sonic-boom: 3.3.0
+ thread-stream: 2.4.0
+ dev: true
+
/pkg-conf@2.1.0:
resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==}
engines: {node: '>=4'}
@@ -6332,21 +6653,21 @@ packages:
resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
dependencies:
jsonc-parser: 3.2.0
- mlly: 1.4.0
+ mlly: 1.4.1
pathe: 1.1.1
dev: true
- /postcss-calc@8.2.4(postcss@8.4.27):
+ /postcss-calc@8.2.4(postcss@8.4.29):
resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==}
peerDependencies:
postcss: ^8.2.2
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-selector-parser: 6.0.13
postcss-value-parser: 4.2.0
dev: true
- /postcss-colormin@5.3.1(postcss@8.4.27):
+ /postcss-colormin@5.3.1(postcss@8.4.29):
resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
@@ -6355,69 +6676,69 @@ packages:
browserslist: 4.21.10
caniuse-api: 3.0.0
colord: 2.9.3
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-convert-values@5.1.3(postcss@8.4.27):
+ /postcss-convert-values@5.1.3(postcss@8.4.29):
resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.21.10
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-discard-comments@5.1.2(postcss@8.4.27):
+ /postcss-discard-comments@5.1.2(postcss@8.4.29):
resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
- /postcss-discard-duplicates@5.1.0(postcss@8.4.27):
+ /postcss-discard-duplicates@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
- /postcss-discard-empty@5.1.1(postcss@8.4.27):
+ /postcss-discard-empty@5.1.1(postcss@8.4.29):
resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
- /postcss-discard-overridden@5.1.0(postcss@8.4.27):
+ /postcss-discard-overridden@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
- /postcss-merge-longhand@5.1.7(postcss@8.4.27):
+ /postcss-merge-longhand@5.1.7(postcss@8.4.29):
resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
- stylehacks: 5.1.1(postcss@8.4.27)
+ stylehacks: 5.1.1(postcss@8.4.29)
dev: true
- /postcss-merge-rules@5.1.4(postcss@8.4.27):
+ /postcss-merge-rules@5.1.4(postcss@8.4.29):
resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
@@ -6425,199 +6746,199 @@ packages:
dependencies:
browserslist: 4.21.10
caniuse-api: 3.0.0
- cssnano-utils: 3.1.0(postcss@8.4.27)
- postcss: 8.4.27
+ cssnano-utils: 3.1.0(postcss@8.4.29)
+ postcss: 8.4.29
postcss-selector-parser: 6.0.13
dev: true
- /postcss-minify-font-values@5.1.0(postcss@8.4.27):
+ /postcss-minify-font-values@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-minify-gradients@5.1.1(postcss@8.4.27):
+ /postcss-minify-gradients@5.1.1(postcss@8.4.29):
resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
colord: 2.9.3
- cssnano-utils: 3.1.0(postcss@8.4.27)
- postcss: 8.4.27
+ cssnano-utils: 3.1.0(postcss@8.4.29)
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-minify-params@5.1.4(postcss@8.4.27):
+ /postcss-minify-params@5.1.4(postcss@8.4.29):
resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.21.10
- cssnano-utils: 3.1.0(postcss@8.4.27)
- postcss: 8.4.27
+ cssnano-utils: 3.1.0(postcss@8.4.29)
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-minify-selectors@5.2.1(postcss@8.4.27):
+ /postcss-minify-selectors@5.2.1(postcss@8.4.29):
resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-selector-parser: 6.0.13
dev: true
- /postcss-modules-extract-imports@3.0.0(postcss@8.4.27):
+ /postcss-modules-extract-imports@3.0.0(postcss@8.4.29):
resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
- /postcss-modules-local-by-default@4.0.3(postcss@8.4.27):
+ /postcss-modules-local-by-default@4.0.3(postcss@8.4.29):
resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.27)
- postcss: 8.4.27
+ icss-utils: 5.1.0(postcss@8.4.29)
+ postcss: 8.4.29
postcss-selector-parser: 6.0.13
postcss-value-parser: 4.2.0
dev: true
- /postcss-modules-scope@3.0.0(postcss@8.4.27):
+ /postcss-modules-scope@3.0.0(postcss@8.4.29):
resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-selector-parser: 6.0.13
dev: true
- /postcss-modules-values@4.0.0(postcss@8.4.27):
+ /postcss-modules-values@4.0.0(postcss@8.4.29):
resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.27)
- postcss: 8.4.27
+ icss-utils: 5.1.0(postcss@8.4.29)
+ postcss: 8.4.29
dev: true
- /postcss-normalize-charset@5.1.0(postcss@8.4.27):
+ /postcss-normalize-charset@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
- /postcss-normalize-display-values@5.1.0(postcss@8.4.27):
+ /postcss-normalize-display-values@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-positions@5.1.1(postcss@8.4.27):
+ /postcss-normalize-positions@5.1.1(postcss@8.4.29):
resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-repeat-style@5.1.1(postcss@8.4.27):
+ /postcss-normalize-repeat-style@5.1.1(postcss@8.4.29):
resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-string@5.1.0(postcss@8.4.27):
+ /postcss-normalize-string@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-timing-functions@5.1.0(postcss@8.4.27):
+ /postcss-normalize-timing-functions@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-unicode@5.1.1(postcss@8.4.27):
+ /postcss-normalize-unicode@5.1.1(postcss@8.4.29):
resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.21.10
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-url@5.1.0(postcss@8.4.27):
+ /postcss-normalize-url@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
normalize-url: 6.1.0
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-whitespace@5.1.1(postcss@8.4.27):
+ /postcss-normalize-whitespace@5.1.1(postcss@8.4.29):
resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-ordered-values@5.1.3(postcss@8.4.27):
+ /postcss-ordered-values@5.1.3(postcss@8.4.29):
resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- cssnano-utils: 3.1.0(postcss@8.4.27)
- postcss: 8.4.27
+ cssnano-utils: 3.1.0(postcss@8.4.29)
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
- /postcss-reduce-initial@5.1.2(postcss@8.4.27):
+ /postcss-reduce-initial@5.1.2(postcss@8.4.29):
resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
@@ -6625,16 +6946,16 @@ packages:
dependencies:
browserslist: 4.21.10
caniuse-api: 3.0.0
- postcss: 8.4.27
+ postcss: 8.4.29
dev: true
- /postcss-reduce-transforms@5.1.0(postcss@8.4.27):
+ /postcss-reduce-transforms@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
@@ -6646,24 +6967,24 @@ packages:
util-deprecate: 1.0.2
dev: true
- /postcss-svgo@5.1.0(postcss@8.4.27):
+ /postcss-svgo@5.1.0(postcss@8.4.29):
resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-value-parser: 4.2.0
svgo: 2.8.0
dev: true
- /postcss-unique-selectors@5.1.1(postcss@8.4.27):
+ /postcss-unique-selectors@5.1.1(postcss@8.4.29):
resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-selector-parser: 6.0.13
dev: true
@@ -6671,8 +6992,8 @@ packages:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
dev: true
- /postcss@8.4.27:
- resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==}
+ /postcss@8.4.29:
+ resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.6
@@ -6685,11 +7006,11 @@ packages:
engines: {node: '>= 0.8.0'}
dev: true
- /pretty-format@29.6.2:
- resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==}
+ /pretty-format@29.6.3:
+ resolution: {integrity: sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- '@jest/schemas': 29.6.0
+ '@jest/schemas': 29.6.3
ansi-styles: 5.2.0
react-is: 18.2.0
dev: true
@@ -6705,9 +7026,13 @@ packages:
fromentries: 1.3.2
dev: true
- /progress@2.0.3:
- resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
- engines: {node: '>=0.4.0'}
+ /process-warning@2.2.0:
+ resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==}
+ dev: true
+
+ /process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
dev: true
/promise-inflight@1.0.1:
@@ -6735,6 +7060,14 @@ packages:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
dev: true
+ /proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+ dev: true
+
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
dev: true
@@ -6748,6 +7081,13 @@ packages:
engines: {node: '>=6'}
dev: true
+ /qs@6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.4
+ dev: true
+
/query-string@7.1.3:
resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==}
engines: {node: '>=6'}
@@ -6762,6 +7102,10 @@ packages:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
+ /quick-format-unescaped@4.0.4:
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+ dev: true
+
/quick-lru@4.0.1:
resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
engines: {node: '>=8'}
@@ -6773,6 +7117,21 @@ packages:
safe-buffer: 5.2.1
dev: true
+ /range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /raw-body@2.5.1:
+ resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+ dev: true
+
/rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -6787,13 +7146,13 @@ packages:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
dev: true
- /read-pkg-up@10.0.0:
- resolution: {integrity: sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==}
+ /read-pkg-up@10.1.0:
+ resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==}
engines: {node: '>=16'}
dependencies:
find-up: 6.3.0
- read-pkg: 8.0.0
- type-fest: 3.13.1
+ read-pkg: 8.1.0
+ type-fest: 4.3.1
dev: true
/read-pkg-up@7.0.1:
@@ -6815,14 +7174,14 @@ packages:
type-fest: 0.6.0
dev: true
- /read-pkg@8.0.0:
- resolution: {integrity: sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==}
+ /read-pkg@8.1.0:
+ resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==}
engines: {node: '>=16'}
dependencies:
'@types/normalize-package-data': 2.4.1
- normalize-package-data: 5.0.0
+ normalize-package-data: 6.0.0
parse-json: 7.0.0
- type-fest: 3.13.1
+ type-fest: 4.3.1
dev: true
/readable-stream@2.3.8:
@@ -6846,6 +7205,17 @@ packages:
util-deprecate: 1.0.2
dev: true
+ /readable-stream@4.4.2:
+ resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ abort-controller: 3.0.0
+ buffer: 6.0.3
+ events: 3.3.0
+ process: 0.11.10
+ string_decoder: 1.3.0
+ dev: true
+
/readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@@ -6853,11 +7223,16 @@ packages:
picomatch: 2.3.1
dev: true
+ /real-require@0.2.0:
+ resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+ engines: {node: '>= 12.13.0'}
+ dev: true
+
/rechoir@0.8.0:
resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
engines: {node: '>= 10.13.0'}
dependencies:
- resolve: 1.22.2
+ resolve: 1.22.4
dev: true
/redent@3.0.0:
@@ -6886,8 +7261,8 @@ packages:
redis-errors: 1.2.0
dev: false
- /regenerator-runtime@0.13.11:
- resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+ /regenerator-runtime@0.14.0:
+ resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
dev: true
/regexp.prototype.flags@1.5.0:
@@ -6899,11 +7274,6 @@ packages:
functions-have-names: 1.2.3
dev: true
- /regexpp@3.2.0:
- resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
- engines: {node: '>=8'}
- dev: true
-
/registry-auth-token@5.0.2:
resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==}
engines: {node: '>=14'}
@@ -6937,15 +7307,23 @@ packages:
engines: {node: '>=8'}
dev: true
- /resolve@1.22.2:
- resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
+ /resolve@1.22.4:
+ resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
hasBin: true
dependencies:
- is-core-module: 2.12.1
+ is-core-module: 2.13.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
+ /restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: true
+
/restore-cursor@4.0.0:
resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -6973,88 +7351,69 @@ packages:
glob: 7.2.3
dev: true
- /rollup-plugin-esbuild@5.0.0(esbuild@0.17.17)(rollup@3.20.7):
+ /rollup-plugin-esbuild@5.0.0(esbuild@0.17.19)(rollup@3.22.0):
resolution: {integrity: sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
peerDependencies:
esbuild: '>=0.10.1'
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0
dependencies:
- '@rollup/pluginutils': 5.0.2(rollup@3.20.7)
+ '@rollup/pluginutils': 5.0.4(rollup@3.22.0)
debug: 4.3.4(supports-color@8.1.1)
es-module-lexer: 1.3.0
- esbuild: 0.17.17
+ esbuild: 0.17.19
joycon: 3.1.1
jsonc-parser: 3.2.0
- rollup: 3.20.7
+ rollup: 3.22.0
transitivePeerDependencies:
- supports-color
dev: true
- /rollup-plugin-styles@4.0.0(rollup@3.20.7):
+ /rollup-plugin-styles@4.0.0(rollup@3.22.0):
resolution: {integrity: sha512-A2K2sao84OsTmDxXG83JTCdXWrmgvQkkI38XDat46rdtpGMRm9tSYqeCdlwwGDJF4kKIafhV1mUidqu8MxUGig==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
peerDependencies:
rollup: ^2.63.0
dependencies:
'@rollup/pluginutils': 4.2.1
- '@types/cssnano': 5.1.0(postcss@8.4.27)
+ '@types/cssnano': 5.1.0(postcss@8.4.29)
cosmiconfig: 7.1.0
- cssnano: 5.1.15(postcss@8.4.27)
+ cssnano: 5.1.15(postcss@8.4.29)
fs-extra: 10.1.0
- icss-utils: 5.1.0(postcss@8.4.27)
+ icss-utils: 5.1.0(postcss@8.4.29)
mime-types: 2.1.35
p-queue: 6.6.2
- postcss: 8.4.27
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.27)
- postcss-modules-local-by-default: 4.0.3(postcss@8.4.27)
- postcss-modules-scope: 3.0.0(postcss@8.4.27)
- postcss-modules-values: 4.0.0(postcss@8.4.27)
+ postcss: 8.4.29
+ postcss-modules-extract-imports: 3.0.0(postcss@8.4.29)
+ postcss-modules-local-by-default: 4.0.3(postcss@8.4.29)
+ postcss-modules-scope: 3.0.0(postcss@8.4.29)
+ postcss-modules-values: 4.0.0(postcss@8.4.29)
postcss-value-parser: 4.2.0
query-string: 7.1.3
- resolve: 1.22.2
- rollup: 3.20.7
+ resolve: 1.22.4
+ rollup: 3.22.0
source-map-js: 1.0.2
- tslib: 2.6.1
+ tslib: 2.6.2
dev: true
- /rollup-plugin-vue@6.0.0(@vue/compiler-sfc@3.2.47):
- resolution: {integrity: sha512-oVvUd84d5u73M2HYM3XsMDLtZRIA/tw2U0dmHlXU2UWP5JARYHzh/U9vcxaN/x/9MrepY7VH3pHFeOhrWpxs/Q==}
- peerDependencies:
- '@vue/compiler-sfc': '*'
- dependencies:
- '@vue/compiler-sfc': 3.2.47
- debug: 4.3.4(supports-color@8.1.1)
- hash-sum: 2.0.0
- rollup-pluginutils: 2.8.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /rollup-pluginutils@2.8.2:
- resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
- dependencies:
- estree-walker: 0.6.1
- dev: true
-
- /rollup@3.20.7:
- resolution: {integrity: sha512-P7E2zezKSLhWnTz46XxjSmInrbOCiul1yf+kJccMxT56vxjHwCbDfoLbiqFgu+WQoo9ij2PkraYaBstgB2prBA==}
+ /rollup@3.22.0:
+ resolution: {integrity: sha512-imsigcWor5Y/dC0rz2q0bBt9PabcL3TORry2hAa6O6BuMvY71bqHyfReAz5qyAqiQATD1m70qdntqBfBQjVWpQ==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
- /rollup@3.27.0:
- resolution: {integrity: sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==}
+ /rollup@3.28.1:
+ resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
- /run-async@2.4.1:
- resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ /run-async@3.0.0:
+ resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
engines: {node: '>=0.12.0'}
dev: true
@@ -7067,7 +7426,7 @@ packages:
/rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
dev: true
/safe-array-concat@1.0.0:
@@ -7095,38 +7454,43 @@ packages:
is-regex: 1.1.4
dev: true
+ /safe-stable-stringify@2.4.3:
+ resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==}
+ engines: {node: '>=10'}
+ dev: true
+
/safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
dev: true
- /semantic-release@21.0.7:
- resolution: {integrity: sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==}
+ /semantic-release@21.1.1:
+ resolution: {integrity: sha512-OCIazQnaCHdq1F6zfmKS0P7jZakYq0weiqW2mxUWo4H2CDnxelUoa/0Bs/dQatoHc6JFh6lG2HWpusdl93bFcw==}
engines: {node: '>=18'}
hasBin: true
dependencies:
- '@semantic-release/commit-analyzer': 10.0.1(semantic-release@21.0.7)
+ '@semantic-release/commit-analyzer': 10.0.4(semantic-release@21.1.1)
'@semantic-release/error': 4.0.0
- '@semantic-release/github': 9.0.4(semantic-release@21.0.7)
- '@semantic-release/npm': 10.0.4(semantic-release@21.0.7)
- '@semantic-release/release-notes-generator': 11.0.4(semantic-release@21.0.7)
+ '@semantic-release/github': 9.0.4(semantic-release@21.1.1)
+ '@semantic-release/npm': 10.0.5(semantic-release@21.1.1)
+ '@semantic-release/release-notes-generator': 11.0.7(semantic-release@21.1.1)
aggregate-error: 4.0.1
cosmiconfig: 8.2.0
debug: 4.3.4(supports-color@8.1.1)
env-ci: 9.1.1
- execa: 7.1.1
+ execa: 8.0.1
figures: 5.0.0
find-versions: 5.1.0
get-stream: 6.0.1
git-log-parser: 1.2.0
hook-std: 3.0.0
- hosted-git-info: 6.1.1
+ hosted-git-info: 7.0.0
lodash-es: 4.17.21
marked: 5.1.2
marked-terminal: 5.2.0(marked@5.1.2)
micromatch: 4.0.5
p-each-series: 3.0.0
p-reduce: 3.0.0
- read-pkg-up: 10.0.0
+ read-pkg-up: 10.1.0
resolve-from: 5.0.0
semver: 7.5.4
semver-diff: 4.0.0
@@ -7165,6 +7529,27 @@ packages:
dependencies:
lru-cache: 6.0.0
+ /send@0.18.0:
+ resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/serialize-javascript@6.0.0:
resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
dependencies:
@@ -7177,10 +7562,26 @@ packages:
randombytes: 2.1.0
dev: true
+ /serve-static@1.15.0:
+ resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
dev: true
+ /setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+ dev: true
+
/shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -7209,6 +7610,11 @@ packages:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
+ /signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+ dev: true
+
/signale@1.4.0:
resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==}
engines: {node: '>=6'}
@@ -7235,8 +7641,8 @@ packages:
dev: true
optional: true
- /smob@0.0.6:
- resolution: {integrity: sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==}
+ /smob@1.4.0:
+ resolution: {integrity: sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==}
dev: true
/socks-proxy-agent@6.2.1:
@@ -7262,6 +7668,12 @@ packages:
dev: true
optional: true
+ /sonic-boom@3.3.0:
+ resolution: {integrity: sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==}
+ dependencies:
+ atomic-sleep: 1.0.0
+ dev: true
+
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
@@ -7279,11 +7691,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /sourcemap-codec@1.4.8:
- resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
- deprecated: Please use @jridgewell/sourcemap-codec instead
- dev: true
-
/spawn-error-forwarder@1.0.0:
resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==}
dev: true
@@ -7333,10 +7740,9 @@ packages:
through2: 2.0.5
dev: true
- /split2@3.2.2:
- resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
- dependencies:
- readable-stream: 3.6.2
+ /split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
dev: true
/split@1.0.1:
@@ -7396,8 +7802,13 @@ packages:
resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
dev: false
- /std-env@3.3.3:
- resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==}
+ /statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /std-env@3.4.3:
+ resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==}
dev: true
/stdin-discarder@0.1.0:
@@ -7428,15 +7839,6 @@ packages:
strip-ansi: 6.0.1
dev: true
- /string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.1.0
- dev: true
-
/string.prototype.trim@1.2.7:
resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
engines: {node: '>= 0.4'}
@@ -7527,20 +7929,20 @@ packages:
engines: {node: '>=8'}
dev: true
- /strip-literal@1.0.1:
- resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
+ /strip-literal@1.3.0:
+ resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
dependencies:
acorn: 8.10.0
dev: true
- /stylehacks@5.1.1(postcss@8.4.27):
+ /stylehacks@5.1.1(postcss@8.4.29):
resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.21.10
- postcss: 8.4.27
+ postcss: 8.4.29
postcss-selector-parser: 6.0.13
dev: true
@@ -7623,8 +8025,8 @@ packages:
unique-string: 3.0.0
dev: true
- /terser@5.19.2:
- resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==}
+ /terser@5.19.3:
+ resolution: {integrity: sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==}
engines: {node: '>=10'}
hasBin: true
dependencies:
@@ -7643,15 +8045,21 @@ packages:
minimatch: 3.1.2
dev: true
- /text-extensions@1.9.0:
- resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
- engines: {node: '>=0.10'}
+ /text-extensions@2.4.0:
+ resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
+ engines: {node: '>=8'}
dev: true
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
+ /thread-stream@2.4.0:
+ resolution: {integrity: sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==}
+ dependencies:
+ real-require: 0.2.0
+ dev: true
+
/through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
dependencies:
@@ -7708,6 +8116,11 @@ packages:
is-number: 7.0.0
dev: true
+ /toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+ dev: true
+
/tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
dev: true
@@ -7734,7 +8147,7 @@ packages:
tsconfig-paths: 3.14.2
dev: true
- /ts-node@10.9.1(@types/node@20.4.5)(typescript@5.1.6):
+ /ts-node@10.9.1(@types/node@20.5.7)(typescript@5.2.2):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
@@ -7753,14 +8166,14 @@ packages:
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 20.4.5
+ '@types/node': 20.5.7
acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
- typescript: 5.1.6
+ typescript: 5.2.2
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: true
@@ -7793,18 +8206,18 @@ packages:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
dev: true
- /tslib@2.6.1:
- resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==}
+ /tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: true
- /tsutils@3.21.0(typescript@5.1.6):
+ /tsutils@3.21.0(typescript@5.2.2):
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'}
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
dependencies:
tslib: 1.14.1
- typescript: 5.1.6
+ typescript: 5.2.2
dev: true
/type-check@0.4.0:
@@ -7829,6 +8242,11 @@ packages:
engines: {node: '>=10'}
dev: true
+ /type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+ dev: true
+
/type-fest@0.6.0:
resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
engines: {node: '>=8'}
@@ -7854,6 +8272,19 @@ packages:
engines: {node: '>=14.16'}
dev: true
+ /type-fest@4.3.1:
+ resolution: {integrity: sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+ dev: true
+
/typed-array-buffer@1.0.0:
resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
engines: {node: '>= 0.4'}
@@ -7898,14 +8329,14 @@ packages:
is-typedarray: 1.0.0
dev: true
- /typescript@5.1.6:
- resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==}
+ /typescript@5.2.2:
+ resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
engines: {node: '>=14.17'}
hasBin: true
dev: true
- /ufo@1.2.0:
- resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==}
+ /ufo@1.3.0:
+ resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==}
dev: true
/uglify-js@3.17.4:
@@ -7957,6 +8388,11 @@ packages:
engines: {node: '>= 10.0.0'}
dev: true
+ /unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
/update-browserslist-db@1.0.11(browserslist@4.21.10):
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
hasBin: true
@@ -7983,6 +8419,11 @@ packages:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: true
+ /utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+ dev: true
+
/uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
@@ -7992,10 +8433,6 @@ packages:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
dev: true
- /v8-compile-cache@2.3.0:
- resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
- dev: true
-
/validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
dependencies:
@@ -8003,17 +8440,22 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
- /vite-node@0.34.1(@types/node@20.4.5):
- resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==}
+ /vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /vite-node@0.34.3(@types/node@20.5.7):
+ resolution: {integrity: sha512-+0TzJf1g0tYXj6tR2vEyiA42OPq68QkRZCu/ERSo2PtsDJfBpDyEfuKbRvLmZqi/CgC7SCBtyC+WjTGNMRIaig==}
engines: {node: '>=v14.18.0'}
hasBin: true
dependencies:
cac: 6.7.14
debug: 4.3.4(supports-color@8.1.1)
- mlly: 1.4.0
+ mlly: 1.4.1
pathe: 1.1.1
picocolors: 1.0.0
- vite: 4.4.8(@types/node@20.4.5)
+ vite: 4.4.9(@types/node@20.5.7)
transitivePeerDependencies:
- '@types/node'
- less
@@ -8025,8 +8467,41 @@ packages:
- terser
dev: true
- /vite@4.4.8(@types/node@20.4.5):
- resolution: {integrity: sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==}
+ /vite@4.3.7(@types/node@20.5.7):
+ resolution: {integrity: sha512-MTIFpbIm9v7Hh5b0wSBgkcWzSBz7SAa6K/cBTwS4kUiQJfQLFlZZRJRQgqunCVzhTPCk674tW+0Qaqh3Q00dBg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': '>= 14'
+ less: '*'
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ '@types/node': 20.5.7
+ esbuild: 0.17.19
+ postcss: 8.4.29
+ rollup: 3.22.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /vite@4.4.9(@types/node@20.5.7):
+ resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
@@ -8053,16 +8528,16 @@ packages:
terser:
optional: true
dependencies:
- '@types/node': 20.4.5
- esbuild: 0.18.17
- postcss: 8.4.27
- rollup: 3.27.0
+ '@types/node': 20.5.7
+ esbuild: 0.18.20
+ postcss: 8.4.29
+ rollup: 3.28.1
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
- /vitest@0.34.1:
- resolution: {integrity: sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==}
+ /vitest@0.34.3:
+ resolution: {integrity: sha512-7+VA5Iw4S3USYk+qwPxHl8plCMhA5rtfwMjgoQXMT7rO5ldWcdsdo3U1QD289JgglGK4WeOzgoLTsGFu6VISyQ==}
engines: {node: '>=v14.18.0'}
hasBin: true
peerDependencies:
@@ -8094,27 +8569,27 @@ packages:
dependencies:
'@types/chai': 4.3.5
'@types/chai-subset': 1.3.3
- '@types/node': 20.4.5
- '@vitest/expect': 0.34.1
- '@vitest/runner': 0.34.1
- '@vitest/snapshot': 0.34.1
- '@vitest/spy': 0.34.1
- '@vitest/utils': 0.34.1
+ '@types/node': 20.5.7
+ '@vitest/expect': 0.34.3
+ '@vitest/runner': 0.34.3
+ '@vitest/snapshot': 0.34.3
+ '@vitest/spy': 0.34.3
+ '@vitest/utils': 0.34.3
acorn: 8.10.0
acorn-walk: 8.2.0
cac: 6.7.14
- chai: 4.3.7
+ chai: 4.3.8
debug: 4.3.4(supports-color@8.1.1)
local-pkg: 0.4.3
- magic-string: 0.30.2
+ magic-string: 0.30.3
pathe: 1.1.1
picocolors: 1.0.0
- std-env: 3.3.3
- strip-literal: 1.0.1
+ std-env: 3.4.3
+ strip-literal: 1.3.0
tinybench: 2.5.0
tinypool: 0.7.0
- vite: 4.4.8(@types/node@20.4.5)
- vite-node: 0.34.1(@types/node@20.4.5)
+ vite: 4.4.9(@types/node@20.5.7)
+ vite-node: 0.34.3(@types/node@20.5.7)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less
@@ -8126,14 +8601,13 @@ packages:
- terser
dev: true
- /vue@3.2.47:
- resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
+ /vue-router@4.2.0(vue@3.3.4):
+ resolution: {integrity: sha512-c+usESa6ZoWsm4PPdzRSyenp5A4dsUtnDJnrI03fY1IpIihA9TK3x5ffgkFDpjhLJZewsXoKURapNLFdZjuqTg==}
+ peerDependencies:
+ vue: ^3.2.0
dependencies:
- '@vue/compiler-dom': 3.2.47
- '@vue/compiler-sfc': 3.2.47
- '@vue/runtime-dom': 3.2.47
- '@vue/server-renderer': 3.2.47(vue@3.2.47)
- '@vue/shared': 3.2.47
+ '@vue/devtools-api': 6.5.0
+ vue: 3.3.4
dev: true
/vue@3.3.4:
@@ -8237,15 +8711,6 @@ packages:
strip-ansi: 6.0.1
dev: true
- /wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
- dependencies:
- ansi-styles: 6.2.1
- string-width: 5.1.2
- strip-ansi: 7.1.0
- dev: true
-
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
@@ -8302,6 +8767,11 @@ packages:
engines: {node: '>=10'}
dev: true
+ /yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+ dev: true
+
/yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
@@ -8344,7 +8814,7 @@ packages:
require-directory: 2.1.1
string-width: 4.2.3
y18n: 5.0.8
- yargs-parser: 20.2.4
+ yargs-parser: 20.2.9
dev: true
/yargs@17.7.2:
diff --git a/src/external-jwt/authProvider/get-auth-providers.ts b/src/external-jwt/authProvider/get-auth-providers.ts
index 812fc8b..ad1aa9c 100644
--- a/src/external-jwt/authProvider/get-auth-providers.ts
+++ b/src/external-jwt/authProvider/get-auth-providers.ts
@@ -8,6 +8,7 @@ import { createError } from '@directus/errors';
const InvalidJWKIssuerMetadata = createError('INVALID_JWKS_ISSUER_ERROR', 'No JWKS_URL or JWKS_KEYS and could not discover JWKS_URL from openid metadata', 500);
const InvalidJWKSUrl = createError('INVALID_JWKS_ISSUER_ERROR', 'Could not retrieve any valid keys from JWKS_URL', 500);
+const InvalidJWKKeys = createError('INVALID_JWKS_ISSUER_ERROR', 'No signing keys in response from provider')
export interface AuthProvider {
@@ -130,7 +131,7 @@ async function getJWKSClient(url: string) {
try {
const keys = await jwksClient.getSigningKeys()
if (keys.length == 0) {
- throw new InvalidJWKSUrl();
+ throw new InvalidJWKKeys();
}
} catch (error) {
throw new InvalidJWKSUrl();
diff --git a/test/hooks/directus-extension-external-jwt/index.js b/test/hooks/directus-extension-external-jwt/index.js
new file mode 100644
index 0000000..d837827
--- /dev/null
+++ b/test/hooks/directus-extension-external-jwt/index.js
@@ -0,0 +1,45528 @@
+import require$$1 from 'tty';
+import require$$1$1 from 'util';
+import require$$0 from 'os';
+import require$$0$2 from 'buffer';
+import require$$0$1 from 'crypto';
+import zlib$1 from 'zlib';
+import require$$0$3 from 'http';
+import require$$1$2 from 'https';
+import require$$1$3 from 'events';
+import require$$0$4 from 'url';
+import require$$0$5 from 'assert';
+import require$$1$4 from 'querystring';
+import fs$j from 'fs';
+import require$$1$5 from 'path';
+import require$$0$6 from 'constants';
+import stream from 'stream';
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+var freeGlobal$1 = freeGlobal;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal$1 || freeSelf || Function('return this')();
+
+/** Built-in value references. */
+var Symbol$1 = root.Symbol;
+
+var Symbol$2 = Symbol$1;
+
+/** Used for built-in method references. */
+var objectProto$c = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$9 = objectProto$c.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var nativeObjectToString$1 = objectProto$c.toString;
+
+/** Built-in value references. */
+var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined;
+
+/**
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the raw `toStringTag`.
+ */
+function getRawTag(value) {
+ var isOwn = hasOwnProperty$9.call(value, symToStringTag$1),
+ tag = value[symToStringTag$1];
+
+ try {
+ value[symToStringTag$1] = undefined;
+ var unmasked = true;
+ } catch (e) {}
+
+ var result = nativeObjectToString$1.call(value);
+ if (unmasked) {
+ if (isOwn) {
+ value[symToStringTag$1] = tag;
+ } else {
+ delete value[symToStringTag$1];
+ }
+ }
+ return result;
+}
+
+/** Used for built-in method references. */
+var objectProto$b = Object.prototype;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var nativeObjectToString = objectProto$b.toString;
+
+/**
+ * Converts `value` to a string using `Object.prototype.toString`.
+ *
+ * @private
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ */
+function objectToString(value) {
+ return nativeObjectToString.call(value);
+}
+
+/** `Object#toString` result references. */
+var nullTag = '[object Null]',
+ undefinedTag = '[object Undefined]';
+
+/** Built-in value references. */
+var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : undefined;
+
+/**
+ * The base implementation of `getTag` without fallbacks for buggy environments.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+function baseGetTag(value) {
+ if (value == null) {
+ return value === undefined ? undefinedTag : nullTag;
+ }
+ return (symToStringTag && symToStringTag in Object(value))
+ ? getRawTag(value)
+ : objectToString(value);
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike$1(value) {
+ return value != null && typeof value == 'object';
+}
+
+/** `Object#toString` result references. */
+var symbolTag$2 = '[object Symbol]';
+
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike$1(value) && baseGetTag(value) == symbolTag$2);
+}
+
+/**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+var isArray$1 = isArray;
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0;
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : undefined,
+ symbolToString = symbolProto$1 ? symbolProto$1.toString : undefined;
+
+/**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+ if (isArray$1(value)) {
+ // Recursively convert values (susceptible to call stack limits).
+ return arrayMap(value, baseToString) + '';
+ }
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : '';
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/** Used to match a single whitespace character. */
+var reWhitespace = /\s/;
+
+/**
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the last non-whitespace character.
+ */
+function trimmedEndIndex(string) {
+ var index = string.length;
+
+ while (index-- && reWhitespace.test(string.charAt(index))) {}
+ return index;
+}
+
+/** Used to match leading whitespace. */
+var reTrimStart = /^\s+/;
+
+/**
+ * The base implementation of `_.trim`.
+ *
+ * @private
+ * @param {string} string The string to trim.
+ * @returns {string} Returns the trimmed string.
+ */
+function baseTrim(string) {
+ return string
+ ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
+ : string;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject$3(value) {
+ var type = typeof value;
+ return value != null && (type == 'object' || type == 'function');
+}
+
+/** Used as references for various `Number` constants. */
+var NAN = 0 / 0;
+
+/** Used to detect bad signed hexadecimal string values. */
+var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+
+/** Used to detect binary string values. */
+var reIsBinary = /^0b[01]+$/i;
+
+/** Used to detect octal string values. */
+var reIsOctal = /^0o[0-7]+$/i;
+
+/** Built-in method references without a dependency on `root`. */
+var freeParseInt = parseInt;
+
+/**
+ * Converts `value` to a number.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ * @example
+ *
+ * _.toNumber(3.2);
+ * // => 3.2
+ *
+ * _.toNumber(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toNumber(Infinity);
+ * // => Infinity
+ *
+ * _.toNumber('3.2');
+ * // => 3.2
+ */
+function toNumber(value) {
+ if (typeof value == 'number') {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return NAN;
+ }
+ if (isObject$3(value)) {
+ var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
+ value = isObject$3(other) ? (other + '') : other;
+ }
+ if (typeof value != 'string') {
+ return value === 0 ? value : +value;
+ }
+ value = baseTrim(value);
+ var isBinary = reIsBinary.test(value);
+ return (isBinary || reIsOctal.test(value))
+ ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
+ : (reIsBadHex.test(value) ? NAN : +value);
+}
+
+/** `Object#toString` result references. */
+var asyncTag = '[object AsyncFunction]',
+ funcTag$2 = '[object Function]',
+ genTag$1 = '[object GeneratorFunction]',
+ proxyTag = '[object Proxy]';
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ if (!isObject$3(value)) {
+ return false;
+ }
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 9 which returns 'object' for typed arrays and other constructors.
+ var tag = baseGetTag(value);
+ return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag;
+}
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+}
+
+/** Used for built-in method references. */
+var funcProto$1 = Function.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString$1 = funcProto$1.toString;
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to convert.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString$1.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+}
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Used for built-in method references. */
+var funcProto = Function.prototype,
+ objectProto$a = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$8 = objectProto$a.hasOwnProperty;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty$8).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+function baseIsNative(value) {
+ if (!isObject$3(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+}
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+ return object == null ? undefined : object[key];
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+}
+
+/* Built-in method references that are verified to be native. */
+var WeakMap$1 = getNative(root, 'WeakMap');
+
+/** Built-in value references. */
+var objectCreate = Object.create;
+
+/**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} proto The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+var baseCreate = (function() {
+ function object() {}
+ return function(proto) {
+ if (!isObject$3(proto)) {
+ return {};
+ }
+ if (objectCreate) {
+ return objectCreate(proto);
+ }
+ object.prototype = proto;
+ var result = new object;
+ object.prototype = undefined;
+ return result;
+ };
+}());
+
+/**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+function copyArray(source, array) {
+ var index = -1,
+ length = source.length;
+
+ array || (array = Array(length));
+ while (++index < length) {
+ array[index] = source[index];
+ }
+ return array;
+}
+
+var defineProperty = (function() {
+ try {
+ var func = getNative(Object, 'defineProperty');
+ func({}, '', {});
+ return func;
+ } catch (e) {}
+}());
+
+/**
+ * A specialized version of `_.forEach` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+function arrayEach(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (iteratee(array[index], index, array) === false) {
+ break;
+ }
+ }
+ return array;
+}
+
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER$3 = 9007199254740991;
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ var type = typeof value;
+ length = length == null ? MAX_SAFE_INTEGER$3 : length;
+
+ return !!length &&
+ (type == 'number' ||
+ (type != 'symbol' && reIsUint.test(value))) &&
+ (value > -1 && value % 1 == 0 && value < length);
+}
+
+/**
+ * The base implementation of `assignValue` and `assignMergeValue` without
+ * value checks.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+function baseAssignValue(object, key, value) {
+ if (key == '__proto__' && defineProperty) {
+ defineProperty(object, key, {
+ 'configurable': true,
+ 'enumerable': true,
+ 'value': value,
+ 'writable': true
+ });
+ } else {
+ object[key] = value;
+ }
+}
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq$3(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/** Used for built-in method references. */
+var objectProto$9 = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$7 = objectProto$9.hasOwnProperty;
+
+/**
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+function assignValue(object, key, value) {
+ var objValue = object[key];
+ if (!(hasOwnProperty$7.call(object, key) && eq$3(objValue, value)) ||
+ (value === undefined && !(key in object))) {
+ baseAssignValue(object, key, value);
+ }
+}
+
+/**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property identifiers to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @param {Function} [customizer] The function to customize copied values.
+ * @returns {Object} Returns `object`.
+ */
+function copyObject(source, props, object, customizer) {
+ var isNew = !object;
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+
+ var newValue = customizer
+ ? customizer(object[key], source[key], key, object, source)
+ : undefined;
+
+ if (newValue === undefined) {
+ newValue = source[key];
+ }
+ if (isNew) {
+ baseAssignValue(object, key, newValue);
+ } else {
+ assignValue(object, key, newValue);
+ }
+ }
+ return object;
+}
+
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER$2 = 9007199254740991;
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$2;
+}
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+}
+
+/** Used for built-in method references. */
+var objectProto$8 = Object.prototype;
+
+/**
+ * Checks if `value` is likely a prototype object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+ */
+function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$8;
+
+ return value === proto;
+}
+
+/**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+}
+
+/** `Object#toString` result references. */
+var argsTag$2 = '[object Arguments]';
+
+/**
+ * The base implementation of `_.isArguments`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ */
+function baseIsArguments(value) {
+ return isObjectLike$1(value) && baseGetTag(value) == argsTag$2;
+}
+
+/** Used for built-in method references. */
+var objectProto$7 = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$6 = objectProto$7.hasOwnProperty;
+
+/** Built-in value references. */
+var propertyIsEnumerable$1 = objectProto$7.propertyIsEnumerable;
+
+/**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
+ return isObjectLike$1(value) && hasOwnProperty$6.call(value, 'callee') &&
+ !propertyIsEnumerable$1.call(value, 'callee');
+};
+
+/**
+ * This method returns `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.13.0
+ * @category Util
+ * @returns {boolean} Returns `false`.
+ * @example
+ *
+ * _.times(2, _.stubFalse);
+ * // => [false, false]
+ */
+function stubFalse() {
+ return false;
+}
+
+/** Detect free variable `exports`. */
+var freeExports$2 = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+/** Detect free variable `module`. */
+var freeModule$2 = freeExports$2 && typeof module == 'object' && module && !module.nodeType && module;
+
+/** Detect the popular CommonJS extension `module.exports`. */
+var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2;
+
+/** Built-in value references. */
+var Buffer$9 = moduleExports$2 ? root.Buffer : undefined;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeIsBuffer = Buffer$9 ? Buffer$9.isBuffer : undefined;
+
+/**
+ * Checks if `value` is a buffer.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
+ * @example
+ *
+ * _.isBuffer(new Buffer(2));
+ * // => true
+ *
+ * _.isBuffer(new Uint8Array(2));
+ * // => false
+ */
+var isBuffer = nativeIsBuffer || stubFalse;
+
+/** `Object#toString` result references. */
+var argsTag$1 = '[object Arguments]',
+ arrayTag$1 = '[object Array]',
+ boolTag$2 = '[object Boolean]',
+ dateTag$2 = '[object Date]',
+ errorTag$1 = '[object Error]',
+ funcTag$1 = '[object Function]',
+ mapTag$4 = '[object Map]',
+ numberTag$2 = '[object Number]',
+ objectTag$2 = '[object Object]',
+ regexpTag$2 = '[object RegExp]',
+ setTag$4 = '[object Set]',
+ stringTag$2 = '[object String]',
+ weakMapTag$2 = '[object WeakMap]';
+
+var arrayBufferTag$2 = '[object ArrayBuffer]',
+ dataViewTag$3 = '[object DataView]',
+ float32Tag$2 = '[object Float32Array]',
+ float64Tag$2 = '[object Float64Array]',
+ int8Tag$2 = '[object Int8Array]',
+ int16Tag$2 = '[object Int16Array]',
+ int32Tag$2 = '[object Int32Array]',
+ uint8Tag$2 = '[object Uint8Array]',
+ uint8ClampedTag$2 = '[object Uint8ClampedArray]',
+ uint16Tag$2 = '[object Uint16Array]',
+ uint32Tag$2 = '[object Uint32Array]';
+
+/** Used to identify `toStringTag` values of typed arrays. */
+var typedArrayTags = {};
+typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] =
+typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] =
+typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] =
+typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] =
+typedArrayTags[uint32Tag$2] = true;
+typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] =
+typedArrayTags[arrayBufferTag$2] = typedArrayTags[boolTag$2] =
+typedArrayTags[dataViewTag$3] = typedArrayTags[dateTag$2] =
+typedArrayTags[errorTag$1] = typedArrayTags[funcTag$1] =
+typedArrayTags[mapTag$4] = typedArrayTags[numberTag$2] =
+typedArrayTags[objectTag$2] = typedArrayTags[regexpTag$2] =
+typedArrayTags[setTag$4] = typedArrayTags[stringTag$2] =
+typedArrayTags[weakMapTag$2] = false;
+
+/**
+ * The base implementation of `_.isTypedArray` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ */
+function baseIsTypedArray(value) {
+ return isObjectLike$1(value) &&
+ isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
+}
+
+/**
+ * The base implementation of `_.unary` without support for storing metadata.
+ *
+ * @private
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new capped function.
+ */
+function baseUnary(func) {
+ return function(value) {
+ return func(value);
+ };
+}
+
+/** Detect free variable `exports`. */
+var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+/** Detect free variable `module`. */
+var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module;
+
+/** Detect the popular CommonJS extension `module.exports`. */
+var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;
+
+/** Detect free variable `process` from Node.js. */
+var freeProcess = moduleExports$1 && freeGlobal$1.process;
+
+/** Used to access faster Node.js helpers. */
+var nodeUtil = (function() {
+ try {
+ // Use `util.types` for Node.js 10+.
+ var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types;
+
+ if (types) {
+ return types;
+ }
+
+ // Legacy `process.binding('util')` for Node.js < 10.
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
+ } catch (e) {}
+}());
+
+/* Node.js helper references. */
+var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
+
+/**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
+
+/** Used for built-in method references. */
+var objectProto$6 = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$5 = objectProto$6.hasOwnProperty;
+
+/**
+ * Creates an array of the enumerable property names of the array-like `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @param {boolean} inherited Specify returning inherited property names.
+ * @returns {Array} Returns the array of property names.
+ */
+function arrayLikeKeys(value, inherited) {
+ var isArr = isArray$1(value),
+ isArg = !isArr && isArguments(value),
+ isBuff = !isArr && !isArg && isBuffer(value),
+ isType = !isArr && !isArg && !isBuff && isTypedArray(value),
+ skipIndexes = isArr || isArg || isBuff || isType,
+ result = skipIndexes ? baseTimes(value.length, String) : [],
+ length = result.length;
+
+ for (var key in value) {
+ if ((inherited || hasOwnProperty$5.call(value, key)) &&
+ !(skipIndexes && (
+ // Safari 9 has enumerable `arguments.length` in strict mode.
+ key == 'length' ||
+ // Node.js 0.10 has enumerable non-index properties on buffers.
+ (isBuff && (key == 'offset' || key == 'parent')) ||
+ // PhantomJS 2 has enumerable non-index properties on typed arrays.
+ (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
+ // Skip index properties.
+ isIndex(key, length)
+ ))) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+}
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeKeys = overArg(Object.keys, Object);
+
+/** Used for built-in method references. */
+var objectProto$5 = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$4 = objectProto$5.hasOwnProperty;
+
+/**
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+ var result = [];
+ for (var key in Object(object)) {
+ if (hasOwnProperty$4.call(object, key) && key != 'constructor') {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+}
+
+/**
+ * This function is like
+ * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * except that it includes inherited enumerable properties.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function nativeKeysIn(object) {
+ var result = [];
+ if (object != null) {
+ for (var key in Object(object)) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/** Used for built-in method references. */
+var objectProto$4 = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$3 = objectProto$4.hasOwnProperty;
+
+/**
+ * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function baseKeysIn(object) {
+ if (!isObject$3(object)) {
+ return nativeKeysIn(object);
+ }
+ var isProto = isPrototype(object),
+ result = [];
+
+ for (var key in object) {
+ if (!(key == 'constructor' && (isProto || !hasOwnProperty$3.call(object, key)))) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+function keysIn(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
+}
+
+/* Built-in method references that are verified to be native. */
+var nativeCreate = getNative(Object, 'create');
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+ this.size = 0;
+}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+ var result = this.has(key) && delete this.__data__[key];
+ this.size -= result ? 1 : 0;
+ return result;
+}
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED$1 = '__lodash_hash_undefined__';
+
+/** Used for built-in method references. */
+var objectProto$3 = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$2 = objectProto$3.hasOwnProperty;
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED$1 ? undefined : result;
+ }
+ return hasOwnProperty$2.call(data, key) ? data[key] : undefined;
+}
+
+/** Used for built-in method references. */
+var objectProto$2 = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty$1 = objectProto$2.hasOwnProperty;
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? (data[key] !== undefined) : hasOwnProperty$1.call(data, key);
+}
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+ var data = this.__data__;
+ this.size += this.has(key) ? 0 : 1;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+}
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+ this.__data__ = [];
+ this.size = 0;
+}
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq$3(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype;
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ --this.size;
+ return true;
+}
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+}
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+}
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ ++this.size;
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+}
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+/* Built-in method references that are verified to be native. */
+var Map$2 = getNative(root, 'Map');
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+ this.size = 0;
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map$2 || ListCache),
+ 'string': new Hash
+ };
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+}
+
+/**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+ var result = getMapData(this, key)['delete'](key);
+ this.size -= result ? 1 : 0;
+ return result;
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+ var data = getMapData(this, key),
+ size = data.size;
+
+ data.set(key, value);
+ this.size += data.size == size ? 0 : 1;
+ return this;
+}
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+/**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+function toString$2(value) {
+ return value == null ? '' : baseToString(value);
+}
+
+/**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+}
+
+/** Built-in value references. */
+var getPrototype = overArg(Object.getPrototypeOf, Object);
+
+/**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+function stackClear() {
+ this.__data__ = new ListCache;
+ this.size = 0;
+}
+
+/**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function stackDelete(key) {
+ var data = this.__data__,
+ result = data['delete'](key);
+
+ this.size = data.size;
+ return result;
+}
+
+/**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function stackGet(key) {
+ return this.__data__.get(key);
+}
+
+/**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function stackHas(key) {
+ return this.__data__.has(key);
+}
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache instance.
+ */
+function stackSet(key, value) {
+ var data = this.__data__;
+ if (data instanceof ListCache) {
+ var pairs = data.__data__;
+ if (!Map$2 || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
+ pairs.push([key, value]);
+ this.size = ++data.size;
+ return this;
+ }
+ data = this.__data__ = new MapCache(pairs);
+ }
+ data.set(key, value);
+ this.size = data.size;
+ return this;
+}
+
+/**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Stack(entries) {
+ var data = this.__data__ = new ListCache(entries);
+ this.size = data.size;
+}
+
+// Add methods to `Stack`.
+Stack.prototype.clear = stackClear;
+Stack.prototype['delete'] = stackDelete;
+Stack.prototype.get = stackGet;
+Stack.prototype.has = stackHas;
+Stack.prototype.set = stackSet;
+
+/**
+ * The base implementation of `_.assign` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+function baseAssign(object, source) {
+ return object && copyObject(source, keys(source), object);
+}
+
+/**
+ * The base implementation of `_.assignIn` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+function baseAssignIn(object, source) {
+ return object && copyObject(source, keysIn(source), object);
+}
+
+/** Detect free variable `exports`. */
+var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+/** Detect free variable `module`. */
+var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+
+/** Detect the popular CommonJS extension `module.exports`. */
+var moduleExports = freeModule && freeModule.exports === freeExports;
+
+/** Built-in value references. */
+var Buffer$8 = moduleExports ? root.Buffer : undefined,
+ allocUnsafe = Buffer$8 ? Buffer$8.allocUnsafe : undefined;
+
+/**
+ * Creates a clone of `buffer`.
+ *
+ * @private
+ * @param {Buffer} buffer The buffer to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Buffer} Returns the cloned buffer.
+ */
+function cloneBuffer(buffer, isDeep) {
+ if (isDeep) {
+ return buffer.slice();
+ }
+ var length = buffer.length,
+ result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
+
+ buffer.copy(result);
+ return result;
+}
+
+/**
+ * A specialized version of `_.filter` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+function arrayFilter(array, predicate) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (predicate(value, index, array)) {
+ result[resIndex++] = value;
+ }
+ }
+ return result;
+}
+
+/**
+ * This method returns a new empty array.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.13.0
+ * @category Util
+ * @returns {Array} Returns the new empty array.
+ * @example
+ *
+ * var arrays = _.times(2, _.stubArray);
+ *
+ * console.log(arrays);
+ * // => [[], []]
+ *
+ * console.log(arrays[0] === arrays[1]);
+ * // => false
+ */
+function stubArray() {
+ return [];
+}
+
+/** Used for built-in method references. */
+var objectProto$1 = Object.prototype;
+
+/** Built-in value references. */
+var propertyIsEnumerable = objectProto$1.propertyIsEnumerable;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeGetSymbols$1 = Object.getOwnPropertySymbols;
+
+/**
+ * Creates an array of the own enumerable symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+var getSymbols = !nativeGetSymbols$1 ? stubArray : function(object) {
+ if (object == null) {
+ return [];
+ }
+ object = Object(object);
+ return arrayFilter(nativeGetSymbols$1(object), function(symbol) {
+ return propertyIsEnumerable.call(object, symbol);
+ });
+};
+
+/**
+ * Copies own symbols of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+function copySymbols(source, object) {
+ return copyObject(source, getSymbols(source), object);
+}
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeGetSymbols = Object.getOwnPropertySymbols;
+
+/**
+ * Creates an array of the own and inherited enumerable symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
+ var result = [];
+ while (object) {
+ arrayPush(result, getSymbols(object));
+ object = getPrototype(object);
+ }
+ return result;
+};
+
+/**
+ * Copies own and inherited symbols of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+function copySymbolsIn(source, object) {
+ return copyObject(source, getSymbolsIn(source), object);
+}
+
+/**
+ * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
+ * `keysFunc` and `symbolsFunc` to get the enumerable property names and
+ * symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @param {Function} symbolsFunc The function to get the symbols of `object`.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+ var result = keysFunc(object);
+ return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object));
+}
+
+/**
+ * Creates an array of own enumerable property names and symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+function getAllKeys(object) {
+ return baseGetAllKeys(object, keys, getSymbols);
+}
+
+/**
+ * Creates an array of own and inherited enumerable property names and
+ * symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+function getAllKeysIn(object) {
+ return baseGetAllKeys(object, keysIn, getSymbolsIn);
+}
+
+/* Built-in method references that are verified to be native. */
+var DataView = getNative(root, 'DataView');
+
+/* Built-in method references that are verified to be native. */
+var Promise$1 = getNative(root, 'Promise');
+
+/* Built-in method references that are verified to be native. */
+var Set$1 = getNative(root, 'Set');
+
+/** `Object#toString` result references. */
+var mapTag$3 = '[object Map]',
+ objectTag$1 = '[object Object]',
+ promiseTag = '[object Promise]',
+ setTag$3 = '[object Set]',
+ weakMapTag$1 = '[object WeakMap]';
+
+var dataViewTag$2 = '[object DataView]';
+
+/** Used to detect maps, sets, and weakmaps. */
+var dataViewCtorString = toSource(DataView),
+ mapCtorString = toSource(Map$2),
+ promiseCtorString = toSource(Promise$1),
+ setCtorString = toSource(Set$1),
+ weakMapCtorString = toSource(WeakMap$1);
+
+/**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+var getTag = baseGetTag;
+
+// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
+if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$2) ||
+ (Map$2 && getTag(new Map$2) != mapTag$3) ||
+ (Promise$1 && getTag(Promise$1.resolve()) != promiseTag) ||
+ (Set$1 && getTag(new Set$1) != setTag$3) ||
+ (WeakMap$1 && getTag(new WeakMap$1) != weakMapTag$1)) {
+ getTag = function(value) {
+ var result = baseGetTag(value),
+ Ctor = result == objectTag$1 ? value.constructor : undefined,
+ ctorString = Ctor ? toSource(Ctor) : '';
+
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString: return dataViewTag$2;
+ case mapCtorString: return mapTag$3;
+ case promiseCtorString: return promiseTag;
+ case setCtorString: return setTag$3;
+ case weakMapCtorString: return weakMapTag$1;
+ }
+ }
+ return result;
+ };
+}
+
+var getTag$1 = getTag;
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Initializes an array clone.
+ *
+ * @private
+ * @param {Array} array The array to clone.
+ * @returns {Array} Returns the initialized clone.
+ */
+function initCloneArray(array) {
+ var length = array.length,
+ result = new array.constructor(length);
+
+ // Add properties assigned by `RegExp#exec`.
+ if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+ result.index = array.index;
+ result.input = array.input;
+ }
+ return result;
+}
+
+/** Built-in value references. */
+var Uint8Array$1 = root.Uint8Array;
+
+/**
+ * Creates a clone of `arrayBuffer`.
+ *
+ * @private
+ * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
+ */
+function cloneArrayBuffer(arrayBuffer) {
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
+ new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer));
+ return result;
+}
+
+/**
+ * Creates a clone of `dataView`.
+ *
+ * @private
+ * @param {Object} dataView The data view to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned data view.
+ */
+function cloneDataView(dataView, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
+ return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
+}
+
+/** Used to match `RegExp` flags from their coerced string values. */
+var reFlags = /\w*$/;
+
+/**
+ * Creates a clone of `regexp`.
+ *
+ * @private
+ * @param {Object} regexp The regexp to clone.
+ * @returns {Object} Returns the cloned regexp.
+ */
+function cloneRegExp(regexp) {
+ var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
+ result.lastIndex = regexp.lastIndex;
+ return result;
+}
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = Symbol$2 ? Symbol$2.prototype : undefined,
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
+
+/**
+ * Creates a clone of the `symbol` object.
+ *
+ * @private
+ * @param {Object} symbol The symbol object to clone.
+ * @returns {Object} Returns the cloned symbol object.
+ */
+function cloneSymbol(symbol) {
+ return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
+}
+
+/**
+ * Creates a clone of `typedArray`.
+ *
+ * @private
+ * @param {Object} typedArray The typed array to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned typed array.
+ */
+function cloneTypedArray(typedArray, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
+}
+
+/** `Object#toString` result references. */
+var boolTag$1 = '[object Boolean]',
+ dateTag$1 = '[object Date]',
+ mapTag$2 = '[object Map]',
+ numberTag$1 = '[object Number]',
+ regexpTag$1 = '[object RegExp]',
+ setTag$2 = '[object Set]',
+ stringTag$1 = '[object String]',
+ symbolTag$1 = '[object Symbol]';
+
+var arrayBufferTag$1 = '[object ArrayBuffer]',
+ dataViewTag$1 = '[object DataView]',
+ float32Tag$1 = '[object Float32Array]',
+ float64Tag$1 = '[object Float64Array]',
+ int8Tag$1 = '[object Int8Array]',
+ int16Tag$1 = '[object Int16Array]',
+ int32Tag$1 = '[object Int32Array]',
+ uint8Tag$1 = '[object Uint8Array]',
+ uint8ClampedTag$1 = '[object Uint8ClampedArray]',
+ uint16Tag$1 = '[object Uint16Array]',
+ uint32Tag$1 = '[object Uint32Array]';
+
+/**
+ * Initializes an object clone based on its `toStringTag`.
+ *
+ * **Note:** This function only supports cloning values with tags of
+ * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @param {string} tag The `toStringTag` of the object to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+function initCloneByTag(object, tag, isDeep) {
+ var Ctor = object.constructor;
+ switch (tag) {
+ case arrayBufferTag$1:
+ return cloneArrayBuffer(object);
+
+ case boolTag$1:
+ case dateTag$1:
+ return new Ctor(+object);
+
+ case dataViewTag$1:
+ return cloneDataView(object, isDeep);
+
+ case float32Tag$1: case float64Tag$1:
+ case int8Tag$1: case int16Tag$1: case int32Tag$1:
+ case uint8Tag$1: case uint8ClampedTag$1: case uint16Tag$1: case uint32Tag$1:
+ return cloneTypedArray(object, isDeep);
+
+ case mapTag$2:
+ return new Ctor;
+
+ case numberTag$1:
+ case stringTag$1:
+ return new Ctor(object);
+
+ case regexpTag$1:
+ return cloneRegExp(object);
+
+ case setTag$2:
+ return new Ctor;
+
+ case symbolTag$1:
+ return cloneSymbol(object);
+ }
+}
+
+/**
+ * Initializes an object clone.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+function initCloneObject(object) {
+ return (typeof object.constructor == 'function' && !isPrototype(object))
+ ? baseCreate(getPrototype(object))
+ : {};
+}
+
+/** `Object#toString` result references. */
+var mapTag$1 = '[object Map]';
+
+/**
+ * The base implementation of `_.isMap` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a map, else `false`.
+ */
+function baseIsMap(value) {
+ return isObjectLike$1(value) && getTag$1(value) == mapTag$1;
+}
+
+/* Node.js helper references. */
+var nodeIsMap = nodeUtil && nodeUtil.isMap;
+
+/**
+ * Checks if `value` is classified as a `Map` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a map, else `false`.
+ * @example
+ *
+ * _.isMap(new Map);
+ * // => true
+ *
+ * _.isMap(new WeakMap);
+ * // => false
+ */
+var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
+
+/** `Object#toString` result references. */
+var setTag$1 = '[object Set]';
+
+/**
+ * The base implementation of `_.isSet` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a set, else `false`.
+ */
+function baseIsSet(value) {
+ return isObjectLike$1(value) && getTag$1(value) == setTag$1;
+}
+
+/* Node.js helper references. */
+var nodeIsSet = nodeUtil && nodeUtil.isSet;
+
+/**
+ * Checks if `value` is classified as a `Set` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a set, else `false`.
+ * @example
+ *
+ * _.isSet(new Set);
+ * // => true
+ *
+ * _.isSet(new WeakSet);
+ * // => false
+ */
+var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
+
+/** Used to compose bitmasks for cloning. */
+var CLONE_DEEP_FLAG = 1,
+ CLONE_FLAT_FLAG = 2,
+ CLONE_SYMBOLS_FLAG$1 = 4;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]',
+ weakMapTag = '[object WeakMap]';
+
+var arrayBufferTag = '[object ArrayBuffer]',
+ dataViewTag = '[object DataView]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+/** Used to identify `toStringTag` values supported by `_.clone`. */
+var cloneableTags = {};
+cloneableTags[argsTag] = cloneableTags[arrayTag] =
+cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
+cloneableTags[boolTag] = cloneableTags[dateTag] =
+cloneableTags[float32Tag] = cloneableTags[float64Tag] =
+cloneableTags[int8Tag] = cloneableTags[int16Tag] =
+cloneableTags[int32Tag] = cloneableTags[mapTag] =
+cloneableTags[numberTag] = cloneableTags[objectTag] =
+cloneableTags[regexpTag] = cloneableTags[setTag] =
+cloneableTags[stringTag] = cloneableTags[symbolTag] =
+cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
+cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
+cloneableTags[errorTag] = cloneableTags[funcTag] =
+cloneableTags[weakMapTag] = false;
+
+/**
+ * The base implementation of `_.clone` and `_.cloneDeep` which tracks
+ * traversed objects.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Deep clone
+ * 2 - Flatten inherited properties
+ * 4 - Clone symbols
+ * @param {Function} [customizer] The function to customize cloning.
+ * @param {string} [key] The key of `value`.
+ * @param {Object} [object] The parent object of `value`.
+ * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
+ * @returns {*} Returns the cloned value.
+ */
+function baseClone(value, bitmask, customizer, key, object, stack) {
+ var result,
+ isDeep = bitmask & CLONE_DEEP_FLAG,
+ isFlat = bitmask & CLONE_FLAT_FLAG,
+ isFull = bitmask & CLONE_SYMBOLS_FLAG$1;
+
+ if (customizer) {
+ result = object ? customizer(value, key, object, stack) : customizer(value);
+ }
+ if (result !== undefined) {
+ return result;
+ }
+ if (!isObject$3(value)) {
+ return value;
+ }
+ var isArr = isArray$1(value);
+ if (isArr) {
+ result = initCloneArray(value);
+ if (!isDeep) {
+ return copyArray(value, result);
+ }
+ } else {
+ var tag = getTag$1(value),
+ isFunc = tag == funcTag || tag == genTag;
+
+ if (isBuffer(value)) {
+ return cloneBuffer(value, isDeep);
+ }
+ if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
+ result = (isFlat || isFunc) ? {} : initCloneObject(value);
+ if (!isDeep) {
+ return isFlat
+ ? copySymbolsIn(value, baseAssignIn(result, value))
+ : copySymbols(value, baseAssign(result, value));
+ }
+ } else {
+ if (!cloneableTags[tag]) {
+ return object ? value : {};
+ }
+ result = initCloneByTag(value, tag, isDeep);
+ }
+ }
+ // Check for circular references and return its corresponding clone.
+ stack || (stack = new Stack);
+ var stacked = stack.get(value);
+ if (stacked) {
+ return stacked;
+ }
+ stack.set(value, result);
+
+ if (isSet(value)) {
+ value.forEach(function(subValue) {
+ result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
+ });
+ } else if (isMap(value)) {
+ value.forEach(function(subValue, key) {
+ result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
+ });
+ }
+
+ var keysFunc = isFull
+ ? (isFlat ? getAllKeysIn : getAllKeys)
+ : (isFlat ? keysIn : keys);
+
+ var props = isArr ? undefined : keysFunc(value);
+ arrayEach(props || value, function(subValue, key) {
+ if (props) {
+ key = subValue;
+ subValue = value[key];
+ }
+ // Recursively populate clone (susceptible to call stack limits).
+ assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
+ });
+ return result;
+}
+
+/** Used to compose bitmasks for cloning. */
+var CLONE_SYMBOLS_FLAG = 4;
+
+/**
+ * Creates a shallow clone of `value`.
+ *
+ * **Note:** This method is loosely based on the
+ * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
+ * and supports cloning arrays, array buffers, booleans, date objects, maps,
+ * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
+ * arrays. The own enumerable properties of `arguments` objects are cloned
+ * as plain objects. An empty object is returned for uncloneable values such
+ * as error objects, functions, DOM nodes, and WeakMaps.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to clone.
+ * @returns {*} Returns the cloned value.
+ * @see _.cloneDeep
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var shallow = _.clone(objects);
+ * console.log(shallow[0] === objects[0]);
+ * // => true
+ */
+function clone$6(value) {
+ return baseClone(value, CLONE_SYMBOLS_FLAG);
+}
+
+/**
+ * Run JSON.parse, but ignore `__proto__` properties. This prevents prototype pollution attacks
+ */
+function parseJSON(input) {
+ if (String(input).includes('__proto__')) {
+ return JSON.parse(input, noproto);
+ }
+ return JSON.parse(input);
+}
+function noproto(key, value) {
+ if (key !== '__proto__') {
+ return value;
+ }
+}
+
+function defineHook(config) {
+ return config;
+}
+
+var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function getDefaultExportFromCjs (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+}
+
+function toArray$1(val) {
+ if (typeof val === 'string') {
+ return val.split(',');
+ }
+ return Array.isArray(val) ? val : [val];
+}
+
+var src$1 = {exports: {}};
+
+var browser$1 = {exports: {}};
+
+/**
+ * Helpers.
+ */
+
+var ms$2;
+var hasRequiredMs;
+
+function requireMs () {
+ if (hasRequiredMs) return ms$2;
+ hasRequiredMs = 1;
+ var s = 1000;
+ var m = s * 60;
+ var h = m * 60;
+ var d = h * 24;
+ var w = d * 7;
+ var y = d * 365.25;
+
+ /**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ * - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} [options]
+ * @throws {Error} throw an error if val is not a non-empty string or a number
+ * @return {String|Number}
+ * @api public
+ */
+
+ ms$2 = function(val, options) {
+ options = options || {};
+ var type = typeof val;
+ if (type === 'string' && val.length > 0) {
+ return parse(val);
+ } else if (type === 'number' && isFinite(val)) {
+ return options.long ? fmtLong(val) : fmtShort(val);
+ }
+ throw new Error(
+ 'val is not a non-empty string or a valid number. val=' +
+ JSON.stringify(val)
+ );
+ };
+
+ /**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+ function parse(str) {
+ str = String(str);
+ if (str.length > 100) {
+ return;
+ }
+ var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
+ str
+ );
+ if (!match) {
+ return;
+ }
+ var n = parseFloat(match[1]);
+ var type = (match[2] || 'ms').toLowerCase();
+ switch (type) {
+ case 'years':
+ case 'year':
+ case 'yrs':
+ case 'yr':
+ case 'y':
+ return n * y;
+ case 'weeks':
+ case 'week':
+ case 'w':
+ return n * w;
+ case 'days':
+ case 'day':
+ case 'd':
+ return n * d;
+ case 'hours':
+ case 'hour':
+ case 'hrs':
+ case 'hr':
+ case 'h':
+ return n * h;
+ case 'minutes':
+ case 'minute':
+ case 'mins':
+ case 'min':
+ case 'm':
+ return n * m;
+ case 'seconds':
+ case 'second':
+ case 'secs':
+ case 'sec':
+ case 's':
+ return n * s;
+ case 'milliseconds':
+ case 'millisecond':
+ case 'msecs':
+ case 'msec':
+ case 'ms':
+ return n;
+ default:
+ return undefined;
+ }
+ }
+
+ /**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+ function fmtShort(ms) {
+ var msAbs = Math.abs(ms);
+ if (msAbs >= d) {
+ return Math.round(ms / d) + 'd';
+ }
+ if (msAbs >= h) {
+ return Math.round(ms / h) + 'h';
+ }
+ if (msAbs >= m) {
+ return Math.round(ms / m) + 'm';
+ }
+ if (msAbs >= s) {
+ return Math.round(ms / s) + 's';
+ }
+ return ms + 'ms';
+ }
+
+ /**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+ function fmtLong(ms) {
+ var msAbs = Math.abs(ms);
+ if (msAbs >= d) {
+ return plural(ms, msAbs, d, 'day');
+ }
+ if (msAbs >= h) {
+ return plural(ms, msAbs, h, 'hour');
+ }
+ if (msAbs >= m) {
+ return plural(ms, msAbs, m, 'minute');
+ }
+ if (msAbs >= s) {
+ return plural(ms, msAbs, s, 'second');
+ }
+ return ms + ' ms';
+ }
+
+ /**
+ * Pluralization helper.
+ */
+
+ function plural(ms, msAbs, n, name) {
+ var isPlural = msAbs >= n * 1.5;
+ return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
+ }
+ return ms$2;
+}
+
+var common$1;
+var hasRequiredCommon;
+
+function requireCommon () {
+ if (hasRequiredCommon) return common$1;
+ hasRequiredCommon = 1;
+ /**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ */
+
+ function setup(env) {
+ createDebug.debug = createDebug;
+ createDebug.default = createDebug;
+ createDebug.coerce = coerce;
+ createDebug.disable = disable;
+ createDebug.enable = enable;
+ createDebug.enabled = enabled;
+ createDebug.humanize = requireMs();
+ createDebug.destroy = destroy;
+
+ Object.keys(env).forEach(key => {
+ createDebug[key] = env[key];
+ });
+
+ /**
+ * The currently active debug mode names, and names to skip.
+ */
+
+ createDebug.names = [];
+ createDebug.skips = [];
+
+ /**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+ createDebug.formatters = {};
+
+ /**
+ * Selects a color for a debug namespace
+ * @param {String} namespace The namespace string for the debug instance to be colored
+ * @return {Number|String} An ANSI color code for the given namespace
+ * @api private
+ */
+ function selectColor(namespace) {
+ let hash = 0;
+
+ for (let i = 0; i < namespace.length; i++) {
+ hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
+ }
+
+ return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+ }
+ createDebug.selectColor = selectColor;
+
+ /**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+ function createDebug(namespace) {
+ let prevTime;
+ let enableOverride = null;
+ let namespacesCache;
+ let enabledCache;
+
+ function debug(...args) {
+ // Disabled?
+ if (!debug.enabled) {
+ return;
+ }
+
+ const self = debug;
+
+ // Set `diff` timestamp
+ const curr = Number(new Date());
+ const ms = curr - (prevTime || curr);
+ self.diff = ms;
+ self.prev = prevTime;
+ self.curr = curr;
+ prevTime = curr;
+
+ args[0] = createDebug.coerce(args[0]);
+
+ if (typeof args[0] !== 'string') {
+ // Anything else let's inspect with %O
+ args.unshift('%O');
+ }
+
+ // Apply any `formatters` transformations
+ let index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+ // If we encounter an escaped % then don't increase the array index
+ if (match === '%%') {
+ return '%';
+ }
+ index++;
+ const formatter = createDebug.formatters[format];
+ if (typeof formatter === 'function') {
+ const val = args[index];
+ match = formatter.call(self, val);
+
+ // Now we need to remove `args[index]` since it's inlined in the `format`
+ args.splice(index, 1);
+ index--;
+ }
+ return match;
+ });
+
+ // Apply env-specific formatting (colors, etc.)
+ createDebug.formatArgs.call(self, args);
+
+ const logFn = self.log || createDebug.log;
+ logFn.apply(self, args);
+ }
+
+ debug.namespace = namespace;
+ debug.useColors = createDebug.useColors();
+ debug.color = createDebug.selectColor(namespace);
+ debug.extend = extend;
+ debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.
+
+ Object.defineProperty(debug, 'enabled', {
+ enumerable: true,
+ configurable: false,
+ get: () => {
+ if (enableOverride !== null) {
+ return enableOverride;
+ }
+ if (namespacesCache !== createDebug.namespaces) {
+ namespacesCache = createDebug.namespaces;
+ enabledCache = createDebug.enabled(namespace);
+ }
+
+ return enabledCache;
+ },
+ set: v => {
+ enableOverride = v;
+ }
+ });
+
+ // Env-specific initialization logic for debug instances
+ if (typeof createDebug.init === 'function') {
+ createDebug.init(debug);
+ }
+
+ return debug;
+ }
+
+ function extend(namespace, delimiter) {
+ const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
+ newDebug.log = this.log;
+ return newDebug;
+ }
+
+ /**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+ function enable(namespaces) {
+ createDebug.save(namespaces);
+ createDebug.namespaces = namespaces;
+
+ createDebug.names = [];
+ createDebug.skips = [];
+
+ let i;
+ const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+ const len = split.length;
+
+ for (i = 0; i < len; i++) {
+ if (!split[i]) {
+ // ignore empty strings
+ continue;
+ }
+
+ namespaces = split[i].replace(/\*/g, '.*?');
+
+ if (namespaces[0] === '-') {
+ createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));
+ } else {
+ createDebug.names.push(new RegExp('^' + namespaces + '$'));
+ }
+ }
+ }
+
+ /**
+ * Disable debug output.
+ *
+ * @return {String} namespaces
+ * @api public
+ */
+ function disable() {
+ const namespaces = [
+ ...createDebug.names.map(toNamespace),
+ ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)
+ ].join(',');
+ createDebug.enable('');
+ return namespaces;
+ }
+
+ /**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+ function enabled(name) {
+ if (name[name.length - 1] === '*') {
+ return true;
+ }
+
+ let i;
+ let len;
+
+ for (i = 0, len = createDebug.skips.length; i < len; i++) {
+ if (createDebug.skips[i].test(name)) {
+ return false;
+ }
+ }
+
+ for (i = 0, len = createDebug.names.length; i < len; i++) {
+ if (createDebug.names[i].test(name)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Convert regexp to namespace
+ *
+ * @param {RegExp} regxep
+ * @return {String} namespace
+ * @api private
+ */
+ function toNamespace(regexp) {
+ return regexp.toString()
+ .substring(2, regexp.toString().length - 2)
+ .replace(/\.\*\?$/, '*');
+ }
+
+ /**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+ function coerce(val) {
+ if (val instanceof Error) {
+ return val.stack || val.message;
+ }
+ return val;
+ }
+
+ /**
+ * XXX DO NOT USE. This is a temporary stub function.
+ * XXX It WILL be removed in the next major release.
+ */
+ function destroy() {
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+
+ createDebug.enable(createDebug.load());
+
+ return createDebug;
+ }
+
+ common$1 = setup;
+ return common$1;
+}
+
+/* eslint-env browser */
+
+var hasRequiredBrowser;
+
+function requireBrowser () {
+ if (hasRequiredBrowser) return browser$1.exports;
+ hasRequiredBrowser = 1;
+ (function (module, exports) {
+ /**
+ * This is the web browser implementation of `debug()`.
+ */
+
+ exports.formatArgs = formatArgs;
+ exports.save = save;
+ exports.load = load;
+ exports.useColors = useColors;
+ exports.storage = localstorage();
+ exports.destroy = (() => {
+ let warned = false;
+
+ return () => {
+ if (!warned) {
+ warned = true;
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+ };
+ })();
+
+ /**
+ * Colors.
+ */
+
+ exports.colors = [
+ '#0000CC',
+ '#0000FF',
+ '#0033CC',
+ '#0033FF',
+ '#0066CC',
+ '#0066FF',
+ '#0099CC',
+ '#0099FF',
+ '#00CC00',
+ '#00CC33',
+ '#00CC66',
+ '#00CC99',
+ '#00CCCC',
+ '#00CCFF',
+ '#3300CC',
+ '#3300FF',
+ '#3333CC',
+ '#3333FF',
+ '#3366CC',
+ '#3366FF',
+ '#3399CC',
+ '#3399FF',
+ '#33CC00',
+ '#33CC33',
+ '#33CC66',
+ '#33CC99',
+ '#33CCCC',
+ '#33CCFF',
+ '#6600CC',
+ '#6600FF',
+ '#6633CC',
+ '#6633FF',
+ '#66CC00',
+ '#66CC33',
+ '#9900CC',
+ '#9900FF',
+ '#9933CC',
+ '#9933FF',
+ '#99CC00',
+ '#99CC33',
+ '#CC0000',
+ '#CC0033',
+ '#CC0066',
+ '#CC0099',
+ '#CC00CC',
+ '#CC00FF',
+ '#CC3300',
+ '#CC3333',
+ '#CC3366',
+ '#CC3399',
+ '#CC33CC',
+ '#CC33FF',
+ '#CC6600',
+ '#CC6633',
+ '#CC9900',
+ '#CC9933',
+ '#CCCC00',
+ '#CCCC33',
+ '#FF0000',
+ '#FF0033',
+ '#FF0066',
+ '#FF0099',
+ '#FF00CC',
+ '#FF00FF',
+ '#FF3300',
+ '#FF3333',
+ '#FF3366',
+ '#FF3399',
+ '#FF33CC',
+ '#FF33FF',
+ '#FF6600',
+ '#FF6633',
+ '#FF9900',
+ '#FF9933',
+ '#FFCC00',
+ '#FFCC33'
+ ];
+
+ /**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+ // eslint-disable-next-line complexity
+ function useColors() {
+ // NB: In an Electron preload script, document will be defined but not fully
+ // initialized. Since we know we're in Chrome, we'll just detect this case
+ // explicitly
+ if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
+ return true;
+ }
+
+ // Internet Explorer and Edge do not support colors.
+ if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+ return false;
+ }
+
+ // Is webkit? http://stackoverflow.com/a/16459606/376773
+ // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+ return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+ // Is firebug? http://stackoverflow.com/a/398120/376773
+ (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+ // Is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ // Double check webkit in userAgent just in case we are in a worker
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+ }
+
+ /**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+ function formatArgs(args) {
+ args[0] = (this.useColors ? '%c' : '') +
+ this.namespace +
+ (this.useColors ? ' %c' : ' ') +
+ args[0] +
+ (this.useColors ? '%c ' : ' ') +
+ '+' + module.exports.humanize(this.diff);
+
+ if (!this.useColors) {
+ return;
+ }
+
+ const c = 'color: ' + this.color;
+ args.splice(1, 0, c, 'color: inherit');
+
+ // The final "%c" is somewhat tricky, because there could be other
+ // arguments passed either before or after the %c, so we need to
+ // figure out the correct index to insert the CSS into
+ let index = 0;
+ let lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, match => {
+ if (match === '%%') {
+ return;
+ }
+ index++;
+ if (match === '%c') {
+ // We only are interested in the *last* %c
+ // (the user may have provided their own)
+ lastC = index;
+ }
+ });
+
+ args.splice(lastC, 0, c);
+ }
+
+ /**
+ * Invokes `console.debug()` when available.
+ * No-op when `console.debug` is not a "function".
+ * If `console.debug` is not available, falls back
+ * to `console.log`.
+ *
+ * @api public
+ */
+ exports.log = console.debug || console.log || (() => {});
+
+ /**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+ function save(namespaces) {
+ try {
+ if (namespaces) {
+ exports.storage.setItem('debug', namespaces);
+ } else {
+ exports.storage.removeItem('debug');
+ }
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+ }
+
+ /**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+ function load() {
+ let r;
+ try {
+ r = exports.storage.getItem('debug');
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+
+ // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+ if (!r && typeof process !== 'undefined' && 'env' in process) {
+ r = process.env.DEBUG;
+ }
+
+ return r;
+ }
+
+ /**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+ function localstorage() {
+ try {
+ // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
+ // The Browser also has localStorage in the global context.
+ return localStorage;
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+ }
+
+ module.exports = requireCommon()(exports);
+
+ const {formatters} = module.exports;
+
+ /**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+ formatters.j = function (v) {
+ try {
+ return JSON.stringify(v);
+ } catch (error) {
+ return '[UnexpectedJSONParseError]: ' + error.message;
+ }
+ };
+ } (browser$1, browser$1.exports));
+ return browser$1.exports;
+}
+
+var node = {exports: {}};
+
+var hasFlag;
+var hasRequiredHasFlag;
+
+function requireHasFlag () {
+ if (hasRequiredHasFlag) return hasFlag;
+ hasRequiredHasFlag = 1;
+
+ hasFlag = (flag, argv = process.argv) => {
+ const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
+ const position = argv.indexOf(prefix + flag);
+ const terminatorPosition = argv.indexOf('--');
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+ };
+ return hasFlag;
+}
+
+var supportsColor_1;
+var hasRequiredSupportsColor;
+
+function requireSupportsColor () {
+ if (hasRequiredSupportsColor) return supportsColor_1;
+ hasRequiredSupportsColor = 1;
+ const os = require$$0;
+ const tty = require$$1;
+ const hasFlag = requireHasFlag();
+
+ const {env} = process;
+
+ let forceColor;
+ if (hasFlag('no-color') ||
+ hasFlag('no-colors') ||
+ hasFlag('color=false') ||
+ hasFlag('color=never')) {
+ forceColor = 0;
+ } else if (hasFlag('color') ||
+ hasFlag('colors') ||
+ hasFlag('color=true') ||
+ hasFlag('color=always')) {
+ forceColor = 1;
+ }
+
+ if ('FORCE_COLOR' in env) {
+ if (env.FORCE_COLOR === 'true') {
+ forceColor = 1;
+ } else if (env.FORCE_COLOR === 'false') {
+ forceColor = 0;
+ } else {
+ forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
+ }
+ }
+
+ function translateLevel(level) {
+ if (level === 0) {
+ return false;
+ }
+
+ return {
+ level,
+ hasBasic: true,
+ has256: level >= 2,
+ has16m: level >= 3
+ };
+ }
+
+ function supportsColor(haveStream, streamIsTTY) {
+ if (forceColor === 0) {
+ return 0;
+ }
+
+ if (hasFlag('color=16m') ||
+ hasFlag('color=full') ||
+ hasFlag('color=truecolor')) {
+ return 3;
+ }
+
+ if (hasFlag('color=256')) {
+ return 2;
+ }
+
+ if (haveStream && !streamIsTTY && forceColor === undefined) {
+ return 0;
+ }
+
+ const min = forceColor || 0;
+
+ if (env.TERM === 'dumb') {
+ return min;
+ }
+
+ if (process.platform === 'win32') {
+ // Windows 10 build 10586 is the first Windows release that supports 256 colors.
+ // Windows 10 build 14931 is the first release that supports 16m/TrueColor.
+ const osRelease = os.release().split('.');
+ if (
+ Number(osRelease[0]) >= 10 &&
+ Number(osRelease[2]) >= 10586
+ ) {
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
+ }
+
+ return 1;
+ }
+
+ if ('CI' in env) {
+ if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
+ return 1;
+ }
+
+ return min;
+ }
+
+ if ('TEAMCITY_VERSION' in env) {
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+ }
+
+ if (env.COLORTERM === 'truecolor') {
+ return 3;
+ }
+
+ if ('TERM_PROGRAM' in env) {
+ const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
+
+ switch (env.TERM_PROGRAM) {
+ case 'iTerm.app':
+ return version >= 3 ? 3 : 2;
+ case 'Apple_Terminal':
+ return 2;
+ // No default
+ }
+ }
+
+ if (/-256(color)?$/i.test(env.TERM)) {
+ return 2;
+ }
+
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+ return 1;
+ }
+
+ if ('COLORTERM' in env) {
+ return 1;
+ }
+
+ return min;
+ }
+
+ function getSupportLevel(stream) {
+ const level = supportsColor(stream, stream && stream.isTTY);
+ return translateLevel(level);
+ }
+
+ supportsColor_1 = {
+ supportsColor: getSupportLevel,
+ stdout: translateLevel(supportsColor(true, tty.isatty(1))),
+ stderr: translateLevel(supportsColor(true, tty.isatty(2)))
+ };
+ return supportsColor_1;
+}
+
+/**
+ * Module dependencies.
+ */
+
+var hasRequiredNode;
+
+function requireNode () {
+ if (hasRequiredNode) return node.exports;
+ hasRequiredNode = 1;
+ (function (module, exports) {
+ const tty = require$$1;
+ const util = require$$1$1;
+
+ /**
+ * This is the Node.js implementation of `debug()`.
+ */
+
+ exports.init = init;
+ exports.log = log;
+ exports.formatArgs = formatArgs;
+ exports.save = save;
+ exports.load = load;
+ exports.useColors = useColors;
+ exports.destroy = util.deprecate(
+ () => {},
+ 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'
+ );
+
+ /**
+ * Colors.
+ */
+
+ exports.colors = [6, 2, 3, 4, 5, 1];
+
+ try {
+ // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)
+ // eslint-disable-next-line import/no-extraneous-dependencies
+ const supportsColor = requireSupportsColor();
+
+ if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
+ exports.colors = [
+ 20,
+ 21,
+ 26,
+ 27,
+ 32,
+ 33,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 56,
+ 57,
+ 62,
+ 63,
+ 68,
+ 69,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 92,
+ 93,
+ 98,
+ 99,
+ 112,
+ 113,
+ 128,
+ 129,
+ 134,
+ 135,
+ 148,
+ 149,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 178,
+ 179,
+ 184,
+ 185,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 214,
+ 215,
+ 220,
+ 221
+ ];
+ }
+ } catch (error) {
+ // Swallow - we only care if `supports-color` is available; it doesn't have to be.
+ }
+
+ /**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+ exports.inspectOpts = Object.keys(process.env).filter(key => {
+ return /^debug_/i.test(key);
+ }).reduce((obj, key) => {
+ // Camel-case
+ const prop = key
+ .substring(6)
+ .toLowerCase()
+ .replace(/_([a-z])/g, (_, k) => {
+ return k.toUpperCase();
+ });
+
+ // Coerce string value into JS value
+ let val = process.env[key];
+ if (/^(yes|on|true|enabled)$/i.test(val)) {
+ val = true;
+ } else if (/^(no|off|false|disabled)$/i.test(val)) {
+ val = false;
+ } else if (val === 'null') {
+ val = null;
+ } else {
+ val = Number(val);
+ }
+
+ obj[prop] = val;
+ return obj;
+ }, {});
+
+ /**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+ function useColors() {
+ return 'colors' in exports.inspectOpts ?
+ Boolean(exports.inspectOpts.colors) :
+ tty.isatty(process.stderr.fd);
+ }
+
+ /**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+ function formatArgs(args) {
+ const {namespace: name, useColors} = this;
+
+ if (useColors) {
+ const c = this.color;
+ const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c);
+ const prefix = ` ${colorCode};1m${name} \u001B[0m`;
+
+ args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+ args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m');
+ } else {
+ args[0] = getDate() + name + ' ' + args[0];
+ }
+ }
+
+ function getDate() {
+ if (exports.inspectOpts.hideDate) {
+ return '';
+ }
+ return new Date().toISOString() + ' ';
+ }
+
+ /**
+ * Invokes `util.format()` with the specified arguments and writes to stderr.
+ */
+
+ function log(...args) {
+ return process.stderr.write(util.format(...args) + '\n');
+ }
+
+ /**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+ function save(namespaces) {
+ if (namespaces) {
+ process.env.DEBUG = namespaces;
+ } else {
+ // If you set a process.env field to null or undefined, it gets cast to the
+ // string 'null' or 'undefined'. Just delete instead.
+ delete process.env.DEBUG;
+ }
+ }
+
+ /**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+ function load() {
+ return process.env.DEBUG;
+ }
+
+ /**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+ function init(debug) {
+ debug.inspectOpts = {};
+
+ const keys = Object.keys(exports.inspectOpts);
+ for (let i = 0; i < keys.length; i++) {
+ debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+ }
+ }
+
+ module.exports = requireCommon()(exports);
+
+ const {formatters} = module.exports;
+
+ /**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+ formatters.o = function (v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts)
+ .split('\n')
+ .map(str => str.trim())
+ .join(' ');
+ };
+
+ /**
+ * Map %O to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+ formatters.O = function (v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts);
+ };
+ } (node, node.exports));
+ return node.exports;
+}
+
+/**
+ * Detect Electron renderer / nwjs process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {
+ src$1.exports = requireBrowser();
+} else {
+ src$1.exports = requireNode();
+}
+
+var srcExports = src$1.exports;
+
+// src/create-error.ts
+var createError = (code, message, status = 500) => {
+ return class extends Error {
+ name = "DirectusError";
+ extensions;
+ code = code.toUpperCase();
+ status = status;
+ constructor(extensions, options) {
+ const msg = typeof message === "string" ? message : message(extensions);
+ super(msg, options);
+ this.extensions = extensions;
+ }
+ toString() {
+ return `${this.name} [${this.code}]: ${this.message}`;
+ }
+ };
+};
+
+var src = {exports: {}};
+
+var cjs = {};
+
+var decrypt$8 = {};
+
+var decrypt$7 = {};
+
+var base64url$9 = {};
+
+var buffer_utils = {};
+
+var digest$1 = {};
+
+Object.defineProperty(digest$1, "__esModule", { value: true });
+const crypto_1$g = require$$0$1;
+const digest = (algorithm, data) => (0, crypto_1$g.createHash)(algorithm).update(data).digest();
+digest$1.default = digest;
+
+(function (exports) {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.concatKdf = exports.lengthAndInput = exports.uint32be = exports.uint64be = exports.p2s = exports.concat = exports.decoder = exports.encoder = void 0;
+ const digest_js_1 = digest$1;
+ exports.encoder = new TextEncoder();
+ exports.decoder = new TextDecoder();
+ const MAX_INT32 = 2 ** 32;
+ function concat(...buffers) {
+ const size = buffers.reduce((acc, { length }) => acc + length, 0);
+ const buf = new Uint8Array(size);
+ let i = 0;
+ buffers.forEach((buffer) => {
+ buf.set(buffer, i);
+ i += buffer.length;
+ });
+ return buf;
+ }
+ exports.concat = concat;
+ function p2s(alg, p2sInput) {
+ return concat(exports.encoder.encode(alg), new Uint8Array([0]), p2sInput);
+ }
+ exports.p2s = p2s;
+ function writeUInt32BE(buf, value, offset) {
+ if (value < 0 || value >= MAX_INT32) {
+ throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);
+ }
+ buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);
+ }
+ function uint64be(value) {
+ const high = Math.floor(value / MAX_INT32);
+ const low = value % MAX_INT32;
+ const buf = new Uint8Array(8);
+ writeUInt32BE(buf, high, 0);
+ writeUInt32BE(buf, low, 4);
+ return buf;
+ }
+ exports.uint64be = uint64be;
+ function uint32be(value) {
+ const buf = new Uint8Array(4);
+ writeUInt32BE(buf, value);
+ return buf;
+ }
+ exports.uint32be = uint32be;
+ function lengthAndInput(input) {
+ return concat(uint32be(input.length), input);
+ }
+ exports.lengthAndInput = lengthAndInput;
+ async function concatKdf(secret, bits, value) {
+ const iterations = Math.ceil((bits >> 3) / 32);
+ const res = new Uint8Array(iterations * 32);
+ for (let iter = 0; iter < iterations; iter++) {
+ const buf = new Uint8Array(4 + secret.length + value.length);
+ buf.set(uint32be(iter + 1));
+ buf.set(secret, 4);
+ buf.set(value, 4 + secret.length);
+ res.set(await (0, digest_js_1.default)('sha256', buf), iter * 32);
+ }
+ return res.slice(0, bits >> 3);
+ }
+ exports.concatKdf = concatKdf;
+} (buffer_utils));
+
+Object.defineProperty(base64url$9, "__esModule", { value: true });
+base64url$9.decode = base64url$9.encode = base64url$9.encodeBase64 = base64url$9.decodeBase64 = void 0;
+const buffer_1$4 = require$$0$2;
+const buffer_utils_js_1$j = buffer_utils;
+let encode$2;
+base64url$9.encode = encode$2;
+function normalize$1(input) {
+ let encoded = input;
+ if (encoded instanceof Uint8Array) {
+ encoded = buffer_utils_js_1$j.decoder.decode(encoded);
+ }
+ return encoded;
+}
+if (buffer_1$4.Buffer.isEncoding('base64url')) {
+ base64url$9.encode = encode$2 = (input) => buffer_1$4.Buffer.from(input).toString('base64url');
+}
+else {
+ base64url$9.encode = encode$2 = (input) => buffer_1$4.Buffer.from(input).toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
+}
+const decodeBase64 = (input) => buffer_1$4.Buffer.from(input, 'base64');
+base64url$9.decodeBase64 = decodeBase64;
+const encodeBase64 = (input) => buffer_1$4.Buffer.from(input).toString('base64');
+base64url$9.encodeBase64 = encodeBase64;
+const decode$3 = (input) => buffer_1$4.Buffer.from(normalize$1(input), 'base64');
+base64url$9.decode = decode$3;
+
+var decrypt$6 = {};
+
+var check_iv_length = {};
+
+var errors$3 = {};
+
+Object.defineProperty(errors$3, "__esModule", { value: true });
+errors$3.JWSSignatureVerificationFailed = errors$3.JWKSTimeout = errors$3.JWKSMultipleMatchingKeys = errors$3.JWKSNoMatchingKey = errors$3.JWKSInvalid = errors$3.JWKInvalid = errors$3.JWTInvalid = errors$3.JWSInvalid = errors$3.JWEInvalid = errors$3.JWEDecryptionFailed = errors$3.JOSENotSupported = errors$3.JOSEAlgNotAllowed = errors$3.JWTExpired = errors$3.JWTClaimValidationFailed = errors$3.JOSEError = void 0;
+class JOSEError extends Error {
+ static get code() {
+ return 'ERR_JOSE_GENERIC';
+ }
+ constructor(message) {
+ var _a;
+ super(message);
+ this.code = 'ERR_JOSE_GENERIC';
+ this.name = this.constructor.name;
+ (_a = Error.captureStackTrace) === null || _a === void 0 ? void 0 : _a.call(Error, this, this.constructor);
+ }
+}
+errors$3.JOSEError = JOSEError;
+class JWTClaimValidationFailed extends JOSEError {
+ static get code() {
+ return 'ERR_JWT_CLAIM_VALIDATION_FAILED';
+ }
+ constructor(message, claim = 'unspecified', reason = 'unspecified') {
+ super(message);
+ this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';
+ this.claim = claim;
+ this.reason = reason;
+ }
+}
+errors$3.JWTClaimValidationFailed = JWTClaimValidationFailed;
+class JWTExpired extends JOSEError {
+ static get code() {
+ return 'ERR_JWT_EXPIRED';
+ }
+ constructor(message, claim = 'unspecified', reason = 'unspecified') {
+ super(message);
+ this.code = 'ERR_JWT_EXPIRED';
+ this.claim = claim;
+ this.reason = reason;
+ }
+}
+errors$3.JWTExpired = JWTExpired;
+class JOSEAlgNotAllowed extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';
+ }
+ static get code() {
+ return 'ERR_JOSE_ALG_NOT_ALLOWED';
+ }
+}
+errors$3.JOSEAlgNotAllowed = JOSEAlgNotAllowed;
+class JOSENotSupported extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JOSE_NOT_SUPPORTED';
+ }
+ static get code() {
+ return 'ERR_JOSE_NOT_SUPPORTED';
+ }
+}
+errors$3.JOSENotSupported = JOSENotSupported;
+class JWEDecryptionFailed extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWE_DECRYPTION_FAILED';
+ this.message = 'decryption operation failed';
+ }
+ static get code() {
+ return 'ERR_JWE_DECRYPTION_FAILED';
+ }
+}
+errors$3.JWEDecryptionFailed = JWEDecryptionFailed;
+class JWEInvalid extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWE_INVALID';
+ }
+ static get code() {
+ return 'ERR_JWE_INVALID';
+ }
+}
+errors$3.JWEInvalid = JWEInvalid;
+class JWSInvalid extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWS_INVALID';
+ }
+ static get code() {
+ return 'ERR_JWS_INVALID';
+ }
+}
+errors$3.JWSInvalid = JWSInvalid;
+class JWTInvalid extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWT_INVALID';
+ }
+ static get code() {
+ return 'ERR_JWT_INVALID';
+ }
+}
+errors$3.JWTInvalid = JWTInvalid;
+class JWKInvalid extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWK_INVALID';
+ }
+ static get code() {
+ return 'ERR_JWK_INVALID';
+ }
+}
+errors$3.JWKInvalid = JWKInvalid;
+class JWKSInvalid extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWKS_INVALID';
+ }
+ static get code() {
+ return 'ERR_JWKS_INVALID';
+ }
+}
+errors$3.JWKSInvalid = JWKSInvalid;
+class JWKSNoMatchingKey extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWKS_NO_MATCHING_KEY';
+ this.message = 'no applicable key found in the JSON Web Key Set';
+ }
+ static get code() {
+ return 'ERR_JWKS_NO_MATCHING_KEY';
+ }
+}
+errors$3.JWKSNoMatchingKey = JWKSNoMatchingKey;
+class JWKSMultipleMatchingKeys extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';
+ this.message = 'multiple matching keys found in the JSON Web Key Set';
+ }
+ static get code() {
+ return 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';
+ }
+}
+errors$3.JWKSMultipleMatchingKeys = JWKSMultipleMatchingKeys;
+class JWKSTimeout extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWKS_TIMEOUT';
+ this.message = 'request timed out';
+ }
+ static get code() {
+ return 'ERR_JWKS_TIMEOUT';
+ }
+}
+errors$3.JWKSTimeout = JWKSTimeout;
+class JWSSignatureVerificationFailed extends JOSEError {
+ constructor() {
+ super(...arguments);
+ this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';
+ this.message = 'signature verification failed';
+ }
+ static get code() {
+ return 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';
+ }
+}
+errors$3.JWSSignatureVerificationFailed = JWSSignatureVerificationFailed;
+
+var iv = {};
+
+var random$4 = {};
+
+(function (exports) {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.default = void 0;
+ var crypto_1 = require$$0$1;
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return crypto_1.randomFillSync; } });
+} (random$4));
+
+Object.defineProperty(iv, "__esModule", { value: true });
+iv.bitLength = void 0;
+const errors_js_1$D = errors$3;
+const random_js_1$3 = random$4;
+function bitLength$1(alg) {
+ switch (alg) {
+ case 'A128GCM':
+ case 'A128GCMKW':
+ case 'A192GCM':
+ case 'A192GCMKW':
+ case 'A256GCM':
+ case 'A256GCMKW':
+ return 96;
+ case 'A128CBC-HS256':
+ case 'A192CBC-HS384':
+ case 'A256CBC-HS512':
+ return 128;
+ default:
+ throw new errors_js_1$D.JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
+ }
+}
+iv.bitLength = bitLength$1;
+iv.default = (alg) => (0, random_js_1$3.default)(new Uint8Array(bitLength$1(alg) >> 3));
+
+Object.defineProperty(check_iv_length, "__esModule", { value: true });
+const errors_js_1$C = errors$3;
+const iv_js_1$1 = iv;
+const checkIvLength = (enc, iv) => {
+ if (iv.length << 3 !== (0, iv_js_1$1.bitLength)(enc)) {
+ throw new errors_js_1$C.JWEInvalid('Invalid Initialization Vector length');
+ }
+};
+check_iv_length.default = checkIvLength;
+
+var check_cek_length = {};
+
+var is_key_object$1 = {};
+
+Object.defineProperty(is_key_object$1, "__esModule", { value: true });
+const crypto_1$f = require$$0$1;
+const util$9 = require$$1$1;
+is_key_object$1.default = util$9.types.isKeyObject
+ ? (obj) => util$9.types.isKeyObject(obj)
+ : (obj) => obj != null && obj instanceof crypto_1$f.KeyObject;
+
+Object.defineProperty(check_cek_length, "__esModule", { value: true });
+const errors_js_1$B = errors$3;
+const is_key_object_js_1$9 = is_key_object$1;
+const checkCekLength = (enc, cek) => {
+ let expected;
+ switch (enc) {
+ case 'A128CBC-HS256':
+ case 'A192CBC-HS384':
+ case 'A256CBC-HS512':
+ expected = parseInt(enc.slice(-3), 10);
+ break;
+ case 'A128GCM':
+ case 'A192GCM':
+ case 'A256GCM':
+ expected = parseInt(enc.slice(1, 4), 10);
+ break;
+ default:
+ throw new errors_js_1$B.JOSENotSupported(`Content Encryption Algorithm ${enc} is not supported either by JOSE or your javascript runtime`);
+ }
+ if (cek instanceof Uint8Array) {
+ const actual = cek.byteLength << 3;
+ if (actual !== expected) {
+ throw new errors_js_1$B.JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
+ }
+ return;
+ }
+ if ((0, is_key_object_js_1$9.default)(cek) && cek.type === 'secret') {
+ const actual = cek.symmetricKeySize << 3;
+ if (actual !== expected) {
+ throw new errors_js_1$B.JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
+ }
+ return;
+ }
+ throw new TypeError('Invalid Content Encryption Key type');
+};
+check_cek_length.default = checkCekLength;
+
+var timing_safe_equal = {};
+
+Object.defineProperty(timing_safe_equal, "__esModule", { value: true });
+const crypto_1$e = require$$0$1;
+const timingSafeEqual = crypto_1$e.timingSafeEqual;
+timing_safe_equal.default = timingSafeEqual;
+
+var cbc_tag = {};
+
+Object.defineProperty(cbc_tag, "__esModule", { value: true });
+const crypto_1$d = require$$0$1;
+const buffer_utils_js_1$i = buffer_utils;
+function cbcTag(aad, iv, ciphertext, macSize, macKey, keySize) {
+ const macData = (0, buffer_utils_js_1$i.concat)(aad, iv, ciphertext, (0, buffer_utils_js_1$i.uint64be)(aad.length << 3));
+ const hmac = (0, crypto_1$d.createHmac)(`sha${macSize}`, macKey);
+ hmac.update(macData);
+ return hmac.digest().slice(0, keySize >> 3);
+}
+cbc_tag.default = cbcTag;
+
+var webcrypto$1 = {};
+
+Object.defineProperty(webcrypto$1, "__esModule", { value: true });
+webcrypto$1.isCryptoKey = void 0;
+const crypto$8 = require$$0$1;
+const util$8 = require$$1$1;
+const webcrypto = crypto$8.webcrypto;
+webcrypto$1.default = webcrypto;
+webcrypto$1.isCryptoKey = util$8.types.isCryptoKey
+ ? (key) => util$8.types.isCryptoKey(key)
+ :
+ (key) => false;
+
+var crypto_key = {};
+
+Object.defineProperty(crypto_key, "__esModule", { value: true });
+crypto_key.checkEncCryptoKey = crypto_key.checkSigCryptoKey = void 0;
+function unusable(name, prop = 'algorithm.name') {
+ return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);
+}
+function isAlgorithm(algorithm, name) {
+ return algorithm.name === name;
+}
+function getHashLength(hash) {
+ return parseInt(hash.name.slice(4), 10);
+}
+function getNamedCurve(alg) {
+ switch (alg) {
+ case 'ES256':
+ return 'P-256';
+ case 'ES384':
+ return 'P-384';
+ case 'ES512':
+ return 'P-521';
+ default:
+ throw new Error('unreachable');
+ }
+}
+function checkUsage(key, usages) {
+ if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {
+ let msg = 'CryptoKey does not support this operation, its usages must include ';
+ if (usages.length > 2) {
+ const last = usages.pop();
+ msg += `one of ${usages.join(', ')}, or ${last}.`;
+ }
+ else if (usages.length === 2) {
+ msg += `one of ${usages[0]} or ${usages[1]}.`;
+ }
+ else {
+ msg += `${usages[0]}.`;
+ }
+ throw new TypeError(msg);
+ }
+}
+function checkSigCryptoKey(key, alg, ...usages) {
+ switch (alg) {
+ case 'HS256':
+ case 'HS384':
+ case 'HS512': {
+ if (!isAlgorithm(key.algorithm, 'HMAC'))
+ throw unusable('HMAC');
+ const expected = parseInt(alg.slice(2), 10);
+ const actual = getHashLength(key.algorithm.hash);
+ if (actual !== expected)
+ throw unusable(`SHA-${expected}`, 'algorithm.hash');
+ break;
+ }
+ case 'RS256':
+ case 'RS384':
+ case 'RS512': {
+ if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))
+ throw unusable('RSASSA-PKCS1-v1_5');
+ const expected = parseInt(alg.slice(2), 10);
+ const actual = getHashLength(key.algorithm.hash);
+ if (actual !== expected)
+ throw unusable(`SHA-${expected}`, 'algorithm.hash');
+ break;
+ }
+ case 'PS256':
+ case 'PS384':
+ case 'PS512': {
+ if (!isAlgorithm(key.algorithm, 'RSA-PSS'))
+ throw unusable('RSA-PSS');
+ const expected = parseInt(alg.slice(2), 10);
+ const actual = getHashLength(key.algorithm.hash);
+ if (actual !== expected)
+ throw unusable(`SHA-${expected}`, 'algorithm.hash');
+ break;
+ }
+ case 'EdDSA': {
+ if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {
+ throw unusable('Ed25519 or Ed448');
+ }
+ break;
+ }
+ case 'ES256':
+ case 'ES384':
+ case 'ES512': {
+ if (!isAlgorithm(key.algorithm, 'ECDSA'))
+ throw unusable('ECDSA');
+ const expected = getNamedCurve(alg);
+ const actual = key.algorithm.namedCurve;
+ if (actual !== expected)
+ throw unusable(expected, 'algorithm.namedCurve');
+ break;
+ }
+ default:
+ throw new TypeError('CryptoKey does not support this operation');
+ }
+ checkUsage(key, usages);
+}
+crypto_key.checkSigCryptoKey = checkSigCryptoKey;
+function checkEncCryptoKey(key, alg, ...usages) {
+ switch (alg) {
+ case 'A128GCM':
+ case 'A192GCM':
+ case 'A256GCM': {
+ if (!isAlgorithm(key.algorithm, 'AES-GCM'))
+ throw unusable('AES-GCM');
+ const expected = parseInt(alg.slice(1, 4), 10);
+ const actual = key.algorithm.length;
+ if (actual !== expected)
+ throw unusable(expected, 'algorithm.length');
+ break;
+ }
+ case 'A128KW':
+ case 'A192KW':
+ case 'A256KW': {
+ if (!isAlgorithm(key.algorithm, 'AES-KW'))
+ throw unusable('AES-KW');
+ const expected = parseInt(alg.slice(1, 4), 10);
+ const actual = key.algorithm.length;
+ if (actual !== expected)
+ throw unusable(expected, 'algorithm.length');
+ break;
+ }
+ case 'ECDH': {
+ switch (key.algorithm.name) {
+ case 'ECDH':
+ case 'X25519':
+ case 'X448':
+ break;
+ default:
+ throw unusable('ECDH, X25519, or X448');
+ }
+ break;
+ }
+ case 'PBES2-HS256+A128KW':
+ case 'PBES2-HS384+A192KW':
+ case 'PBES2-HS512+A256KW':
+ if (!isAlgorithm(key.algorithm, 'PBKDF2'))
+ throw unusable('PBKDF2');
+ break;
+ case 'RSA-OAEP':
+ case 'RSA-OAEP-256':
+ case 'RSA-OAEP-384':
+ case 'RSA-OAEP-512': {
+ if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))
+ throw unusable('RSA-OAEP');
+ const expected = parseInt(alg.slice(9), 10) || 1;
+ const actual = getHashLength(key.algorithm.hash);
+ if (actual !== expected)
+ throw unusable(`SHA-${expected}`, 'algorithm.hash');
+ break;
+ }
+ default:
+ throw new TypeError('CryptoKey does not support this operation');
+ }
+ checkUsage(key, usages);
+}
+crypto_key.checkEncCryptoKey = checkEncCryptoKey;
+
+var invalid_key_input = {};
+
+Object.defineProperty(invalid_key_input, "__esModule", { value: true });
+invalid_key_input.withAlg = void 0;
+function message(msg, actual, ...types) {
+ if (types.length > 2) {
+ const last = types.pop();
+ msg += `one of type ${types.join(', ')}, or ${last}.`;
+ }
+ else if (types.length === 2) {
+ msg += `one of type ${types[0]} or ${types[1]}.`;
+ }
+ else {
+ msg += `of type ${types[0]}.`;
+ }
+ if (actual == null) {
+ msg += ` Received ${actual}`;
+ }
+ else if (typeof actual === 'function' && actual.name) {
+ msg += ` Received function ${actual.name}`;
+ }
+ else if (typeof actual === 'object' && actual != null) {
+ if (actual.constructor && actual.constructor.name) {
+ msg += ` Received an instance of ${actual.constructor.name}`;
+ }
+ }
+ return msg;
+}
+invalid_key_input.default = (actual, ...types) => {
+ return message('Key must be ', actual, ...types);
+};
+function withAlg(alg, actual, ...types) {
+ return message(`Key for the ${alg} algorithm must be `, actual, ...types);
+}
+invalid_key_input.withAlg = withAlg;
+
+var ciphers$1 = {};
+
+Object.defineProperty(ciphers$1, "__esModule", { value: true });
+const crypto_1$c = require$$0$1;
+let ciphers;
+ciphers$1.default = (algorithm) => {
+ ciphers || (ciphers = new Set((0, crypto_1$c.getCiphers)()));
+ return ciphers.has(algorithm);
+};
+
+var is_key_like = {};
+
+Object.defineProperty(is_key_like, "__esModule", { value: true });
+is_key_like.types = void 0;
+const webcrypto_js_1$9 = webcrypto$1;
+const is_key_object_js_1$8 = is_key_object$1;
+is_key_like.default = (key) => (0, is_key_object_js_1$8.default)(key) || (0, webcrypto_js_1$9.isCryptoKey)(key);
+const types$3 = ['KeyObject'];
+is_key_like.types = types$3;
+if (globalThis.CryptoKey || (webcrypto_js_1$9.default === null || webcrypto_js_1$9.default === void 0 ? void 0 : webcrypto_js_1$9.default.CryptoKey)) {
+ types$3.push('CryptoKey');
+}
+
+Object.defineProperty(decrypt$6, "__esModule", { value: true });
+const crypto_1$b = require$$0$1;
+const check_iv_length_js_1$1 = check_iv_length;
+const check_cek_length_js_1$1 = check_cek_length;
+const buffer_utils_js_1$h = buffer_utils;
+const errors_js_1$A = errors$3;
+const timing_safe_equal_js_1 = timing_safe_equal;
+const cbc_tag_js_1$1 = cbc_tag;
+const webcrypto_js_1$8 = webcrypto$1;
+const crypto_key_js_1$6 = crypto_key;
+const is_key_object_js_1$7 = is_key_object$1;
+const invalid_key_input_js_1$9 = invalid_key_input;
+const ciphers_js_1$2 = ciphers$1;
+const is_key_like_js_1$9 = is_key_like;
+function cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {
+ const keySize = parseInt(enc.slice(1, 4), 10);
+ if ((0, is_key_object_js_1$7.default)(cek)) {
+ cek = cek.export();
+ }
+ const encKey = cek.subarray(keySize >> 3);
+ const macKey = cek.subarray(0, keySize >> 3);
+ const macSize = parseInt(enc.slice(-3), 10);
+ const algorithm = `aes-${keySize}-cbc`;
+ if (!(0, ciphers_js_1$2.default)(algorithm)) {
+ throw new errors_js_1$A.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
+ }
+ const expectedTag = (0, cbc_tag_js_1$1.default)(aad, iv, ciphertext, macSize, macKey, keySize);
+ let macCheckPassed;
+ try {
+ macCheckPassed = (0, timing_safe_equal_js_1.default)(tag, expectedTag);
+ }
+ catch {
+ }
+ if (!macCheckPassed) {
+ throw new errors_js_1$A.JWEDecryptionFailed();
+ }
+ let plaintext;
+ try {
+ const decipher = (0, crypto_1$b.createDecipheriv)(algorithm, encKey, iv);
+ plaintext = (0, buffer_utils_js_1$h.concat)(decipher.update(ciphertext), decipher.final());
+ }
+ catch {
+ }
+ if (!plaintext) {
+ throw new errors_js_1$A.JWEDecryptionFailed();
+ }
+ return plaintext;
+}
+function gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {
+ const keySize = parseInt(enc.slice(1, 4), 10);
+ const algorithm = `aes-${keySize}-gcm`;
+ if (!(0, ciphers_js_1$2.default)(algorithm)) {
+ throw new errors_js_1$A.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
+ }
+ try {
+ const decipher = (0, crypto_1$b.createDecipheriv)(algorithm, cek, iv, { authTagLength: 16 });
+ decipher.setAuthTag(tag);
+ if (aad.byteLength) {
+ decipher.setAAD(aad, { plaintextLength: ciphertext.length });
+ }
+ const plaintext = decipher.update(ciphertext);
+ decipher.final();
+ return plaintext;
+ }
+ catch {
+ throw new errors_js_1$A.JWEDecryptionFailed();
+ }
+}
+const decrypt$5 = (enc, cek, ciphertext, iv, tag, aad) => {
+ let key;
+ if ((0, webcrypto_js_1$8.isCryptoKey)(cek)) {
+ (0, crypto_key_js_1$6.checkEncCryptoKey)(cek, enc, 'decrypt');
+ key = crypto_1$b.KeyObject.from(cek);
+ }
+ else if (cek instanceof Uint8Array || (0, is_key_object_js_1$7.default)(cek)) {
+ key = cek;
+ }
+ else {
+ throw new TypeError((0, invalid_key_input_js_1$9.default)(cek, ...is_key_like_js_1$9.types, 'Uint8Array'));
+ }
+ (0, check_cek_length_js_1$1.default)(enc, key);
+ (0, check_iv_length_js_1$1.default)(enc, iv);
+ switch (enc) {
+ case 'A128CBC-HS256':
+ case 'A192CBC-HS384':
+ case 'A256CBC-HS512':
+ return cbcDecrypt(enc, key, ciphertext, iv, tag, aad);
+ case 'A128GCM':
+ case 'A192GCM':
+ case 'A256GCM':
+ return gcmDecrypt(enc, key, ciphertext, iv, tag, aad);
+ default:
+ throw new errors_js_1$A.JOSENotSupported('Unsupported JWE Content Encryption Algorithm');
+ }
+};
+decrypt$6.default = decrypt$5;
+
+var zlib = {};
+
+Object.defineProperty(zlib, "__esModule", { value: true });
+zlib.deflate = zlib.inflate = void 0;
+const util_1$5 = require$$1$1;
+const zlib_1 = zlib$1;
+const inflateRaw = (0, util_1$5.promisify)(zlib_1.inflateRaw);
+const deflateRaw = (0, util_1$5.promisify)(zlib_1.deflateRaw);
+const inflate = (input) => inflateRaw(input);
+zlib.inflate = inflate;
+const deflate = (input) => deflateRaw(input);
+zlib.deflate = deflate;
+
+var is_disjoint = {};
+
+Object.defineProperty(is_disjoint, "__esModule", { value: true });
+const isDisjoint = (...headers) => {
+ const sources = headers.filter(Boolean);
+ if (sources.length === 0 || sources.length === 1) {
+ return true;
+ }
+ let acc;
+ for (const header of sources) {
+ const parameters = Object.keys(header);
+ if (!acc || acc.size === 0) {
+ acc = new Set(parameters);
+ continue;
+ }
+ for (const parameter of parameters) {
+ if (acc.has(parameter)) {
+ return false;
+ }
+ acc.add(parameter);
+ }
+ }
+ return true;
+};
+is_disjoint.default = isDisjoint;
+
+var is_object = {};
+
+Object.defineProperty(is_object, "__esModule", { value: true });
+function isObjectLike(value) {
+ return typeof value === 'object' && value !== null;
+}
+function isObject$2(input) {
+ if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {
+ return false;
+ }
+ if (Object.getPrototypeOf(input) === null) {
+ return true;
+ }
+ let proto = input;
+ while (Object.getPrototypeOf(proto) !== null) {
+ proto = Object.getPrototypeOf(proto);
+ }
+ return Object.getPrototypeOf(input) === proto;
+}
+is_object.default = isObject$2;
+
+var decrypt_key_management = {};
+
+var aeskw = {};
+
+Object.defineProperty(aeskw, "__esModule", { value: true });
+aeskw.unwrap = aeskw.wrap = void 0;
+const buffer_1$3 = require$$0$2;
+const crypto_1$a = require$$0$1;
+const errors_js_1$z = errors$3;
+const buffer_utils_js_1$g = buffer_utils;
+const webcrypto_js_1$7 = webcrypto$1;
+const crypto_key_js_1$5 = crypto_key;
+const is_key_object_js_1$6 = is_key_object$1;
+const invalid_key_input_js_1$8 = invalid_key_input;
+const ciphers_js_1$1 = ciphers$1;
+const is_key_like_js_1$8 = is_key_like;
+function checkKeySize(key, alg) {
+ if (key.symmetricKeySize << 3 !== parseInt(alg.slice(1, 4), 10)) {
+ throw new TypeError(`Invalid key size for alg: ${alg}`);
+ }
+}
+function ensureKeyObject$1(key, alg, usage) {
+ if ((0, is_key_object_js_1$6.default)(key)) {
+ return key;
+ }
+ if (key instanceof Uint8Array) {
+ return (0, crypto_1$a.createSecretKey)(key);
+ }
+ if ((0, webcrypto_js_1$7.isCryptoKey)(key)) {
+ (0, crypto_key_js_1$5.checkEncCryptoKey)(key, alg, usage);
+ return crypto_1$a.KeyObject.from(key);
+ }
+ throw new TypeError((0, invalid_key_input_js_1$8.default)(key, ...is_key_like_js_1$8.types, 'Uint8Array'));
+}
+const wrap$1 = (alg, key, cek) => {
+ const size = parseInt(alg.slice(1, 4), 10);
+ const algorithm = `aes${size}-wrap`;
+ if (!(0, ciphers_js_1$1.default)(algorithm)) {
+ throw new errors_js_1$z.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
+ }
+ const keyObject = ensureKeyObject$1(key, alg, 'wrapKey');
+ checkKeySize(keyObject, alg);
+ const cipher = (0, crypto_1$a.createCipheriv)(algorithm, keyObject, buffer_1$3.Buffer.alloc(8, 0xa6));
+ return (0, buffer_utils_js_1$g.concat)(cipher.update(cek), cipher.final());
+};
+aeskw.wrap = wrap$1;
+const unwrap$1 = (alg, key, encryptedKey) => {
+ const size = parseInt(alg.slice(1, 4), 10);
+ const algorithm = `aes${size}-wrap`;
+ if (!(0, ciphers_js_1$1.default)(algorithm)) {
+ throw new errors_js_1$z.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
+ }
+ const keyObject = ensureKeyObject$1(key, alg, 'unwrapKey');
+ checkKeySize(keyObject, alg);
+ const cipher = (0, crypto_1$a.createDecipheriv)(algorithm, keyObject, buffer_1$3.Buffer.alloc(8, 0xa6));
+ return (0, buffer_utils_js_1$g.concat)(cipher.update(encryptedKey), cipher.final());
+};
+aeskw.unwrap = unwrap$1;
+
+var ecdhes = {};
+
+var get_named_curve = {};
+
+(function (exports) {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.setCurve = exports.weakMap = void 0;
+ const buffer_1 = require$$0$2;
+ const crypto_1 = require$$0$1;
+ const errors_js_1 = errors$3;
+ const webcrypto_js_1 = webcrypto$1;
+ const is_key_object_js_1 = is_key_object$1;
+ const invalid_key_input_js_1 = invalid_key_input;
+ const is_key_like_js_1 = is_key_like;
+ const p256 = buffer_1.Buffer.from([42, 134, 72, 206, 61, 3, 1, 7]);
+ const p384 = buffer_1.Buffer.from([43, 129, 4, 0, 34]);
+ const p521 = buffer_1.Buffer.from([43, 129, 4, 0, 35]);
+ const secp256k1 = buffer_1.Buffer.from([43, 129, 4, 0, 10]);
+ exports.weakMap = new WeakMap();
+ const namedCurveToJOSE = (namedCurve) => {
+ switch (namedCurve) {
+ case 'prime256v1':
+ return 'P-256';
+ case 'secp384r1':
+ return 'P-384';
+ case 'secp521r1':
+ return 'P-521';
+ case 'secp256k1':
+ return 'secp256k1';
+ default:
+ throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');
+ }
+ };
+ const getNamedCurve = (kee, raw) => {
+ var _a;
+ let key;
+ if ((0, webcrypto_js_1.isCryptoKey)(kee)) {
+ key = crypto_1.KeyObject.from(kee);
+ }
+ else if ((0, is_key_object_js_1.default)(kee)) {
+ key = kee;
+ }
+ else {
+ throw new TypeError((0, invalid_key_input_js_1.default)(kee, ...is_key_like_js_1.types));
+ }
+ if (key.type === 'secret') {
+ throw new TypeError('only "private" or "public" type keys can be used for this operation');
+ }
+ switch (key.asymmetricKeyType) {
+ case 'ed25519':
+ case 'ed448':
+ return `Ed${key.asymmetricKeyType.slice(2)}`;
+ case 'x25519':
+ case 'x448':
+ return `X${key.asymmetricKeyType.slice(1)}`;
+ case 'ec': {
+ if (exports.weakMap.has(key)) {
+ return exports.weakMap.get(key);
+ }
+ let namedCurve = (_a = key.asymmetricKeyDetails) === null || _a === void 0 ? void 0 : _a.namedCurve;
+ if (!namedCurve && key.type === 'private') {
+ namedCurve = getNamedCurve((0, crypto_1.createPublicKey)(key), true);
+ }
+ else if (!namedCurve) {
+ const buf = key.export({ format: 'der', type: 'spki' });
+ const i = buf[1] < 128 ? 14 : 15;
+ const len = buf[i];
+ const curveOid = buf.slice(i + 1, i + 1 + len);
+ if (curveOid.equals(p256)) {
+ namedCurve = 'prime256v1';
+ }
+ else if (curveOid.equals(p384)) {
+ namedCurve = 'secp384r1';
+ }
+ else if (curveOid.equals(p521)) {
+ namedCurve = 'secp521r1';
+ }
+ else if (curveOid.equals(secp256k1)) {
+ namedCurve = 'secp256k1';
+ }
+ else {
+ throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');
+ }
+ }
+ if (raw)
+ return namedCurve;
+ const curve = namedCurveToJOSE(namedCurve);
+ exports.weakMap.set(key, curve);
+ return curve;
+ }
+ default:
+ throw new TypeError('Invalid asymmetric key type for this operation');
+ }
+ };
+ function setCurve(keyObject, curve) {
+ exports.weakMap.set(keyObject, curve);
+ }
+ exports.setCurve = setCurve;
+ exports.default = getNamedCurve;
+} (get_named_curve));
+
+Object.defineProperty(ecdhes, "__esModule", { value: true });
+ecdhes.ecdhAllowed = ecdhes.generateEpk = ecdhes.deriveKey = void 0;
+const crypto_1$9 = require$$0$1;
+const util_1$4 = require$$1$1;
+const get_named_curve_js_1$3 = get_named_curve;
+const buffer_utils_js_1$f = buffer_utils;
+const errors_js_1$y = errors$3;
+const webcrypto_js_1$6 = webcrypto$1;
+const crypto_key_js_1$4 = crypto_key;
+const is_key_object_js_1$5 = is_key_object$1;
+const invalid_key_input_js_1$7 = invalid_key_input;
+const is_key_like_js_1$7 = is_key_like;
+const generateKeyPair$2 = (0, util_1$4.promisify)(crypto_1$9.generateKeyPair);
+async function deriveKey(publicKee, privateKee, algorithm, keyLength, apu = new Uint8Array(0), apv = new Uint8Array(0)) {
+ let publicKey;
+ if ((0, webcrypto_js_1$6.isCryptoKey)(publicKee)) {
+ (0, crypto_key_js_1$4.checkEncCryptoKey)(publicKee, 'ECDH');
+ publicKey = crypto_1$9.KeyObject.from(publicKee);
+ }
+ else if ((0, is_key_object_js_1$5.default)(publicKee)) {
+ publicKey = publicKee;
+ }
+ else {
+ throw new TypeError((0, invalid_key_input_js_1$7.default)(publicKee, ...is_key_like_js_1$7.types));
+ }
+ let privateKey;
+ if ((0, webcrypto_js_1$6.isCryptoKey)(privateKee)) {
+ (0, crypto_key_js_1$4.checkEncCryptoKey)(privateKee, 'ECDH', 'deriveBits');
+ privateKey = crypto_1$9.KeyObject.from(privateKee);
+ }
+ else if ((0, is_key_object_js_1$5.default)(privateKee)) {
+ privateKey = privateKee;
+ }
+ else {
+ throw new TypeError((0, invalid_key_input_js_1$7.default)(privateKee, ...is_key_like_js_1$7.types));
+ }
+ const value = (0, buffer_utils_js_1$f.concat)((0, buffer_utils_js_1$f.lengthAndInput)(buffer_utils_js_1$f.encoder.encode(algorithm)), (0, buffer_utils_js_1$f.lengthAndInput)(apu), (0, buffer_utils_js_1$f.lengthAndInput)(apv), (0, buffer_utils_js_1$f.uint32be)(keyLength));
+ const sharedSecret = (0, crypto_1$9.diffieHellman)({ privateKey, publicKey });
+ return (0, buffer_utils_js_1$f.concatKdf)(sharedSecret, keyLength, value);
+}
+ecdhes.deriveKey = deriveKey;
+async function generateEpk(kee) {
+ let key;
+ if ((0, webcrypto_js_1$6.isCryptoKey)(kee)) {
+ key = crypto_1$9.KeyObject.from(kee);
+ }
+ else if ((0, is_key_object_js_1$5.default)(kee)) {
+ key = kee;
+ }
+ else {
+ throw new TypeError((0, invalid_key_input_js_1$7.default)(kee, ...is_key_like_js_1$7.types));
+ }
+ switch (key.asymmetricKeyType) {
+ case 'x25519':
+ return generateKeyPair$2('x25519');
+ case 'x448': {
+ return generateKeyPair$2('x448');
+ }
+ case 'ec': {
+ const namedCurve = (0, get_named_curve_js_1$3.default)(key);
+ return generateKeyPair$2('ec', { namedCurve });
+ }
+ default:
+ throw new errors_js_1$y.JOSENotSupported('Invalid or unsupported EPK');
+ }
+}
+ecdhes.generateEpk = generateEpk;
+const ecdhAllowed = (key) => ['P-256', 'P-384', 'P-521', 'X25519', 'X448'].includes((0, get_named_curve_js_1$3.default)(key));
+ecdhes.ecdhAllowed = ecdhAllowed;
+
+var pbes2kw = {};
+
+var check_p2s = {};
+
+Object.defineProperty(check_p2s, "__esModule", { value: true });
+const errors_js_1$x = errors$3;
+function checkP2s(p2s) {
+ if (!(p2s instanceof Uint8Array) || p2s.length < 8) {
+ throw new errors_js_1$x.JWEInvalid('PBES2 Salt Input must be 8 or more octets');
+ }
+}
+check_p2s.default = checkP2s;
+
+Object.defineProperty(pbes2kw, "__esModule", { value: true });
+pbes2kw.decrypt = pbes2kw.encrypt = void 0;
+const util_1$3 = require$$1$1;
+const crypto_1$8 = require$$0$1;
+const random_js_1$2 = random$4;
+const buffer_utils_js_1$e = buffer_utils;
+const base64url_js_1$d = base64url$9;
+const aeskw_js_1$2 = aeskw;
+const check_p2s_js_1 = check_p2s;
+const webcrypto_js_1$5 = webcrypto$1;
+const crypto_key_js_1$3 = crypto_key;
+const is_key_object_js_1$4 = is_key_object$1;
+const invalid_key_input_js_1$6 = invalid_key_input;
+const is_key_like_js_1$6 = is_key_like;
+const pbkdf2 = (0, util_1$3.promisify)(crypto_1$8.pbkdf2);
+function getPassword(key, alg) {
+ if ((0, is_key_object_js_1$4.default)(key)) {
+ return key.export();
+ }
+ if (key instanceof Uint8Array) {
+ return key;
+ }
+ if ((0, webcrypto_js_1$5.isCryptoKey)(key)) {
+ (0, crypto_key_js_1$3.checkEncCryptoKey)(key, alg, 'deriveBits', 'deriveKey');
+ return crypto_1$8.KeyObject.from(key).export();
+ }
+ throw new TypeError((0, invalid_key_input_js_1$6.default)(key, ...is_key_like_js_1$6.types, 'Uint8Array'));
+}
+const encrypt$7 = async (alg, key, cek, p2c = 2048, p2s = (0, random_js_1$2.default)(new Uint8Array(16))) => {
+ (0, check_p2s_js_1.default)(p2s);
+ const salt = (0, buffer_utils_js_1$e.p2s)(alg, p2s);
+ const keylen = parseInt(alg.slice(13, 16), 10) >> 3;
+ const password = getPassword(key, alg);
+ const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);
+ const encryptedKey = await (0, aeskw_js_1$2.wrap)(alg.slice(-6), derivedKey, cek);
+ return { encryptedKey, p2c, p2s: (0, base64url_js_1$d.encode)(p2s) };
+};
+pbes2kw.encrypt = encrypt$7;
+const decrypt$4 = async (alg, key, encryptedKey, p2c, p2s) => {
+ (0, check_p2s_js_1.default)(p2s);
+ const salt = (0, buffer_utils_js_1$e.p2s)(alg, p2s);
+ const keylen = parseInt(alg.slice(13, 16), 10) >> 3;
+ const password = getPassword(key, alg);
+ const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);
+ return (0, aeskw_js_1$2.unwrap)(alg.slice(-6), derivedKey, encryptedKey);
+};
+pbes2kw.decrypt = decrypt$4;
+
+var rsaes = {};
+
+var check_modulus_length = {};
+
+(function (exports) {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.setModulusLength = exports.weakMap = void 0;
+ exports.weakMap = new WeakMap();
+ const getLength = (buf, index) => {
+ let len = buf.readUInt8(1);
+ if ((len & 0x80) === 0) {
+ if (index === 0) {
+ return len;
+ }
+ return getLength(buf.subarray(2 + len), index - 1);
+ }
+ const num = len & 0x7f;
+ len = 0;
+ for (let i = 0; i < num; i++) {
+ len <<= 8;
+ const j = buf.readUInt8(2 + i);
+ len |= j;
+ }
+ if (index === 0) {
+ return len;
+ }
+ return getLength(buf.subarray(2 + len), index - 1);
+ };
+ const getLengthOfSeqIndex = (sequence, index) => {
+ const len = sequence.readUInt8(1);
+ if ((len & 0x80) === 0) {
+ return getLength(sequence.subarray(2), index);
+ }
+ const num = len & 0x7f;
+ return getLength(sequence.subarray(2 + num), index);
+ };
+ const getModulusLength = (key) => {
+ var _a, _b;
+ if (exports.weakMap.has(key)) {
+ return exports.weakMap.get(key);
+ }
+ const modulusLength = (_b = (_a = key.asymmetricKeyDetails) === null || _a === void 0 ? void 0 : _a.modulusLength) !== null && _b !== void 0 ? _b : (getLengthOfSeqIndex(key.export({ format: 'der', type: 'pkcs1' }), key.type === 'private' ? 1 : 0) -
+ 1) <<
+ 3;
+ exports.weakMap.set(key, modulusLength);
+ return modulusLength;
+ };
+ const setModulusLength = (keyObject, modulusLength) => {
+ exports.weakMap.set(keyObject, modulusLength);
+ };
+ exports.setModulusLength = setModulusLength;
+ exports.default = (key, alg) => {
+ if (getModulusLength(key) < 2048) {
+ throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);
+ }
+ };
+} (check_modulus_length));
+
+Object.defineProperty(rsaes, "__esModule", { value: true });
+rsaes.decrypt = rsaes.encrypt = void 0;
+const crypto_1$7 = require$$0$1;
+const check_modulus_length_js_1$3 = check_modulus_length;
+const webcrypto_js_1$4 = webcrypto$1;
+const crypto_key_js_1$2 = crypto_key;
+const is_key_object_js_1$3 = is_key_object$1;
+const invalid_key_input_js_1$5 = invalid_key_input;
+const is_key_like_js_1$5 = is_key_like;
+const checkKey = (key, alg) => {
+ if (key.asymmetricKeyType !== 'rsa') {
+ throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
+ }
+ (0, check_modulus_length_js_1$3.default)(key, alg);
+};
+const resolvePadding = (alg) => {
+ switch (alg) {
+ case 'RSA-OAEP':
+ case 'RSA-OAEP-256':
+ case 'RSA-OAEP-384':
+ case 'RSA-OAEP-512':
+ return crypto_1$7.constants.RSA_PKCS1_OAEP_PADDING;
+ case 'RSA1_5':
+ return crypto_1$7.constants.RSA_PKCS1_PADDING;
+ default:
+ return undefined;
+ }
+};
+const resolveOaepHash = (alg) => {
+ switch (alg) {
+ case 'RSA-OAEP':
+ return 'sha1';
+ case 'RSA-OAEP-256':
+ return 'sha256';
+ case 'RSA-OAEP-384':
+ return 'sha384';
+ case 'RSA-OAEP-512':
+ return 'sha512';
+ default:
+ return undefined;
+ }
+};
+function ensureKeyObject(key, alg, ...usages) {
+ if ((0, is_key_object_js_1$3.default)(key)) {
+ return key;
+ }
+ if ((0, webcrypto_js_1$4.isCryptoKey)(key)) {
+ (0, crypto_key_js_1$2.checkEncCryptoKey)(key, alg, ...usages);
+ return crypto_1$7.KeyObject.from(key);
+ }
+ throw new TypeError((0, invalid_key_input_js_1$5.default)(key, ...is_key_like_js_1$5.types));
+}
+const encrypt$6 = (alg, key, cek) => {
+ const padding = resolvePadding(alg);
+ const oaepHash = resolveOaepHash(alg);
+ const keyObject = ensureKeyObject(key, alg, 'wrapKey', 'encrypt');
+ checkKey(keyObject, alg);
+ return (0, crypto_1$7.publicEncrypt)({ key: keyObject, oaepHash, padding }, cek);
+};
+rsaes.encrypt = encrypt$6;
+const decrypt$3 = (alg, key, encryptedKey) => {
+ const padding = resolvePadding(alg);
+ const oaepHash = resolveOaepHash(alg);
+ const keyObject = ensureKeyObject(key, alg, 'unwrapKey', 'decrypt');
+ checkKey(keyObject, alg);
+ return (0, crypto_1$7.privateDecrypt)({ key: keyObject, oaepHash, padding }, encryptedKey);
+};
+rsaes.decrypt = decrypt$3;
+
+var cek = {};
+
+Object.defineProperty(cek, "__esModule", { value: true });
+cek.bitLength = void 0;
+const errors_js_1$w = errors$3;
+const random_js_1$1 = random$4;
+function bitLength(alg) {
+ switch (alg) {
+ case 'A128GCM':
+ return 128;
+ case 'A192GCM':
+ return 192;
+ case 'A256GCM':
+ case 'A128CBC-HS256':
+ return 256;
+ case 'A192CBC-HS384':
+ return 384;
+ case 'A256CBC-HS512':
+ return 512;
+ default:
+ throw new errors_js_1$w.JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
+ }
+}
+cek.bitLength = bitLength;
+cek.default = (alg) => (0, random_js_1$1.default)(new Uint8Array(bitLength(alg) >> 3));
+
+var _import = {};
+
+var asn1 = {};
+
+Object.defineProperty(asn1, "__esModule", { value: true });
+asn1.fromX509 = asn1.fromSPKI = asn1.fromPKCS8 = asn1.toPKCS8 = asn1.toSPKI = void 0;
+const crypto_1$6 = require$$0$1;
+const buffer_1$2 = require$$0$2;
+const webcrypto_js_1$3 = webcrypto$1;
+const is_key_object_js_1$2 = is_key_object$1;
+const invalid_key_input_js_1$4 = invalid_key_input;
+const is_key_like_js_1$4 = is_key_like;
+const genericExport = (keyType, keyFormat, key) => {
+ let keyObject;
+ if ((0, webcrypto_js_1$3.isCryptoKey)(key)) {
+ if (!key.extractable) {
+ throw new TypeError('CryptoKey is not extractable');
+ }
+ keyObject = crypto_1$6.KeyObject.from(key);
+ }
+ else if ((0, is_key_object_js_1$2.default)(key)) {
+ keyObject = key;
+ }
+ else {
+ throw new TypeError((0, invalid_key_input_js_1$4.default)(key, ...is_key_like_js_1$4.types));
+ }
+ if (keyObject.type !== keyType) {
+ throw new TypeError(`key is not a ${keyType} key`);
+ }
+ return keyObject.export({ format: 'pem', type: keyFormat });
+};
+const toSPKI = (key) => {
+ return genericExport('public', 'spki', key);
+};
+asn1.toSPKI = toSPKI;
+const toPKCS8 = (key) => {
+ return genericExport('private', 'pkcs8', key);
+};
+asn1.toPKCS8 = toPKCS8;
+const fromPKCS8 = (pem) => (0, crypto_1$6.createPrivateKey)({
+ key: buffer_1$2.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g, ''), 'base64'),
+ type: 'pkcs8',
+ format: 'der',
+});
+asn1.fromPKCS8 = fromPKCS8;
+const fromSPKI = (pem) => (0, crypto_1$6.createPublicKey)({
+ key: buffer_1$2.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, ''), 'base64'),
+ type: 'spki',
+ format: 'der',
+});
+asn1.fromSPKI = fromSPKI;
+const fromX509 = (pem) => (0, crypto_1$6.createPublicKey)({
+ key: pem,
+ type: 'spki',
+ format: 'pem',
+});
+asn1.fromX509 = fromX509;
+
+var jwk_to_key = {};
+
+var asn1_sequence_encoder = {};
+
+Object.defineProperty(asn1_sequence_encoder, "__esModule", { value: true });
+const buffer_1$1 = require$$0$2;
+const errors_js_1$v = errors$3;
+const tagInteger$1 = 0x02;
+const tagBitStr = 0x03;
+const tagOctStr = 0x04;
+const tagSequence$1 = 0x30;
+const bZero = buffer_1$1.Buffer.from([0x00]);
+const bTagInteger = buffer_1$1.Buffer.from([tagInteger$1]);
+const bTagBitStr = buffer_1$1.Buffer.from([tagBitStr]);
+const bTagSequence = buffer_1$1.Buffer.from([tagSequence$1]);
+const bTagOctStr = buffer_1$1.Buffer.from([tagOctStr]);
+const encodeLength = (len) => {
+ if (len < 128)
+ return buffer_1$1.Buffer.from([len]);
+ const buffer = buffer_1$1.Buffer.alloc(5);
+ buffer.writeUInt32BE(len, 1);
+ let offset = 1;
+ while (buffer[offset] === 0)
+ offset++;
+ buffer[offset - 1] = 0x80 | (5 - offset);
+ return buffer.slice(offset - 1);
+};
+const oids = new Map([
+ ['P-256', buffer_1$1.Buffer.from('06 08 2A 86 48 CE 3D 03 01 07'.replace(/ /g, ''), 'hex')],
+ ['secp256k1', buffer_1$1.Buffer.from('06 05 2B 81 04 00 0A'.replace(/ /g, ''), 'hex')],
+ ['P-384', buffer_1$1.Buffer.from('06 05 2B 81 04 00 22'.replace(/ /g, ''), 'hex')],
+ ['P-521', buffer_1$1.Buffer.from('06 05 2B 81 04 00 23'.replace(/ /g, ''), 'hex')],
+ ['ecPublicKey', buffer_1$1.Buffer.from('06 07 2A 86 48 CE 3D 02 01'.replace(/ /g, ''), 'hex')],
+ ['X25519', buffer_1$1.Buffer.from('06 03 2B 65 6E'.replace(/ /g, ''), 'hex')],
+ ['X448', buffer_1$1.Buffer.from('06 03 2B 65 6F'.replace(/ /g, ''), 'hex')],
+ ['Ed25519', buffer_1$1.Buffer.from('06 03 2B 65 70'.replace(/ /g, ''), 'hex')],
+ ['Ed448', buffer_1$1.Buffer.from('06 03 2B 65 71'.replace(/ /g, ''), 'hex')],
+]);
+class DumbAsn1Encoder {
+ constructor() {
+ this.length = 0;
+ this.elements = [];
+ }
+ oidFor(oid) {
+ const bOid = oids.get(oid);
+ if (!bOid) {
+ throw new errors_js_1$v.JOSENotSupported('Invalid or unsupported OID');
+ }
+ this.elements.push(bOid);
+ this.length += bOid.length;
+ }
+ zero() {
+ this.elements.push(bTagInteger, buffer_1$1.Buffer.from([0x01]), bZero);
+ this.length += 3;
+ }
+ one() {
+ this.elements.push(bTagInteger, buffer_1$1.Buffer.from([0x01]), buffer_1$1.Buffer.from([0x01]));
+ this.length += 3;
+ }
+ unsignedInteger(integer) {
+ if (integer[0] & 0x80) {
+ const len = encodeLength(integer.length + 1);
+ this.elements.push(bTagInteger, len, bZero, integer);
+ this.length += 2 + len.length + integer.length;
+ }
+ else {
+ let i = 0;
+ while (integer[i] === 0 && (integer[i + 1] & 0x80) === 0)
+ i++;
+ const len = encodeLength(integer.length - i);
+ this.elements.push(bTagInteger, encodeLength(integer.length - i), integer.slice(i));
+ this.length += 1 + len.length + integer.length - i;
+ }
+ }
+ octStr(octStr) {
+ const len = encodeLength(octStr.length);
+ this.elements.push(bTagOctStr, encodeLength(octStr.length), octStr);
+ this.length += 1 + len.length + octStr.length;
+ }
+ bitStr(bitS) {
+ const len = encodeLength(bitS.length + 1);
+ this.elements.push(bTagBitStr, encodeLength(bitS.length + 1), bZero, bitS);
+ this.length += 1 + len.length + bitS.length + 1;
+ }
+ add(seq) {
+ this.elements.push(seq);
+ this.length += seq.length;
+ }
+ end(tag = bTagSequence) {
+ const len = encodeLength(this.length);
+ return buffer_1$1.Buffer.concat([tag, len, ...this.elements], 1 + len.length + this.length);
+ }
+}
+asn1_sequence_encoder.default = DumbAsn1Encoder;
+
+var flags = {};
+
+Object.defineProperty(flags, "__esModule", { value: true });
+flags.jwkImport = flags.jwkExport = flags.rsaPssParams = flags.oneShotCallback = void 0;
+const [major$4, minor$4] = process.versions.node.split('.').map((str) => parseInt(str, 10));
+flags.oneShotCallback = major$4 >= 16 || (major$4 === 15 && minor$4 >= 13);
+flags.rsaPssParams = !('electron' in process.versions) && (major$4 >= 17 || (major$4 === 16 && minor$4 >= 9));
+flags.jwkExport = major$4 >= 16 || (major$4 === 15 && minor$4 >= 9);
+flags.jwkImport = major$4 >= 16 || (major$4 === 15 && minor$4 >= 12);
+
+Object.defineProperty(jwk_to_key, "__esModule", { value: true });
+const buffer_1 = require$$0$2;
+const crypto_1$5 = require$$0$1;
+const base64url_js_1$c = base64url$9;
+const errors_js_1$u = errors$3;
+const get_named_curve_js_1$2 = get_named_curve;
+const check_modulus_length_js_1$2 = check_modulus_length;
+const asn1_sequence_encoder_js_1 = asn1_sequence_encoder;
+const flags_js_1$3 = flags;
+const parse$9 = (jwk) => {
+ if (flags_js_1$3.jwkImport && jwk.kty !== 'oct') {
+ return jwk.d
+ ? (0, crypto_1$5.createPrivateKey)({ format: 'jwk', key: jwk })
+ : (0, crypto_1$5.createPublicKey)({ format: 'jwk', key: jwk });
+ }
+ switch (jwk.kty) {
+ case 'oct': {
+ return (0, crypto_1$5.createSecretKey)((0, base64url_js_1$c.decode)(jwk.k));
+ }
+ case 'RSA': {
+ const enc = new asn1_sequence_encoder_js_1.default();
+ const isPrivate = jwk.d !== undefined;
+ const modulus = buffer_1.Buffer.from(jwk.n, 'base64');
+ const exponent = buffer_1.Buffer.from(jwk.e, 'base64');
+ if (isPrivate) {
+ enc.zero();
+ enc.unsignedInteger(modulus);
+ enc.unsignedInteger(exponent);
+ enc.unsignedInteger(buffer_1.Buffer.from(jwk.d, 'base64'));
+ enc.unsignedInteger(buffer_1.Buffer.from(jwk.p, 'base64'));
+ enc.unsignedInteger(buffer_1.Buffer.from(jwk.q, 'base64'));
+ enc.unsignedInteger(buffer_1.Buffer.from(jwk.dp, 'base64'));
+ enc.unsignedInteger(buffer_1.Buffer.from(jwk.dq, 'base64'));
+ enc.unsignedInteger(buffer_1.Buffer.from(jwk.qi, 'base64'));
+ }
+ else {
+ enc.unsignedInteger(modulus);
+ enc.unsignedInteger(exponent);
+ }
+ const der = enc.end();
+ const createInput = {
+ key: der,
+ format: 'der',
+ type: 'pkcs1',
+ };
+ const keyObject = isPrivate ? (0, crypto_1$5.createPrivateKey)(createInput) : (0, crypto_1$5.createPublicKey)(createInput);
+ (0, check_modulus_length_js_1$2.setModulusLength)(keyObject, modulus.length << 3);
+ return keyObject;
+ }
+ case 'EC': {
+ const enc = new asn1_sequence_encoder_js_1.default();
+ const isPrivate = jwk.d !== undefined;
+ const pub = buffer_1.Buffer.concat([
+ buffer_1.Buffer.alloc(1, 4),
+ buffer_1.Buffer.from(jwk.x, 'base64'),
+ buffer_1.Buffer.from(jwk.y, 'base64'),
+ ]);
+ if (isPrivate) {
+ enc.zero();
+ const enc$1 = new asn1_sequence_encoder_js_1.default();
+ enc$1.oidFor('ecPublicKey');
+ enc$1.oidFor(jwk.crv);
+ enc.add(enc$1.end());
+ const enc$2 = new asn1_sequence_encoder_js_1.default();
+ enc$2.one();
+ enc$2.octStr(buffer_1.Buffer.from(jwk.d, 'base64'));
+ const enc$3 = new asn1_sequence_encoder_js_1.default();
+ enc$3.bitStr(pub);
+ const f2 = enc$3.end(buffer_1.Buffer.from([0xa1]));
+ enc$2.add(f2);
+ const f = enc$2.end();
+ const enc$4 = new asn1_sequence_encoder_js_1.default();
+ enc$4.add(f);
+ const f3 = enc$4.end(buffer_1.Buffer.from([0x04]));
+ enc.add(f3);
+ const der = enc.end();
+ const keyObject = (0, crypto_1$5.createPrivateKey)({ key: der, format: 'der', type: 'pkcs8' });
+ (0, get_named_curve_js_1$2.setCurve)(keyObject, jwk.crv);
+ return keyObject;
+ }
+ const enc$1 = new asn1_sequence_encoder_js_1.default();
+ enc$1.oidFor('ecPublicKey');
+ enc$1.oidFor(jwk.crv);
+ enc.add(enc$1.end());
+ enc.bitStr(pub);
+ const der = enc.end();
+ const keyObject = (0, crypto_1$5.createPublicKey)({ key: der, format: 'der', type: 'spki' });
+ (0, get_named_curve_js_1$2.setCurve)(keyObject, jwk.crv);
+ return keyObject;
+ }
+ case 'OKP': {
+ const enc = new asn1_sequence_encoder_js_1.default();
+ const isPrivate = jwk.d !== undefined;
+ if (isPrivate) {
+ enc.zero();
+ const enc$1 = new asn1_sequence_encoder_js_1.default();
+ enc$1.oidFor(jwk.crv);
+ enc.add(enc$1.end());
+ const enc$2 = new asn1_sequence_encoder_js_1.default();
+ enc$2.octStr(buffer_1.Buffer.from(jwk.d, 'base64'));
+ const f = enc$2.end(buffer_1.Buffer.from([0x04]));
+ enc.add(f);
+ const der = enc.end();
+ return (0, crypto_1$5.createPrivateKey)({ key: der, format: 'der', type: 'pkcs8' });
+ }
+ const enc$1 = new asn1_sequence_encoder_js_1.default();
+ enc$1.oidFor(jwk.crv);
+ enc.add(enc$1.end());
+ enc.bitStr(buffer_1.Buffer.from(jwk.x, 'base64'));
+ const der = enc.end();
+ return (0, crypto_1$5.createPublicKey)({ key: der, format: 'der', type: 'spki' });
+ }
+ default:
+ throw new errors_js_1$u.JOSENotSupported('Invalid or unsupported JWK "kty" (Key Type) Parameter value');
+ }
+};
+jwk_to_key.default = parse$9;
+
+Object.defineProperty(_import, "__esModule", { value: true });
+_import.importJWK = _import.importPKCS8 = _import.importX509 = _import.importSPKI = void 0;
+const base64url_js_1$b = base64url$9;
+const asn1_js_1$1 = asn1;
+const jwk_to_key_js_1 = jwk_to_key;
+const errors_js_1$t = errors$3;
+const is_object_js_1$c = is_object;
+async function importSPKI(spki, alg, options) {
+ if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {
+ throw new TypeError('"spki" must be SPKI formatted string');
+ }
+ return (0, asn1_js_1$1.fromSPKI)(spki, alg, options);
+}
+_import.importSPKI = importSPKI;
+async function importX509(x509, alg, options) {
+ if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {
+ throw new TypeError('"x509" must be X.509 formatted string');
+ }
+ return (0, asn1_js_1$1.fromX509)(x509, alg, options);
+}
+_import.importX509 = importX509;
+async function importPKCS8(pkcs8, alg, options) {
+ if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {
+ throw new TypeError('"pkcs8" must be PKCS#8 formatted string');
+ }
+ return (0, asn1_js_1$1.fromPKCS8)(pkcs8, alg, options);
+}
+_import.importPKCS8 = importPKCS8;
+async function importJWK(jwk, alg, octAsKeyObject) {
+ var _a;
+ if (!(0, is_object_js_1$c.default)(jwk)) {
+ throw new TypeError('JWK must be an object');
+ }
+ alg || (alg = jwk.alg);
+ switch (jwk.kty) {
+ case 'oct':
+ if (typeof jwk.k !== 'string' || !jwk.k) {
+ throw new TypeError('missing "k" (Key Value) Parameter value');
+ }
+ octAsKeyObject !== null && octAsKeyObject !== void 0 ? octAsKeyObject : (octAsKeyObject = jwk.ext !== true);
+ if (octAsKeyObject) {
+ return (0, jwk_to_key_js_1.default)({ ...jwk, alg, ext: (_a = jwk.ext) !== null && _a !== void 0 ? _a : false });
+ }
+ return (0, base64url_js_1$b.decode)(jwk.k);
+ case 'RSA':
+ if (jwk.oth !== undefined) {
+ throw new errors_js_1$t.JOSENotSupported('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');
+ }
+ case 'EC':
+ case 'OKP':
+ return (0, jwk_to_key_js_1.default)({ ...jwk, alg });
+ default:
+ throw new errors_js_1$t.JOSENotSupported('Unsupported "kty" (Key Type) Parameter value');
+ }
+}
+_import.importJWK = importJWK;
+
+var check_key_type = {};
+
+Object.defineProperty(check_key_type, "__esModule", { value: true });
+const invalid_key_input_js_1$3 = invalid_key_input;
+const is_key_like_js_1$3 = is_key_like;
+const symmetricTypeCheck = (alg, key) => {
+ if (key instanceof Uint8Array)
+ return;
+ if (!(0, is_key_like_js_1$3.default)(key)) {
+ throw new TypeError((0, invalid_key_input_js_1$3.withAlg)(alg, key, ...is_key_like_js_1$3.types, 'Uint8Array'));
+ }
+ if (key.type !== 'secret') {
+ throw new TypeError(`${is_key_like_js_1$3.types.join(' or ')} instances for symmetric algorithms must be of type "secret"`);
+ }
+};
+const asymmetricTypeCheck = (alg, key, usage) => {
+ if (!(0, is_key_like_js_1$3.default)(key)) {
+ throw new TypeError((0, invalid_key_input_js_1$3.withAlg)(alg, key, ...is_key_like_js_1$3.types));
+ }
+ if (key.type === 'secret') {
+ throw new TypeError(`${is_key_like_js_1$3.types.join(' or ')} instances for asymmetric algorithms must not be of type "secret"`);
+ }
+ if (usage === 'sign' && key.type === 'public') {
+ throw new TypeError(`${is_key_like_js_1$3.types.join(' or ')} instances for asymmetric algorithm signing must be of type "private"`);
+ }
+ if (usage === 'decrypt' && key.type === 'public') {
+ throw new TypeError(`${is_key_like_js_1$3.types.join(' or ')} instances for asymmetric algorithm decryption must be of type "private"`);
+ }
+ if (key.algorithm && usage === 'verify' && key.type === 'private') {
+ throw new TypeError(`${is_key_like_js_1$3.types.join(' or ')} instances for asymmetric algorithm verifying must be of type "public"`);
+ }
+ if (key.algorithm && usage === 'encrypt' && key.type === 'private') {
+ throw new TypeError(`${is_key_like_js_1$3.types.join(' or ')} instances for asymmetric algorithm encryption must be of type "public"`);
+ }
+};
+const checkKeyType = (alg, key, usage) => {
+ const symmetric = alg.startsWith('HS') ||
+ alg === 'dir' ||
+ alg.startsWith('PBES2') ||
+ /^A\d{3}(?:GCM)?KW$/.test(alg);
+ if (symmetric) {
+ symmetricTypeCheck(alg, key);
+ }
+ else {
+ asymmetricTypeCheck(alg, key, usage);
+ }
+};
+check_key_type.default = checkKeyType;
+
+var aesgcmkw = {};
+
+var encrypt$5 = {};
+
+Object.defineProperty(encrypt$5, "__esModule", { value: true });
+const crypto_1$4 = require$$0$1;
+const check_iv_length_js_1 = check_iv_length;
+const check_cek_length_js_1 = check_cek_length;
+const buffer_utils_js_1$d = buffer_utils;
+const cbc_tag_js_1 = cbc_tag;
+const webcrypto_js_1$2 = webcrypto$1;
+const crypto_key_js_1$1 = crypto_key;
+const is_key_object_js_1$1 = is_key_object$1;
+const invalid_key_input_js_1$2 = invalid_key_input;
+const errors_js_1$s = errors$3;
+const ciphers_js_1 = ciphers$1;
+const is_key_like_js_1$2 = is_key_like;
+function cbcEncrypt(enc, plaintext, cek, iv, aad) {
+ const keySize = parseInt(enc.slice(1, 4), 10);
+ if ((0, is_key_object_js_1$1.default)(cek)) {
+ cek = cek.export();
+ }
+ const encKey = cek.subarray(keySize >> 3);
+ const macKey = cek.subarray(0, keySize >> 3);
+ const algorithm = `aes-${keySize}-cbc`;
+ if (!(0, ciphers_js_1.default)(algorithm)) {
+ throw new errors_js_1$s.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
+ }
+ const cipher = (0, crypto_1$4.createCipheriv)(algorithm, encKey, iv);
+ const ciphertext = (0, buffer_utils_js_1$d.concat)(cipher.update(plaintext), cipher.final());
+ const macSize = parseInt(enc.slice(-3), 10);
+ const tag = (0, cbc_tag_js_1.default)(aad, iv, ciphertext, macSize, macKey, keySize);
+ return { ciphertext, tag };
+}
+function gcmEncrypt(enc, plaintext, cek, iv, aad) {
+ const keySize = parseInt(enc.slice(1, 4), 10);
+ const algorithm = `aes-${keySize}-gcm`;
+ if (!(0, ciphers_js_1.default)(algorithm)) {
+ throw new errors_js_1$s.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
+ }
+ const cipher = (0, crypto_1$4.createCipheriv)(algorithm, cek, iv, { authTagLength: 16 });
+ if (aad.byteLength) {
+ cipher.setAAD(aad, { plaintextLength: plaintext.length });
+ }
+ const ciphertext = cipher.update(plaintext);
+ cipher.final();
+ const tag = cipher.getAuthTag();
+ return { ciphertext, tag };
+}
+const encrypt$4 = (enc, plaintext, cek, iv, aad) => {
+ let key;
+ if ((0, webcrypto_js_1$2.isCryptoKey)(cek)) {
+ (0, crypto_key_js_1$1.checkEncCryptoKey)(cek, enc, 'encrypt');
+ key = crypto_1$4.KeyObject.from(cek);
+ }
+ else if (cek instanceof Uint8Array || (0, is_key_object_js_1$1.default)(cek)) {
+ key = cek;
+ }
+ else {
+ throw new TypeError((0, invalid_key_input_js_1$2.default)(cek, ...is_key_like_js_1$2.types, 'Uint8Array'));
+ }
+ (0, check_cek_length_js_1.default)(enc, key);
+ (0, check_iv_length_js_1.default)(enc, iv);
+ switch (enc) {
+ case 'A128CBC-HS256':
+ case 'A192CBC-HS384':
+ case 'A256CBC-HS512':
+ return cbcEncrypt(enc, plaintext, key, iv, aad);
+ case 'A128GCM':
+ case 'A192GCM':
+ case 'A256GCM':
+ return gcmEncrypt(enc, plaintext, key, iv, aad);
+ default:
+ throw new errors_js_1$s.JOSENotSupported('Unsupported JWE Content Encryption Algorithm');
+ }
+};
+encrypt$5.default = encrypt$4;
+
+Object.defineProperty(aesgcmkw, "__esModule", { value: true });
+aesgcmkw.unwrap = aesgcmkw.wrap = void 0;
+const encrypt_js_1$3 = encrypt$5;
+const decrypt_js_1$4 = decrypt$6;
+const iv_js_1 = iv;
+const base64url_js_1$a = base64url$9;
+async function wrap(alg, key, cek, iv) {
+ const jweAlgorithm = alg.slice(0, 7);
+ iv || (iv = (0, iv_js_1.default)(jweAlgorithm));
+ const { ciphertext: encryptedKey, tag } = await (0, encrypt_js_1$3.default)(jweAlgorithm, cek, key, iv, new Uint8Array(0));
+ return { encryptedKey, iv: (0, base64url_js_1$a.encode)(iv), tag: (0, base64url_js_1$a.encode)(tag) };
+}
+aesgcmkw.wrap = wrap;
+async function unwrap(alg, key, encryptedKey, iv, tag) {
+ const jweAlgorithm = alg.slice(0, 7);
+ return (0, decrypt_js_1$4.default)(jweAlgorithm, key, encryptedKey, iv, tag, new Uint8Array(0));
+}
+aesgcmkw.unwrap = unwrap;
+
+Object.defineProperty(decrypt_key_management, "__esModule", { value: true });
+const aeskw_js_1$1 = aeskw;
+const ECDH$1 = ecdhes;
+const pbes2kw_js_1$1 = pbes2kw;
+const rsaes_js_1$1 = rsaes;
+const base64url_js_1$9 = base64url$9;
+const errors_js_1$r = errors$3;
+const cek_js_1$3 = cek;
+const import_js_1$2 = _import;
+const check_key_type_js_1$3 = check_key_type;
+const is_object_js_1$b = is_object;
+const aesgcmkw_js_1$1 = aesgcmkw;
+async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options) {
+ (0, check_key_type_js_1$3.default)(alg, key, 'decrypt');
+ switch (alg) {
+ case 'dir': {
+ if (encryptedKey !== undefined)
+ throw new errors_js_1$r.JWEInvalid('Encountered unexpected JWE Encrypted Key');
+ return key;
+ }
+ case 'ECDH-ES':
+ if (encryptedKey !== undefined)
+ throw new errors_js_1$r.JWEInvalid('Encountered unexpected JWE Encrypted Key');
+ case 'ECDH-ES+A128KW':
+ case 'ECDH-ES+A192KW':
+ case 'ECDH-ES+A256KW': {
+ if (!(0, is_object_js_1$b.default)(joseHeader.epk))
+ throw new errors_js_1$r.JWEInvalid(`JOSE Header "epk" (Ephemeral Public Key) missing or invalid`);
+ if (!ECDH$1.ecdhAllowed(key))
+ throw new errors_js_1$r.JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');
+ const epk = await (0, import_js_1$2.importJWK)(joseHeader.epk, alg);
+ let partyUInfo;
+ let partyVInfo;
+ if (joseHeader.apu !== undefined) {
+ if (typeof joseHeader.apu !== 'string')
+ throw new errors_js_1$r.JWEInvalid(`JOSE Header "apu" (Agreement PartyUInfo) invalid`);
+ partyUInfo = (0, base64url_js_1$9.decode)(joseHeader.apu);
+ }
+ if (joseHeader.apv !== undefined) {
+ if (typeof joseHeader.apv !== 'string')
+ throw new errors_js_1$r.JWEInvalid(`JOSE Header "apv" (Agreement PartyVInfo) invalid`);
+ partyVInfo = (0, base64url_js_1$9.decode)(joseHeader.apv);
+ }
+ const sharedSecret = await ECDH$1.deriveKey(epk, key, alg === 'ECDH-ES' ? joseHeader.enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1$3.bitLength)(joseHeader.enc) : parseInt(alg.slice(-5, -2), 10), partyUInfo, partyVInfo);
+ if (alg === 'ECDH-ES')
+ return sharedSecret;
+ if (encryptedKey === undefined)
+ throw new errors_js_1$r.JWEInvalid('JWE Encrypted Key missing');
+ return (0, aeskw_js_1$1.unwrap)(alg.slice(-6), sharedSecret, encryptedKey);
+ }
+ case 'RSA1_5':
+ case 'RSA-OAEP':
+ case 'RSA-OAEP-256':
+ case 'RSA-OAEP-384':
+ case 'RSA-OAEP-512': {
+ if (encryptedKey === undefined)
+ throw new errors_js_1$r.JWEInvalid('JWE Encrypted Key missing');
+ return (0, rsaes_js_1$1.decrypt)(alg, key, encryptedKey);
+ }
+ case 'PBES2-HS256+A128KW':
+ case 'PBES2-HS384+A192KW':
+ case 'PBES2-HS512+A256KW': {
+ if (encryptedKey === undefined)
+ throw new errors_js_1$r.JWEInvalid('JWE Encrypted Key missing');
+ if (typeof joseHeader.p2c !== 'number')
+ throw new errors_js_1$r.JWEInvalid(`JOSE Header "p2c" (PBES2 Count) missing or invalid`);
+ const p2cLimit = (options === null || options === void 0 ? void 0 : options.maxPBES2Count) || 10000;
+ if (joseHeader.p2c > p2cLimit)
+ throw new errors_js_1$r.JWEInvalid(`JOSE Header "p2c" (PBES2 Count) out is of acceptable bounds`);
+ if (typeof joseHeader.p2s !== 'string')
+ throw new errors_js_1$r.JWEInvalid(`JOSE Header "p2s" (PBES2 Salt) missing or invalid`);
+ return (0, pbes2kw_js_1$1.decrypt)(alg, key, encryptedKey, joseHeader.p2c, (0, base64url_js_1$9.decode)(joseHeader.p2s));
+ }
+ case 'A128KW':
+ case 'A192KW':
+ case 'A256KW': {
+ if (encryptedKey === undefined)
+ throw new errors_js_1$r.JWEInvalid('JWE Encrypted Key missing');
+ return (0, aeskw_js_1$1.unwrap)(alg, key, encryptedKey);
+ }
+ case 'A128GCMKW':
+ case 'A192GCMKW':
+ case 'A256GCMKW': {
+ if (encryptedKey === undefined)
+ throw new errors_js_1$r.JWEInvalid('JWE Encrypted Key missing');
+ if (typeof joseHeader.iv !== 'string')
+ throw new errors_js_1$r.JWEInvalid(`JOSE Header "iv" (Initialization Vector) missing or invalid`);
+ if (typeof joseHeader.tag !== 'string')
+ throw new errors_js_1$r.JWEInvalid(`JOSE Header "tag" (Authentication Tag) missing or invalid`);
+ const iv = (0, base64url_js_1$9.decode)(joseHeader.iv);
+ const tag = (0, base64url_js_1$9.decode)(joseHeader.tag);
+ return (0, aesgcmkw_js_1$1.unwrap)(alg, key, encryptedKey, iv, tag);
+ }
+ default: {
+ throw new errors_js_1$r.JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value');
+ }
+ }
+}
+decrypt_key_management.default = decryptKeyManagement;
+
+var validate_crit = {};
+
+Object.defineProperty(validate_crit, "__esModule", { value: true });
+const errors_js_1$q = errors$3;
+function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {
+ if (joseHeader.crit !== undefined && protectedHeader.crit === undefined) {
+ throw new Err('"crit" (Critical) Header Parameter MUST be integrity protected');
+ }
+ if (!protectedHeader || protectedHeader.crit === undefined) {
+ return new Set();
+ }
+ if (!Array.isArray(protectedHeader.crit) ||
+ protectedHeader.crit.length === 0 ||
+ protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {
+ throw new Err('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');
+ }
+ let recognized;
+ if (recognizedOption !== undefined) {
+ recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);
+ }
+ else {
+ recognized = recognizedDefault;
+ }
+ for (const parameter of protectedHeader.crit) {
+ if (!recognized.has(parameter)) {
+ throw new errors_js_1$q.JOSENotSupported(`Extension Header Parameter "${parameter}" is not recognized`);
+ }
+ if (joseHeader[parameter] === undefined) {
+ throw new Err(`Extension Header Parameter "${parameter}" is missing`);
+ }
+ else if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {
+ throw new Err(`Extension Header Parameter "${parameter}" MUST be integrity protected`);
+ }
+ }
+ return new Set(protectedHeader.crit);
+}
+validate_crit.default = validateCrit;
+
+var validate_algorithms = {};
+
+Object.defineProperty(validate_algorithms, "__esModule", { value: true });
+const validateAlgorithms = (option, algorithms) => {
+ if (algorithms !== undefined &&
+ (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {
+ throw new TypeError(`"${option}" option must be an array of strings`);
+ }
+ if (!algorithms) {
+ return undefined;
+ }
+ return new Set(algorithms);
+};
+validate_algorithms.default = validateAlgorithms;
+
+Object.defineProperty(decrypt$7, "__esModule", { value: true });
+decrypt$7.flattenedDecrypt = void 0;
+const base64url_js_1$8 = base64url$9;
+const decrypt_js_1$3 = decrypt$6;
+const zlib_js_1 = zlib;
+const errors_js_1$p = errors$3;
+const is_disjoint_js_1$3 = is_disjoint;
+const is_object_js_1$a = is_object;
+const decrypt_key_management_js_1 = decrypt_key_management;
+const buffer_utils_js_1$c = buffer_utils;
+const cek_js_1$2 = cek;
+const validate_crit_js_1$3 = validate_crit;
+const validate_algorithms_js_1$1 = validate_algorithms;
+async function flattenedDecrypt(jwe, key, options) {
+ var _a;
+ if (!(0, is_object_js_1$a.default)(jwe)) {
+ throw new errors_js_1$p.JWEInvalid('Flattened JWE must be an object');
+ }
+ if (jwe.protected === undefined && jwe.header === undefined && jwe.unprotected === undefined) {
+ throw new errors_js_1$p.JWEInvalid('JOSE Header missing');
+ }
+ if (typeof jwe.iv !== 'string') {
+ throw new errors_js_1$p.JWEInvalid('JWE Initialization Vector missing or incorrect type');
+ }
+ if (typeof jwe.ciphertext !== 'string') {
+ throw new errors_js_1$p.JWEInvalid('JWE Ciphertext missing or incorrect type');
+ }
+ if (typeof jwe.tag !== 'string') {
+ throw new errors_js_1$p.JWEInvalid('JWE Authentication Tag missing or incorrect type');
+ }
+ if (jwe.protected !== undefined && typeof jwe.protected !== 'string') {
+ throw new errors_js_1$p.JWEInvalid('JWE Protected Header incorrect type');
+ }
+ if (jwe.encrypted_key !== undefined && typeof jwe.encrypted_key !== 'string') {
+ throw new errors_js_1$p.JWEInvalid('JWE Encrypted Key incorrect type');
+ }
+ if (jwe.aad !== undefined && typeof jwe.aad !== 'string') {
+ throw new errors_js_1$p.JWEInvalid('JWE AAD incorrect type');
+ }
+ if (jwe.header !== undefined && !(0, is_object_js_1$a.default)(jwe.header)) {
+ throw new errors_js_1$p.JWEInvalid('JWE Shared Unprotected Header incorrect type');
+ }
+ if (jwe.unprotected !== undefined && !(0, is_object_js_1$a.default)(jwe.unprotected)) {
+ throw new errors_js_1$p.JWEInvalid('JWE Per-Recipient Unprotected Header incorrect type');
+ }
+ let parsedProt;
+ if (jwe.protected) {
+ try {
+ const protectedHeader = (0, base64url_js_1$8.decode)(jwe.protected);
+ parsedProt = JSON.parse(buffer_utils_js_1$c.decoder.decode(protectedHeader));
+ }
+ catch {
+ throw new errors_js_1$p.JWEInvalid('JWE Protected Header is invalid');
+ }
+ }
+ if (!(0, is_disjoint_js_1$3.default)(parsedProt, jwe.header, jwe.unprotected)) {
+ throw new errors_js_1$p.JWEInvalid('JWE Protected, JWE Unprotected Header, and JWE Per-Recipient Unprotected Header Parameter names must be disjoint');
+ }
+ const joseHeader = {
+ ...parsedProt,
+ ...jwe.header,
+ ...jwe.unprotected,
+ };
+ (0, validate_crit_js_1$3.default)(errors_js_1$p.JWEInvalid, new Map(), options === null || options === void 0 ? void 0 : options.crit, parsedProt, joseHeader);
+ if (joseHeader.zip !== undefined) {
+ if (!parsedProt || !parsedProt.zip) {
+ throw new errors_js_1$p.JWEInvalid('JWE "zip" (Compression Algorithm) Header MUST be integrity protected');
+ }
+ if (joseHeader.zip !== 'DEF') {
+ throw new errors_js_1$p.JOSENotSupported('Unsupported JWE "zip" (Compression Algorithm) Header Parameter value');
+ }
+ }
+ const { alg, enc } = joseHeader;
+ if (typeof alg !== 'string' || !alg) {
+ throw new errors_js_1$p.JWEInvalid('missing JWE Algorithm (alg) in JWE Header');
+ }
+ if (typeof enc !== 'string' || !enc) {
+ throw new errors_js_1$p.JWEInvalid('missing JWE Encryption Algorithm (enc) in JWE Header');
+ }
+ const keyManagementAlgorithms = options && (0, validate_algorithms_js_1$1.default)('keyManagementAlgorithms', options.keyManagementAlgorithms);
+ const contentEncryptionAlgorithms = options &&
+ (0, validate_algorithms_js_1$1.default)('contentEncryptionAlgorithms', options.contentEncryptionAlgorithms);
+ if (keyManagementAlgorithms && !keyManagementAlgorithms.has(alg)) {
+ throw new errors_js_1$p.JOSEAlgNotAllowed('"alg" (Algorithm) Header Parameter not allowed');
+ }
+ if (contentEncryptionAlgorithms && !contentEncryptionAlgorithms.has(enc)) {
+ throw new errors_js_1$p.JOSEAlgNotAllowed('"enc" (Encryption Algorithm) Header Parameter not allowed');
+ }
+ let encryptedKey;
+ if (jwe.encrypted_key !== undefined) {
+ encryptedKey = (0, base64url_js_1$8.decode)(jwe.encrypted_key);
+ }
+ let resolvedKey = false;
+ if (typeof key === 'function') {
+ key = await key(parsedProt, jwe);
+ resolvedKey = true;
+ }
+ let cek;
+ try {
+ cek = await (0, decrypt_key_management_js_1.default)(alg, key, encryptedKey, joseHeader, options);
+ }
+ catch (err) {
+ if (err instanceof TypeError || err instanceof errors_js_1$p.JWEInvalid || err instanceof errors_js_1$p.JOSENotSupported) {
+ throw err;
+ }
+ cek = (0, cek_js_1$2.default)(enc);
+ }
+ const iv = (0, base64url_js_1$8.decode)(jwe.iv);
+ const tag = (0, base64url_js_1$8.decode)(jwe.tag);
+ const protectedHeader = buffer_utils_js_1$c.encoder.encode((_a = jwe.protected) !== null && _a !== void 0 ? _a : '');
+ let additionalData;
+ if (jwe.aad !== undefined) {
+ additionalData = (0, buffer_utils_js_1$c.concat)(protectedHeader, buffer_utils_js_1$c.encoder.encode('.'), buffer_utils_js_1$c.encoder.encode(jwe.aad));
+ }
+ else {
+ additionalData = protectedHeader;
+ }
+ let plaintext = await (0, decrypt_js_1$3.default)(enc, cek, (0, base64url_js_1$8.decode)(jwe.ciphertext), iv, tag, additionalData);
+ if (joseHeader.zip === 'DEF') {
+ plaintext = await ((options === null || options === void 0 ? void 0 : options.inflateRaw) || zlib_js_1.inflate)(plaintext);
+ }
+ const result = { plaintext };
+ if (jwe.protected !== undefined) {
+ result.protectedHeader = parsedProt;
+ }
+ if (jwe.aad !== undefined) {
+ result.additionalAuthenticatedData = (0, base64url_js_1$8.decode)(jwe.aad);
+ }
+ if (jwe.unprotected !== undefined) {
+ result.sharedUnprotectedHeader = jwe.unprotected;
+ }
+ if (jwe.header !== undefined) {
+ result.unprotectedHeader = jwe.header;
+ }
+ if (resolvedKey) {
+ return { ...result, key };
+ }
+ return result;
+}
+decrypt$7.flattenedDecrypt = flattenedDecrypt;
+
+Object.defineProperty(decrypt$8, "__esModule", { value: true });
+decrypt$8.compactDecrypt = void 0;
+const decrypt_js_1$2 = decrypt$7;
+const errors_js_1$o = errors$3;
+const buffer_utils_js_1$b = buffer_utils;
+async function compactDecrypt(jwe, key, options) {
+ if (jwe instanceof Uint8Array) {
+ jwe = buffer_utils_js_1$b.decoder.decode(jwe);
+ }
+ if (typeof jwe !== 'string') {
+ throw new errors_js_1$o.JWEInvalid('Compact JWE must be a string or Uint8Array');
+ }
+ const { 0: protectedHeader, 1: encryptedKey, 2: iv, 3: ciphertext, 4: tag, length, } = jwe.split('.');
+ if (length !== 5) {
+ throw new errors_js_1$o.JWEInvalid('Invalid Compact JWE');
+ }
+ const decrypted = await (0, decrypt_js_1$2.flattenedDecrypt)({
+ ciphertext,
+ iv: (iv || undefined),
+ protected: protectedHeader || undefined,
+ tag: (tag || undefined),
+ encrypted_key: encryptedKey || undefined,
+ }, key, options);
+ const result = { plaintext: decrypted.plaintext, protectedHeader: decrypted.protectedHeader };
+ if (typeof key === 'function') {
+ return { ...result, key: decrypted.key };
+ }
+ return result;
+}
+decrypt$8.compactDecrypt = compactDecrypt;
+
+var decrypt$2 = {};
+
+Object.defineProperty(decrypt$2, "__esModule", { value: true });
+decrypt$2.generalDecrypt = void 0;
+const decrypt_js_1$1 = decrypt$7;
+const errors_js_1$n = errors$3;
+const is_object_js_1$9 = is_object;
+async function generalDecrypt(jwe, key, options) {
+ if (!(0, is_object_js_1$9.default)(jwe)) {
+ throw new errors_js_1$n.JWEInvalid('General JWE must be an object');
+ }
+ if (!Array.isArray(jwe.recipients) || !jwe.recipients.every(is_object_js_1$9.default)) {
+ throw new errors_js_1$n.JWEInvalid('JWE Recipients missing or incorrect type');
+ }
+ if (!jwe.recipients.length) {
+ throw new errors_js_1$n.JWEInvalid('JWE Recipients has no members');
+ }
+ for (const recipient of jwe.recipients) {
+ try {
+ return await (0, decrypt_js_1$1.flattenedDecrypt)({
+ aad: jwe.aad,
+ ciphertext: jwe.ciphertext,
+ encrypted_key: recipient.encrypted_key,
+ header: recipient.header,
+ iv: jwe.iv,
+ protected: jwe.protected,
+ tag: jwe.tag,
+ unprotected: jwe.unprotected,
+ }, key, options);
+ }
+ catch {
+ }
+ }
+ throw new errors_js_1$n.JWEDecryptionFailed();
+}
+decrypt$2.generalDecrypt = generalDecrypt;
+
+var encrypt$3 = {};
+
+var encrypt$2 = {};
+
+var encrypt_key_management = {};
+
+var _export = {};
+
+var key_to_jwk = {};
+
+var asn1_sequence_decoder = {};
+
+Object.defineProperty(asn1_sequence_decoder, "__esModule", { value: true });
+const tagInteger = 0x02;
+const tagSequence = 0x30;
+class Asn1SequenceDecoder {
+ constructor(buffer) {
+ if (buffer[0] !== tagSequence) {
+ throw new TypeError();
+ }
+ this.buffer = buffer;
+ this.offset = 1;
+ const len = this.decodeLength();
+ if (len !== buffer.length - this.offset) {
+ throw new TypeError();
+ }
+ }
+ decodeLength() {
+ let length = this.buffer[this.offset++];
+ if (length & 0x80) {
+ const nBytes = length & ~0x80;
+ length = 0;
+ for (let i = 0; i < nBytes; i++)
+ length = (length << 8) | this.buffer[this.offset + i];
+ this.offset += nBytes;
+ }
+ return length;
+ }
+ unsignedInteger() {
+ if (this.buffer[this.offset++] !== tagInteger) {
+ throw new TypeError();
+ }
+ let length = this.decodeLength();
+ if (this.buffer[this.offset] === 0) {
+ this.offset++;
+ length--;
+ }
+ const result = this.buffer.slice(this.offset, this.offset + length);
+ this.offset += length;
+ return result;
+ }
+ end() {
+ if (this.offset !== this.buffer.length) {
+ throw new TypeError();
+ }
+ }
+}
+asn1_sequence_decoder.default = Asn1SequenceDecoder;
+
+Object.defineProperty(key_to_jwk, "__esModule", { value: true });
+const crypto_1$3 = require$$0$1;
+const base64url_js_1$7 = base64url$9;
+const asn1_sequence_decoder_js_1 = asn1_sequence_decoder;
+const errors_js_1$m = errors$3;
+const get_named_curve_js_1$1 = get_named_curve;
+const webcrypto_js_1$1 = webcrypto$1;
+const is_key_object_js_1 = is_key_object$1;
+const invalid_key_input_js_1$1 = invalid_key_input;
+const is_key_like_js_1$1 = is_key_like;
+const flags_js_1$2 = flags;
+const keyToJWK = (key) => {
+ let keyObject;
+ if ((0, webcrypto_js_1$1.isCryptoKey)(key)) {
+ if (!key.extractable) {
+ throw new TypeError('CryptoKey is not extractable');
+ }
+ keyObject = crypto_1$3.KeyObject.from(key);
+ }
+ else if ((0, is_key_object_js_1.default)(key)) {
+ keyObject = key;
+ }
+ else if (key instanceof Uint8Array) {
+ return {
+ kty: 'oct',
+ k: (0, base64url_js_1$7.encode)(key),
+ };
+ }
+ else {
+ throw new TypeError((0, invalid_key_input_js_1$1.default)(key, ...is_key_like_js_1$1.types, 'Uint8Array'));
+ }
+ if (flags_js_1$2.jwkExport) {
+ if (keyObject.type !== 'secret' &&
+ !['rsa', 'ec', 'ed25519', 'x25519', 'ed448', 'x448'].includes(keyObject.asymmetricKeyType)) {
+ throw new errors_js_1$m.JOSENotSupported('Unsupported key asymmetricKeyType');
+ }
+ return keyObject.export({ format: 'jwk' });
+ }
+ switch (keyObject.type) {
+ case 'secret':
+ return {
+ kty: 'oct',
+ k: (0, base64url_js_1$7.encode)(keyObject.export()),
+ };
+ case 'private':
+ case 'public': {
+ switch (keyObject.asymmetricKeyType) {
+ case 'rsa': {
+ const der = keyObject.export({ format: 'der', type: 'pkcs1' });
+ const dec = new asn1_sequence_decoder_js_1.default(der);
+ if (keyObject.type === 'private') {
+ dec.unsignedInteger();
+ }
+ const n = (0, base64url_js_1$7.encode)(dec.unsignedInteger());
+ const e = (0, base64url_js_1$7.encode)(dec.unsignedInteger());
+ let jwk;
+ if (keyObject.type === 'private') {
+ jwk = {
+ d: (0, base64url_js_1$7.encode)(dec.unsignedInteger()),
+ p: (0, base64url_js_1$7.encode)(dec.unsignedInteger()),
+ q: (0, base64url_js_1$7.encode)(dec.unsignedInteger()),
+ dp: (0, base64url_js_1$7.encode)(dec.unsignedInteger()),
+ dq: (0, base64url_js_1$7.encode)(dec.unsignedInteger()),
+ qi: (0, base64url_js_1$7.encode)(dec.unsignedInteger()),
+ };
+ }
+ dec.end();
+ return { kty: 'RSA', n, e, ...jwk };
+ }
+ case 'ec': {
+ const crv = (0, get_named_curve_js_1$1.default)(keyObject);
+ let len;
+ let offset;
+ let correction;
+ switch (crv) {
+ case 'secp256k1':
+ len = 64;
+ offset = 31 + 2;
+ correction = -1;
+ break;
+ case 'P-256':
+ len = 64;
+ offset = 34 + 2;
+ correction = -1;
+ break;
+ case 'P-384':
+ len = 96;
+ offset = 33 + 2;
+ correction = -3;
+ break;
+ case 'P-521':
+ len = 132;
+ offset = 33 + 2;
+ correction = -3;
+ break;
+ default:
+ throw new errors_js_1$m.JOSENotSupported('Unsupported curve');
+ }
+ if (keyObject.type === 'public') {
+ const der = keyObject.export({ type: 'spki', format: 'der' });
+ return {
+ kty: 'EC',
+ crv,
+ x: (0, base64url_js_1$7.encode)(der.subarray(-len, -len / 2)),
+ y: (0, base64url_js_1$7.encode)(der.subarray(-len / 2)),
+ };
+ }
+ const der = keyObject.export({ type: 'pkcs8', format: 'der' });
+ if (der.length < 100) {
+ offset += correction;
+ }
+ return {
+ ...keyToJWK((0, crypto_1$3.createPublicKey)(keyObject)),
+ d: (0, base64url_js_1$7.encode)(der.subarray(offset, offset + len / 2)),
+ };
+ }
+ case 'ed25519':
+ case 'x25519': {
+ const crv = (0, get_named_curve_js_1$1.default)(keyObject);
+ if (keyObject.type === 'public') {
+ const der = keyObject.export({ type: 'spki', format: 'der' });
+ return {
+ kty: 'OKP',
+ crv,
+ x: (0, base64url_js_1$7.encode)(der.subarray(-32)),
+ };
+ }
+ const der = keyObject.export({ type: 'pkcs8', format: 'der' });
+ return {
+ ...keyToJWK((0, crypto_1$3.createPublicKey)(keyObject)),
+ d: (0, base64url_js_1$7.encode)(der.subarray(-32)),
+ };
+ }
+ case 'ed448':
+ case 'x448': {
+ const crv = (0, get_named_curve_js_1$1.default)(keyObject);
+ if (keyObject.type === 'public') {
+ const der = keyObject.export({ type: 'spki', format: 'der' });
+ return {
+ kty: 'OKP',
+ crv,
+ x: (0, base64url_js_1$7.encode)(der.subarray(crv === 'Ed448' ? -57 : -56)),
+ };
+ }
+ const der = keyObject.export({ type: 'pkcs8', format: 'der' });
+ return {
+ ...keyToJWK((0, crypto_1$3.createPublicKey)(keyObject)),
+ d: (0, base64url_js_1$7.encode)(der.subarray(crv === 'Ed448' ? -57 : -56)),
+ };
+ }
+ default:
+ throw new errors_js_1$m.JOSENotSupported('Unsupported key asymmetricKeyType');
+ }
+ }
+ default:
+ throw new errors_js_1$m.JOSENotSupported('Unsupported key type');
+ }
+};
+key_to_jwk.default = keyToJWK;
+
+Object.defineProperty(_export, "__esModule", { value: true });
+_export.exportJWK = _export.exportPKCS8 = _export.exportSPKI = void 0;
+const asn1_js_1 = asn1;
+const asn1_js_2 = asn1;
+const key_to_jwk_js_1 = key_to_jwk;
+async function exportSPKI(key) {
+ return (0, asn1_js_1.toSPKI)(key);
+}
+_export.exportSPKI = exportSPKI;
+async function exportPKCS8(key) {
+ return (0, asn1_js_2.toPKCS8)(key);
+}
+_export.exportPKCS8 = exportPKCS8;
+async function exportJWK(key) {
+ return (0, key_to_jwk_js_1.default)(key);
+}
+_export.exportJWK = exportJWK;
+
+Object.defineProperty(encrypt_key_management, "__esModule", { value: true });
+const aeskw_js_1 = aeskw;
+const ECDH = ecdhes;
+const pbes2kw_js_1 = pbes2kw;
+const rsaes_js_1 = rsaes;
+const base64url_js_1$6 = base64url$9;
+const cek_js_1$1 = cek;
+const errors_js_1$l = errors$3;
+const export_js_1 = _export;
+const check_key_type_js_1$2 = check_key_type;
+const aesgcmkw_js_1 = aesgcmkw;
+async function encryptKeyManagement(alg, enc, key, providedCek, providedParameters = {}) {
+ let encryptedKey;
+ let parameters;
+ let cek;
+ (0, check_key_type_js_1$2.default)(alg, key, 'encrypt');
+ switch (alg) {
+ case 'dir': {
+ cek = key;
+ break;
+ }
+ case 'ECDH-ES':
+ case 'ECDH-ES+A128KW':
+ case 'ECDH-ES+A192KW':
+ case 'ECDH-ES+A256KW': {
+ if (!ECDH.ecdhAllowed(key)) {
+ throw new errors_js_1$l.JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');
+ }
+ const { apu, apv } = providedParameters;
+ let { epk: ephemeralKey } = providedParameters;
+ ephemeralKey || (ephemeralKey = (await ECDH.generateEpk(key)).privateKey);
+ const { x, y, crv, kty } = await (0, export_js_1.exportJWK)(ephemeralKey);
+ const sharedSecret = await ECDH.deriveKey(key, ephemeralKey, alg === 'ECDH-ES' ? enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1$1.bitLength)(enc) : parseInt(alg.slice(-5, -2), 10), apu, apv);
+ parameters = { epk: { x, crv, kty } };
+ if (kty === 'EC')
+ parameters.epk.y = y;
+ if (apu)
+ parameters.apu = (0, base64url_js_1$6.encode)(apu);
+ if (apv)
+ parameters.apv = (0, base64url_js_1$6.encode)(apv);
+ if (alg === 'ECDH-ES') {
+ cek = sharedSecret;
+ break;
+ }
+ cek = providedCek || (0, cek_js_1$1.default)(enc);
+ const kwAlg = alg.slice(-6);
+ encryptedKey = await (0, aeskw_js_1.wrap)(kwAlg, sharedSecret, cek);
+ break;
+ }
+ case 'RSA1_5':
+ case 'RSA-OAEP':
+ case 'RSA-OAEP-256':
+ case 'RSA-OAEP-384':
+ case 'RSA-OAEP-512': {
+ cek = providedCek || (0, cek_js_1$1.default)(enc);
+ encryptedKey = await (0, rsaes_js_1.encrypt)(alg, key, cek);
+ break;
+ }
+ case 'PBES2-HS256+A128KW':
+ case 'PBES2-HS384+A192KW':
+ case 'PBES2-HS512+A256KW': {
+ cek = providedCek || (0, cek_js_1$1.default)(enc);
+ const { p2c, p2s } = providedParameters;
+ ({ encryptedKey, ...parameters } = await (0, pbes2kw_js_1.encrypt)(alg, key, cek, p2c, p2s));
+ break;
+ }
+ case 'A128KW':
+ case 'A192KW':
+ case 'A256KW': {
+ cek = providedCek || (0, cek_js_1$1.default)(enc);
+ encryptedKey = await (0, aeskw_js_1.wrap)(alg, key, cek);
+ break;
+ }
+ case 'A128GCMKW':
+ case 'A192GCMKW':
+ case 'A256GCMKW': {
+ cek = providedCek || (0, cek_js_1$1.default)(enc);
+ const { iv } = providedParameters;
+ ({ encryptedKey, ...parameters } = await (0, aesgcmkw_js_1.wrap)(alg, key, cek, iv));
+ break;
+ }
+ default: {
+ throw new errors_js_1$l.JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value');
+ }
+ }
+ return { cek, encryptedKey, parameters };
+}
+encrypt_key_management.default = encryptKeyManagement;
+
+(function (exports) {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.FlattenedEncrypt = exports.unprotected = void 0;
+ const base64url_js_1 = base64url$9;
+ const encrypt_js_1 = encrypt$5;
+ const zlib_js_1 = zlib;
+ const iv_js_1 = iv;
+ const encrypt_key_management_js_1 = encrypt_key_management;
+ const errors_js_1 = errors$3;
+ const is_disjoint_js_1 = is_disjoint;
+ const buffer_utils_js_1 = buffer_utils;
+ const validate_crit_js_1 = validate_crit;
+ exports.unprotected = Symbol();
+ class FlattenedEncrypt {
+ constructor(plaintext) {
+ if (!(plaintext instanceof Uint8Array)) {
+ throw new TypeError('plaintext must be an instance of Uint8Array');
+ }
+ this._plaintext = plaintext;
+ }
+ setKeyManagementParameters(parameters) {
+ if (this._keyManagementParameters) {
+ throw new TypeError('setKeyManagementParameters can only be called once');
+ }
+ this._keyManagementParameters = parameters;
+ return this;
+ }
+ setProtectedHeader(protectedHeader) {
+ if (this._protectedHeader) {
+ throw new TypeError('setProtectedHeader can only be called once');
+ }
+ this._protectedHeader = protectedHeader;
+ return this;
+ }
+ setSharedUnprotectedHeader(sharedUnprotectedHeader) {
+ if (this._sharedUnprotectedHeader) {
+ throw new TypeError('setSharedUnprotectedHeader can only be called once');
+ }
+ this._sharedUnprotectedHeader = sharedUnprotectedHeader;
+ return this;
+ }
+ setUnprotectedHeader(unprotectedHeader) {
+ if (this._unprotectedHeader) {
+ throw new TypeError('setUnprotectedHeader can only be called once');
+ }
+ this._unprotectedHeader = unprotectedHeader;
+ return this;
+ }
+ setAdditionalAuthenticatedData(aad) {
+ this._aad = aad;
+ return this;
+ }
+ setContentEncryptionKey(cek) {
+ if (this._cek) {
+ throw new TypeError('setContentEncryptionKey can only be called once');
+ }
+ this._cek = cek;
+ return this;
+ }
+ setInitializationVector(iv) {
+ if (this._iv) {
+ throw new TypeError('setInitializationVector can only be called once');
+ }
+ this._iv = iv;
+ return this;
+ }
+ async encrypt(key, options) {
+ if (!this._protectedHeader && !this._unprotectedHeader && !this._sharedUnprotectedHeader) {
+ throw new errors_js_1.JWEInvalid('either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()');
+ }
+ if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader, this._sharedUnprotectedHeader)) {
+ throw new errors_js_1.JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');
+ }
+ const joseHeader = {
+ ...this._protectedHeader,
+ ...this._unprotectedHeader,
+ ...this._sharedUnprotectedHeader,
+ };
+ (0, validate_crit_js_1.default)(errors_js_1.JWEInvalid, new Map(), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);
+ if (joseHeader.zip !== undefined) {
+ if (!this._protectedHeader || !this._protectedHeader.zip) {
+ throw new errors_js_1.JWEInvalid('JWE "zip" (Compression Algorithm) Header MUST be integrity protected');
+ }
+ if (joseHeader.zip !== 'DEF') {
+ throw new errors_js_1.JOSENotSupported('Unsupported JWE "zip" (Compression Algorithm) Header Parameter value');
+ }
+ }
+ const { alg, enc } = joseHeader;
+ if (typeof alg !== 'string' || !alg) {
+ throw new errors_js_1.JWEInvalid('JWE "alg" (Algorithm) Header Parameter missing or invalid');
+ }
+ if (typeof enc !== 'string' || !enc) {
+ throw new errors_js_1.JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter missing or invalid');
+ }
+ let encryptedKey;
+ if (alg === 'dir') {
+ if (this._cek) {
+ throw new TypeError('setContentEncryptionKey cannot be called when using Direct Encryption');
+ }
+ }
+ else if (alg === 'ECDH-ES') {
+ if (this._cek) {
+ throw new TypeError('setContentEncryptionKey cannot be called when using Direct Key Agreement');
+ }
+ }
+ let cek;
+ {
+ let parameters;
+ ({ cek, encryptedKey, parameters } = await (0, encrypt_key_management_js_1.default)(alg, enc, key, this._cek, this._keyManagementParameters));
+ if (parameters) {
+ if (options && exports.unprotected in options) {
+ if (!this._unprotectedHeader) {
+ this.setUnprotectedHeader(parameters);
+ }
+ else {
+ this._unprotectedHeader = { ...this._unprotectedHeader, ...parameters };
+ }
+ }
+ else {
+ if (!this._protectedHeader) {
+ this.setProtectedHeader(parameters);
+ }
+ else {
+ this._protectedHeader = { ...this._protectedHeader, ...parameters };
+ }
+ }
+ }
+ }
+ this._iv || (this._iv = (0, iv_js_1.default)(enc));
+ let additionalData;
+ let protectedHeader;
+ let aadMember;
+ if (this._protectedHeader) {
+ protectedHeader = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(JSON.stringify(this._protectedHeader)));
+ }
+ else {
+ protectedHeader = buffer_utils_js_1.encoder.encode('');
+ }
+ if (this._aad) {
+ aadMember = (0, base64url_js_1.encode)(this._aad);
+ additionalData = (0, buffer_utils_js_1.concat)(protectedHeader, buffer_utils_js_1.encoder.encode('.'), buffer_utils_js_1.encoder.encode(aadMember));
+ }
+ else {
+ additionalData = protectedHeader;
+ }
+ let ciphertext;
+ let tag;
+ if (joseHeader.zip === 'DEF') {
+ const deflated = await ((options === null || options === void 0 ? void 0 : options.deflateRaw) || zlib_js_1.deflate)(this._plaintext);
+ ({ ciphertext, tag } = await (0, encrypt_js_1.default)(enc, deflated, cek, this._iv, additionalData));
+ }
+ else {
+ ({ ciphertext, tag } = await (0, encrypt_js_1.default)(enc, this._plaintext, cek, this._iv, additionalData));
+ }
+ const jwe = {
+ ciphertext: (0, base64url_js_1.encode)(ciphertext),
+ iv: (0, base64url_js_1.encode)(this._iv),
+ tag: (0, base64url_js_1.encode)(tag),
+ };
+ if (encryptedKey) {
+ jwe.encrypted_key = (0, base64url_js_1.encode)(encryptedKey);
+ }
+ if (aadMember) {
+ jwe.aad = aadMember;
+ }
+ if (this._protectedHeader) {
+ jwe.protected = buffer_utils_js_1.decoder.decode(protectedHeader);
+ }
+ if (this._sharedUnprotectedHeader) {
+ jwe.unprotected = this._sharedUnprotectedHeader;
+ }
+ if (this._unprotectedHeader) {
+ jwe.header = this._unprotectedHeader;
+ }
+ return jwe;
+ }
+ }
+ exports.FlattenedEncrypt = FlattenedEncrypt;
+} (encrypt$2));
+
+Object.defineProperty(encrypt$3, "__esModule", { value: true });
+encrypt$3.GeneralEncrypt = void 0;
+const encrypt_js_1$2 = encrypt$2;
+const errors_js_1$k = errors$3;
+const cek_js_1 = cek;
+const is_disjoint_js_1$2 = is_disjoint;
+const encrypt_key_management_js_1 = encrypt_key_management;
+const base64url_js_1$5 = base64url$9;
+const validate_crit_js_1$2 = validate_crit;
+class IndividualRecipient {
+ constructor(enc, key, options) {
+ this.parent = enc;
+ this.key = key;
+ this.options = options;
+ }
+ setUnprotectedHeader(unprotectedHeader) {
+ if (this.unprotectedHeader) {
+ throw new TypeError('setUnprotectedHeader can only be called once');
+ }
+ this.unprotectedHeader = unprotectedHeader;
+ return this;
+ }
+ addRecipient(...args) {
+ return this.parent.addRecipient(...args);
+ }
+ encrypt(...args) {
+ return this.parent.encrypt(...args);
+ }
+ done() {
+ return this.parent;
+ }
+}
+class GeneralEncrypt {
+ constructor(plaintext) {
+ this._recipients = [];
+ this._plaintext = plaintext;
+ }
+ addRecipient(key, options) {
+ const recipient = new IndividualRecipient(this, key, { crit: options === null || options === void 0 ? void 0 : options.crit });
+ this._recipients.push(recipient);
+ return recipient;
+ }
+ setProtectedHeader(protectedHeader) {
+ if (this._protectedHeader) {
+ throw new TypeError('setProtectedHeader can only be called once');
+ }
+ this._protectedHeader = protectedHeader;
+ return this;
+ }
+ setSharedUnprotectedHeader(sharedUnprotectedHeader) {
+ if (this._unprotectedHeader) {
+ throw new TypeError('setSharedUnprotectedHeader can only be called once');
+ }
+ this._unprotectedHeader = sharedUnprotectedHeader;
+ return this;
+ }
+ setAdditionalAuthenticatedData(aad) {
+ this._aad = aad;
+ return this;
+ }
+ async encrypt(options) {
+ var _a, _b, _c;
+ if (!this._recipients.length) {
+ throw new errors_js_1$k.JWEInvalid('at least one recipient must be added');
+ }
+ options = { deflateRaw: options === null || options === void 0 ? void 0 : options.deflateRaw };
+ if (this._recipients.length === 1) {
+ const [recipient] = this._recipients;
+ const flattened = await new encrypt_js_1$2.FlattenedEncrypt(this._plaintext)
+ .setAdditionalAuthenticatedData(this._aad)
+ .setProtectedHeader(this._protectedHeader)
+ .setSharedUnprotectedHeader(this._unprotectedHeader)
+ .setUnprotectedHeader(recipient.unprotectedHeader)
+ .encrypt(recipient.key, { ...recipient.options, ...options });
+ let jwe = {
+ ciphertext: flattened.ciphertext,
+ iv: flattened.iv,
+ recipients: [{}],
+ tag: flattened.tag,
+ };
+ if (flattened.aad)
+ jwe.aad = flattened.aad;
+ if (flattened.protected)
+ jwe.protected = flattened.protected;
+ if (flattened.unprotected)
+ jwe.unprotected = flattened.unprotected;
+ if (flattened.encrypted_key)
+ jwe.recipients[0].encrypted_key = flattened.encrypted_key;
+ if (flattened.header)
+ jwe.recipients[0].header = flattened.header;
+ return jwe;
+ }
+ let enc;
+ for (let i = 0; i < this._recipients.length; i++) {
+ const recipient = this._recipients[i];
+ if (!(0, is_disjoint_js_1$2.default)(this._protectedHeader, this._unprotectedHeader, recipient.unprotectedHeader)) {
+ throw new errors_js_1$k.JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');
+ }
+ const joseHeader = {
+ ...this._protectedHeader,
+ ...this._unprotectedHeader,
+ ...recipient.unprotectedHeader,
+ };
+ const { alg } = joseHeader;
+ if (typeof alg !== 'string' || !alg) {
+ throw new errors_js_1$k.JWEInvalid('JWE "alg" (Algorithm) Header Parameter missing or invalid');
+ }
+ if (alg === 'dir' || alg === 'ECDH-ES') {
+ throw new errors_js_1$k.JWEInvalid('"dir" and "ECDH-ES" alg may only be used with a single recipient');
+ }
+ if (typeof joseHeader.enc !== 'string' || !joseHeader.enc) {
+ throw new errors_js_1$k.JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter missing or invalid');
+ }
+ if (!enc) {
+ enc = joseHeader.enc;
+ }
+ else if (enc !== joseHeader.enc) {
+ throw new errors_js_1$k.JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter must be the same for all recipients');
+ }
+ (0, validate_crit_js_1$2.default)(errors_js_1$k.JWEInvalid, new Map(), recipient.options.crit, this._protectedHeader, joseHeader);
+ if (joseHeader.zip !== undefined) {
+ if (!this._protectedHeader || !this._protectedHeader.zip) {
+ throw new errors_js_1$k.JWEInvalid('JWE "zip" (Compression Algorithm) Header MUST be integrity protected');
+ }
+ }
+ }
+ const cek = (0, cek_js_1.default)(enc);
+ let jwe = {
+ ciphertext: '',
+ iv: '',
+ recipients: [],
+ tag: '',
+ };
+ for (let i = 0; i < this._recipients.length; i++) {
+ const recipient = this._recipients[i];
+ const target = {};
+ jwe.recipients.push(target);
+ const joseHeader = {
+ ...this._protectedHeader,
+ ...this._unprotectedHeader,
+ ...recipient.unprotectedHeader,
+ };
+ const p2c = joseHeader.alg.startsWith('PBES2') ? 2048 + i : undefined;
+ if (i === 0) {
+ const flattened = await new encrypt_js_1$2.FlattenedEncrypt(this._plaintext)
+ .setAdditionalAuthenticatedData(this._aad)
+ .setContentEncryptionKey(cek)
+ .setProtectedHeader(this._protectedHeader)
+ .setSharedUnprotectedHeader(this._unprotectedHeader)
+ .setUnprotectedHeader(recipient.unprotectedHeader)
+ .setKeyManagementParameters({ p2c })
+ .encrypt(recipient.key, {
+ ...recipient.options,
+ ...options,
+ [encrypt_js_1$2.unprotected]: true,
+ });
+ jwe.ciphertext = flattened.ciphertext;
+ jwe.iv = flattened.iv;
+ jwe.tag = flattened.tag;
+ if (flattened.aad)
+ jwe.aad = flattened.aad;
+ if (flattened.protected)
+ jwe.protected = flattened.protected;
+ if (flattened.unprotected)
+ jwe.unprotected = flattened.unprotected;
+ target.encrypted_key = flattened.encrypted_key;
+ if (flattened.header)
+ target.header = flattened.header;
+ continue;
+ }
+ const { encryptedKey, parameters } = await (0, encrypt_key_management_js_1.default)(((_a = recipient.unprotectedHeader) === null || _a === void 0 ? void 0 : _a.alg) ||
+ ((_b = this._protectedHeader) === null || _b === void 0 ? void 0 : _b.alg) ||
+ ((_c = this._unprotectedHeader) === null || _c === void 0 ? void 0 : _c.alg), enc, recipient.key, cek, { p2c });
+ target.encrypted_key = (0, base64url_js_1$5.encode)(encryptedKey);
+ if (recipient.unprotectedHeader || parameters)
+ target.header = { ...recipient.unprotectedHeader, ...parameters };
+ }
+ return jwe;
+ }
+}
+encrypt$3.GeneralEncrypt = GeneralEncrypt;
+
+var verify$6 = {};
+
+var verify$5 = {};
+
+var verify$4 = {};
+
+var dsa_digest = {};
+
+Object.defineProperty(dsa_digest, "__esModule", { value: true });
+const errors_js_1$j = errors$3;
+function dsaDigest(alg) {
+ switch (alg) {
+ case 'PS256':
+ case 'RS256':
+ case 'ES256':
+ case 'ES256K':
+ return 'sha256';
+ case 'PS384':
+ case 'RS384':
+ case 'ES384':
+ return 'sha384';
+ case 'PS512':
+ case 'RS512':
+ case 'ES512':
+ return 'sha512';
+ case 'EdDSA':
+ return undefined;
+ default:
+ throw new errors_js_1$j.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
+ }
+}
+dsa_digest.default = dsaDigest;
+
+var node_key = {};
+
+Object.defineProperty(node_key, "__esModule", { value: true });
+const crypto_1$2 = require$$0$1;
+const get_named_curve_js_1 = get_named_curve;
+const errors_js_1$i = errors$3;
+const check_modulus_length_js_1$1 = check_modulus_length;
+const flags_js_1$1 = flags;
+const PSS = {
+ padding: crypto_1$2.constants.RSA_PKCS1_PSS_PADDING,
+ saltLength: crypto_1$2.constants.RSA_PSS_SALTLEN_DIGEST,
+};
+const ecCurveAlgMap = new Map([
+ ['ES256', 'P-256'],
+ ['ES256K', 'secp256k1'],
+ ['ES384', 'P-384'],
+ ['ES512', 'P-521'],
+]);
+function keyForCrypto(alg, key) {
+ switch (alg) {
+ case 'EdDSA':
+ if (!['ed25519', 'ed448'].includes(key.asymmetricKeyType)) {
+ throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ed25519 or ed448');
+ }
+ return key;
+ case 'RS256':
+ case 'RS384':
+ case 'RS512':
+ if (key.asymmetricKeyType !== 'rsa') {
+ throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
+ }
+ (0, check_modulus_length_js_1$1.default)(key, alg);
+ return key;
+ case flags_js_1$1.rsaPssParams && 'PS256':
+ case flags_js_1$1.rsaPssParams && 'PS384':
+ case flags_js_1$1.rsaPssParams && 'PS512':
+ if (key.asymmetricKeyType === 'rsa-pss') {
+ const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = key.asymmetricKeyDetails;
+ const length = parseInt(alg.slice(-3), 10);
+ if (hashAlgorithm !== undefined &&
+ (hashAlgorithm !== `sha${length}` || mgf1HashAlgorithm !== hashAlgorithm)) {
+ throw new TypeError(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of "alg" ${alg}`);
+ }
+ if (saltLength !== undefined && saltLength > length >> 3) {
+ throw new TypeError(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of "alg" ${alg}`);
+ }
+ }
+ else if (key.asymmetricKeyType !== 'rsa') {
+ throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa or rsa-pss');
+ }
+ (0, check_modulus_length_js_1$1.default)(key, alg);
+ return { key, ...PSS };
+ case !flags_js_1$1.rsaPssParams && 'PS256':
+ case !flags_js_1$1.rsaPssParams && 'PS384':
+ case !flags_js_1$1.rsaPssParams && 'PS512':
+ if (key.asymmetricKeyType !== 'rsa') {
+ throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
+ }
+ (0, check_modulus_length_js_1$1.default)(key, alg);
+ return { key, ...PSS };
+ case 'ES256':
+ case 'ES256K':
+ case 'ES384':
+ case 'ES512': {
+ if (key.asymmetricKeyType !== 'ec') {
+ throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ec');
+ }
+ const actual = (0, get_named_curve_js_1.default)(key);
+ const expected = ecCurveAlgMap.get(alg);
+ if (actual !== expected) {
+ throw new TypeError(`Invalid key curve for the algorithm, its curve must be ${expected}, got ${actual}`);
+ }
+ return { dsaEncoding: 'ieee-p1363', key };
+ }
+ default:
+ throw new errors_js_1$i.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
+ }
+}
+node_key.default = keyForCrypto;
+
+var sign$6 = {};
+
+var hmac_digest = {};
+
+Object.defineProperty(hmac_digest, "__esModule", { value: true });
+const errors_js_1$h = errors$3;
+function hmacDigest(alg) {
+ switch (alg) {
+ case 'HS256':
+ return 'sha256';
+ case 'HS384':
+ return 'sha384';
+ case 'HS512':
+ return 'sha512';
+ default:
+ throw new errors_js_1$h.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
+ }
+}
+hmac_digest.default = hmacDigest;
+
+var get_sign_verify_key = {};
+
+Object.defineProperty(get_sign_verify_key, "__esModule", { value: true });
+const crypto_1$1 = require$$0$1;
+const webcrypto_js_1 = webcrypto$1;
+const crypto_key_js_1 = crypto_key;
+const invalid_key_input_js_1 = invalid_key_input;
+const is_key_like_js_1 = is_key_like;
+function getSignVerifyKey(alg, key, usage) {
+ if (key instanceof Uint8Array) {
+ if (!alg.startsWith('HS')) {
+ throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));
+ }
+ return (0, crypto_1$1.createSecretKey)(key);
+ }
+ if (key instanceof crypto_1$1.KeyObject) {
+ return key;
+ }
+ if ((0, webcrypto_js_1.isCryptoKey)(key)) {
+ (0, crypto_key_js_1.checkSigCryptoKey)(key, alg, usage);
+ return crypto_1$1.KeyObject.from(key);
+ }
+ throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));
+}
+get_sign_verify_key.default = getSignVerifyKey;
+
+Object.defineProperty(sign$6, "__esModule", { value: true });
+const crypto$7 = require$$0$1;
+const util_1$2 = require$$1$1;
+const dsa_digest_js_1$1 = dsa_digest;
+const hmac_digest_js_1 = hmac_digest;
+const node_key_js_1$1 = node_key;
+const get_sign_verify_key_js_1$1 = get_sign_verify_key;
+let oneShotSign;
+if (crypto$7.sign.length > 3) {
+ oneShotSign = (0, util_1$2.promisify)(crypto$7.sign);
+}
+else {
+ oneShotSign = crypto$7.sign;
+}
+const sign$5 = async (alg, key, data) => {
+ const keyObject = (0, get_sign_verify_key_js_1$1.default)(alg, key, 'sign');
+ if (alg.startsWith('HS')) {
+ const hmac = crypto$7.createHmac((0, hmac_digest_js_1.default)(alg), keyObject);
+ hmac.update(data);
+ return hmac.digest();
+ }
+ return oneShotSign((0, dsa_digest_js_1$1.default)(alg), data, (0, node_key_js_1$1.default)(alg, keyObject));
+};
+sign$6.default = sign$5;
+
+Object.defineProperty(verify$4, "__esModule", { value: true });
+const crypto$6 = require$$0$1;
+const util_1$1 = require$$1$1;
+const dsa_digest_js_1 = dsa_digest;
+const node_key_js_1 = node_key;
+const sign_js_1$4 = sign$6;
+const get_sign_verify_key_js_1 = get_sign_verify_key;
+const flags_js_1 = flags;
+let oneShotVerify;
+if (crypto$6.verify.length > 4 && flags_js_1.oneShotCallback) {
+ oneShotVerify = (0, util_1$1.promisify)(crypto$6.verify);
+}
+else {
+ oneShotVerify = crypto$6.verify;
+}
+const verify$3 = async (alg, key, signature, data) => {
+ const keyObject = (0, get_sign_verify_key_js_1.default)(alg, key, 'verify');
+ if (alg.startsWith('HS')) {
+ const expected = await (0, sign_js_1$4.default)(alg, keyObject, data);
+ const actual = signature;
+ try {
+ return crypto$6.timingSafeEqual(actual, expected);
+ }
+ catch {
+ return false;
+ }
+ }
+ const algorithm = (0, dsa_digest_js_1.default)(alg);
+ const keyInput = (0, node_key_js_1.default)(alg, keyObject);
+ try {
+ return await oneShotVerify(algorithm, data, keyInput, signature);
+ }
+ catch {
+ return false;
+ }
+};
+verify$4.default = verify$3;
+
+Object.defineProperty(verify$5, "__esModule", { value: true });
+verify$5.flattenedVerify = void 0;
+const base64url_js_1$4 = base64url$9;
+const verify_js_1$3 = verify$4;
+const errors_js_1$g = errors$3;
+const buffer_utils_js_1$a = buffer_utils;
+const is_disjoint_js_1$1 = is_disjoint;
+const is_object_js_1$8 = is_object;
+const check_key_type_js_1$1 = check_key_type;
+const validate_crit_js_1$1 = validate_crit;
+const validate_algorithms_js_1 = validate_algorithms;
+async function flattenedVerify(jws, key, options) {
+ var _a;
+ if (!(0, is_object_js_1$8.default)(jws)) {
+ throw new errors_js_1$g.JWSInvalid('Flattened JWS must be an object');
+ }
+ if (jws.protected === undefined && jws.header === undefined) {
+ throw new errors_js_1$g.JWSInvalid('Flattened JWS must have either of the "protected" or "header" members');
+ }
+ if (jws.protected !== undefined && typeof jws.protected !== 'string') {
+ throw new errors_js_1$g.JWSInvalid('JWS Protected Header incorrect type');
+ }
+ if (jws.payload === undefined) {
+ throw new errors_js_1$g.JWSInvalid('JWS Payload missing');
+ }
+ if (typeof jws.signature !== 'string') {
+ throw new errors_js_1$g.JWSInvalid('JWS Signature missing or incorrect type');
+ }
+ if (jws.header !== undefined && !(0, is_object_js_1$8.default)(jws.header)) {
+ throw new errors_js_1$g.JWSInvalid('JWS Unprotected Header incorrect type');
+ }
+ let parsedProt = {};
+ if (jws.protected) {
+ try {
+ const protectedHeader = (0, base64url_js_1$4.decode)(jws.protected);
+ parsedProt = JSON.parse(buffer_utils_js_1$a.decoder.decode(protectedHeader));
+ }
+ catch {
+ throw new errors_js_1$g.JWSInvalid('JWS Protected Header is invalid');
+ }
+ }
+ if (!(0, is_disjoint_js_1$1.default)(parsedProt, jws.header)) {
+ throw new errors_js_1$g.JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');
+ }
+ const joseHeader = {
+ ...parsedProt,
+ ...jws.header,
+ };
+ const extensions = (0, validate_crit_js_1$1.default)(errors_js_1$g.JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, parsedProt, joseHeader);
+ let b64 = true;
+ if (extensions.has('b64')) {
+ b64 = parsedProt.b64;
+ if (typeof b64 !== 'boolean') {
+ throw new errors_js_1$g.JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean');
+ }
+ }
+ const { alg } = joseHeader;
+ if (typeof alg !== 'string' || !alg) {
+ throw new errors_js_1$g.JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');
+ }
+ const algorithms = options && (0, validate_algorithms_js_1.default)('algorithms', options.algorithms);
+ if (algorithms && !algorithms.has(alg)) {
+ throw new errors_js_1$g.JOSEAlgNotAllowed('"alg" (Algorithm) Header Parameter not allowed');
+ }
+ if (b64) {
+ if (typeof jws.payload !== 'string') {
+ throw new errors_js_1$g.JWSInvalid('JWS Payload must be a string');
+ }
+ }
+ else if (typeof jws.payload !== 'string' && !(jws.payload instanceof Uint8Array)) {
+ throw new errors_js_1$g.JWSInvalid('JWS Payload must be a string or an Uint8Array instance');
+ }
+ let resolvedKey = false;
+ if (typeof key === 'function') {
+ key = await key(parsedProt, jws);
+ resolvedKey = true;
+ }
+ (0, check_key_type_js_1$1.default)(alg, key, 'verify');
+ const data = (0, buffer_utils_js_1$a.concat)(buffer_utils_js_1$a.encoder.encode((_a = jws.protected) !== null && _a !== void 0 ? _a : ''), buffer_utils_js_1$a.encoder.encode('.'), typeof jws.payload === 'string' ? buffer_utils_js_1$a.encoder.encode(jws.payload) : jws.payload);
+ const signature = (0, base64url_js_1$4.decode)(jws.signature);
+ const verified = await (0, verify_js_1$3.default)(alg, key, signature, data);
+ if (!verified) {
+ throw new errors_js_1$g.JWSSignatureVerificationFailed();
+ }
+ let payload;
+ if (b64) {
+ payload = (0, base64url_js_1$4.decode)(jws.payload);
+ }
+ else if (typeof jws.payload === 'string') {
+ payload = buffer_utils_js_1$a.encoder.encode(jws.payload);
+ }
+ else {
+ payload = jws.payload;
+ }
+ const result = { payload };
+ if (jws.protected !== undefined) {
+ result.protectedHeader = parsedProt;
+ }
+ if (jws.header !== undefined) {
+ result.unprotectedHeader = jws.header;
+ }
+ if (resolvedKey) {
+ return { ...result, key };
+ }
+ return result;
+}
+verify$5.flattenedVerify = flattenedVerify;
+
+Object.defineProperty(verify$6, "__esModule", { value: true });
+verify$6.compactVerify = void 0;
+const verify_js_1$2 = verify$5;
+const errors_js_1$f = errors$3;
+const buffer_utils_js_1$9 = buffer_utils;
+async function compactVerify(jws, key, options) {
+ if (jws instanceof Uint8Array) {
+ jws = buffer_utils_js_1$9.decoder.decode(jws);
+ }
+ if (typeof jws !== 'string') {
+ throw new errors_js_1$f.JWSInvalid('Compact JWS must be a string or Uint8Array');
+ }
+ const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');
+ if (length !== 3) {
+ throw new errors_js_1$f.JWSInvalid('Invalid Compact JWS');
+ }
+ const verified = await (0, verify_js_1$2.flattenedVerify)({ payload, protected: protectedHeader, signature }, key, options);
+ const result = { payload: verified.payload, protectedHeader: verified.protectedHeader };
+ if (typeof key === 'function') {
+ return { ...result, key: verified.key };
+ }
+ return result;
+}
+verify$6.compactVerify = compactVerify;
+
+var verify$2 = {};
+
+Object.defineProperty(verify$2, "__esModule", { value: true });
+verify$2.generalVerify = void 0;
+const verify_js_1$1 = verify$5;
+const errors_js_1$e = errors$3;
+const is_object_js_1$7 = is_object;
+async function generalVerify(jws, key, options) {
+ if (!(0, is_object_js_1$7.default)(jws)) {
+ throw new errors_js_1$e.JWSInvalid('General JWS must be an object');
+ }
+ if (!Array.isArray(jws.signatures) || !jws.signatures.every(is_object_js_1$7.default)) {
+ throw new errors_js_1$e.JWSInvalid('JWS Signatures missing or incorrect type');
+ }
+ for (const signature of jws.signatures) {
+ try {
+ return await (0, verify_js_1$1.flattenedVerify)({
+ header: signature.header,
+ payload: jws.payload,
+ protected: signature.protected,
+ signature: signature.signature,
+ }, key, options);
+ }
+ catch {
+ }
+ }
+ throw new errors_js_1$e.JWSSignatureVerificationFailed();
+}
+verify$2.generalVerify = generalVerify;
+
+var verify$1 = {};
+
+var jwt_claims_set = {};
+
+var epoch = {};
+
+Object.defineProperty(epoch, "__esModule", { value: true });
+epoch.default = (date) => Math.floor(date.getTime() / 1000);
+
+var secs = {};
+
+Object.defineProperty(secs, "__esModule", { value: true });
+const minute = 60;
+const hour = minute * 60;
+const day = hour * 24;
+const week = day * 7;
+const year = day * 365.25;
+const REGEX = /^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;
+secs.default = (str) => {
+ const matched = REGEX.exec(str);
+ if (!matched) {
+ throw new TypeError('Invalid time period format');
+ }
+ const value = parseFloat(matched[1]);
+ const unit = matched[2].toLowerCase();
+ switch (unit) {
+ case 'sec':
+ case 'secs':
+ case 'second':
+ case 'seconds':
+ case 's':
+ return Math.round(value);
+ case 'minute':
+ case 'minutes':
+ case 'min':
+ case 'mins':
+ case 'm':
+ return Math.round(value * minute);
+ case 'hour':
+ case 'hours':
+ case 'hr':
+ case 'hrs':
+ case 'h':
+ return Math.round(value * hour);
+ case 'day':
+ case 'days':
+ case 'd':
+ return Math.round(value * day);
+ case 'week':
+ case 'weeks':
+ case 'w':
+ return Math.round(value * week);
+ default:
+ return Math.round(value * year);
+ }
+};
+
+Object.defineProperty(jwt_claims_set, "__esModule", { value: true });
+const errors_js_1$d = errors$3;
+const buffer_utils_js_1$8 = buffer_utils;
+const epoch_js_1$1 = epoch;
+const secs_js_1$1 = secs;
+const is_object_js_1$6 = is_object;
+const normalizeTyp = (value) => value.toLowerCase().replace(/^application\//, '');
+const checkAudiencePresence = (audPayload, audOption) => {
+ if (typeof audPayload === 'string') {
+ return audOption.includes(audPayload);
+ }
+ if (Array.isArray(audPayload)) {
+ return audOption.some(Set.prototype.has.bind(new Set(audPayload)));
+ }
+ return false;
+};
+jwt_claims_set.default = (protectedHeader, encodedPayload, options = {}) => {
+ const { typ } = options;
+ if (typ &&
+ (typeof protectedHeader.typ !== 'string' ||
+ normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {
+ throw new errors_js_1$d.JWTClaimValidationFailed('unexpected "typ" JWT header value', 'typ', 'check_failed');
+ }
+ let payload;
+ try {
+ payload = JSON.parse(buffer_utils_js_1$8.decoder.decode(encodedPayload));
+ }
+ catch {
+ }
+ if (!(0, is_object_js_1$6.default)(payload)) {
+ throw new errors_js_1$d.JWTInvalid('JWT Claims Set must be a top-level JSON object');
+ }
+ const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;
+ if (maxTokenAge !== undefined)
+ requiredClaims.push('iat');
+ if (audience !== undefined)
+ requiredClaims.push('aud');
+ if (subject !== undefined)
+ requiredClaims.push('sub');
+ if (issuer !== undefined)
+ requiredClaims.push('iss');
+ for (const claim of new Set(requiredClaims.reverse())) {
+ if (!(claim in payload)) {
+ throw new errors_js_1$d.JWTClaimValidationFailed(`missing required "${claim}" claim`, claim, 'missing');
+ }
+ }
+ if (issuer && !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {
+ throw new errors_js_1$d.JWTClaimValidationFailed('unexpected "iss" claim value', 'iss', 'check_failed');
+ }
+ if (subject && payload.sub !== subject) {
+ throw new errors_js_1$d.JWTClaimValidationFailed('unexpected "sub" claim value', 'sub', 'check_failed');
+ }
+ if (audience &&
+ !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {
+ throw new errors_js_1$d.JWTClaimValidationFailed('unexpected "aud" claim value', 'aud', 'check_failed');
+ }
+ let tolerance;
+ switch (typeof options.clockTolerance) {
+ case 'string':
+ tolerance = (0, secs_js_1$1.default)(options.clockTolerance);
+ break;
+ case 'number':
+ tolerance = options.clockTolerance;
+ break;
+ case 'undefined':
+ tolerance = 0;
+ break;
+ default:
+ throw new TypeError('Invalid clockTolerance option type');
+ }
+ const { currentDate } = options;
+ const now = (0, epoch_js_1$1.default)(currentDate || new Date());
+ if ((payload.iat !== undefined || maxTokenAge) && typeof payload.iat !== 'number') {
+ throw new errors_js_1$d.JWTClaimValidationFailed('"iat" claim must be a number', 'iat', 'invalid');
+ }
+ if (payload.nbf !== undefined) {
+ if (typeof payload.nbf !== 'number') {
+ throw new errors_js_1$d.JWTClaimValidationFailed('"nbf" claim must be a number', 'nbf', 'invalid');
+ }
+ if (payload.nbf > now + tolerance) {
+ throw new errors_js_1$d.JWTClaimValidationFailed('"nbf" claim timestamp check failed', 'nbf', 'check_failed');
+ }
+ }
+ if (payload.exp !== undefined) {
+ if (typeof payload.exp !== 'number') {
+ throw new errors_js_1$d.JWTClaimValidationFailed('"exp" claim must be a number', 'exp', 'invalid');
+ }
+ if (payload.exp <= now - tolerance) {
+ throw new errors_js_1$d.JWTExpired('"exp" claim timestamp check failed', 'exp', 'check_failed');
+ }
+ }
+ if (maxTokenAge) {
+ const age = now - payload.iat;
+ const max = typeof maxTokenAge === 'number' ? maxTokenAge : (0, secs_js_1$1.default)(maxTokenAge);
+ if (age - tolerance > max) {
+ throw new errors_js_1$d.JWTExpired('"iat" claim timestamp check failed (too far in the past)', 'iat', 'check_failed');
+ }
+ if (age < 0 - tolerance) {
+ throw new errors_js_1$d.JWTClaimValidationFailed('"iat" claim timestamp check failed (it should be in the past)', 'iat', 'check_failed');
+ }
+ }
+ return payload;
+};
+
+Object.defineProperty(verify$1, "__esModule", { value: true });
+verify$1.jwtVerify = void 0;
+const verify_js_1 = verify$6;
+const jwt_claims_set_js_1$2 = jwt_claims_set;
+const errors_js_1$c = errors$3;
+async function jwtVerify(jwt, key, options) {
+ var _a;
+ const verified = await (0, verify_js_1.compactVerify)(jwt, key, options);
+ if (((_a = verified.protectedHeader.crit) === null || _a === void 0 ? void 0 : _a.includes('b64')) && verified.protectedHeader.b64 === false) {
+ throw new errors_js_1$c.JWTInvalid('JWTs MUST NOT use unencoded payload');
+ }
+ const payload = (0, jwt_claims_set_js_1$2.default)(verified.protectedHeader, verified.payload, options);
+ const result = { payload, protectedHeader: verified.protectedHeader };
+ if (typeof key === 'function') {
+ return { ...result, key: verified.key };
+ }
+ return result;
+}
+verify$1.jwtVerify = jwtVerify;
+
+var decrypt$1 = {};
+
+Object.defineProperty(decrypt$1, "__esModule", { value: true });
+decrypt$1.jwtDecrypt = void 0;
+const decrypt_js_1 = decrypt$8;
+const jwt_claims_set_js_1$1 = jwt_claims_set;
+const errors_js_1$b = errors$3;
+async function jwtDecrypt(jwt, key, options) {
+ const decrypted = await (0, decrypt_js_1.compactDecrypt)(jwt, key, options);
+ const payload = (0, jwt_claims_set_js_1$1.default)(decrypted.protectedHeader, decrypted.plaintext, options);
+ const { protectedHeader } = decrypted;
+ if (protectedHeader.iss !== undefined && protectedHeader.iss !== payload.iss) {
+ throw new errors_js_1$b.JWTClaimValidationFailed('replicated "iss" claim header parameter mismatch', 'iss', 'mismatch');
+ }
+ if (protectedHeader.sub !== undefined && protectedHeader.sub !== payload.sub) {
+ throw new errors_js_1$b.JWTClaimValidationFailed('replicated "sub" claim header parameter mismatch', 'sub', 'mismatch');
+ }
+ if (protectedHeader.aud !== undefined &&
+ JSON.stringify(protectedHeader.aud) !== JSON.stringify(payload.aud)) {
+ throw new errors_js_1$b.JWTClaimValidationFailed('replicated "aud" claim header parameter mismatch', 'aud', 'mismatch');
+ }
+ const result = { payload, protectedHeader };
+ if (typeof key === 'function') {
+ return { ...result, key: decrypted.key };
+ }
+ return result;
+}
+decrypt$1.jwtDecrypt = jwtDecrypt;
+
+var encrypt$1 = {};
+
+Object.defineProperty(encrypt$1, "__esModule", { value: true });
+encrypt$1.CompactEncrypt = void 0;
+const encrypt_js_1$1 = encrypt$2;
+class CompactEncrypt {
+ constructor(plaintext) {
+ this._flattened = new encrypt_js_1$1.FlattenedEncrypt(plaintext);
+ }
+ setContentEncryptionKey(cek) {
+ this._flattened.setContentEncryptionKey(cek);
+ return this;
+ }
+ setInitializationVector(iv) {
+ this._flattened.setInitializationVector(iv);
+ return this;
+ }
+ setProtectedHeader(protectedHeader) {
+ this._flattened.setProtectedHeader(protectedHeader);
+ return this;
+ }
+ setKeyManagementParameters(parameters) {
+ this._flattened.setKeyManagementParameters(parameters);
+ return this;
+ }
+ async encrypt(key, options) {
+ const jwe = await this._flattened.encrypt(key, options);
+ return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.');
+ }
+}
+encrypt$1.CompactEncrypt = CompactEncrypt;
+
+var sign$4 = {};
+
+var sign$3 = {};
+
+Object.defineProperty(sign$3, "__esModule", { value: true });
+sign$3.FlattenedSign = void 0;
+const base64url_js_1$3 = base64url$9;
+const sign_js_1$3 = sign$6;
+const is_disjoint_js_1 = is_disjoint;
+const errors_js_1$a = errors$3;
+const buffer_utils_js_1$7 = buffer_utils;
+const check_key_type_js_1 = check_key_type;
+const validate_crit_js_1 = validate_crit;
+class FlattenedSign {
+ constructor(payload) {
+ if (!(payload instanceof Uint8Array)) {
+ throw new TypeError('payload must be an instance of Uint8Array');
+ }
+ this._payload = payload;
+ }
+ setProtectedHeader(protectedHeader) {
+ if (this._protectedHeader) {
+ throw new TypeError('setProtectedHeader can only be called once');
+ }
+ this._protectedHeader = protectedHeader;
+ return this;
+ }
+ setUnprotectedHeader(unprotectedHeader) {
+ if (this._unprotectedHeader) {
+ throw new TypeError('setUnprotectedHeader can only be called once');
+ }
+ this._unprotectedHeader = unprotectedHeader;
+ return this;
+ }
+ async sign(key, options) {
+ if (!this._protectedHeader && !this._unprotectedHeader) {
+ throw new errors_js_1$a.JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');
+ }
+ if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader)) {
+ throw new errors_js_1$a.JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');
+ }
+ const joseHeader = {
+ ...this._protectedHeader,
+ ...this._unprotectedHeader,
+ };
+ const extensions = (0, validate_crit_js_1.default)(errors_js_1$a.JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);
+ let b64 = true;
+ if (extensions.has('b64')) {
+ b64 = this._protectedHeader.b64;
+ if (typeof b64 !== 'boolean') {
+ throw new errors_js_1$a.JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean');
+ }
+ }
+ const { alg } = joseHeader;
+ if (typeof alg !== 'string' || !alg) {
+ throw new errors_js_1$a.JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');
+ }
+ (0, check_key_type_js_1.default)(alg, key, 'sign');
+ let payload = this._payload;
+ if (b64) {
+ payload = buffer_utils_js_1$7.encoder.encode((0, base64url_js_1$3.encode)(payload));
+ }
+ let protectedHeader;
+ if (this._protectedHeader) {
+ protectedHeader = buffer_utils_js_1$7.encoder.encode((0, base64url_js_1$3.encode)(JSON.stringify(this._protectedHeader)));
+ }
+ else {
+ protectedHeader = buffer_utils_js_1$7.encoder.encode('');
+ }
+ const data = (0, buffer_utils_js_1$7.concat)(protectedHeader, buffer_utils_js_1$7.encoder.encode('.'), payload);
+ const signature = await (0, sign_js_1$3.default)(alg, key, data);
+ const jws = {
+ signature: (0, base64url_js_1$3.encode)(signature),
+ payload: '',
+ };
+ if (b64) {
+ jws.payload = buffer_utils_js_1$7.decoder.decode(payload);
+ }
+ if (this._unprotectedHeader) {
+ jws.header = this._unprotectedHeader;
+ }
+ if (this._protectedHeader) {
+ jws.protected = buffer_utils_js_1$7.decoder.decode(protectedHeader);
+ }
+ return jws;
+ }
+}
+sign$3.FlattenedSign = FlattenedSign;
+
+Object.defineProperty(sign$4, "__esModule", { value: true });
+sign$4.CompactSign = void 0;
+const sign_js_1$2 = sign$3;
+class CompactSign {
+ constructor(payload) {
+ this._flattened = new sign_js_1$2.FlattenedSign(payload);
+ }
+ setProtectedHeader(protectedHeader) {
+ this._flattened.setProtectedHeader(protectedHeader);
+ return this;
+ }
+ async sign(key, options) {
+ const jws = await this._flattened.sign(key, options);
+ if (jws.payload === undefined) {
+ throw new TypeError('use the flattened module for creating JWS with b64: false');
+ }
+ return `${jws.protected}.${jws.payload}.${jws.signature}`;
+ }
+}
+sign$4.CompactSign = CompactSign;
+
+var sign$2 = {};
+
+Object.defineProperty(sign$2, "__esModule", { value: true });
+sign$2.GeneralSign = void 0;
+const sign_js_1$1 = sign$3;
+const errors_js_1$9 = errors$3;
+class IndividualSignature {
+ constructor(sig, key, options) {
+ this.parent = sig;
+ this.key = key;
+ this.options = options;
+ }
+ setProtectedHeader(protectedHeader) {
+ if (this.protectedHeader) {
+ throw new TypeError('setProtectedHeader can only be called once');
+ }
+ this.protectedHeader = protectedHeader;
+ return this;
+ }
+ setUnprotectedHeader(unprotectedHeader) {
+ if (this.unprotectedHeader) {
+ throw new TypeError('setUnprotectedHeader can only be called once');
+ }
+ this.unprotectedHeader = unprotectedHeader;
+ return this;
+ }
+ addSignature(...args) {
+ return this.parent.addSignature(...args);
+ }
+ sign(...args) {
+ return this.parent.sign(...args);
+ }
+ done() {
+ return this.parent;
+ }
+}
+class GeneralSign {
+ constructor(payload) {
+ this._signatures = [];
+ this._payload = payload;
+ }
+ addSignature(key, options) {
+ const signature = new IndividualSignature(this, key, options);
+ this._signatures.push(signature);
+ return signature;
+ }
+ async sign() {
+ if (!this._signatures.length) {
+ throw new errors_js_1$9.JWSInvalid('at least one signature must be added');
+ }
+ const jws = {
+ signatures: [],
+ payload: '',
+ };
+ for (let i = 0; i < this._signatures.length; i++) {
+ const signature = this._signatures[i];
+ const flattened = new sign_js_1$1.FlattenedSign(this._payload);
+ flattened.setProtectedHeader(signature.protectedHeader);
+ flattened.setUnprotectedHeader(signature.unprotectedHeader);
+ const { payload, ...rest } = await flattened.sign(signature.key, signature.options);
+ if (i === 0) {
+ jws.payload = payload;
+ }
+ else if (jws.payload !== payload) {
+ throw new errors_js_1$9.JWSInvalid('inconsistent use of JWS Unencoded Payload (RFC7797)');
+ }
+ jws.signatures.push(rest);
+ }
+ return jws;
+ }
+}
+sign$2.GeneralSign = GeneralSign;
+
+var sign$1 = {};
+
+var produce = {};
+
+Object.defineProperty(produce, "__esModule", { value: true });
+produce.ProduceJWT = void 0;
+const epoch_js_1 = epoch;
+const is_object_js_1$5 = is_object;
+const secs_js_1 = secs;
+class ProduceJWT {
+ constructor(payload) {
+ if (!(0, is_object_js_1$5.default)(payload)) {
+ throw new TypeError('JWT Claims Set MUST be an object');
+ }
+ this._payload = payload;
+ }
+ setIssuer(issuer) {
+ this._payload = { ...this._payload, iss: issuer };
+ return this;
+ }
+ setSubject(subject) {
+ this._payload = { ...this._payload, sub: subject };
+ return this;
+ }
+ setAudience(audience) {
+ this._payload = { ...this._payload, aud: audience };
+ return this;
+ }
+ setJti(jwtId) {
+ this._payload = { ...this._payload, jti: jwtId };
+ return this;
+ }
+ setNotBefore(input) {
+ if (typeof input === 'number') {
+ this._payload = { ...this._payload, nbf: input };
+ }
+ else {
+ this._payload = { ...this._payload, nbf: (0, epoch_js_1.default)(new Date()) + (0, secs_js_1.default)(input) };
+ }
+ return this;
+ }
+ setExpirationTime(input) {
+ if (typeof input === 'number') {
+ this._payload = { ...this._payload, exp: input };
+ }
+ else {
+ this._payload = { ...this._payload, exp: (0, epoch_js_1.default)(new Date()) + (0, secs_js_1.default)(input) };
+ }
+ return this;
+ }
+ setIssuedAt(input) {
+ if (typeof input === 'undefined') {
+ this._payload = { ...this._payload, iat: (0, epoch_js_1.default)(new Date()) };
+ }
+ else {
+ this._payload = { ...this._payload, iat: input };
+ }
+ return this;
+ }
+}
+produce.ProduceJWT = ProduceJWT;
+
+Object.defineProperty(sign$1, "__esModule", { value: true });
+sign$1.SignJWT = void 0;
+const sign_js_1 = sign$4;
+const errors_js_1$8 = errors$3;
+const buffer_utils_js_1$6 = buffer_utils;
+const produce_js_1$2 = produce;
+class SignJWT extends produce_js_1$2.ProduceJWT {
+ setProtectedHeader(protectedHeader) {
+ this._protectedHeader = protectedHeader;
+ return this;
+ }
+ async sign(key, options) {
+ var _a;
+ const sig = new sign_js_1.CompactSign(buffer_utils_js_1$6.encoder.encode(JSON.stringify(this._payload)));
+ sig.setProtectedHeader(this._protectedHeader);
+ if (Array.isArray((_a = this._protectedHeader) === null || _a === void 0 ? void 0 : _a.crit) &&
+ this._protectedHeader.crit.includes('b64') &&
+ this._protectedHeader.b64 === false) {
+ throw new errors_js_1$8.JWTInvalid('JWTs MUST NOT use unencoded payload');
+ }
+ return sig.sign(key, options);
+ }
+}
+sign$1.SignJWT = SignJWT;
+
+var encrypt = {};
+
+Object.defineProperty(encrypt, "__esModule", { value: true });
+encrypt.EncryptJWT = void 0;
+const encrypt_js_1 = encrypt$1;
+const buffer_utils_js_1$5 = buffer_utils;
+const produce_js_1$1 = produce;
+class EncryptJWT extends produce_js_1$1.ProduceJWT {
+ setProtectedHeader(protectedHeader) {
+ if (this._protectedHeader) {
+ throw new TypeError('setProtectedHeader can only be called once');
+ }
+ this._protectedHeader = protectedHeader;
+ return this;
+ }
+ setKeyManagementParameters(parameters) {
+ if (this._keyManagementParameters) {
+ throw new TypeError('setKeyManagementParameters can only be called once');
+ }
+ this._keyManagementParameters = parameters;
+ return this;
+ }
+ setContentEncryptionKey(cek) {
+ if (this._cek) {
+ throw new TypeError('setContentEncryptionKey can only be called once');
+ }
+ this._cek = cek;
+ return this;
+ }
+ setInitializationVector(iv) {
+ if (this._iv) {
+ throw new TypeError('setInitializationVector can only be called once');
+ }
+ this._iv = iv;
+ return this;
+ }
+ replicateIssuerAsHeader() {
+ this._replicateIssuerAsHeader = true;
+ return this;
+ }
+ replicateSubjectAsHeader() {
+ this._replicateSubjectAsHeader = true;
+ return this;
+ }
+ replicateAudienceAsHeader() {
+ this._replicateAudienceAsHeader = true;
+ return this;
+ }
+ async encrypt(key, options) {
+ const enc = new encrypt_js_1.CompactEncrypt(buffer_utils_js_1$5.encoder.encode(JSON.stringify(this._payload)));
+ if (this._replicateIssuerAsHeader) {
+ this._protectedHeader = { ...this._protectedHeader, iss: this._payload.iss };
+ }
+ if (this._replicateSubjectAsHeader) {
+ this._protectedHeader = { ...this._protectedHeader, sub: this._payload.sub };
+ }
+ if (this._replicateAudienceAsHeader) {
+ this._protectedHeader = { ...this._protectedHeader, aud: this._payload.aud };
+ }
+ enc.setProtectedHeader(this._protectedHeader);
+ if (this._iv) {
+ enc.setInitializationVector(this._iv);
+ }
+ if (this._cek) {
+ enc.setContentEncryptionKey(this._cek);
+ }
+ if (this._keyManagementParameters) {
+ enc.setKeyManagementParameters(this._keyManagementParameters);
+ }
+ return enc.encrypt(key, options);
+ }
+}
+encrypt.EncryptJWT = EncryptJWT;
+
+var thumbprint = {};
+
+Object.defineProperty(thumbprint, "__esModule", { value: true });
+thumbprint.calculateJwkThumbprintUri = thumbprint.calculateJwkThumbprint = void 0;
+const digest_js_1 = digest$1;
+const base64url_js_1$2 = base64url$9;
+const errors_js_1$7 = errors$3;
+const buffer_utils_js_1$4 = buffer_utils;
+const is_object_js_1$4 = is_object;
+const check = (value, description) => {
+ if (typeof value !== 'string' || !value) {
+ throw new errors_js_1$7.JWKInvalid(`${description} missing or invalid`);
+ }
+};
+async function calculateJwkThumbprint(jwk, digestAlgorithm) {
+ if (!(0, is_object_js_1$4.default)(jwk)) {
+ throw new TypeError('JWK must be an object');
+ }
+ digestAlgorithm !== null && digestAlgorithm !== void 0 ? digestAlgorithm : (digestAlgorithm = 'sha256');
+ if (digestAlgorithm !== 'sha256' &&
+ digestAlgorithm !== 'sha384' &&
+ digestAlgorithm !== 'sha512') {
+ throw new TypeError('digestAlgorithm must one of "sha256", "sha384", or "sha512"');
+ }
+ let components;
+ switch (jwk.kty) {
+ case 'EC':
+ check(jwk.crv, '"crv" (Curve) Parameter');
+ check(jwk.x, '"x" (X Coordinate) Parameter');
+ check(jwk.y, '"y" (Y Coordinate) Parameter');
+ components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };
+ break;
+ case 'OKP':
+ check(jwk.crv, '"crv" (Subtype of Key Pair) Parameter');
+ check(jwk.x, '"x" (Public Key) Parameter');
+ components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };
+ break;
+ case 'RSA':
+ check(jwk.e, '"e" (Exponent) Parameter');
+ check(jwk.n, '"n" (Modulus) Parameter');
+ components = { e: jwk.e, kty: jwk.kty, n: jwk.n };
+ break;
+ case 'oct':
+ check(jwk.k, '"k" (Key Value) Parameter');
+ components = { k: jwk.k, kty: jwk.kty };
+ break;
+ default:
+ throw new errors_js_1$7.JOSENotSupported('"kty" (Key Type) Parameter missing or unsupported');
+ }
+ const data = buffer_utils_js_1$4.encoder.encode(JSON.stringify(components));
+ return (0, base64url_js_1$2.encode)(await (0, digest_js_1.default)(digestAlgorithm, data));
+}
+thumbprint.calculateJwkThumbprint = calculateJwkThumbprint;
+async function calculateJwkThumbprintUri(jwk, digestAlgorithm) {
+ digestAlgorithm !== null && digestAlgorithm !== void 0 ? digestAlgorithm : (digestAlgorithm = 'sha256');
+ const thumbprint = await calculateJwkThumbprint(jwk, digestAlgorithm);
+ return `urn:ietf:params:oauth:jwk-thumbprint:sha-${digestAlgorithm.slice(-3)}:${thumbprint}`;
+}
+thumbprint.calculateJwkThumbprintUri = calculateJwkThumbprintUri;
+
+var embedded = {};
+
+Object.defineProperty(embedded, "__esModule", { value: true });
+embedded.EmbeddedJWK = void 0;
+const import_js_1$1 = _import;
+const is_object_js_1$3 = is_object;
+const errors_js_1$6 = errors$3;
+async function EmbeddedJWK(protectedHeader, token) {
+ const joseHeader = {
+ ...protectedHeader,
+ ...token === null || token === void 0 ? void 0 : token.header,
+ };
+ if (!(0, is_object_js_1$3.default)(joseHeader.jwk)) {
+ throw new errors_js_1$6.JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a JSON object');
+ }
+ const key = await (0, import_js_1$1.importJWK)({ ...joseHeader.jwk, ext: true }, joseHeader.alg, true);
+ if (key instanceof Uint8Array || key.type !== 'public') {
+ throw new errors_js_1$6.JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a public key');
+ }
+ return key;
+}
+embedded.EmbeddedJWK = EmbeddedJWK;
+
+var local = {};
+
+Object.defineProperty(local, "__esModule", { value: true });
+local.createLocalJWKSet = local.LocalJWKSet = local.isJWKSLike = void 0;
+const import_js_1 = _import;
+const errors_js_1$5 = errors$3;
+const is_object_js_1$2 = is_object;
+function getKtyFromAlg$1(alg) {
+ switch (typeof alg === 'string' && alg.slice(0, 2)) {
+ case 'RS':
+ case 'PS':
+ return 'RSA';
+ case 'ES':
+ return 'EC';
+ case 'Ed':
+ return 'OKP';
+ default:
+ throw new errors_js_1$5.JOSENotSupported('Unsupported "alg" value for a JSON Web Key Set');
+ }
+}
+function isJWKSLike(jwks) {
+ return (jwks &&
+ typeof jwks === 'object' &&
+ Array.isArray(jwks.keys) &&
+ jwks.keys.every(isJWKLike));
+}
+local.isJWKSLike = isJWKSLike;
+function isJWKLike(key) {
+ return (0, is_object_js_1$2.default)(key);
+}
+function clone$5(obj) {
+ if (typeof structuredClone === 'function') {
+ return structuredClone(obj);
+ }
+ return JSON.parse(JSON.stringify(obj));
+}
+class LocalJWKSet {
+ constructor(jwks) {
+ this._cached = new WeakMap();
+ if (!isJWKSLike(jwks)) {
+ throw new errors_js_1$5.JWKSInvalid('JSON Web Key Set malformed');
+ }
+ this._jwks = clone$5(jwks);
+ }
+ async getKey(protectedHeader, token) {
+ const { alg, kid } = { ...protectedHeader, ...token === null || token === void 0 ? void 0 : token.header };
+ const kty = getKtyFromAlg$1(alg);
+ const candidates = this._jwks.keys.filter((jwk) => {
+ let candidate = kty === jwk.kty;
+ if (candidate && typeof kid === 'string') {
+ candidate = kid === jwk.kid;
+ }
+ if (candidate && typeof jwk.alg === 'string') {
+ candidate = alg === jwk.alg;
+ }
+ if (candidate && typeof jwk.use === 'string') {
+ candidate = jwk.use === 'sig';
+ }
+ if (candidate && Array.isArray(jwk.key_ops)) {
+ candidate = jwk.key_ops.includes('verify');
+ }
+ if (candidate && alg === 'EdDSA') {
+ candidate = jwk.crv === 'Ed25519' || jwk.crv === 'Ed448';
+ }
+ if (candidate) {
+ switch (alg) {
+ case 'ES256':
+ candidate = jwk.crv === 'P-256';
+ break;
+ case 'ES256K':
+ candidate = jwk.crv === 'secp256k1';
+ break;
+ case 'ES384':
+ candidate = jwk.crv === 'P-384';
+ break;
+ case 'ES512':
+ candidate = jwk.crv === 'P-521';
+ break;
+ }
+ }
+ return candidate;
+ });
+ const { 0: jwk, length } = candidates;
+ if (length === 0) {
+ throw new errors_js_1$5.JWKSNoMatchingKey();
+ }
+ else if (length !== 1) {
+ const error = new errors_js_1$5.JWKSMultipleMatchingKeys();
+ const { _cached } = this;
+ error[Symbol.asyncIterator] = async function* () {
+ for (const jwk of candidates) {
+ try {
+ yield await importWithAlgCache(_cached, jwk, alg);
+ }
+ catch {
+ continue;
+ }
+ }
+ };
+ throw error;
+ }
+ return importWithAlgCache(this._cached, jwk, alg);
+ }
+}
+local.LocalJWKSet = LocalJWKSet;
+async function importWithAlgCache(cache, jwk, alg) {
+ const cached = cache.get(jwk) || cache.set(jwk, {}).get(jwk);
+ if (cached[alg] === undefined) {
+ const key = await (0, import_js_1.importJWK)({ ...jwk, ext: true }, alg);
+ if (key instanceof Uint8Array || key.type !== 'public') {
+ throw new errors_js_1$5.JWKSInvalid('JSON Web Key Set members must be public keys');
+ }
+ cached[alg] = key;
+ }
+ return cached[alg];
+}
+function createLocalJWKSet(jwks) {
+ const set = new LocalJWKSet(jwks);
+ return async function (protectedHeader, token) {
+ return set.getKey(protectedHeader, token);
+ };
+}
+local.createLocalJWKSet = createLocalJWKSet;
+
+var remote = {};
+
+var fetch_jwks = {};
+
+Object.defineProperty(fetch_jwks, "__esModule", { value: true });
+const http$2 = require$$0$3;
+const https$2 = require$$1$2;
+const events_1$2 = require$$1$3;
+const errors_js_1$4 = errors$3;
+const buffer_utils_js_1$3 = buffer_utils;
+const fetchJwks = async (url, timeout, options) => {
+ let get;
+ switch (url.protocol) {
+ case 'https:':
+ get = https$2.get;
+ break;
+ case 'http:':
+ get = http$2.get;
+ break;
+ default:
+ throw new TypeError('Unsupported URL protocol.');
+ }
+ const { agent, headers } = options;
+ const req = get(url.href, {
+ agent,
+ timeout,
+ headers,
+ });
+ const [response] = (await Promise.race([(0, events_1$2.once)(req, 'response'), (0, events_1$2.once)(req, 'timeout')]));
+ if (!response) {
+ req.destroy();
+ throw new errors_js_1$4.JWKSTimeout();
+ }
+ if (response.statusCode !== 200) {
+ throw new errors_js_1$4.JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');
+ }
+ const parts = [];
+ for await (const part of response) {
+ parts.push(part);
+ }
+ try {
+ return JSON.parse(buffer_utils_js_1$3.decoder.decode((0, buffer_utils_js_1$3.concat)(...parts)));
+ }
+ catch {
+ throw new errors_js_1$4.JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');
+ }
+};
+fetch_jwks.default = fetchJwks;
+
+Object.defineProperty(remote, "__esModule", { value: true });
+remote.createRemoteJWKSet = void 0;
+const fetch_jwks_js_1 = fetch_jwks;
+const errors_js_1$3 = errors$3;
+const local_js_1 = local;
+function isCloudflareWorkers() {
+ return (typeof WebSocketPair !== 'undefined' ||
+ (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||
+ (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));
+}
+class RemoteJWKSet extends local_js_1.LocalJWKSet {
+ constructor(url, options) {
+ super({ keys: [] });
+ this._jwks = undefined;
+ if (!(url instanceof URL)) {
+ throw new TypeError('url must be an instance of URL');
+ }
+ this._url = new URL(url.href);
+ this._options = { agent: options === null || options === void 0 ? void 0 : options.agent, headers: options === null || options === void 0 ? void 0 : options.headers };
+ this._timeoutDuration =
+ typeof (options === null || options === void 0 ? void 0 : options.timeoutDuration) === 'number' ? options === null || options === void 0 ? void 0 : options.timeoutDuration : 5000;
+ this._cooldownDuration =
+ typeof (options === null || options === void 0 ? void 0 : options.cooldownDuration) === 'number' ? options === null || options === void 0 ? void 0 : options.cooldownDuration : 30000;
+ this._cacheMaxAge = typeof (options === null || options === void 0 ? void 0 : options.cacheMaxAge) === 'number' ? options === null || options === void 0 ? void 0 : options.cacheMaxAge : 600000;
+ }
+ coolingDown() {
+ return typeof this._jwksTimestamp === 'number'
+ ? Date.now() < this._jwksTimestamp + this._cooldownDuration
+ : false;
+ }
+ fresh() {
+ return typeof this._jwksTimestamp === 'number'
+ ? Date.now() < this._jwksTimestamp + this._cacheMaxAge
+ : false;
+ }
+ async getKey(protectedHeader, token) {
+ if (!this._jwks || !this.fresh()) {
+ await this.reload();
+ }
+ try {
+ return await super.getKey(protectedHeader, token);
+ }
+ catch (err) {
+ if (err instanceof errors_js_1$3.JWKSNoMatchingKey) {
+ if (this.coolingDown() === false) {
+ await this.reload();
+ return super.getKey(protectedHeader, token);
+ }
+ }
+ throw err;
+ }
+ }
+ async reload() {
+ if (this._pendingFetch && isCloudflareWorkers()) {
+ this._pendingFetch = undefined;
+ }
+ this._pendingFetch || (this._pendingFetch = (0, fetch_jwks_js_1.default)(this._url, this._timeoutDuration, this._options)
+ .then((json) => {
+ if (!(0, local_js_1.isJWKSLike)(json)) {
+ throw new errors_js_1$3.JWKSInvalid('JSON Web Key Set malformed');
+ }
+ this._jwks = { keys: json.keys };
+ this._jwksTimestamp = Date.now();
+ this._pendingFetch = undefined;
+ })
+ .catch((err) => {
+ this._pendingFetch = undefined;
+ throw err;
+ }));
+ await this._pendingFetch;
+ }
+}
+function createRemoteJWKSet(url, options) {
+ const set = new RemoteJWKSet(url, options);
+ return async function (protectedHeader, token) {
+ return set.getKey(protectedHeader, token);
+ };
+}
+remote.createRemoteJWKSet = createRemoteJWKSet;
+
+var unsecured = {};
+
+Object.defineProperty(unsecured, "__esModule", { value: true });
+unsecured.UnsecuredJWT = void 0;
+const base64url$8 = base64url$9;
+const buffer_utils_js_1$2 = buffer_utils;
+const errors_js_1$2 = errors$3;
+const jwt_claims_set_js_1 = jwt_claims_set;
+const produce_js_1 = produce;
+class UnsecuredJWT extends produce_js_1.ProduceJWT {
+ encode() {
+ const header = base64url$8.encode(JSON.stringify({ alg: 'none' }));
+ const payload = base64url$8.encode(JSON.stringify(this._payload));
+ return `${header}.${payload}.`;
+ }
+ static decode(jwt, options) {
+ if (typeof jwt !== 'string') {
+ throw new errors_js_1$2.JWTInvalid('Unsecured JWT must be a string');
+ }
+ const { 0: encodedHeader, 1: encodedPayload, 2: signature, length } = jwt.split('.');
+ if (length !== 3 || signature !== '') {
+ throw new errors_js_1$2.JWTInvalid('Invalid Unsecured JWT');
+ }
+ let header;
+ try {
+ header = JSON.parse(buffer_utils_js_1$2.decoder.decode(base64url$8.decode(encodedHeader)));
+ if (header.alg !== 'none')
+ throw new Error();
+ }
+ catch {
+ throw new errors_js_1$2.JWTInvalid('Invalid Unsecured JWT');
+ }
+ const payload = (0, jwt_claims_set_js_1.default)(header, base64url$8.decode(encodedPayload), options);
+ return { payload, header };
+ }
+}
+unsecured.UnsecuredJWT = UnsecuredJWT;
+
+var decode_protected_header = {};
+
+var base64url$7 = {};
+
+Object.defineProperty(base64url$7, "__esModule", { value: true });
+base64url$7.decode = base64url$7.encode = void 0;
+const base64url$6 = base64url$9;
+base64url$7.encode = base64url$6.encode;
+base64url$7.decode = base64url$6.decode;
+
+Object.defineProperty(decode_protected_header, "__esModule", { value: true });
+decode_protected_header.decodeProtectedHeader = void 0;
+const base64url_js_1$1 = base64url$7;
+const buffer_utils_js_1$1 = buffer_utils;
+const is_object_js_1$1 = is_object;
+function decodeProtectedHeader(token) {
+ let protectedB64u;
+ if (typeof token === 'string') {
+ const parts = token.split('.');
+ if (parts.length === 3 || parts.length === 5) {
+ [protectedB64u] = parts;
+ }
+ }
+ else if (typeof token === 'object' && token) {
+ if ('protected' in token) {
+ protectedB64u = token.protected;
+ }
+ else {
+ throw new TypeError('Token does not contain a Protected Header');
+ }
+ }
+ try {
+ if (typeof protectedB64u !== 'string' || !protectedB64u) {
+ throw new Error();
+ }
+ const result = JSON.parse(buffer_utils_js_1$1.decoder.decode((0, base64url_js_1$1.decode)(protectedB64u)));
+ if (!(0, is_object_js_1$1.default)(result)) {
+ throw new Error();
+ }
+ return result;
+ }
+ catch {
+ throw new TypeError('Invalid Token or Protected Header formatting');
+ }
+}
+decode_protected_header.decodeProtectedHeader = decodeProtectedHeader;
+
+var decode_jwt$1 = {};
+
+Object.defineProperty(decode_jwt$1, "__esModule", { value: true });
+decode_jwt$1.decodeJwt = void 0;
+const base64url_js_1 = base64url$7;
+const buffer_utils_js_1 = buffer_utils;
+const is_object_js_1 = is_object;
+const errors_js_1$1 = errors$3;
+function decodeJwt(jwt) {
+ if (typeof jwt !== 'string')
+ throw new errors_js_1$1.JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');
+ const { 1: payload, length } = jwt.split('.');
+ if (length === 5)
+ throw new errors_js_1$1.JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');
+ if (length !== 3)
+ throw new errors_js_1$1.JWTInvalid('Invalid JWT');
+ if (!payload)
+ throw new errors_js_1$1.JWTInvalid('JWTs must contain a payload');
+ let decoded;
+ try {
+ decoded = (0, base64url_js_1.decode)(payload);
+ }
+ catch {
+ throw new errors_js_1$1.JWTInvalid('Failed to parse the base64url encoded payload');
+ }
+ let result;
+ try {
+ result = JSON.parse(buffer_utils_js_1.decoder.decode(decoded));
+ }
+ catch {
+ throw new errors_js_1$1.JWTInvalid('Failed to parse the decoded payload as JSON');
+ }
+ if (!(0, is_object_js_1.default)(result))
+ throw new errors_js_1$1.JWTInvalid('Invalid JWT Claims Set');
+ return result;
+}
+decode_jwt$1.decodeJwt = decodeJwt;
+
+var generate_key_pair = {};
+
+var generate$2 = {};
+
+Object.defineProperty(generate$2, "__esModule", { value: true });
+generate$2.generateKeyPair = generate$2.generateSecret = void 0;
+const crypto_1 = require$$0$1;
+const util_1 = require$$1$1;
+const random_js_1 = random$4;
+const check_modulus_length_js_1 = check_modulus_length;
+const errors_js_1 = errors$3;
+const generate$1 = (0, util_1.promisify)(crypto_1.generateKeyPair);
+async function generateSecret$1(alg, options) {
+ let length;
+ switch (alg) {
+ case 'HS256':
+ case 'HS384':
+ case 'HS512':
+ case 'A128CBC-HS256':
+ case 'A192CBC-HS384':
+ case 'A256CBC-HS512':
+ length = parseInt(alg.slice(-3), 10);
+ break;
+ case 'A128KW':
+ case 'A192KW':
+ case 'A256KW':
+ case 'A128GCMKW':
+ case 'A192GCMKW':
+ case 'A256GCMKW':
+ case 'A128GCM':
+ case 'A192GCM':
+ case 'A256GCM':
+ length = parseInt(alg.slice(1, 4), 10);
+ break;
+ default:
+ throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
+ }
+ return (0, crypto_1.createSecretKey)((0, random_js_1.default)(new Uint8Array(length >> 3)));
+}
+generate$2.generateSecret = generateSecret$1;
+async function generateKeyPair$1(alg, options) {
+ var _a, _b;
+ switch (alg) {
+ case 'RS256':
+ case 'RS384':
+ case 'RS512':
+ case 'PS256':
+ case 'PS384':
+ case 'PS512':
+ case 'RSA-OAEP':
+ case 'RSA-OAEP-256':
+ case 'RSA-OAEP-384':
+ case 'RSA-OAEP-512':
+ case 'RSA1_5': {
+ const modulusLength = (_a = options === null || options === void 0 ? void 0 : options.modulusLength) !== null && _a !== void 0 ? _a : 2048;
+ if (typeof modulusLength !== 'number' || modulusLength < 2048) {
+ throw new errors_js_1.JOSENotSupported('Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used');
+ }
+ const keypair = await generate$1('rsa', {
+ modulusLength,
+ publicExponent: 0x10001,
+ });
+ (0, check_modulus_length_js_1.setModulusLength)(keypair.privateKey, modulusLength);
+ (0, check_modulus_length_js_1.setModulusLength)(keypair.publicKey, modulusLength);
+ return keypair;
+ }
+ case 'ES256':
+ return generate$1('ec', { namedCurve: 'P-256' });
+ case 'ES256K':
+ return generate$1('ec', { namedCurve: 'secp256k1' });
+ case 'ES384':
+ return generate$1('ec', { namedCurve: 'P-384' });
+ case 'ES512':
+ return generate$1('ec', { namedCurve: 'P-521' });
+ case 'EdDSA': {
+ switch (options === null || options === void 0 ? void 0 : options.crv) {
+ case undefined:
+ case 'Ed25519':
+ return generate$1('ed25519');
+ case 'Ed448':
+ return generate$1('ed448');
+ default:
+ throw new errors_js_1.JOSENotSupported('Invalid or unsupported crv option provided, supported values are Ed25519 and Ed448');
+ }
+ }
+ case 'ECDH-ES':
+ case 'ECDH-ES+A128KW':
+ case 'ECDH-ES+A192KW':
+ case 'ECDH-ES+A256KW':
+ const crv = (_b = options === null || options === void 0 ? void 0 : options.crv) !== null && _b !== void 0 ? _b : 'P-256';
+ switch (crv) {
+ case undefined:
+ case 'P-256':
+ case 'P-384':
+ case 'P-521':
+ return generate$1('ec', { namedCurve: crv });
+ case 'X25519':
+ return generate$1('x25519');
+ case 'X448':
+ return generate$1('x448');
+ default:
+ throw new errors_js_1.JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448');
+ }
+ default:
+ throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
+ }
+}
+generate$2.generateKeyPair = generateKeyPair$1;
+
+Object.defineProperty(generate_key_pair, "__esModule", { value: true });
+generate_key_pair.generateKeyPair = void 0;
+const generate_js_1$1 = generate$2;
+async function generateKeyPair(alg, options) {
+ return (0, generate_js_1$1.generateKeyPair)(alg, options);
+}
+generate_key_pair.generateKeyPair = generateKeyPair;
+
+var generate_secret = {};
+
+Object.defineProperty(generate_secret, "__esModule", { value: true });
+generate_secret.generateSecret = void 0;
+const generate_js_1 = generate$2;
+async function generateSecret(alg, options) {
+ return (0, generate_js_1.generateSecret)(alg, options);
+}
+generate_secret.generateSecret = generateSecret;
+
+(function (exports) {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.base64url = exports.generateSecret = exports.generateKeyPair = exports.errors = exports.decodeJwt = exports.decodeProtectedHeader = exports.importJWK = exports.importX509 = exports.importPKCS8 = exports.importSPKI = exports.exportJWK = exports.exportSPKI = exports.exportPKCS8 = exports.UnsecuredJWT = exports.createRemoteJWKSet = exports.createLocalJWKSet = exports.EmbeddedJWK = exports.calculateJwkThumbprintUri = exports.calculateJwkThumbprint = exports.EncryptJWT = exports.SignJWT = exports.GeneralSign = exports.FlattenedSign = exports.CompactSign = exports.FlattenedEncrypt = exports.CompactEncrypt = exports.jwtDecrypt = exports.jwtVerify = exports.generalVerify = exports.flattenedVerify = exports.compactVerify = exports.GeneralEncrypt = exports.generalDecrypt = exports.flattenedDecrypt = exports.compactDecrypt = void 0;
+ var decrypt_js_1 = decrypt$8;
+ Object.defineProperty(exports, "compactDecrypt", { enumerable: true, get: function () { return decrypt_js_1.compactDecrypt; } });
+ var decrypt_js_2 = decrypt$7;
+ Object.defineProperty(exports, "flattenedDecrypt", { enumerable: true, get: function () { return decrypt_js_2.flattenedDecrypt; } });
+ var decrypt_js_3 = decrypt$2;
+ Object.defineProperty(exports, "generalDecrypt", { enumerable: true, get: function () { return decrypt_js_3.generalDecrypt; } });
+ var encrypt_js_1 = encrypt$3;
+ Object.defineProperty(exports, "GeneralEncrypt", { enumerable: true, get: function () { return encrypt_js_1.GeneralEncrypt; } });
+ var verify_js_1 = verify$6;
+ Object.defineProperty(exports, "compactVerify", { enumerable: true, get: function () { return verify_js_1.compactVerify; } });
+ var verify_js_2 = verify$5;
+ Object.defineProperty(exports, "flattenedVerify", { enumerable: true, get: function () { return verify_js_2.flattenedVerify; } });
+ var verify_js_3 = verify$2;
+ Object.defineProperty(exports, "generalVerify", { enumerable: true, get: function () { return verify_js_3.generalVerify; } });
+ var verify_js_4 = verify$1;
+ Object.defineProperty(exports, "jwtVerify", { enumerable: true, get: function () { return verify_js_4.jwtVerify; } });
+ var decrypt_js_4 = decrypt$1;
+ Object.defineProperty(exports, "jwtDecrypt", { enumerable: true, get: function () { return decrypt_js_4.jwtDecrypt; } });
+ var encrypt_js_2 = encrypt$1;
+ Object.defineProperty(exports, "CompactEncrypt", { enumerable: true, get: function () { return encrypt_js_2.CompactEncrypt; } });
+ var encrypt_js_3 = encrypt$2;
+ Object.defineProperty(exports, "FlattenedEncrypt", { enumerable: true, get: function () { return encrypt_js_3.FlattenedEncrypt; } });
+ var sign_js_1 = sign$4;
+ Object.defineProperty(exports, "CompactSign", { enumerable: true, get: function () { return sign_js_1.CompactSign; } });
+ var sign_js_2 = sign$3;
+ Object.defineProperty(exports, "FlattenedSign", { enumerable: true, get: function () { return sign_js_2.FlattenedSign; } });
+ var sign_js_3 = sign$2;
+ Object.defineProperty(exports, "GeneralSign", { enumerable: true, get: function () { return sign_js_3.GeneralSign; } });
+ var sign_js_4 = sign$1;
+ Object.defineProperty(exports, "SignJWT", { enumerable: true, get: function () { return sign_js_4.SignJWT; } });
+ var encrypt_js_4 = encrypt;
+ Object.defineProperty(exports, "EncryptJWT", { enumerable: true, get: function () { return encrypt_js_4.EncryptJWT; } });
+ var thumbprint_js_1 = thumbprint;
+ Object.defineProperty(exports, "calculateJwkThumbprint", { enumerable: true, get: function () { return thumbprint_js_1.calculateJwkThumbprint; } });
+ Object.defineProperty(exports, "calculateJwkThumbprintUri", { enumerable: true, get: function () { return thumbprint_js_1.calculateJwkThumbprintUri; } });
+ var embedded_js_1 = embedded;
+ Object.defineProperty(exports, "EmbeddedJWK", { enumerable: true, get: function () { return embedded_js_1.EmbeddedJWK; } });
+ var local_js_1 = local;
+ Object.defineProperty(exports, "createLocalJWKSet", { enumerable: true, get: function () { return local_js_1.createLocalJWKSet; } });
+ var remote_js_1 = remote;
+ Object.defineProperty(exports, "createRemoteJWKSet", { enumerable: true, get: function () { return remote_js_1.createRemoteJWKSet; } });
+ var unsecured_js_1 = unsecured;
+ Object.defineProperty(exports, "UnsecuredJWT", { enumerable: true, get: function () { return unsecured_js_1.UnsecuredJWT; } });
+ var export_js_1 = _export;
+ Object.defineProperty(exports, "exportPKCS8", { enumerable: true, get: function () { return export_js_1.exportPKCS8; } });
+ Object.defineProperty(exports, "exportSPKI", { enumerable: true, get: function () { return export_js_1.exportSPKI; } });
+ Object.defineProperty(exports, "exportJWK", { enumerable: true, get: function () { return export_js_1.exportJWK; } });
+ var import_js_1 = _import;
+ Object.defineProperty(exports, "importSPKI", { enumerable: true, get: function () { return import_js_1.importSPKI; } });
+ Object.defineProperty(exports, "importPKCS8", { enumerable: true, get: function () { return import_js_1.importPKCS8; } });
+ Object.defineProperty(exports, "importX509", { enumerable: true, get: function () { return import_js_1.importX509; } });
+ Object.defineProperty(exports, "importJWK", { enumerable: true, get: function () { return import_js_1.importJWK; } });
+ var decode_protected_header_js_1 = decode_protected_header;
+ Object.defineProperty(exports, "decodeProtectedHeader", { enumerable: true, get: function () { return decode_protected_header_js_1.decodeProtectedHeader; } });
+ var decode_jwt_js_1 = decode_jwt$1;
+ Object.defineProperty(exports, "decodeJwt", { enumerable: true, get: function () { return decode_jwt_js_1.decodeJwt; } });
+ exports.errors = errors$3;
+ var generate_key_pair_js_1 = generate_key_pair;
+ Object.defineProperty(exports, "generateKeyPair", { enumerable: true, get: function () { return generate_key_pair_js_1.generateKeyPair; } });
+ var generate_secret_js_1 = generate_secret;
+ Object.defineProperty(exports, "generateSecret", { enumerable: true, get: function () { return generate_secret_js_1.generateSecret; } });
+ exports.base64url = base64url$7;
+} (cjs));
+
+const jose$4 = cjs;
+const crypto$5 = require$$0$1;
+
+async function retrieveSigningKeys$2(jwks) {
+ const results = [];
+
+ jwks = jwks
+ .filter(({ use }) => use === 'sig' || use === undefined)
+ .filter(({ kty }) => kty === 'RSA' || kty === 'EC' || kty === 'OKP');
+
+ for (const jwk of jwks) {
+ try {
+ // The algorithm is actually not used in the Node.js KeyObject-based runtime
+ // passing an arbitrary value here and checking that KeyObject was returned
+ // later
+ const keyObject = await jose$4.importJWK(jwk, 'RS256');
+ if (!(keyObject instanceof crypto$5.KeyObject) || keyObject.type !== 'public') {
+ continue;
+ }
+ const getSpki = () => keyObject.export({ format: 'pem', type: 'spki' });
+ results.push({
+ get publicKey() { return getSpki(); },
+ get rsaPublicKey() { return getSpki(); },
+ getPublicKey() { return getSpki(); },
+ ...(typeof jwk.kid === 'string' && jwk.kid ? { kid: jwk.kid } : undefined),
+ ...(typeof jwk.alg === 'string' && jwk.alg ? { alg: jwk.alg } : undefined)
+ });
+ } catch (err) {
+ continue;
+ }
+ }
+
+ return results;
+}
+
+var utils$2 = {
+ retrieveSigningKeys: retrieveSigningKeys$2
+};
+
+var request$6 = {};
+
+const http$1 = require$$0$3;
+const https$1 = require$$1$2;
+const urlUtil = require$$0$4;
+
+request$6.default = (options) => {
+ if (options.fetcher) {
+ return options.fetcher(options.uri);
+ }
+
+ return new Promise((resolve, reject) => {
+ const {
+ hostname,
+ path,
+ port,
+ protocol
+ } = urlUtil.parse(options.uri);
+
+ const requestOptions = {
+ hostname,
+ path,
+ port,
+ method: 'GET',
+ ...(options.headers && { headers: { ...options.headers } }),
+ ...(options.timeout && { timeout: options.timeout }),
+ ...(options.agent && { agent: options.agent })
+ };
+
+ const httpRequestLib = protocol === 'https:' ? https$1 : http$1;
+ const httpRequest = httpRequestLib.request(requestOptions, (res) => {
+ let rawData = '';
+ res.setEncoding('utf8');
+ res.on('data', (chunk) => { rawData += chunk; });
+ res.on('end', () => {
+ if (res.statusCode < 200 || res.statusCode >= 300) {
+ const errorMsg = res.body && (res.body.message || res.body) || res.statusMessage || `Http Error ${res.statusCode}`;
+ reject({ errorMsg });
+ } else {
+ try {
+ resolve(rawData && JSON.parse(rawData));
+ } catch (error) {
+ reject(error);
+ }
+ }
+ });
+ });
+
+ httpRequest
+ .on('timeout', () => httpRequest.destroy())
+ .on('error', (e) => reject(e))
+ .end();
+ });
+};
+
+var cache = {};
+
+var async = {};
+
+var map$1 = {exports: {}};
+
+var pseudomap;
+var hasRequiredPseudomap;
+
+function requirePseudomap () {
+ if (hasRequiredPseudomap) return pseudomap;
+ hasRequiredPseudomap = 1;
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+ pseudomap = PseudoMap;
+
+ function PseudoMap (set) {
+ if (!(this instanceof PseudoMap)) // whyyyyyyy
+ throw new TypeError("Constructor PseudoMap requires 'new'")
+
+ this.clear();
+
+ if (set) {
+ if ((set instanceof PseudoMap) ||
+ (typeof Map === 'function' && set instanceof Map))
+ set.forEach(function (value, key) {
+ this.set(key, value);
+ }, this);
+ else if (Array.isArray(set))
+ set.forEach(function (kv) {
+ this.set(kv[0], kv[1]);
+ }, this);
+ else
+ throw new TypeError('invalid argument')
+ }
+ }
+
+ PseudoMap.prototype.forEach = function (fn, thisp) {
+ thisp = thisp || this;
+ Object.keys(this._data).forEach(function (k) {
+ if (k !== 'size')
+ fn.call(thisp, this._data[k].value, this._data[k].key);
+ }, this);
+ };
+
+ PseudoMap.prototype.has = function (k) {
+ return !!find(this._data, k)
+ };
+
+ PseudoMap.prototype.get = function (k) {
+ var res = find(this._data, k);
+ return res && res.value
+ };
+
+ PseudoMap.prototype.set = function (k, v) {
+ set(this._data, k, v);
+ };
+
+ PseudoMap.prototype.delete = function (k) {
+ var res = find(this._data, k);
+ if (res) {
+ delete this._data[res._index];
+ this._data.size--;
+ }
+ };
+
+ PseudoMap.prototype.clear = function () {
+ var data = Object.create(null);
+ data.size = 0;
+
+ Object.defineProperty(this, '_data', {
+ value: data,
+ enumerable: false,
+ configurable: true,
+ writable: false
+ });
+ };
+
+ Object.defineProperty(PseudoMap.prototype, 'size', {
+ get: function () {
+ return this._data.size
+ },
+ set: function (n) {},
+ enumerable: true,
+ configurable: true
+ });
+
+ PseudoMap.prototype.values =
+ PseudoMap.prototype.keys =
+ PseudoMap.prototype.entries = function () {
+ throw new Error('iterators are not implemented in this version')
+ };
+
+ // Either identical, or both NaN
+ function same (a, b) {
+ return a === b || a !== a && b !== b
+ }
+
+ function Entry (k, v, i) {
+ this.key = k;
+ this.value = v;
+ this._index = i;
+ }
+
+ function find (data, k) {
+ for (var i = 0, s = '_' + k, key = s;
+ hasOwnProperty.call(data, key);
+ key = s + i++) {
+ if (same(data[key].key, k))
+ return data[key]
+ }
+ }
+
+ function set (data, k, v) {
+ for (var i = 0, s = '_' + k, key = s;
+ hasOwnProperty.call(data, key);
+ key = s + i++) {
+ if (same(data[key].key, k)) {
+ data[key].value = v;
+ return
+ }
+ }
+ data.size++;
+ data[key] = new Entry(k, v, key);
+ }
+ return pseudomap;
+}
+
+if (process.env.npm_package_name === 'pseudomap' &&
+ process.env.npm_lifecycle_script === 'test')
+ process.env.TEST_PSEUDOMAP = 'true';
+
+if (typeof Map === 'function' && !process.env.TEST_PSEUDOMAP) {
+ map$1.exports = Map;
+} else {
+ map$1.exports = requirePseudomap();
+}
+
+var mapExports = map$1.exports;
+
+var yallist$1 = Yallist$3;
+
+Yallist$3.Node = Node$1;
+Yallist$3.create = Yallist$3;
+
+function Yallist$3 (list) {
+ var self = this;
+ if (!(self instanceof Yallist$3)) {
+ self = new Yallist$3();
+ }
+
+ self.tail = null;
+ self.head = null;
+ self.length = 0;
+
+ if (list && typeof list.forEach === 'function') {
+ list.forEach(function (item) {
+ self.push(item);
+ });
+ } else if (arguments.length > 0) {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ self.push(arguments[i]);
+ }
+ }
+
+ return self
+}
+
+Yallist$3.prototype.removeNode = function (node) {
+ if (node.list !== this) {
+ throw new Error('removing node which does not belong to this list')
+ }
+
+ var next = node.next;
+ var prev = node.prev;
+
+ if (next) {
+ next.prev = prev;
+ }
+
+ if (prev) {
+ prev.next = next;
+ }
+
+ if (node === this.head) {
+ this.head = next;
+ }
+ if (node === this.tail) {
+ this.tail = prev;
+ }
+
+ node.list.length--;
+ node.next = null;
+ node.prev = null;
+ node.list = null;
+};
+
+Yallist$3.prototype.unshiftNode = function (node) {
+ if (node === this.head) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+
+ var head = this.head;
+ node.list = this;
+ node.next = head;
+ if (head) {
+ head.prev = node;
+ }
+
+ this.head = node;
+ if (!this.tail) {
+ this.tail = node;
+ }
+ this.length++;
+};
+
+Yallist$3.prototype.pushNode = function (node) {
+ if (node === this.tail) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+
+ var tail = this.tail;
+ node.list = this;
+ node.prev = tail;
+ if (tail) {
+ tail.next = node;
+ }
+
+ this.tail = node;
+ if (!this.head) {
+ this.head = node;
+ }
+ this.length++;
+};
+
+Yallist$3.prototype.push = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ push$1(this, arguments[i]);
+ }
+ return this.length
+};
+
+Yallist$3.prototype.unshift = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ unshift$1(this, arguments[i]);
+ }
+ return this.length
+};
+
+Yallist$3.prototype.pop = function () {
+ if (!this.tail) {
+ return undefined
+ }
+
+ var res = this.tail.value;
+ this.tail = this.tail.prev;
+ if (this.tail) {
+ this.tail.next = null;
+ } else {
+ this.head = null;
+ }
+ this.length--;
+ return res
+};
+
+Yallist$3.prototype.shift = function () {
+ if (!this.head) {
+ return undefined
+ }
+
+ var res = this.head.value;
+ this.head = this.head.next;
+ if (this.head) {
+ this.head.prev = null;
+ } else {
+ this.tail = null;
+ }
+ this.length--;
+ return res
+};
+
+Yallist$3.prototype.forEach = function (fn, thisp) {
+ thisp = thisp || this;
+ for (var walker = this.head, i = 0; walker !== null; i++) {
+ fn.call(thisp, walker.value, i, this);
+ walker = walker.next;
+ }
+};
+
+Yallist$3.prototype.forEachReverse = function (fn, thisp) {
+ thisp = thisp || this;
+ for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
+ fn.call(thisp, walker.value, i, this);
+ walker = walker.prev;
+ }
+};
+
+Yallist$3.prototype.get = function (n) {
+ for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.next;
+ }
+ if (i === n && walker !== null) {
+ return walker.value
+ }
+};
+
+Yallist$3.prototype.getReverse = function (n) {
+ for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.prev;
+ }
+ if (i === n && walker !== null) {
+ return walker.value
+ }
+};
+
+Yallist$3.prototype.map = function (fn, thisp) {
+ thisp = thisp || this;
+ var res = new Yallist$3();
+ for (var walker = this.head; walker !== null;) {
+ res.push(fn.call(thisp, walker.value, this));
+ walker = walker.next;
+ }
+ return res
+};
+
+Yallist$3.prototype.mapReverse = function (fn, thisp) {
+ thisp = thisp || this;
+ var res = new Yallist$3();
+ for (var walker = this.tail; walker !== null;) {
+ res.push(fn.call(thisp, walker.value, this));
+ walker = walker.prev;
+ }
+ return res
+};
+
+Yallist$3.prototype.reduce = function (fn, initial) {
+ var acc;
+ var walker = this.head;
+ if (arguments.length > 1) {
+ acc = initial;
+ } else if (this.head) {
+ walker = this.head.next;
+ acc = this.head.value;
+ } else {
+ throw new TypeError('Reduce of empty list with no initial value')
+ }
+
+ for (var i = 0; walker !== null; i++) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.next;
+ }
+
+ return acc
+};
+
+Yallist$3.prototype.reduceReverse = function (fn, initial) {
+ var acc;
+ var walker = this.tail;
+ if (arguments.length > 1) {
+ acc = initial;
+ } else if (this.tail) {
+ walker = this.tail.prev;
+ acc = this.tail.value;
+ } else {
+ throw new TypeError('Reduce of empty list with no initial value')
+ }
+
+ for (var i = this.length - 1; walker !== null; i--) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.prev;
+ }
+
+ return acc
+};
+
+Yallist$3.prototype.toArray = function () {
+ var arr = new Array(this.length);
+ for (var i = 0, walker = this.head; walker !== null; i++) {
+ arr[i] = walker.value;
+ walker = walker.next;
+ }
+ return arr
+};
+
+Yallist$3.prototype.toArrayReverse = function () {
+ var arr = new Array(this.length);
+ for (var i = 0, walker = this.tail; walker !== null; i++) {
+ arr[i] = walker.value;
+ walker = walker.prev;
+ }
+ return arr
+};
+
+Yallist$3.prototype.slice = function (from, to) {
+ to = to || this.length;
+ if (to < 0) {
+ to += this.length;
+ }
+ from = from || 0;
+ if (from < 0) {
+ from += this.length;
+ }
+ var ret = new Yallist$3();
+ if (to < from || to < 0) {
+ return ret
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
+ walker = walker.next;
+ }
+ for (; walker !== null && i < to; i++, walker = walker.next) {
+ ret.push(walker.value);
+ }
+ return ret
+};
+
+Yallist$3.prototype.sliceReverse = function (from, to) {
+ to = to || this.length;
+ if (to < 0) {
+ to += this.length;
+ }
+ from = from || 0;
+ if (from < 0) {
+ from += this.length;
+ }
+ var ret = new Yallist$3();
+ if (to < from || to < 0) {
+ return ret
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
+ walker = walker.prev;
+ }
+ for (; walker !== null && i > from; i--, walker = walker.prev) {
+ ret.push(walker.value);
+ }
+ return ret
+};
+
+Yallist$3.prototype.reverse = function () {
+ var head = this.head;
+ var tail = this.tail;
+ for (var walker = head; walker !== null; walker = walker.prev) {
+ var p = walker.prev;
+ walker.prev = walker.next;
+ walker.next = p;
+ }
+ this.head = tail;
+ this.tail = head;
+ return this
+};
+
+function push$1 (self, item) {
+ self.tail = new Node$1(item, self.tail, null, self);
+ if (!self.head) {
+ self.head = self.tail;
+ }
+ self.length++;
+}
+
+function unshift$1 (self, item) {
+ self.head = new Node$1(item, null, self.head, self);
+ if (!self.tail) {
+ self.tail = self.head;
+ }
+ self.length++;
+}
+
+function Node$1 (value, prev, next, list) {
+ if (!(this instanceof Node$1)) {
+ return new Node$1(value, prev, next, list)
+ }
+
+ this.list = list;
+ this.value = value;
+
+ if (prev) {
+ prev.next = this;
+ this.prev = prev;
+ } else {
+ this.prev = null;
+ }
+
+ if (next) {
+ next.prev = this;
+ this.next = next;
+ } else {
+ this.next = null;
+ }
+}
+
+var lruCache$1 = LRUCache$1;
+
+// This will be a proper iterable 'Map' in engines that support it,
+// or a fakey-fake PseudoMap in older versions.
+var Map$1 = mapExports;
+var util$7 = require$$1$1;
+
+// A linked list to keep track of recently-used-ness
+var Yallist$2 = yallist$1;
+
+// use symbols if possible, otherwise just _props
+var symbols = {};
+var hasSymbol = typeof Symbol === 'function';
+var makeSymbol;
+/* istanbul ignore if */
+if (hasSymbol) {
+ makeSymbol = function (key) {
+ return Symbol.for(key)
+ };
+} else {
+ makeSymbol = function (key) {
+ return '_' + key
+ };
+}
+
+function priv (obj, key, val) {
+ var sym;
+ if (symbols[key]) {
+ sym = symbols[key];
+ } else {
+ sym = makeSymbol(key);
+ symbols[key] = sym;
+ }
+ if (arguments.length === 2) {
+ return obj[sym]
+ } else {
+ obj[sym] = val;
+ return val
+ }
+}
+
+function naiveLength$1 () { return 1 }
+
+// lruList is a yallist where the head is the youngest
+// item, and the tail is the oldest. the list contains the Hit
+// objects as the entries.
+// Each Hit object has a reference to its Yallist.Node. This
+// never changes.
+//
+// cache is a Map (or PseudoMap) that matches the keys to
+// the Yallist.Node object.
+function LRUCache$1 (options) {
+ if (!(this instanceof LRUCache$1)) {
+ return new LRUCache$1(options)
+ }
+
+ if (typeof options === 'number') {
+ options = { max: options };
+ }
+
+ if (!options) {
+ options = {};
+ }
+
+ var max = priv(this, 'max', options.max);
+ // Kind of weird to have a default max of Infinity, but oh well.
+ if (!max ||
+ !(typeof max === 'number') ||
+ max <= 0) {
+ priv(this, 'max', Infinity);
+ }
+
+ var lc = options.length || naiveLength$1;
+ if (typeof lc !== 'function') {
+ lc = naiveLength$1;
+ }
+ priv(this, 'lengthCalculator', lc);
+
+ priv(this, 'allowStale', options.stale || false);
+ priv(this, 'maxAge', options.maxAge || 0);
+ priv(this, 'dispose', options.dispose);
+ this.reset();
+}
+
+// resize the cache when the max changes.
+Object.defineProperty(LRUCache$1.prototype, 'max', {
+ set: function (mL) {
+ if (!mL || !(typeof mL === 'number') || mL <= 0) {
+ mL = Infinity;
+ }
+ priv(this, 'max', mL);
+ trim$1(this);
+ },
+ get: function () {
+ return priv(this, 'max')
+ },
+ enumerable: true
+});
+
+Object.defineProperty(LRUCache$1.prototype, 'allowStale', {
+ set: function (allowStale) {
+ priv(this, 'allowStale', !!allowStale);
+ },
+ get: function () {
+ return priv(this, 'allowStale')
+ },
+ enumerable: true
+});
+
+Object.defineProperty(LRUCache$1.prototype, 'maxAge', {
+ set: function (mA) {
+ if (!mA || !(typeof mA === 'number') || mA < 0) {
+ mA = 0;
+ }
+ priv(this, 'maxAge', mA);
+ trim$1(this);
+ },
+ get: function () {
+ return priv(this, 'maxAge')
+ },
+ enumerable: true
+});
+
+// resize the cache when the lengthCalculator changes.
+Object.defineProperty(LRUCache$1.prototype, 'lengthCalculator', {
+ set: function (lC) {
+ if (typeof lC !== 'function') {
+ lC = naiveLength$1;
+ }
+ if (lC !== priv(this, 'lengthCalculator')) {
+ priv(this, 'lengthCalculator', lC);
+ priv(this, 'length', 0);
+ priv(this, 'lruList').forEach(function (hit) {
+ hit.length = priv(this, 'lengthCalculator').call(this, hit.value, hit.key);
+ priv(this, 'length', priv(this, 'length') + hit.length);
+ }, this);
+ }
+ trim$1(this);
+ },
+ get: function () { return priv(this, 'lengthCalculator') },
+ enumerable: true
+});
+
+Object.defineProperty(LRUCache$1.prototype, 'length', {
+ get: function () { return priv(this, 'length') },
+ enumerable: true
+});
+
+Object.defineProperty(LRUCache$1.prototype, 'itemCount', {
+ get: function () { return priv(this, 'lruList').length },
+ enumerable: true
+});
+
+LRUCache$1.prototype.rforEach = function (fn, thisp) {
+ thisp = thisp || this;
+ for (var walker = priv(this, 'lruList').tail; walker !== null;) {
+ var prev = walker.prev;
+ forEachStep$1(this, fn, walker, thisp);
+ walker = prev;
+ }
+};
+
+function forEachStep$1 (self, fn, node, thisp) {
+ var hit = node.value;
+ if (isStale$1(self, hit)) {
+ del$1(self, node);
+ if (!priv(self, 'allowStale')) {
+ hit = undefined;
+ }
+ }
+ if (hit) {
+ fn.call(thisp, hit.value, hit.key, self);
+ }
+}
+
+LRUCache$1.prototype.forEach = function (fn, thisp) {
+ thisp = thisp || this;
+ for (var walker = priv(this, 'lruList').head; walker !== null;) {
+ var next = walker.next;
+ forEachStep$1(this, fn, walker, thisp);
+ walker = next;
+ }
+};
+
+LRUCache$1.prototype.keys = function () {
+ return priv(this, 'lruList').toArray().map(function (k) {
+ return k.key
+ }, this)
+};
+
+LRUCache$1.prototype.values = function () {
+ return priv(this, 'lruList').toArray().map(function (k) {
+ return k.value
+ }, this)
+};
+
+LRUCache$1.prototype.reset = function () {
+ if (priv(this, 'dispose') &&
+ priv(this, 'lruList') &&
+ priv(this, 'lruList').length) {
+ priv(this, 'lruList').forEach(function (hit) {
+ priv(this, 'dispose').call(this, hit.key, hit.value);
+ }, this);
+ }
+
+ priv(this, 'cache', new Map$1()); // hash of items by key
+ priv(this, 'lruList', new Yallist$2()); // list of items in order of use recency
+ priv(this, 'length', 0); // length of items in the list
+};
+
+LRUCache$1.prototype.dump = function () {
+ return priv(this, 'lruList').map(function (hit) {
+ if (!isStale$1(this, hit)) {
+ return {
+ k: hit.key,
+ v: hit.value,
+ e: hit.now + (hit.maxAge || 0)
+ }
+ }
+ }, this).toArray().filter(function (h) {
+ return h
+ })
+};
+
+LRUCache$1.prototype.dumpLru = function () {
+ return priv(this, 'lruList')
+};
+
+LRUCache$1.prototype.inspect = function (n, opts) {
+ var str = 'LRUCache {';
+ var extras = false;
+
+ var as = priv(this, 'allowStale');
+ if (as) {
+ str += '\n allowStale: true';
+ extras = true;
+ }
+
+ var max = priv(this, 'max');
+ if (max && max !== Infinity) {
+ if (extras) {
+ str += ',';
+ }
+ str += '\n max: ' + util$7.inspect(max, opts);
+ extras = true;
+ }
+
+ var maxAge = priv(this, 'maxAge');
+ if (maxAge) {
+ if (extras) {
+ str += ',';
+ }
+ str += '\n maxAge: ' + util$7.inspect(maxAge, opts);
+ extras = true;
+ }
+
+ var lc = priv(this, 'lengthCalculator');
+ if (lc && lc !== naiveLength$1) {
+ if (extras) {
+ str += ',';
+ }
+ str += '\n length: ' + util$7.inspect(priv(this, 'length'), opts);
+ extras = true;
+ }
+
+ var didFirst = false;
+ priv(this, 'lruList').forEach(function (item) {
+ if (didFirst) {
+ str += ',\n ';
+ } else {
+ if (extras) {
+ str += ',\n';
+ }
+ didFirst = true;
+ str += '\n ';
+ }
+ var key = util$7.inspect(item.key).split('\n').join('\n ');
+ var val = { value: item.value };
+ if (item.maxAge !== maxAge) {
+ val.maxAge = item.maxAge;
+ }
+ if (lc !== naiveLength$1) {
+ val.length = item.length;
+ }
+ if (isStale$1(this, item)) {
+ val.stale = true;
+ }
+
+ val = util$7.inspect(val, opts).split('\n').join('\n ');
+ str += key + ' => ' + val;
+ });
+
+ if (didFirst || extras) {
+ str += '\n';
+ }
+ str += '}';
+
+ return str
+};
+
+LRUCache$1.prototype.set = function (key, value, maxAge) {
+ maxAge = maxAge || priv(this, 'maxAge');
+
+ var now = maxAge ? Date.now() : 0;
+ var len = priv(this, 'lengthCalculator').call(this, value, key);
+
+ if (priv(this, 'cache').has(key)) {
+ if (len > priv(this, 'max')) {
+ del$1(this, priv(this, 'cache').get(key));
+ return false
+ }
+
+ var node = priv(this, 'cache').get(key);
+ var item = node.value;
+
+ // dispose of the old one before overwriting
+ if (priv(this, 'dispose')) {
+ priv(this, 'dispose').call(this, key, item.value);
+ }
+
+ item.now = now;
+ item.maxAge = maxAge;
+ item.value = value;
+ priv(this, 'length', priv(this, 'length') + (len - item.length));
+ item.length = len;
+ this.get(key);
+ trim$1(this);
+ return true
+ }
+
+ var hit = new Entry$1(key, value, len, now, maxAge);
+
+ // oversized objects fall out of cache automatically.
+ if (hit.length > priv(this, 'max')) {
+ if (priv(this, 'dispose')) {
+ priv(this, 'dispose').call(this, key, value);
+ }
+ return false
+ }
+
+ priv(this, 'length', priv(this, 'length') + hit.length);
+ priv(this, 'lruList').unshift(hit);
+ priv(this, 'cache').set(key, priv(this, 'lruList').head);
+ trim$1(this);
+ return true
+};
+
+LRUCache$1.prototype.has = function (key) {
+ if (!priv(this, 'cache').has(key)) return false
+ var hit = priv(this, 'cache').get(key).value;
+ if (isStale$1(this, hit)) {
+ return false
+ }
+ return true
+};
+
+LRUCache$1.prototype.get = function (key) {
+ return get$1(this, key, true)
+};
+
+LRUCache$1.prototype.peek = function (key) {
+ return get$1(this, key, false)
+};
+
+LRUCache$1.prototype.pop = function () {
+ var node = priv(this, 'lruList').tail;
+ if (!node) return null
+ del$1(this, node);
+ return node.value
+};
+
+LRUCache$1.prototype.del = function (key) {
+ del$1(this, priv(this, 'cache').get(key));
+};
+
+LRUCache$1.prototype.load = function (arr) {
+ // reset the cache
+ this.reset();
+
+ var now = Date.now();
+ // A previous serialized cache has the most recent items first
+ for (var l = arr.length - 1; l >= 0; l--) {
+ var hit = arr[l];
+ var expiresAt = hit.e || 0;
+ if (expiresAt === 0) {
+ // the item was created without expiration in a non aged cache
+ this.set(hit.k, hit.v);
+ } else {
+ var maxAge = expiresAt - now;
+ // dont add already expired items
+ if (maxAge > 0) {
+ this.set(hit.k, hit.v, maxAge);
+ }
+ }
+ }
+};
+
+LRUCache$1.prototype.prune = function () {
+ var self = this;
+ priv(this, 'cache').forEach(function (value, key) {
+ get$1(self, key, false);
+ });
+};
+
+function get$1 (self, key, doUse) {
+ var node = priv(self, 'cache').get(key);
+ if (node) {
+ var hit = node.value;
+ if (isStale$1(self, hit)) {
+ del$1(self, node);
+ if (!priv(self, 'allowStale')) hit = undefined;
+ } else {
+ if (doUse) {
+ priv(self, 'lruList').unshiftNode(node);
+ }
+ }
+ if (hit) hit = hit.value;
+ }
+ return hit
+}
+
+function isStale$1 (self, hit) {
+ if (!hit || (!hit.maxAge && !priv(self, 'maxAge'))) {
+ return false
+ }
+ var stale = false;
+ var diff = Date.now() - hit.now;
+ if (hit.maxAge) {
+ stale = diff > hit.maxAge;
+ } else {
+ stale = priv(self, 'maxAge') && (diff > priv(self, 'maxAge'));
+ }
+ return stale
+}
+
+function trim$1 (self) {
+ if (priv(self, 'length') > priv(self, 'max')) {
+ for (var walker = priv(self, 'lruList').tail;
+ priv(self, 'length') > priv(self, 'max') && walker !== null;) {
+ // We know that we're about to delete this one, and also
+ // what the next least recently used key will be, so just
+ // go ahead and set it now.
+ var prev = walker.prev;
+ del$1(self, walker);
+ walker = prev;
+ }
+ }
+}
+
+function del$1 (self, node) {
+ if (node) {
+ var hit = node.value;
+ if (priv(self, 'dispose')) {
+ priv(self, 'dispose').call(this, hit.key, hit.value);
+ }
+ priv(self, 'length', priv(self, 'length') - hit.length);
+ priv(self, 'cache').delete(hit.key);
+ priv(self, 'lruList').removeNode(node);
+ }
+}
+
+// classy, since V8 prefers predictable objects.
+function Entry$1 (key, value, length, now, maxAge) {
+ this.key = key;
+ this.value = value;
+ this.length = length;
+ this.now = now;
+ this.maxAge = maxAge || 0;
+}
+
+var lodash_clonedeep = {exports: {}};
+
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+lodash_clonedeep.exports;
+
+(function (module, exports) {
+ /** Used as the size to enable large array optimizations. */
+ var LARGE_ARRAY_SIZE = 200;
+
+ /** Used to stand-in for `undefined` hash values. */
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+ /** Used as references for various `Number` constants. */
+ var MAX_SAFE_INTEGER = 9007199254740991;
+
+ /** `Object#toString` result references. */
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ promiseTag = '[object Promise]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]',
+ weakMapTag = '[object WeakMap]';
+
+ var arrayBufferTag = '[object ArrayBuffer]',
+ dataViewTag = '[object DataView]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+ /**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+ /** Used to match `RegExp` flags from their coerced string values. */
+ var reFlags = /\w*$/;
+
+ /** Used to detect host constructors (Safari). */
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+ /** Used to detect unsigned integer values. */
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+ /** Used to identify `toStringTag` values supported by `_.clone`. */
+ var cloneableTags = {};
+ cloneableTags[argsTag] = cloneableTags[arrayTag] =
+ cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
+ cloneableTags[boolTag] = cloneableTags[dateTag] =
+ cloneableTags[float32Tag] = cloneableTags[float64Tag] =
+ cloneableTags[int8Tag] = cloneableTags[int16Tag] =
+ cloneableTags[int32Tag] = cloneableTags[mapTag] =
+ cloneableTags[numberTag] = cloneableTags[objectTag] =
+ cloneableTags[regexpTag] = cloneableTags[setTag] =
+ cloneableTags[stringTag] = cloneableTags[symbolTag] =
+ cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
+ cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
+ cloneableTags[errorTag] = cloneableTags[funcTag] =
+ cloneableTags[weakMapTag] = false;
+
+ /** Detect free variable `global` from Node.js. */
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
+
+ /** Detect free variable `self`. */
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+ /** Used as a reference to the global object. */
+ var root = freeGlobal || freeSelf || Function('return this')();
+
+ /** Detect free variable `exports`. */
+ var freeExports = exports && !exports.nodeType && exports;
+
+ /** Detect free variable `module`. */
+ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
+
+ /** Detect the popular CommonJS extension `module.exports`. */
+ var moduleExports = freeModule && freeModule.exports === freeExports;
+
+ /**
+ * Adds the key-value `pair` to `map`.
+ *
+ * @private
+ * @param {Object} map The map to modify.
+ * @param {Array} pair The key-value pair to add.
+ * @returns {Object} Returns `map`.
+ */
+ function addMapEntry(map, pair) {
+ // Don't return `map.set` because it's not chainable in IE 11.
+ map.set(pair[0], pair[1]);
+ return map;
+ }
+
+ /**
+ * Adds `value` to `set`.
+ *
+ * @private
+ * @param {Object} set The set to modify.
+ * @param {*} value The value to add.
+ * @returns {Object} Returns `set`.
+ */
+ function addSetEntry(set, value) {
+ // Don't return `set.add` because it's not chainable in IE 11.
+ set.add(value);
+ return set;
+ }
+
+ /**
+ * A specialized version of `_.forEach` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayEach(array, iteratee) {
+ var index = -1,
+ length = array ? array.length : 0;
+
+ while (++index < length) {
+ if (iteratee(array[index], index, array) === false) {
+ break;
+ }
+ }
+ return array;
+ }
+
+ /**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.reduce` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initAccum] Specify using the first element of `array` as
+ * the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+ function arrayReduce(array, iteratee, accumulator, initAccum) {
+ var index = -1,
+ length = array ? array.length : 0;
+
+ if (initAccum && length) {
+ accumulator = array[++index];
+ }
+ while (++index < length) {
+ accumulator = iteratee(accumulator, array[index], index, array);
+ }
+ return accumulator;
+ }
+
+ /**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+ function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+ }
+
+ /**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+ function getValue(object, key) {
+ return object == null ? undefined : object[key];
+ }
+
+ /**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+ function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+ }
+
+ /**
+ * Converts `map` to its key-value pairs.
+ *
+ * @private
+ * @param {Object} map The map to convert.
+ * @returns {Array} Returns the key-value pairs.
+ */
+ function mapToArray(map) {
+ var index = -1,
+ result = Array(map.size);
+
+ map.forEach(function(value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+ }
+
+ /**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+ function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+ }
+
+ /**
+ * Converts `set` to an array of its values.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the values.
+ */
+ function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+ }
+
+ /** Used for built-in method references. */
+ var arrayProto = Array.prototype,
+ funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+ /** Used to detect overreaching core-js shims. */
+ var coreJsData = root['__core-js_shared__'];
+
+ /** Used to detect methods masquerading as native. */
+ var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+ }());
+
+ /** Used to resolve the decompiled source of functions. */
+ var funcToString = funcProto.toString;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objectToString = objectProto.toString;
+
+ /** Used to detect if a method is native. */
+ var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+ );
+
+ /** Built-in value references. */
+ var Buffer = moduleExports ? root.Buffer : undefined,
+ Symbol = root.Symbol,
+ Uint8Array = root.Uint8Array,
+ getPrototype = overArg(Object.getPrototypeOf, Object),
+ objectCreate = Object.create,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ splice = arrayProto.splice;
+
+ /* Built-in method references for those with the same name as other `lodash` methods. */
+ var nativeGetSymbols = Object.getOwnPropertySymbols,
+ nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
+ nativeKeys = overArg(Object.keys, Object);
+
+ /* Built-in method references that are verified to be native. */
+ var DataView = getNative(root, 'DataView'),
+ Map = getNative(root, 'Map'),
+ Promise = getNative(root, 'Promise'),
+ Set = getNative(root, 'Set'),
+ WeakMap = getNative(root, 'WeakMap'),
+ nativeCreate = getNative(Object, 'create');
+
+ /** Used to detect maps, sets, and weakmaps. */
+ var dataViewCtorString = toSource(DataView),
+ mapCtorString = toSource(Map),
+ promiseCtorString = toSource(Promise),
+ setCtorString = toSource(Set),
+ weakMapCtorString = toSource(WeakMap);
+
+ /** Used to convert symbols to primitives and strings. */
+ var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
+
+ /**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function Hash(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+ function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+ }
+
+ /**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function hashDelete(key) {
+ return this.has(key) && delete this.__data__[key];
+ }
+
+ /**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
+ }
+
+ /**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+ }
+
+ /**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+ function hashSet(key, value) {
+ var data = this.__data__;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+ }
+
+ // Add methods to `Hash`.
+ Hash.prototype.clear = hashClear;
+ Hash.prototype['delete'] = hashDelete;
+ Hash.prototype.get = hashGet;
+ Hash.prototype.has = hashHas;
+ Hash.prototype.set = hashSet;
+
+ /**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function ListCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+ function listCacheClear() {
+ this.__data__ = [];
+ }
+
+ /**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ return true;
+ }
+
+ /**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+ }
+
+ /**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+ }
+
+ /**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+ function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+ }
+
+ // Add methods to `ListCache`.
+ ListCache.prototype.clear = listCacheClear;
+ ListCache.prototype['delete'] = listCacheDelete;
+ ListCache.prototype.get = listCacheGet;
+ ListCache.prototype.has = listCacheHas;
+ ListCache.prototype.set = listCacheSet;
+
+ /**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function MapCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+ function mapCacheClear() {
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map || ListCache),
+ 'string': new Hash
+ };
+ }
+
+ /**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function mapCacheDelete(key) {
+ return getMapData(this, key)['delete'](key);
+ }
+
+ /**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+ }
+
+ /**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+ }
+
+ /**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+ function mapCacheSet(key, value) {
+ getMapData(this, key).set(key, value);
+ return this;
+ }
+
+ // Add methods to `MapCache`.
+ MapCache.prototype.clear = mapCacheClear;
+ MapCache.prototype['delete'] = mapCacheDelete;
+ MapCache.prototype.get = mapCacheGet;
+ MapCache.prototype.has = mapCacheHas;
+ MapCache.prototype.set = mapCacheSet;
+
+ /**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function Stack(entries) {
+ this.__data__ = new ListCache(entries);
+ }
+
+ /**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+ function stackClear() {
+ this.__data__ = new ListCache;
+ }
+
+ /**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function stackDelete(key) {
+ return this.__data__['delete'](key);
+ }
+
+ /**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function stackGet(key) {
+ return this.__data__.get(key);
+ }
+
+ /**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function stackHas(key) {
+ return this.__data__.has(key);
+ }
+
+ /**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache instance.
+ */
+ function stackSet(key, value) {
+ var cache = this.__data__;
+ if (cache instanceof ListCache) {
+ var pairs = cache.__data__;
+ if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
+ pairs.push([key, value]);
+ return this;
+ }
+ cache = this.__data__ = new MapCache(pairs);
+ }
+ cache.set(key, value);
+ return this;
+ }
+
+ // Add methods to `Stack`.
+ Stack.prototype.clear = stackClear;
+ Stack.prototype['delete'] = stackDelete;
+ Stack.prototype.get = stackGet;
+ Stack.prototype.has = stackHas;
+ Stack.prototype.set = stackSet;
+
+ /**
+ * Creates an array of the enumerable property names of the array-like `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @param {boolean} inherited Specify returning inherited property names.
+ * @returns {Array} Returns the array of property names.
+ */
+ function arrayLikeKeys(value, inherited) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
+ var result = (isArray(value) || isArguments(value))
+ ? baseTimes(value.length, String)
+ : [];
+
+ var length = result.length,
+ skipIndexes = !!length;
+
+ for (var key in value) {
+ if ((inherited || hasOwnProperty.call(value, key)) &&
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+ function assignValue(object, key, value) {
+ var objValue = object[key];
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
+ (value === undefined && !(key in object))) {
+ object[key] = value;
+ }
+ }
+
+ /**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * The base implementation of `_.assign` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+ function baseAssign(object, source) {
+ return object && copyObject(source, keys(source), object);
+ }
+
+ /**
+ * The base implementation of `_.clone` and `_.cloneDeep` which tracks
+ * traversed objects.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @param {boolean} [isFull] Specify a clone including symbols.
+ * @param {Function} [customizer] The function to customize cloning.
+ * @param {string} [key] The key of `value`.
+ * @param {Object} [object] The parent object of `value`.
+ * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
+ * @returns {*} Returns the cloned value.
+ */
+ function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
+ var result;
+ if (customizer) {
+ result = object ? customizer(value, key, object, stack) : customizer(value);
+ }
+ if (result !== undefined) {
+ return result;
+ }
+ if (!isObject(value)) {
+ return value;
+ }
+ var isArr = isArray(value);
+ if (isArr) {
+ result = initCloneArray(value);
+ if (!isDeep) {
+ return copyArray(value, result);
+ }
+ } else {
+ var tag = getTag(value),
+ isFunc = tag == funcTag || tag == genTag;
+
+ if (isBuffer(value)) {
+ return cloneBuffer(value, isDeep);
+ }
+ if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
+ if (isHostObject(value)) {
+ return object ? value : {};
+ }
+ result = initCloneObject(isFunc ? {} : value);
+ if (!isDeep) {
+ return copySymbols(value, baseAssign(result, value));
+ }
+ } else {
+ if (!cloneableTags[tag]) {
+ return object ? value : {};
+ }
+ result = initCloneByTag(value, tag, baseClone, isDeep);
+ }
+ }
+ // Check for circular references and return its corresponding clone.
+ stack || (stack = new Stack);
+ var stacked = stack.get(value);
+ if (stacked) {
+ return stacked;
+ }
+ stack.set(value, result);
+
+ if (!isArr) {
+ var props = isFull ? getAllKeys(value) : keys(value);
+ }
+ arrayEach(props || value, function(subValue, key) {
+ if (props) {
+ key = subValue;
+ subValue = value[key];
+ }
+ // Recursively populate clone (susceptible to call stack limits).
+ assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} prototype The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+ function baseCreate(proto) {
+ return isObject(proto) ? objectCreate(proto) : {};
+ }
+
+ /**
+ * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
+ * `keysFunc` and `symbolsFunc` to get the enumerable property names and
+ * symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @param {Function} symbolsFunc The function to get the symbols of `object`.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+ function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+ var result = keysFunc(object);
+ return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
+ }
+
+ /**
+ * The base implementation of `getTag`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+ function baseGetTag(value) {
+ return objectToString.call(value);
+ }
+
+ /**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+ function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+ }
+
+ /**
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+ function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+ var result = [];
+ for (var key in Object(object)) {
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates a clone of `buffer`.
+ *
+ * @private
+ * @param {Buffer} buffer The buffer to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Buffer} Returns the cloned buffer.
+ */
+ function cloneBuffer(buffer, isDeep) {
+ if (isDeep) {
+ return buffer.slice();
+ }
+ var result = new buffer.constructor(buffer.length);
+ buffer.copy(result);
+ return result;
+ }
+
+ /**
+ * Creates a clone of `arrayBuffer`.
+ *
+ * @private
+ * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
+ */
+ function cloneArrayBuffer(arrayBuffer) {
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
+ new Uint8Array(result).set(new Uint8Array(arrayBuffer));
+ return result;
+ }
+
+ /**
+ * Creates a clone of `dataView`.
+ *
+ * @private
+ * @param {Object} dataView The data view to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned data view.
+ */
+ function cloneDataView(dataView, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
+ return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
+ }
+
+ /**
+ * Creates a clone of `map`.
+ *
+ * @private
+ * @param {Object} map The map to clone.
+ * @param {Function} cloneFunc The function to clone values.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned map.
+ */
+ function cloneMap(map, isDeep, cloneFunc) {
+ var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
+ return arrayReduce(array, addMapEntry, new map.constructor);
+ }
+
+ /**
+ * Creates a clone of `regexp`.
+ *
+ * @private
+ * @param {Object} regexp The regexp to clone.
+ * @returns {Object} Returns the cloned regexp.
+ */
+ function cloneRegExp(regexp) {
+ var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
+ result.lastIndex = regexp.lastIndex;
+ return result;
+ }
+
+ /**
+ * Creates a clone of `set`.
+ *
+ * @private
+ * @param {Object} set The set to clone.
+ * @param {Function} cloneFunc The function to clone values.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned set.
+ */
+ function cloneSet(set, isDeep, cloneFunc) {
+ var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
+ return arrayReduce(array, addSetEntry, new set.constructor);
+ }
+
+ /**
+ * Creates a clone of the `symbol` object.
+ *
+ * @private
+ * @param {Object} symbol The symbol object to clone.
+ * @returns {Object} Returns the cloned symbol object.
+ */
+ function cloneSymbol(symbol) {
+ return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
+ }
+
+ /**
+ * Creates a clone of `typedArray`.
+ *
+ * @private
+ * @param {Object} typedArray The typed array to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned typed array.
+ */
+ function cloneTypedArray(typedArray, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
+ }
+
+ /**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+ function copyArray(source, array) {
+ var index = -1,
+ length = source.length;
+
+ array || (array = Array(length));
+ while (++index < length) {
+ array[index] = source[index];
+ }
+ return array;
+ }
+
+ /**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property identifiers to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @param {Function} [customizer] The function to customize copied values.
+ * @returns {Object} Returns `object`.
+ */
+ function copyObject(source, props, object, customizer) {
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+
+ var newValue = customizer
+ ? customizer(object[key], source[key], key, object, source)
+ : undefined;
+
+ assignValue(object, key, newValue === undefined ? source[key] : newValue);
+ }
+ return object;
+ }
+
+ /**
+ * Copies own symbol properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+ function copySymbols(source, object) {
+ return copyObject(source, getSymbols(source), object);
+ }
+
+ /**
+ * Creates an array of own enumerable property names and symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+ function getAllKeys(object) {
+ return baseGetAllKeys(object, keys, getSymbols);
+ }
+
+ /**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+ function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
+ }
+
+ /**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+ function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+ }
+
+ /**
+ * Creates an array of the own enumerable symbol properties of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+ var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
+
+ /**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+ var getTag = baseGetTag;
+
+ // Fallback for data views, maps, sets, and weak maps in IE 11,
+ // for data views in Edge < 14, and promises in Node.js.
+ if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
+ (Map && getTag(new Map) != mapTag) ||
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
+ (Set && getTag(new Set) != setTag) ||
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+ getTag = function(value) {
+ var result = objectToString.call(value),
+ Ctor = result == objectTag ? value.constructor : undefined,
+ ctorString = Ctor ? toSource(Ctor) : undefined;
+
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString: return dataViewTag;
+ case mapCtorString: return mapTag;
+ case promiseCtorString: return promiseTag;
+ case setCtorString: return setTag;
+ case weakMapCtorString: return weakMapTag;
+ }
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Initializes an array clone.
+ *
+ * @private
+ * @param {Array} array The array to clone.
+ * @returns {Array} Returns the initialized clone.
+ */
+ function initCloneArray(array) {
+ var length = array.length,
+ result = array.constructor(length);
+
+ // Add properties assigned by `RegExp#exec`.
+ if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+ result.index = array.index;
+ result.input = array.input;
+ }
+ return result;
+ }
+
+ /**
+ * Initializes an object clone.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+ function initCloneObject(object) {
+ return (typeof object.constructor == 'function' && !isPrototype(object))
+ ? baseCreate(getPrototype(object))
+ : {};
+ }
+
+ /**
+ * Initializes an object clone based on its `toStringTag`.
+ *
+ * **Note:** This function only supports cloning values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @param {string} tag The `toStringTag` of the object to clone.
+ * @param {Function} cloneFunc The function to clone values.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+ function initCloneByTag(object, tag, cloneFunc, isDeep) {
+ var Ctor = object.constructor;
+ switch (tag) {
+ case arrayBufferTag:
+ return cloneArrayBuffer(object);
+
+ case boolTag:
+ case dateTag:
+ return new Ctor(+object);
+
+ case dataViewTag:
+ return cloneDataView(object, isDeep);
+
+ case float32Tag: case float64Tag:
+ case int8Tag: case int16Tag: case int32Tag:
+ case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
+ return cloneTypedArray(object, isDeep);
+
+ case mapTag:
+ return cloneMap(object, isDeep, cloneFunc);
+
+ case numberTag:
+ case stringTag:
+ return new Ctor(object);
+
+ case regexpTag:
+ return cloneRegExp(object);
+
+ case setTag:
+ return cloneSet(object, isDeep, cloneFunc);
+
+ case symbolTag:
+ return cloneSymbol(object);
+ }
+ }
+
+ /**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+ function isIndex(value, length) {
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return !!length &&
+ (typeof value == 'number' || reIsUint.test(value)) &&
+ (value > -1 && value % 1 == 0 && value < length);
+ }
+
+ /**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+ function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+ }
+
+ /**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+ function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+ }
+
+ /**
+ * Checks if `value` is likely a prototype object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+ */
+ function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+ return value === proto;
+ }
+
+ /**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+ function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+ }
+
+ /**
+ * This method is like `_.clone` except that it recursively clones `value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Lang
+ * @param {*} value The value to recursively clone.
+ * @returns {*} Returns the deep cloned value.
+ * @see _.clone
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var deep = _.cloneDeep(objects);
+ * console.log(deep[0] === objects[0]);
+ * // => false
+ */
+ function cloneDeep(value) {
+ return baseClone(value, true, true);
+ }
+
+ /**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+ function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+ }
+
+ /**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+ function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+ }
+
+ /**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+ var isArray = Array.isArray;
+
+ /**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+ function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+ }
+
+ /**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+ function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+ }
+
+ /**
+ * Checks if `value` is a buffer.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
+ * @example
+ *
+ * _.isBuffer(new Buffer(2));
+ * // => true
+ *
+ * _.isBuffer(new Uint8Array(2));
+ * // => false
+ */
+ var isBuffer = nativeIsBuffer || stubFalse;
+
+ /**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+ function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+ }
+
+ /**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+ function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+ }
+
+ /**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+ function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+ }
+
+ /**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+ function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+ }
+
+ /**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+ function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+ }
+
+ /**
+ * This method returns a new empty array.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.13.0
+ * @category Util
+ * @returns {Array} Returns the new empty array.
+ * @example
+ *
+ * var arrays = _.times(2, _.stubArray);
+ *
+ * console.log(arrays);
+ * // => [[], []]
+ *
+ * console.log(arrays[0] === arrays[1]);
+ * // => false
+ */
+ function stubArray() {
+ return [];
+ }
+
+ /**
+ * This method returns `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.13.0
+ * @category Util
+ * @returns {boolean} Returns `false`.
+ * @example
+ *
+ * _.times(2, _.stubFalse);
+ * // => [false, false]
+ */
+ function stubFalse() {
+ return false;
+ }
+
+ module.exports = cloneDeep;
+} (lodash_clonedeep, lodash_clonedeep.exports));
+
+var lodash_clonedeepExports = lodash_clonedeep.exports;
+
+var freeze = {};
+
+// From https://raw.githubusercontent.com/nikoskalogridis/deep-freeze/fb921b32064dce1645197be2bf975fe0385450b0/index.js
+// which is sadly, no longer maintained
+Object.defineProperty(freeze, "__esModule", { value: true });
+freeze.deepFreeze = void 0;
+function deepFreeze(o) {
+ if (o) {
+ Object.freeze(o);
+ Object.getOwnPropertyNames(o).forEach(function (prop) {
+ if (o.hasOwnProperty(prop)
+ && o[prop] !== null
+ && (typeof o[prop] === 'object' || typeof o[prop] === 'function')
+ && (o[prop].constructor !== Buffer)
+ && !Object.isFrozen(o[prop])) {
+ deepFreeze(o[prop]);
+ }
+ });
+ }
+ return o;
+}
+freeze.deepFreeze = deepFreeze;
+
+var sync = {};
+
+var __read$1 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
+ if (!m) return o;
+ var i = m.call(o), r, ar = [], e;
+ try {
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+ }
+ catch (error) { e = { error: error }; }
+ finally {
+ try {
+ if (r && !r.done && (m = i["return"])) m.call(i);
+ }
+ finally { if (e) throw e.error; }
+ }
+ return ar;
+};
+var __spread$1 = (commonjsGlobal && commonjsGlobal.__spread) || function () {
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read$1(arguments[i]));
+ return ar;
+};
+var __importDefault$1 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(sync, "__esModule", { value: true });
+sync.syncMemoizer = void 0;
+var lru_cache_1$1 = __importDefault$1(lruCache$1);
+var events_1$1 = require$$1$3;
+var lodash_clonedeep_1$1 = __importDefault$1(lodash_clonedeepExports);
+var freeze_1$1 = freeze;
+function syncMemoizer(options) {
+ var cache = new lru_cache_1$1.default(options);
+ var load = options.load;
+ var hash = options.hash;
+ var bypass = options.bypass;
+ var itemMaxAge = options.itemMaxAge;
+ var freeze = options.freeze;
+ var clone = options.clone;
+ var emitter = new events_1$1.EventEmitter();
+ var defaultResult = Object.assign({
+ del: del,
+ reset: function () { return cache.reset(); },
+ keys: cache.keys.bind(cache),
+ on: emitter.on.bind(emitter),
+ once: emitter.once.bind(emitter),
+ }, options);
+ if (options.disable) {
+ return Object.assign(load, defaultResult);
+ }
+ function del() {
+ var key = hash.apply(void 0, __spread$1(arguments));
+ cache.del(key);
+ }
+ function emit(event) {
+ var parameters = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ parameters[_i - 1] = arguments[_i];
+ }
+ emitter.emit.apply(emitter, __spread$1([event], parameters));
+ }
+ function isPromise(result) {
+ // detect native, bluebird, A+ promises
+ return result && result.then && typeof result.then === 'function';
+ }
+ function processResult(result) {
+ var res = result;
+ if (clone) {
+ if (isPromise(res)) {
+ res = res.then(lodash_clonedeep_1$1.default);
+ }
+ else {
+ res = lodash_clonedeep_1$1.default(res);
+ }
+ }
+ if (freeze) {
+ if (isPromise(res)) {
+ res = res.then(freeze_1$1.deepFreeze);
+ }
+ else {
+ freeze_1$1.deepFreeze(res);
+ }
+ }
+ return res;
+ }
+ var result = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ if (bypass && bypass.apply(void 0, __spread$1(args))) {
+ emit.apply(void 0, __spread$1(['miss'], args));
+ return load.apply(void 0, __spread$1(args));
+ }
+ var key = hash.apply(void 0, __spread$1(args));
+ var fromCache = cache.get(key);
+ if (fromCache) {
+ emit.apply(void 0, __spread$1(['hit'], args));
+ return processResult(fromCache);
+ }
+ emit.apply(void 0, __spread$1(['miss'], args));
+ var result = load.apply(void 0, __spread$1(args));
+ if (itemMaxAge) {
+ // @ts-ignore
+ cache.set(key, result, itemMaxAge.apply(void 0, __spread$1(args.concat([result]))));
+ }
+ else {
+ cache.set(key, result);
+ }
+ return processResult(result);
+ };
+ return Object.assign(result, defaultResult);
+}
+sync.syncMemoizer = syncMemoizer;
+
+var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
+ if (!m) return o;
+ var i = m.call(o), r, ar = [], e;
+ try {
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+ }
+ catch (error) { e = { error: error }; }
+ finally {
+ try {
+ if (r && !r.done && (m = i["return"])) m.call(i);
+ }
+ finally { if (e) throw e.error; }
+ }
+ return ar;
+};
+var __spread = (commonjsGlobal && commonjsGlobal.__spread) || function () {
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
+ return ar;
+};
+var __values = (commonjsGlobal && commonjsGlobal.__values) || function(o) {
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+ if (m) return m.call(o);
+ if (o && typeof o.length === "number") return {
+ next: function () {
+ if (o && i >= o.length) o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+};
+var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(async, "__esModule", { value: true });
+async.asyncMemoizer = void 0;
+var lru_cache_1 = __importDefault(lruCache$1);
+var events_1 = require$$1$3;
+var lodash_clonedeep_1 = __importDefault(lodash_clonedeepExports);
+var freeze_1 = freeze;
+var sync_1 = sync;
+function asyncMemoizer(options) {
+ var cache = new lru_cache_1.default(options);
+ var load = options.load;
+ var hash = options.hash;
+ var bypass = options.bypass;
+ var itemMaxAge = options.itemMaxAge;
+ var freeze = options.freeze;
+ var clone = options.clone;
+ var queueMaxAge = options.queueMaxAge || 1000;
+ var loading = new Map();
+ var emitter = new events_1.EventEmitter();
+ var memoizerMethods = Object.assign({
+ del: del,
+ reset: function () { return cache.reset(); },
+ keys: cache.keys.bind(cache),
+ on: emitter.on.bind(emitter),
+ once: emitter.once.bind(emitter)
+ }, options);
+ if (options.disable) {
+ return Object.assign(load, memoizerMethods);
+ }
+ function del() {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var key = hash.apply(void 0, __spread(args));
+ cache.del(key);
+ }
+ function add(key, parameters, result) {
+ if (freeze) {
+ result.forEach(freeze_1.deepFreeze);
+ }
+ if (itemMaxAge) {
+ cache.set(key, result, itemMaxAge.apply(void 0, __spread(parameters.concat(result))));
+ }
+ else {
+ cache.set(key, result);
+ }
+ }
+ function runCallbacks(callbacks, args) {
+ var e_1, _a;
+ try {
+ for (var callbacks_1 = __values(callbacks), callbacks_1_1 = callbacks_1.next(); !callbacks_1_1.done; callbacks_1_1 = callbacks_1.next()) {
+ var callback = callbacks_1_1.value;
+ // Simulate async call when returning from cache
+ // and yield between callback resolution
+ if (clone) {
+ setImmediate.apply(void 0, __spread([callback], args.map(lodash_clonedeep_1.default)));
+ }
+ else {
+ setImmediate.apply(void 0, __spread([callback], args));
+ }
+ }
+ }
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
+ finally {
+ try {
+ if (callbacks_1_1 && !callbacks_1_1.done && (_a = callbacks_1.return)) _a.call(callbacks_1);
+ }
+ finally { if (e_1) throw e_1.error; }
+ }
+ }
+ function emit(event) {
+ var parameters = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ parameters[_i - 1] = arguments[_i];
+ }
+ emitter.emit.apply(emitter, __spread([event], parameters));
+ }
+ function memoizedFunction() {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var parameters = args.slice(0, -1);
+ var callback = args.slice(-1).pop();
+ var key;
+ if (bypass && bypass.apply(void 0, __spread(parameters))) {
+ emit.apply(void 0, __spread(['miss'], parameters));
+ return load.apply(void 0, __spread(args));
+ }
+ if (parameters.length === 0 && !hash) {
+ //the load function only receives callback.
+ key = '_';
+ }
+ else {
+ key = hash.apply(void 0, __spread(parameters));
+ }
+ var fromCache = cache.get(key);
+ if (fromCache) {
+ emit.apply(void 0, __spread(['hit'], parameters));
+ // found, invoke callback
+ return runCallbacks([callback], [null].concat(fromCache));
+ }
+ var pendingLoad = loading.get(key);
+ if (pendingLoad && pendingLoad.expiresAt > Date.now()) {
+ // request already in progress, queue and return
+ pendingLoad.queue.push(callback);
+ emit.apply(void 0, __spread(['queue'], parameters));
+ return;
+ }
+ emit.apply(void 0, __spread(['miss'], parameters));
+ var started = Date.now();
+ // no pending request or not resolved before expiration
+ // create a new queue and invoke load
+ var queue = [callback];
+ loading.set(key, {
+ queue: queue,
+ expiresAt: started + queueMaxAge
+ });
+ var loadHandler = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var err = args[0];
+ if (!err) {
+ add(key, parameters, args.slice(1));
+ }
+ // this can potentially delete a different queue than `queue` if
+ // this callback was called after expiration.
+ // that will only cause a new call to be performed and a new queue to be
+ // created
+ loading.delete(key);
+ emit.apply(void 0, __spread(['loaded', Date.now() - started], parameters));
+ runCallbacks(queue, args);
+ };
+ load.apply(void 0, __spread(parameters, [loadHandler]));
+ }
+ return Object.assign(memoizedFunction, memoizerMethods);
+}
+async.asyncMemoizer = asyncMemoizer;
+asyncMemoizer.sync = sync_1.syncMemoizer;
+
+var async_1 = async;
+var lib$3 = async_1.asyncMemoizer;
+
+const logger$2 = srcExports('jwks');
+const memoizer = lib$3;
+const { promisify, callbackify: callbackify$1 } = require$$1$1;
+
+function cacheWrapper(client, { cacheMaxEntries = 5, cacheMaxAge = 600000 }) {
+ logger$2(`Configured caching of signing keys. Max: ${cacheMaxEntries} / Age: ${cacheMaxAge}`);
+ return promisify(memoizer({
+ hash: (kid) => kid,
+ load: callbackify$1(client.getSigningKey.bind(client)),
+ maxAge: cacheMaxAge,
+ max: cacheMaxEntries
+ }));
+}
+
+cache.default = cacheWrapper;
+
+var rateLimit = {};
+
+var limiter = {};
+
+/**
+ * A hierarchical token bucket for rate limiting. See
+ * http://en.wikipedia.org/wiki/Token_bucket for more information.
+ * @author John Hurliman
+ *
+ * @param {Number} bucketSize Maximum number of tokens to hold in the bucket.
+ * Also known as the burst rate.
+ * @param {Number} tokensPerInterval Number of tokens to drip into the bucket
+ * over the course of one interval.
+ * @param {String|Number} interval The interval length in milliseconds, or as
+ * one of the following strings: 'second', 'minute', 'hour', day'.
+ * @param {TokenBucket} parentBucket Optional. A token bucket that will act as
+ * the parent of this bucket.
+ */
+var TokenBucket$1 = function(bucketSize, tokensPerInterval, interval, parentBucket) {
+ this.bucketSize = bucketSize;
+ this.tokensPerInterval = tokensPerInterval;
+
+ if (typeof interval === 'string') {
+ switch (interval) {
+ case 'sec': case 'second':
+ this.interval = 1000; break;
+ case 'min': case 'minute':
+ this.interval = 1000 * 60; break;
+ case 'hr': case 'hour':
+ this.interval = 1000 * 60 * 60; break;
+ case 'day':
+ this.interval = 1000 * 60 * 60 * 24; break;
+ default:
+ throw new Error('Invaid interval ' + interval);
+ }
+ } else {
+ this.interval = interval;
+ }
+
+ this.parentBucket = parentBucket;
+ this.content = 0;
+ this.lastDrip = +new Date();
+};
+
+TokenBucket$1.prototype = {
+ bucketSize: 1,
+ tokensPerInterval: 1,
+ interval: 1000,
+ parentBucket: null,
+ content: 0,
+ lastDrip: 0,
+
+ /**
+ * Remove the requested number of tokens and fire the given callback. If the
+ * bucket (and any parent buckets) contains enough tokens this will happen
+ * immediately. Otherwise, the removal and callback will happen when enough
+ * tokens become available.
+ * @param {Number} count The number of tokens to remove.
+ * @param {Function} callback(err, remainingTokens)
+ * @returns {Boolean} True if the callback was fired immediately, otherwise
+ * false.
+ */
+ removeTokens: function(count, callback) {
+ var self = this;
+
+ // Is this an infinite size bucket?
+ if (!this.bucketSize) {
+ process.nextTick(callback.bind(null, null, count, Number.POSITIVE_INFINITY));
+ return true;
+ }
+
+ // Make sure the bucket can hold the requested number of tokens
+ if (count > this.bucketSize) {
+ process.nextTick(callback.bind(null, 'Requested tokens ' + count + ' exceeds bucket size ' +
+ this.bucketSize, null));
+ return false;
+ }
+
+ // Drip new tokens into this bucket
+ this.drip();
+
+ // If we don't have enough tokens in this bucket, come back later
+ if (count > this.content)
+ return comeBackLater();
+
+ if (this.parentBucket) {
+ // Remove the requested from the parent bucket first
+ return this.parentBucket.removeTokens(count, function(err, remainingTokens) {
+ if (err) return callback(err, null);
+
+ // Check that we still have enough tokens in this bucket
+ if (count > self.content)
+ return comeBackLater();
+
+ // Tokens were removed from the parent bucket, now remove them from
+ // this bucket and fire the callback. Note that we look at the current
+ // bucket and parent bucket's remaining tokens and return the smaller
+ // of the two values
+ self.content -= count;
+ callback(null, Math.min(remainingTokens, self.content));
+ });
+ } else {
+ // Remove the requested tokens from this bucket and fire the callback
+ this.content -= count;
+ process.nextTick(callback.bind(null, null, this.content));
+ return true;
+ }
+
+ function comeBackLater() {
+ // How long do we need to wait to make up the difference in tokens?
+ var waitInterval = Math.ceil(
+ (count - self.content) * (self.interval / self.tokensPerInterval));
+ setTimeout(function() { self.removeTokens(count, callback); }, waitInterval);
+ return false;
+ }
+ },
+
+ /**
+ * Attempt to remove the requested number of tokens and return immediately.
+ * If the bucket (and any parent buckets) contains enough tokens this will
+ * return true, otherwise false is returned.
+ * @param {Number} count The number of tokens to remove.
+ * @param {Boolean} True if the tokens were successfully removed, otherwise
+ * false.
+ */
+ tryRemoveTokens: function(count) {
+ // Is this an infinite size bucket?
+ if (!this.bucketSize)
+ return true;
+
+ // Make sure the bucket can hold the requested number of tokens
+ if (count > this.bucketSize)
+ return false;
+
+ // Drip new tokens into this bucket
+ this.drip();
+
+ // If we don't have enough tokens in this bucket, return false
+ if (count > this.content)
+ return false;
+
+ // Try to remove the requested tokens from the parent bucket
+ if (this.parentBucket && !this.parentBucket.tryRemoveTokens(count))
+ return false;
+
+ // Remove the requested tokens from this bucket and return
+ this.content -= count;
+ return true;
+ },
+
+ /**
+ * Add any new tokens to the bucket since the last drip.
+ * @returns {Boolean} True if new tokens were added, otherwise false.
+ */
+ drip: function() {
+ if (!this.tokensPerInterval) {
+ this.content = this.bucketSize;
+ return;
+ }
+
+ var now = +new Date();
+ var deltaMS = Math.max(now - this.lastDrip, 0);
+ this.lastDrip = now;
+
+ var dripAmount = deltaMS * (this.tokensPerInterval / this.interval);
+ this.content = Math.min(this.content + dripAmount, this.bucketSize);
+ }
+};
+
+var tokenBucket = TokenBucket$1;
+
+var getMilliseconds$1 = function() {
+ if (typeof process !== 'undefined' && process.hrtime) {
+ var hrtime = process.hrtime();
+ var seconds = hrtime[0];
+ var nanoseconds = hrtime[1];
+
+ return seconds * 1e3 + Math.floor(nanoseconds / 1e6);
+ }
+
+ return new Date().getTime();
+};
+
+var clock = getMilliseconds$1;
+
+var TokenBucket = tokenBucket;
+var getMilliseconds = clock;
+
+/**
+ * A generic rate limiter. Underneath the hood, this uses a token bucket plus
+ * an additional check to limit how many tokens we can remove each interval.
+ * @author John Hurliman
+ *
+ * @param {Number} tokensPerInterval Maximum number of tokens that can be
+ * removed at any given moment and over the course of one interval.
+ * @param {String|Number} interval The interval length in milliseconds, or as
+ * one of the following strings: 'second', 'minute', 'hour', day'.
+ * @param {Boolean} fireImmediately Optional. Whether or not the callback
+ * will fire immediately when rate limiting is in effect (default is false).
+ */
+var RateLimiter$1 = function(tokensPerInterval, interval, fireImmediately) {
+ this.tokenBucket = new TokenBucket(tokensPerInterval, tokensPerInterval,
+ interval, null);
+
+ // Fill the token bucket to start
+ this.tokenBucket.content = tokensPerInterval;
+
+ this.curIntervalStart = getMilliseconds();
+ this.tokensThisInterval = 0;
+ this.fireImmediately = fireImmediately;
+};
+
+RateLimiter$1.prototype = {
+ tokenBucket: null,
+ curIntervalStart: 0,
+ tokensThisInterval: 0,
+ fireImmediately: false,
+
+ /**
+ * Remove the requested number of tokens and fire the given callback. If the
+ * rate limiter contains enough tokens and we haven't spent too many tokens
+ * in this interval already, this will happen immediately. Otherwise, the
+ * removal and callback will happen when enough tokens become available.
+ * @param {Number} count The number of tokens to remove.
+ * @param {Function} callback(err, remainingTokens)
+ * @returns {Boolean} True if the callback was fired immediately, otherwise
+ * false.
+ */
+ removeTokens: function(count, callback) {
+ // Make sure the request isn't for more than we can handle
+ if (count > this.tokenBucket.bucketSize) {
+ process.nextTick(callback.bind(null, 'Requested tokens ' + count +
+ ' exceeds maximum tokens per interval ' + this.tokenBucket.bucketSize,
+ null));
+ return false;
+ }
+
+ var self = this;
+ var now = getMilliseconds();
+
+ // Advance the current interval and reset the current interval token count
+ // if needed
+ if (now < this.curIntervalStart
+ || now - this.curIntervalStart >= this.tokenBucket.interval) {
+ this.curIntervalStart = now;
+ this.tokensThisInterval = 0;
+ }
+
+ // If we don't have enough tokens left in this interval, wait until the
+ // next interval
+ if (count > this.tokenBucket.tokensPerInterval - this.tokensThisInterval) {
+ if (this.fireImmediately) {
+ process.nextTick(callback.bind(null, null, -1));
+ } else {
+ var waitInterval = Math.ceil(
+ this.curIntervalStart + this.tokenBucket.interval - now);
+
+ setTimeout(function() {
+ self.tokenBucket.removeTokens(count, afterTokensRemoved);
+ }, waitInterval);
+ }
+ return false;
+ }
+
+ // Remove the requested number of tokens from the token bucket
+ return this.tokenBucket.removeTokens(count, afterTokensRemoved);
+
+ function afterTokensRemoved(err, tokensRemaining) {
+ if (err) return callback(err, null);
+
+ self.tokensThisInterval += count;
+ callback(null, tokensRemaining);
+ }
+ },
+
+ /**
+ * Attempt to remove the requested number of tokens and return immediately.
+ * If the bucket (and any parent buckets) contains enough tokens and we
+ * haven't spent too many tokens in this interval already, this will return
+ * true. Otherwise, false is returned.
+ * @param {Number} count The number of tokens to remove.
+ * @param {Boolean} True if the tokens were successfully removed, otherwise
+ * false.
+ */
+ tryRemoveTokens: function(count) {
+ // Make sure the request isn't for more than we can handle
+ if (count > this.tokenBucket.bucketSize)
+ return false;
+
+ var now = getMilliseconds();
+
+ // Advance the current interval and reset the current interval token count
+ // if needed
+ if (now < this.curIntervalStart
+ || now - this.curIntervalStart >= this.tokenBucket.interval) {
+ this.curIntervalStart = now;
+ this.tokensThisInterval = 0;
+ }
+
+ // If we don't have enough tokens left in this interval, return false
+ if (count > this.tokenBucket.tokensPerInterval - this.tokensThisInterval)
+ return false;
+
+ // Try to remove the requested number of tokens from the token bucket
+ var removed = this.tokenBucket.tryRemoveTokens(count);
+ if (removed) {
+ this.tokensThisInterval += count;
+ }
+ return removed;
+ },
+
+ /**
+ * Returns the number of tokens remaining in the TokenBucket.
+ * @returns {Number} The number of tokens remaining.
+ */
+ getTokensRemaining: function () {
+ this.tokenBucket.drip();
+ return this.tokenBucket.content;
+ }
+};
+
+var rateLimiter = RateLimiter$1;
+
+limiter.RateLimiter = rateLimiter;
+limiter.TokenBucket = tokenBucket;
+
+function JwksRateLimitError$1(message) {
+ Error.call(this, message);
+ Error.captureStackTrace(this, this.constructor);
+ this.name = 'JwksRateLimitError';
+ this.message = message;
+}
+
+JwksRateLimitError$1.prototype = Object.create(Error.prototype);
+JwksRateLimitError$1.prototype.constructor = JwksRateLimitError$1;
+var JwksRateLimitError_1 = JwksRateLimitError$1;
+
+const logger$1 = srcExports('jwks');
+const { RateLimiter } = limiter;
+
+const JwksRateLimitError = JwksRateLimitError_1;
+
+function rateLimitWrapper(client, { jwksRequestsPerMinute = 10 }) {
+ const getSigningKey = client.getSigningKey.bind(client);
+
+ const limiter = new RateLimiter(jwksRequestsPerMinute, 'minute', true);
+ logger$1(`Configured rate limiting to JWKS endpoint at ${jwksRequestsPerMinute}/minute`);
+
+ return async (kid) => await new Promise((resolve, reject) => {
+ limiter.removeTokens(1, async (err, remaining) => {
+ if (err) {
+ reject(err);
+ }
+
+ logger$1('Requests to the JWKS endpoint available for the next minute:', remaining);
+ if (remaining < 0) {
+ logger$1('Too many requests to the JWKS endpoint');
+ reject(new JwksRateLimitError('Too many requests to the JWKS endpoint'));
+ } else {
+ try {
+ const key = await getSigningKey(kid);
+ resolve(key);
+ } catch (error) {
+ reject(error);
+ }
+ }
+ });
+ });
+}
+
+rateLimit.default = rateLimitWrapper;
+
+var interceptor = {};
+
+const retrieveSigningKeys$1 = utils$2.retrieveSigningKeys;
+
+/**
+ * Uses getKeysInterceptor to allow users to retrieve keys from a file,
+ * external cache, or provided object before falling back to the jwksUri endpoint
+ */
+function getKeysInterceptor$1(client, { getKeysInterceptor }) {
+ const getSigningKey = client.getSigningKey.bind(client);
+
+ return async (kid) => {
+ const keys = await getKeysInterceptor();
+
+ let signingKeys;
+ if (keys && keys.length) {
+ signingKeys = await retrieveSigningKeys$1(keys);
+ }
+
+ if (signingKeys && signingKeys.length) {
+ const key = signingKeys.find(k => !kid || k.kid === kid);
+
+ if (key) {
+ return key;
+ }
+ }
+
+ return getSigningKey(kid);
+ };
+}
+
+interceptor.default = getKeysInterceptor$1;
+
+var callbackSupport$2 = {};
+
+const { callbackify } = require$$1$1;
+
+const callbackSupport$1 = (client) => {
+ const getSigningKey = client.getSigningKey.bind(client);
+
+ return (kid, cb) => {
+ if (cb) {
+ const callbackFunc = callbackify(getSigningKey);
+ return callbackFunc(kid, cb);
+ }
+
+ return getSigningKey(kid);
+ };
+};
+
+callbackSupport$2.default = callbackSupport$1;
+
+var wrappers = {
+ request: request$6.default,
+ cacheSigningKey: cache.default,
+ rateLimitSigningKey: rateLimit.default,
+ getKeysInterceptor: interceptor.default,
+ callbackSupport: callbackSupport$2.default
+};
+
+function JwksError$1(message) {
+ Error.call(this, message);
+ Error.captureStackTrace(this, this.constructor);
+ this.name = 'JwksError';
+ this.message = message;
+}
+
+JwksError$1.prototype = Object.create(Error.prototype);
+JwksError$1.prototype.constructor = JwksError$1;
+var JwksError_1 = JwksError$1;
+
+function SigningKeyNotFoundError$1(message) {
+ Error.call(this, message);
+ Error.captureStackTrace(this, this.constructor);
+ this.name = 'SigningKeyNotFoundError';
+ this.message = message;
+}
+
+SigningKeyNotFoundError$1.prototype = Object.create(Error.prototype);
+SigningKeyNotFoundError$1.prototype.constructor = SigningKeyNotFoundError$1;
+var SigningKeyNotFoundError_1 = SigningKeyNotFoundError$1;
+
+const logger = srcExports('jwks');
+const { retrieveSigningKeys } = utils$2 ;
+const { request: request$5, cacheSigningKey, rateLimitSigningKey, getKeysInterceptor, callbackSupport } = wrappers;
+const JwksError = JwksError_1;
+const SigningKeyNotFoundError = SigningKeyNotFoundError_1;
+
+let JwksClient$4 = class JwksClient {
+ constructor(options) {
+ this.options = {
+ rateLimit: false,
+ cache: true,
+ timeout: 30000,
+ ...options
+ };
+
+ // Initialize wrappers.
+ if (this.options.getKeysInterceptor) {
+ this.getSigningKey = getKeysInterceptor(this, options);
+ }
+
+ if (this.options.rateLimit) {
+ this.getSigningKey = rateLimitSigningKey(this, options);
+ }
+ if (this.options.cache) {
+ this.getSigningKey = cacheSigningKey(this, options);
+ }
+
+ this.getSigningKey = callbackSupport(this, options);
+ }
+
+ async getKeys() {
+ logger(`Fetching keys from '${this.options.jwksUri}'`);
+
+ try {
+ const res = await request$5({
+ uri: this.options.jwksUri,
+ headers: this.options.requestHeaders,
+ agent: this.options.requestAgent,
+ timeout: this.options.timeout,
+ fetcher: this.options.fetcher
+ });
+
+ logger('Keys:', res.keys);
+ return res.keys;
+ } catch (err) {
+ const { errorMsg } = err;
+ logger('Failure:', errorMsg || err);
+ throw (errorMsg ? new JwksError(errorMsg) : err);
+ }
+ }
+
+ async getSigningKeys() {
+ const keys = await this.getKeys();
+
+ if (!keys || !keys.length) {
+ throw new JwksError('The JWKS endpoint did not contain any keys');
+ }
+
+ const signingKeys = await retrieveSigningKeys(keys);
+
+ if (!signingKeys.length) {
+ throw new JwksError('The JWKS endpoint did not contain any signing keys');
+ }
+
+ logger('Signing Keys:', signingKeys);
+ return signingKeys;
+ }
+
+ async getSigningKey (kid) {
+ logger(`Fetching signing key for '${kid}'`);
+ const keys = await this.getSigningKeys();
+
+ const kidDefined = kid !== undefined && kid !== null;
+ if (!kidDefined && keys.length > 1) {
+ logger('No KID specified and JWKS endpoint returned more than 1 key');
+ throw new SigningKeyNotFoundError('No KID specified and JWKS endpoint returned more than 1 key');
+ }
+
+ const key = keys.find(k => !kidDefined || k.kid === kid);
+ if (key) {
+ return key;
+ } else {
+ logger(`Unable to find a signing key that matches '${kid}'`);
+ throw new SigningKeyNotFoundError(`Unable to find a signing key that matches '${kid}'`);
+ }
+ }
+};
+
+var JwksClient_1$1 = {
+ JwksClient: JwksClient$4
+};
+
+function ArgumentError$3(message) {
+ Error.call(this, message);
+ Error.captureStackTrace(this, this.constructor);
+ this.name = 'ArgumentError';
+ this.message = message;
+}
+
+ArgumentError$3.prototype = Object.create(Error.prototype);
+ArgumentError$3.prototype.constructor = ArgumentError$3;
+var ArgumentError_1 = ArgumentError$3;
+
+var errors$2 = {
+ ArgumentError: ArgumentError_1,
+ JwksError: JwksError_1,
+ JwksRateLimitError: JwksRateLimitError_1,
+ SigningKeyNotFoundError: SigningKeyNotFoundError_1
+};
+
+var hapi = {exports: {}};
+
+const allowedSignatureAlg = [
+ 'RS256',
+ 'RS384',
+ 'RS512',
+ 'PS256',
+ 'PS384',
+ 'PS512',
+ 'ES256',
+ 'ES256K',
+ 'ES384',
+ 'ES512',
+ 'EdDSA'
+];
+
+var config$1 = allowedSignatureAlg;
+
+(function (module) {
+ const { ArgumentError } = errors$2;
+ const { JwksClient } = JwksClient_1$1;
+ const supportedAlg = config$1;
+
+ const handleSigningKeyError = (err, cb) => {
+ // If we didn't find a match, can't provide a key.
+ if (err && err.name === 'SigningKeyNotFoundError') {
+ return cb(err, null, null);
+ }
+
+ // If an error occured like rate limiting or HTTP issue, we'll bubble up the error.
+ if (err) {
+ return cb(err, null, null);
+ }
+ };
+
+ /**
+ * Call hapiJwt2Key as a Promise
+ * @param {object} options
+ * @returns {Promise}
+ */
+ module.exports.hapiJwt2KeyAsync = (options) => {
+ const secretProvider = module.exports.hapiJwt2Key(options);
+ return function(decoded) {
+ return new Promise((resolve, reject) => {
+ const cb = (err, key) => {
+ (!key || err) ? reject(err) : resolve({ key });
+ };
+ secretProvider(decoded, cb);
+ });
+ };
+ };
+
+ module.exports.hapiJwt2Key = function (options) {
+ if (options === null || options === undefined) {
+ throw new ArgumentError('An options object must be provided when initializing hapiJwt2Key');
+ }
+
+ const client = new JwksClient(options);
+ const onError = options.handleSigningKeyError || handleSigningKeyError;
+
+ return function secretProvider(decoded, cb) {
+ // We cannot find a signing certificate if there is no header (no kid).
+ if (!decoded || !decoded.header) {
+ return cb(new Error('Cannot find a signing certificate if there is no header'), null, null);
+ }
+
+ if (!supportedAlg.includes(decoded.header.alg)) {
+ return cb(new Error('Unsupported algorithm ' + decoded.header.alg + ' supplied.'), null, null);
+ }
+
+ client.getSigningKey(decoded.header.kid)
+ .then(key => {
+ return cb(null, key.publicKey || key.rsaPublicKey, key);
+ }).catch(err => {
+ return onError(err, (newError) => cb(newError, null, null));
+ });
+ };
+ };
+} (hapi));
+
+var hapiExports = hapi.exports;
+
+var express = {};
+
+const { ArgumentError: ArgumentError$2 } = errors$2;
+const { JwksClient: JwksClient$3 } = JwksClient_1$1;
+const supportedAlg$2 = config$1;
+
+const handleSigningKeyError$1 = (err, cb) => {
+ // If we didn't find a match, can't provide a key.
+ if (err && err.name === 'SigningKeyNotFoundError') {
+ return cb(null);
+ }
+
+ // If an error occured like rate limiting or HTTP issue, we'll bubble up the error.
+ if (err) {
+ return cb(err);
+ }
+};
+
+express.expressJwtSecret = function (options) {
+ if (options === null || options === undefined) {
+ throw new ArgumentError$2('An options object must be provided when initializing expressJwtSecret');
+ }
+
+ const client = new JwksClient$3(options);
+ const onError = options.handleSigningKeyError || handleSigningKeyError$1;
+
+ const expressJwt7Provider = async (req, token) => {
+ if (!token) { return; }
+ const header = token.header;
+ if (!header || !supportedAlg$2.includes(header.alg)) {
+ return;
+ }
+ try {
+ const key = await client.getSigningKey(header.kid);
+ return key.publicKey || key.rsaPublicKey;
+ } catch (err) {
+ return new Promise((resolve, reject) => {
+ onError(err, (newError) => {
+ if (!newError) { return resolve(); }
+ reject(newError);
+ });
+ });
+ }
+ };
+
+ return function secretProvider(req, header, payload, cb) {
+ //This function has 4 parameters to make it work with express-jwt@6
+ //but it also supports express-jwt@7 which only has 2.
+ if (arguments.length === 4) {
+ expressJwt7Provider(req, { header })
+ .then(key => {
+ setImmediate(cb, null, key);
+ }).catch(err => {
+ setImmediate(cb, err);
+ });
+
+ return;
+ }
+
+ return expressJwt7Provider(req, arguments[1]);
+ };
+};
+
+var koa = {};
+
+const { ArgumentError: ArgumentError$1 } = errors$2;
+const { JwksClient: JwksClient$2 } = JwksClient_1$1;
+const supportedAlg$1 = config$1;
+
+koa.koaJwtSecret = function (options = {}) {
+ if (!options.jwksUri) {
+ throw new ArgumentError$1('No JWKS provided. Please provide a jwksUri');
+ }
+
+ const client = new JwksClient$2(options);
+
+ return function secretProvider({ alg, kid } = {}) {
+ return new Promise((resolve, reject) => {
+ if (!supportedAlg$1.includes(alg)) {
+ return reject(new Error('Missing / invalid token algorithm'));
+ }
+
+ client.getSigningKey(kid)
+ .then(key => {
+ resolve(key.publicKey || key.rsaPublicKey);
+ }).catch(err => {
+ if (options.handleSigningKeyError) {
+ return options.handleSigningKeyError(err).then(reject);
+ }
+
+ return reject(err);
+ });
+ });
+ };
+};
+
+var passport = {};
+
+const jose$3 = cjs;
+const { ArgumentError } = errors$2;
+const { JwksClient: JwksClient$1 } = JwksClient_1$1;
+const supportedAlg = config$1;
+
+const handleSigningKeyError = (err, cb) => {
+ // If we didn't find a match, can't provide a key.
+ if (err && err.name === 'SigningKeyNotFoundError') {
+ return cb(null);
+ }
+
+ // If an error occured like rate limiting or HTTP issue, we'll bubble up the error.
+ if (err) {
+ return cb(err);
+ }
+};
+
+passport.passportJwtSecret = function (options) {
+ if (options === null || options === undefined) {
+ throw new ArgumentError('An options object must be provided when initializing passportJwtSecret');
+ }
+
+ if (!options.jwksUri) {
+ throw new ArgumentError('No JWKS provided. Please provide a jwksUri');
+ }
+
+ const client = new JwksClient$1(options);
+ const onError = options.handleSigningKeyError || handleSigningKeyError;
+
+ return function secretProvider(req, rawJwtToken, cb) {
+ let decoded;
+ try {
+ decoded = {
+ payload: jose$3.decodeJwt(rawJwtToken),
+ header: jose$3.decodeProtectedHeader(rawJwtToken)
+ };
+ } catch (err) {
+ decoded = null;
+ }
+
+ if (!decoded || !supportedAlg.includes(decoded.header.alg)) {
+ return cb(null, null);
+ }
+
+ client.getSigningKey(decoded.header.kid)
+ .then(key => {
+ cb(null, key.publicKey || key.rsaPublicKey);
+ }).catch(err => {
+ onError(err, (newError) => cb(newError, null));
+ });
+ };
+};
+
+const { JwksClient } = JwksClient_1$1;
+const errors$1 = errors$2;
+const { hapiJwt2Key, hapiJwt2KeyAsync } = hapiExports;
+const { expressJwtSecret } = express;
+const { koaJwtSecret } = koa;
+const { passportJwtSecret } = passport;
+
+src.exports = (options) => {
+ return new JwksClient(options);
+};
+var JwksClient_1 = src.exports.JwksClient = JwksClient;
+
+src.exports.ArgumentError = errors$1.ArgumentError;
+src.exports.JwksError = errors$1.JwksError;
+src.exports.JwksRateLimitError = errors$1.JwksRateLimitError;
+src.exports.SigningKeyNotFoundError = errors$1.SigningKeyNotFoundError;
+
+src.exports.expressJwtSecret = expressJwtSecret;
+src.exports.hapiJwt2Key = hapiJwt2Key;
+src.exports.hapiJwt2KeyAsync = hapiJwt2KeyAsync;
+src.exports.koaJwtSecret = koaJwtSecret;
+src.exports.passportJwtSecret = passportJwtSecret;
+
+const { format: format$3 } = require$$1$1;
+
+let OPError$5 = class OPError extends Error {
+ constructor({ error_description, error, error_uri, session_state, state, scope }, response) {
+ super(!error_description ? error : `${error} (${error_description})`);
+
+ Object.assign(
+ this,
+ { error },
+ error_description && { error_description },
+ error_uri && { error_uri },
+ state && { state },
+ scope && { scope },
+ session_state && { session_state },
+ );
+
+ if (response) {
+ Object.defineProperty(this, 'response', {
+ value: response,
+ });
+ }
+
+ this.name = this.constructor.name;
+ Error.captureStackTrace(this, this.constructor);
+ }
+};
+
+let RPError$8 = class RPError extends Error {
+ constructor(...args) {
+ if (typeof args[0] === 'string') {
+ super(format$3(...args));
+ } else {
+ const { message, printf, response, ...rest } = args[0];
+ if (printf) {
+ super(format$3(...printf));
+ } else {
+ super(message);
+ }
+ Object.assign(this, rest);
+ if (response) {
+ Object.defineProperty(this, 'response', {
+ value: response,
+ });
+ }
+ }
+
+ this.name = this.constructor.name;
+ Error.captureStackTrace(this, this.constructor);
+ }
+};
+
+var errors = {
+ OPError: OPError$5,
+ RPError: RPError$8,
+};
+
+var client$1 = {exports: {}};
+
+const crypto$4 = require$$0$1;
+
+const [major$3, minor$3] = process.version.substring(1).split('.').map((x) => parseInt(x, 10));
+const xofOutputLength = major$3 > 12 || (major$3 === 12 && minor$3 >= 8);
+const shake256$1 = xofOutputLength && crypto$4.getHashes().includes('shake256');
+
+var shake256_1 = shake256$1;
+
+const { strict: assert$3 } = require$$0$5;
+const { createHash: createHash$1 } = require$$0$1;
+const { format: format$2 } = require$$1$1;
+
+const shake256 = shake256_1;
+
+let encode$1;
+if (Buffer.isEncoding('base64url')) {
+ encode$1 = (input) => input.toString('base64url');
+} else {
+ const fromBase64 = (base64) => base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
+ encode$1 = (input) => fromBase64(input.toString('base64'));
+}
+
+/** SPECIFICATION
+ * Its (_hash) value is the base64url encoding of the left-most half of the hash of the octets of
+ * the ASCII representation of the token value, where the hash algorithm used is the hash algorithm
+ * used in the alg Header Parameter of the ID Token's JOSE Header. For instance, if the alg is
+ * RS256, hash the token value with SHA-256, then take the left-most 128 bits and base64url encode
+ * them. The _hash value is a case sensitive string.
+ */
+
+/**
+ * @name getHash
+ * @api private
+ *
+ * returns the sha length based off the JOSE alg heade value, defaults to sha256
+ *
+ * @param token {String} token value to generate the hash from
+ * @param alg {String} ID Token JOSE header alg value (i.e. RS256, HS384, ES512, PS256)
+ * @param [crv] {String} For EdDSA the curve decides what hash algorithm is used. Required for EdDSA
+ */
+function getHash(alg, crv) {
+ switch (alg) {
+ case 'HS256':
+ case 'RS256':
+ case 'PS256':
+ case 'ES256':
+ case 'ES256K':
+ return createHash$1('sha256');
+
+ case 'HS384':
+ case 'RS384':
+ case 'PS384':
+ case 'ES384':
+ return createHash$1('sha384');
+
+ case 'HS512':
+ case 'RS512':
+ case 'PS512':
+ case 'ES512':
+ return createHash$1('sha512');
+
+ case 'EdDSA':
+ switch (crv) {
+ case 'Ed25519':
+ return createHash$1('sha512');
+ case 'Ed448':
+ if (!shake256) {
+ throw new TypeError('Ed448 *_hash calculation is not supported in your Node.js runtime version');
+ }
+
+ return createHash$1('shake256', { outputLength: 114 });
+ default:
+ throw new TypeError('unrecognized or invalid EdDSA curve provided');
+ }
+
+ default:
+ throw new TypeError('unrecognized or invalid JWS algorithm provided');
+ }
+}
+
+function generate(token, alg, crv) {
+ const digest = getHash(alg, crv).update(token).digest();
+ return encode$1(digest.slice(0, digest.length / 2));
+}
+
+function validate$1(names, actual, source, alg, crv) {
+ if (typeof names.claim !== 'string' || !names.claim) {
+ throw new TypeError('names.claim must be a non-empty string');
+ }
+
+ if (typeof names.source !== 'string' || !names.source) {
+ throw new TypeError('names.source must be a non-empty string');
+ }
+
+ assert$3(typeof actual === 'string' && actual, `${names.claim} must be a non-empty string`);
+ assert$3(typeof source === 'string' && source, `${names.source} must be a non-empty string`);
+
+ let expected;
+ let msg;
+ try {
+ expected = generate(source, alg, crv);
+ } catch (err) {
+ msg = format$2('%s could not be validated (%s)', names.claim, err.message);
+ }
+
+ msg = msg || format$2('%s mismatch, expected %s, got: %s', names.claim, expected, actual);
+
+ assert$3.equal(expected, actual, msg);
+}
+
+var lib$2 = {
+ validate: validate$1,
+ generate,
+};
+
+const util$6 = require$$1$1;
+const crypto$3 = require$$0$1;
+
+var is_key_object = util$6.types.isKeyObject || ((obj) => obj && obj instanceof crypto$3.KeyObject);
+
+var base64url$5 = {};
+
+let encode;
+if (Buffer.isEncoding('base64url')) {
+ encode = (input, encoding = 'utf8') => Buffer.from(input, encoding).toString('base64url');
+} else {
+ const fromBase64 = (base64) => base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
+ encode = (input, encoding = 'utf8') =>
+ fromBase64(Buffer.from(input, encoding).toString('base64'));
+}
+
+const decode$2 = (input) => Buffer.from(input, 'base64');
+
+base64url$5.decode = decode$2;
+base64url$5.encode = encode;
+
+const base64url$4 = base64url$5;
+
+var decode_jwt = (token) => {
+ if (typeof token !== 'string' || !token) {
+ throw new TypeError('JWT must be a string');
+ }
+
+ const { 0: header, 1: payload, 2: signature, length } = token.split('.');
+
+ if (length === 5) {
+ throw new TypeError('encrypted JWTs cannot be decoded');
+ }
+
+ if (length !== 3) {
+ throw new Error('JWTs must have three components');
+ }
+
+ try {
+ return {
+ header: JSON.parse(base64url$4.decode(header)),
+ payload: JSON.parse(base64url$4.decode(payload)),
+ signature,
+ };
+ } catch (err) {
+ throw new Error('JWT is malformed');
+ }
+};
+
+var defaults$3 = {exports: {}};
+
+var is_plain_object = (a) => !!a && a.constructor === Object;
+
+const isPlainObject$4 = is_plain_object;
+
+function defaults$2(deep, target, ...sources) {
+ for (const source of sources) {
+ if (!isPlainObject$4(source)) {
+ continue;
+ }
+ for (const [key, value] of Object.entries(source)) {
+ /* istanbul ignore if */
+ if (key === '__proto__' || key === 'constructor') {
+ continue;
+ }
+ if (typeof target[key] === 'undefined' && typeof value !== 'undefined') {
+ target[key] = value;
+ }
+
+ if (deep && isPlainObject$4(target[key]) && isPlainObject$4(value)) {
+ defaults$2(true, target[key], value);
+ }
+ }
+ }
+
+ return target;
+}
+
+defaults$3.exports = defaults$2.bind(undefined, false);
+defaults$3.exports.deep = defaults$2.bind(undefined, true);
+
+var defaultsExports = defaults$3.exports;
+
+const REGEXP = /(\w+)=("[^"]*")/g;
+
+var www_authenticate_parser = (wwwAuthenticate) => {
+ const params = {};
+ try {
+ while (REGEXP.exec(wwwAuthenticate) !== null) {
+ if (RegExp.$1 && RegExp.$2) {
+ params[RegExp.$1] = RegExp.$2.slice(1, -1);
+ }
+ }
+ } catch (err) {}
+
+ return params;
+};
+
+function assertSigningAlgValuesSupport$1(endpoint, issuer, properties) {
+ if (!issuer[`${endpoint}_endpoint`]) return;
+
+ const eam = `${endpoint}_endpoint_auth_method`;
+ const easa = `${endpoint}_endpoint_auth_signing_alg`;
+ const easavs = `${endpoint}_endpoint_auth_signing_alg_values_supported`;
+
+ if (properties[eam] && properties[eam].endsWith('_jwt') && !properties[easa] && !issuer[easavs]) {
+ throw new TypeError(
+ `${easavs} must be configured on the issuer if ${easa} is not defined on a client`,
+ );
+ }
+}
+
+function assertIssuerConfiguration$3(issuer, endpoint) {
+ if (!issuer[endpoint]) {
+ throw new TypeError(`${endpoint} must be configured on the issuer`);
+ }
+}
+
+var assert$2 = {
+ assertSigningAlgValuesSupport: assertSigningAlgValuesSupport$1,
+ assertIssuerConfiguration: assertIssuerConfiguration$3,
+};
+
+var pick$3 = function pick(object, ...paths) {
+ const obj = {};
+ for (const path of paths) {
+ if (object[path] !== undefined) {
+ obj[path] = object[path];
+ }
+ }
+ return obj;
+};
+
+const { STATUS_CODES } = require$$0$3;
+const { format: format$1 } = require$$1$1;
+
+const { OPError: OPError$4 } = errors;
+const parseWwwAuthenticate$1 = www_authenticate_parser;
+
+const throwAuthenticateErrors = (response) => {
+ const params = parseWwwAuthenticate$1(response.headers['www-authenticate']);
+
+ if (params.error) {
+ throw new OPError$4(params, response);
+ }
+};
+
+const isStandardBodyError = (response) => {
+ let result = false;
+ try {
+ let jsonbody;
+ if (typeof response.body !== 'object' || Buffer.isBuffer(response.body)) {
+ jsonbody = JSON.parse(response.body);
+ } else {
+ jsonbody = response.body;
+ }
+ result = typeof jsonbody.error === 'string' && jsonbody.error.length;
+ if (result) Object.defineProperty(response, 'body', { value: jsonbody, configurable: true });
+ } catch (err) {}
+
+ return result;
+};
+
+function processResponse$3(response, { statusCode = 200, body = true, bearer = false } = {}) {
+ if (response.statusCode !== statusCode) {
+ if (bearer) {
+ throwAuthenticateErrors(response);
+ }
+
+ if (isStandardBodyError(response)) {
+ throw new OPError$4(response.body, response);
+ }
+
+ throw new OPError$4(
+ {
+ error: format$1(
+ 'expected %i %s, got: %i %s',
+ statusCode,
+ STATUS_CODES[statusCode],
+ response.statusCode,
+ STATUS_CODES[response.statusCode],
+ ),
+ },
+ response,
+ );
+ }
+
+ if (body && !response.body) {
+ throw new OPError$4(
+ {
+ error: format$1(
+ 'expected %i %s with body but no body was returned',
+ statusCode,
+ STATUS_CODES[statusCode],
+ ),
+ },
+ response,
+ );
+ }
+
+ return response.body;
+}
+
+var process_response = processResponse$3;
+
+var unix_timestamp = () => Math.floor(Date.now() / 1000);
+
+const base64url$3 = base64url$5;
+const now$3 = unix_timestamp;
+
+let TokenSet$2 = class TokenSet {
+ constructor(values) {
+ Object.assign(this, values);
+ const { constructor, ...properties } = Object.getOwnPropertyDescriptors(
+ this.constructor.prototype,
+ );
+
+ Object.defineProperties(this, properties);
+ }
+
+ set expires_in(value) {
+ this.expires_at = now$3() + Number(value);
+ }
+
+ get expires_in() {
+ return Math.max.apply(null, [this.expires_at - now$3(), 0]);
+ }
+
+ expired() {
+ return this.expires_in === 0;
+ }
+
+ claims() {
+ if (!this.id_token) {
+ throw new TypeError('id_token not present in TokenSet');
+ }
+
+ return JSON.parse(base64url$3.decode(this.id_token.split('.')[1]));
+ }
+};
+
+var token_set = TokenSet$2;
+
+const { createHash, randomBytes } = require$$0$1;
+
+const base64url$2 = base64url$5;
+
+const random$3 = (bytes = 32) => base64url$2.encode(randomBytes(bytes));
+
+var generators$1 = {
+ random: random$3,
+ state: random$3,
+ nonce: random$3,
+ codeVerifier: random$3,
+ codeChallenge: (codeVerifier) =>
+ base64url$2.encode(createHash('sha256').update(codeVerifier).digest()),
+};
+
+var request$4 = {exports: {}};
+
+var iterator;
+var hasRequiredIterator;
+
+function requireIterator () {
+ if (hasRequiredIterator) return iterator;
+ hasRequiredIterator = 1;
+ iterator = function (Yallist) {
+ Yallist.prototype[Symbol.iterator] = function* () {
+ for (let walker = this.head; walker; walker = walker.next) {
+ yield walker.value;
+ }
+ };
+ };
+ return iterator;
+}
+
+var yallist = Yallist$1;
+
+Yallist$1.Node = Node;
+Yallist$1.create = Yallist$1;
+
+function Yallist$1 (list) {
+ var self = this;
+ if (!(self instanceof Yallist$1)) {
+ self = new Yallist$1();
+ }
+
+ self.tail = null;
+ self.head = null;
+ self.length = 0;
+
+ if (list && typeof list.forEach === 'function') {
+ list.forEach(function (item) {
+ self.push(item);
+ });
+ } else if (arguments.length > 0) {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ self.push(arguments[i]);
+ }
+ }
+
+ return self
+}
+
+Yallist$1.prototype.removeNode = function (node) {
+ if (node.list !== this) {
+ throw new Error('removing node which does not belong to this list')
+ }
+
+ var next = node.next;
+ var prev = node.prev;
+
+ if (next) {
+ next.prev = prev;
+ }
+
+ if (prev) {
+ prev.next = next;
+ }
+
+ if (node === this.head) {
+ this.head = next;
+ }
+ if (node === this.tail) {
+ this.tail = prev;
+ }
+
+ node.list.length--;
+ node.next = null;
+ node.prev = null;
+ node.list = null;
+
+ return next
+};
+
+Yallist$1.prototype.unshiftNode = function (node) {
+ if (node === this.head) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+
+ var head = this.head;
+ node.list = this;
+ node.next = head;
+ if (head) {
+ head.prev = node;
+ }
+
+ this.head = node;
+ if (!this.tail) {
+ this.tail = node;
+ }
+ this.length++;
+};
+
+Yallist$1.prototype.pushNode = function (node) {
+ if (node === this.tail) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+
+ var tail = this.tail;
+ node.list = this;
+ node.prev = tail;
+ if (tail) {
+ tail.next = node;
+ }
+
+ this.tail = node;
+ if (!this.head) {
+ this.head = node;
+ }
+ this.length++;
+};
+
+Yallist$1.prototype.push = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ push(this, arguments[i]);
+ }
+ return this.length
+};
+
+Yallist$1.prototype.unshift = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ unshift(this, arguments[i]);
+ }
+ return this.length
+};
+
+Yallist$1.prototype.pop = function () {
+ if (!this.tail) {
+ return undefined
+ }
+
+ var res = this.tail.value;
+ this.tail = this.tail.prev;
+ if (this.tail) {
+ this.tail.next = null;
+ } else {
+ this.head = null;
+ }
+ this.length--;
+ return res
+};
+
+Yallist$1.prototype.shift = function () {
+ if (!this.head) {
+ return undefined
+ }
+
+ var res = this.head.value;
+ this.head = this.head.next;
+ if (this.head) {
+ this.head.prev = null;
+ } else {
+ this.tail = null;
+ }
+ this.length--;
+ return res
+};
+
+Yallist$1.prototype.forEach = function (fn, thisp) {
+ thisp = thisp || this;
+ for (var walker = this.head, i = 0; walker !== null; i++) {
+ fn.call(thisp, walker.value, i, this);
+ walker = walker.next;
+ }
+};
+
+Yallist$1.prototype.forEachReverse = function (fn, thisp) {
+ thisp = thisp || this;
+ for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
+ fn.call(thisp, walker.value, i, this);
+ walker = walker.prev;
+ }
+};
+
+Yallist$1.prototype.get = function (n) {
+ for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.next;
+ }
+ if (i === n && walker !== null) {
+ return walker.value
+ }
+};
+
+Yallist$1.prototype.getReverse = function (n) {
+ for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.prev;
+ }
+ if (i === n && walker !== null) {
+ return walker.value
+ }
+};
+
+Yallist$1.prototype.map = function (fn, thisp) {
+ thisp = thisp || this;
+ var res = new Yallist$1();
+ for (var walker = this.head; walker !== null;) {
+ res.push(fn.call(thisp, walker.value, this));
+ walker = walker.next;
+ }
+ return res
+};
+
+Yallist$1.prototype.mapReverse = function (fn, thisp) {
+ thisp = thisp || this;
+ var res = new Yallist$1();
+ for (var walker = this.tail; walker !== null;) {
+ res.push(fn.call(thisp, walker.value, this));
+ walker = walker.prev;
+ }
+ return res
+};
+
+Yallist$1.prototype.reduce = function (fn, initial) {
+ var acc;
+ var walker = this.head;
+ if (arguments.length > 1) {
+ acc = initial;
+ } else if (this.head) {
+ walker = this.head.next;
+ acc = this.head.value;
+ } else {
+ throw new TypeError('Reduce of empty list with no initial value')
+ }
+
+ for (var i = 0; walker !== null; i++) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.next;
+ }
+
+ return acc
+};
+
+Yallist$1.prototype.reduceReverse = function (fn, initial) {
+ var acc;
+ var walker = this.tail;
+ if (arguments.length > 1) {
+ acc = initial;
+ } else if (this.tail) {
+ walker = this.tail.prev;
+ acc = this.tail.value;
+ } else {
+ throw new TypeError('Reduce of empty list with no initial value')
+ }
+
+ for (var i = this.length - 1; walker !== null; i--) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.prev;
+ }
+
+ return acc
+};
+
+Yallist$1.prototype.toArray = function () {
+ var arr = new Array(this.length);
+ for (var i = 0, walker = this.head; walker !== null; i++) {
+ arr[i] = walker.value;
+ walker = walker.next;
+ }
+ return arr
+};
+
+Yallist$1.prototype.toArrayReverse = function () {
+ var arr = new Array(this.length);
+ for (var i = 0, walker = this.tail; walker !== null; i++) {
+ arr[i] = walker.value;
+ walker = walker.prev;
+ }
+ return arr
+};
+
+Yallist$1.prototype.slice = function (from, to) {
+ to = to || this.length;
+ if (to < 0) {
+ to += this.length;
+ }
+ from = from || 0;
+ if (from < 0) {
+ from += this.length;
+ }
+ var ret = new Yallist$1();
+ if (to < from || to < 0) {
+ return ret
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
+ walker = walker.next;
+ }
+ for (; walker !== null && i < to; i++, walker = walker.next) {
+ ret.push(walker.value);
+ }
+ return ret
+};
+
+Yallist$1.prototype.sliceReverse = function (from, to) {
+ to = to || this.length;
+ if (to < 0) {
+ to += this.length;
+ }
+ from = from || 0;
+ if (from < 0) {
+ from += this.length;
+ }
+ var ret = new Yallist$1();
+ if (to < from || to < 0) {
+ return ret
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
+ walker = walker.prev;
+ }
+ for (; walker !== null && i > from; i--, walker = walker.prev) {
+ ret.push(walker.value);
+ }
+ return ret
+};
+
+Yallist$1.prototype.splice = function (start, deleteCount, ...nodes) {
+ if (start > this.length) {
+ start = this.length - 1;
+ }
+ if (start < 0) {
+ start = this.length + start;
+ }
+
+ for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
+ walker = walker.next;
+ }
+
+ var ret = [];
+ for (var i = 0; walker && i < deleteCount; i++) {
+ ret.push(walker.value);
+ walker = this.removeNode(walker);
+ }
+ if (walker === null) {
+ walker = this.tail;
+ }
+
+ if (walker !== this.head && walker !== this.tail) {
+ walker = walker.prev;
+ }
+
+ for (var i = 0; i < nodes.length; i++) {
+ walker = insert(this, walker, nodes[i]);
+ }
+ return ret;
+};
+
+Yallist$1.prototype.reverse = function () {
+ var head = this.head;
+ var tail = this.tail;
+ for (var walker = head; walker !== null; walker = walker.prev) {
+ var p = walker.prev;
+ walker.prev = walker.next;
+ walker.next = p;
+ }
+ this.head = tail;
+ this.tail = head;
+ return this
+};
+
+function insert (self, node, value) {
+ var inserted = node === self.head ?
+ new Node(value, null, node, self) :
+ new Node(value, node, node.next, self);
+
+ if (inserted.next === null) {
+ self.tail = inserted;
+ }
+ if (inserted.prev === null) {
+ self.head = inserted;
+ }
+
+ self.length++;
+
+ return inserted
+}
+
+function push (self, item) {
+ self.tail = new Node(item, self.tail, null, self);
+ if (!self.head) {
+ self.head = self.tail;
+ }
+ self.length++;
+}
+
+function unshift (self, item) {
+ self.head = new Node(item, null, self.head, self);
+ if (!self.tail) {
+ self.tail = self.head;
+ }
+ self.length++;
+}
+
+function Node (value, prev, next, list) {
+ if (!(this instanceof Node)) {
+ return new Node(value, prev, next, list)
+ }
+
+ this.list = list;
+ this.value = value;
+
+ if (prev) {
+ prev.next = this;
+ this.prev = prev;
+ } else {
+ this.prev = null;
+ }
+
+ if (next) {
+ next.prev = this;
+ this.next = next;
+ } else {
+ this.next = null;
+ }
+}
+
+try {
+ // add if support for Symbol.iterator is present
+ requireIterator()(Yallist$1);
+} catch (er) {}
+
+// A linked list to keep track of recently-used-ness
+const Yallist = yallist;
+
+const MAX = Symbol('max');
+const LENGTH = Symbol('length');
+const LENGTH_CALCULATOR = Symbol('lengthCalculator');
+const ALLOW_STALE = Symbol('allowStale');
+const MAX_AGE = Symbol('maxAge');
+const DISPOSE = Symbol('dispose');
+const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');
+const LRU_LIST = Symbol('lruList');
+const CACHE = Symbol('cache');
+const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');
+
+const naiveLength = () => 1;
+
+// lruList is a yallist where the head is the youngest
+// item, and the tail is the oldest. the list contains the Hit
+// objects as the entries.
+// Each Hit object has a reference to its Yallist.Node. This
+// never changes.
+//
+// cache is a Map (or PseudoMap) that matches the keys to
+// the Yallist.Node object.
+class LRUCache {
+ constructor (options) {
+ if (typeof options === 'number')
+ options = { max: options };
+
+ if (!options)
+ options = {};
+
+ if (options.max && (typeof options.max !== 'number' || options.max < 0))
+ throw new TypeError('max must be a non-negative number')
+ // Kind of weird to have a default max of Infinity, but oh well.
+ this[MAX] = options.max || Infinity;
+
+ const lc = options.length || naiveLength;
+ this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc;
+ this[ALLOW_STALE] = options.stale || false;
+ if (options.maxAge && typeof options.maxAge !== 'number')
+ throw new TypeError('maxAge must be a number')
+ this[MAX_AGE] = options.maxAge || 0;
+ this[DISPOSE] = options.dispose;
+ this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
+ this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
+ this.reset();
+ }
+
+ // resize the cache when the max changes.
+ set max (mL) {
+ if (typeof mL !== 'number' || mL < 0)
+ throw new TypeError('max must be a non-negative number')
+
+ this[MAX] = mL || Infinity;
+ trim(this);
+ }
+ get max () {
+ return this[MAX]
+ }
+
+ set allowStale (allowStale) {
+ this[ALLOW_STALE] = !!allowStale;
+ }
+ get allowStale () {
+ return this[ALLOW_STALE]
+ }
+
+ set maxAge (mA) {
+ if (typeof mA !== 'number')
+ throw new TypeError('maxAge must be a non-negative number')
+
+ this[MAX_AGE] = mA;
+ trim(this);
+ }
+ get maxAge () {
+ return this[MAX_AGE]
+ }
+
+ // resize the cache when the lengthCalculator changes.
+ set lengthCalculator (lC) {
+ if (typeof lC !== 'function')
+ lC = naiveLength;
+
+ if (lC !== this[LENGTH_CALCULATOR]) {
+ this[LENGTH_CALCULATOR] = lC;
+ this[LENGTH] = 0;
+ this[LRU_LIST].forEach(hit => {
+ hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
+ this[LENGTH] += hit.length;
+ });
+ }
+ trim(this);
+ }
+ get lengthCalculator () { return this[LENGTH_CALCULATOR] }
+
+ get length () { return this[LENGTH] }
+ get itemCount () { return this[LRU_LIST].length }
+
+ rforEach (fn, thisp) {
+ thisp = thisp || this;
+ for (let walker = this[LRU_LIST].tail; walker !== null;) {
+ const prev = walker.prev;
+ forEachStep(this, fn, walker, thisp);
+ walker = prev;
+ }
+ }
+
+ forEach (fn, thisp) {
+ thisp = thisp || this;
+ for (let walker = this[LRU_LIST].head; walker !== null;) {
+ const next = walker.next;
+ forEachStep(this, fn, walker, thisp);
+ walker = next;
+ }
+ }
+
+ keys () {
+ return this[LRU_LIST].toArray().map(k => k.key)
+ }
+
+ values () {
+ return this[LRU_LIST].toArray().map(k => k.value)
+ }
+
+ reset () {
+ if (this[DISPOSE] &&
+ this[LRU_LIST] &&
+ this[LRU_LIST].length) {
+ this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
+ }
+
+ this[CACHE] = new Map(); // hash of items by key
+ this[LRU_LIST] = new Yallist(); // list of items in order of use recency
+ this[LENGTH] = 0; // length of items in the list
+ }
+
+ dump () {
+ return this[LRU_LIST].map(hit =>
+ isStale(this, hit) ? false : {
+ k: hit.key,
+ v: hit.value,
+ e: hit.now + (hit.maxAge || 0)
+ }).toArray().filter(h => h)
+ }
+
+ dumpLru () {
+ return this[LRU_LIST]
+ }
+
+ set (key, value, maxAge) {
+ maxAge = maxAge || this[MAX_AGE];
+
+ if (maxAge && typeof maxAge !== 'number')
+ throw new TypeError('maxAge must be a number')
+
+ const now = maxAge ? Date.now() : 0;
+ const len = this[LENGTH_CALCULATOR](value, key);
+
+ if (this[CACHE].has(key)) {
+ if (len > this[MAX]) {
+ del(this, this[CACHE].get(key));
+ return false
+ }
+
+ const node = this[CACHE].get(key);
+ const item = node.value;
+
+ // dispose of the old one before overwriting
+ // split out into 2 ifs for better coverage tracking
+ if (this[DISPOSE]) {
+ if (!this[NO_DISPOSE_ON_SET])
+ this[DISPOSE](key, item.value);
+ }
+
+ item.now = now;
+ item.maxAge = maxAge;
+ item.value = value;
+ this[LENGTH] += len - item.length;
+ item.length = len;
+ this.get(key);
+ trim(this);
+ return true
+ }
+
+ const hit = new Entry(key, value, len, now, maxAge);
+
+ // oversized objects fall out of cache automatically.
+ if (hit.length > this[MAX]) {
+ if (this[DISPOSE])
+ this[DISPOSE](key, value);
+
+ return false
+ }
+
+ this[LENGTH] += hit.length;
+ this[LRU_LIST].unshift(hit);
+ this[CACHE].set(key, this[LRU_LIST].head);
+ trim(this);
+ return true
+ }
+
+ has (key) {
+ if (!this[CACHE].has(key)) return false
+ const hit = this[CACHE].get(key).value;
+ return !isStale(this, hit)
+ }
+
+ get (key) {
+ return get(this, key, true)
+ }
+
+ peek (key) {
+ return get(this, key, false)
+ }
+
+ pop () {
+ const node = this[LRU_LIST].tail;
+ if (!node)
+ return null
+
+ del(this, node);
+ return node.value
+ }
+
+ del (key) {
+ del(this, this[CACHE].get(key));
+ }
+
+ load (arr) {
+ // reset the cache
+ this.reset();
+
+ const now = Date.now();
+ // A previous serialized cache has the most recent items first
+ for (let l = arr.length - 1; l >= 0; l--) {
+ const hit = arr[l];
+ const expiresAt = hit.e || 0;
+ if (expiresAt === 0)
+ // the item was created without expiration in a non aged cache
+ this.set(hit.k, hit.v);
+ else {
+ const maxAge = expiresAt - now;
+ // dont add already expired items
+ if (maxAge > 0) {
+ this.set(hit.k, hit.v, maxAge);
+ }
+ }
+ }
+ }
+
+ prune () {
+ this[CACHE].forEach((value, key) => get(this, key, false));
+ }
+}
+
+const get = (self, key, doUse) => {
+ const node = self[CACHE].get(key);
+ if (node) {
+ const hit = node.value;
+ if (isStale(self, hit)) {
+ del(self, node);
+ if (!self[ALLOW_STALE])
+ return undefined
+ } else {
+ if (doUse) {
+ if (self[UPDATE_AGE_ON_GET])
+ node.value.now = Date.now();
+ self[LRU_LIST].unshiftNode(node);
+ }
+ }
+ return hit.value
+ }
+};
+
+const isStale = (self, hit) => {
+ if (!hit || (!hit.maxAge && !self[MAX_AGE]))
+ return false
+
+ const diff = Date.now() - hit.now;
+ return hit.maxAge ? diff > hit.maxAge
+ : self[MAX_AGE] && (diff > self[MAX_AGE])
+};
+
+const trim = self => {
+ if (self[LENGTH] > self[MAX]) {
+ for (let walker = self[LRU_LIST].tail;
+ self[LENGTH] > self[MAX] && walker !== null;) {
+ // We know that we're about to delete this one, and also
+ // what the next least recently used key will be, so just
+ // go ahead and set it now.
+ const prev = walker.prev;
+ del(self, walker);
+ walker = prev;
+ }
+ }
+};
+
+const del = (self, node) => {
+ if (node) {
+ const hit = node.value;
+ if (self[DISPOSE])
+ self[DISPOSE](hit.key, hit.value);
+
+ self[LENGTH] -= hit.length;
+ self[CACHE].delete(hit.key);
+ self[LRU_LIST].removeNode(node);
+ }
+};
+
+class Entry {
+ constructor (key, value, length, now, maxAge) {
+ this.key = key;
+ this.value = value;
+ this.length = length;
+ this.now = now;
+ this.maxAge = maxAge || 0;
+ }
+}
+
+const forEachStep = (self, fn, node, thisp) => {
+ let hit = node.value;
+ if (isStale(self, hit)) {
+ del(self, node);
+ if (!self[ALLOW_STALE])
+ hit = undefined;
+ }
+ if (hit)
+ fn.call(thisp, hit.value, hit.key, self);
+};
+
+var lruCache = LRUCache;
+
+var name$1 = "openid-client";
+var version$2 = "5.4.3";
+var description$1 = "OpenID Connect Relying Party (RP, Client) implementation for Node.js runtime, supports passportjs";
+var keywords$1 = [
+ "auth",
+ "authentication",
+ "basic",
+ "certified",
+ "client",
+ "connect",
+ "dynamic",
+ "electron",
+ "hybrid",
+ "identity",
+ "implicit",
+ "oauth",
+ "oauth2",
+ "oidc",
+ "openid",
+ "passport",
+ "relying party",
+ "strategy"
+];
+var homepage = "https://github.com/panva/node-openid-client";
+var repository$1 = "panva/node-openid-client";
+var funding$1 = {
+ url: "https://github.com/sponsors/panva"
+};
+var license$1 = "MIT";
+var author = "Filip Skokan ";
+var exports$2 = {
+ types: "./types/index.d.ts",
+ "import": "./lib/index.mjs",
+ require: "./lib/index.js"
+};
+var main$2 = "./lib/index.js";
+var types$2 = "./types/index.d.ts";
+var files = [
+ "lib",
+ "types/index.d.ts"
+];
+var scripts$1 = {
+ format: "npx prettier --loglevel silent --write ./lib ./test ./certification ./types",
+ test: "mocha test/**/*.test.js"
+};
+var dependencies = {
+ jose: "^4.14.4",
+ "lru-cache": "^6.0.0",
+ "object-hash": "^2.2.0",
+ "oidc-token-hash": "^5.0.3"
+};
+var devDependencies$1 = {
+ "@types/node": "^16.18.31",
+ "@types/passport": "^1.0.12",
+ base64url: "^3.0.1",
+ chai: "^4.3.7",
+ jose2: "npm:jose@^2.0.6",
+ mocha: "^10.2.0",
+ nock: "^13.3.1",
+ prettier: "^2.8.8",
+ "readable-mock-req": "^0.2.2",
+ sinon: "^9.2.4",
+ timekeeper: "^2.2.0"
+};
+var require$$7 = {
+ name: name$1,
+ version: version$2,
+ description: description$1,
+ keywords: keywords$1,
+ homepage: homepage,
+ repository: repository$1,
+ funding: funding$1,
+ license: license$1,
+ author: author,
+ exports: exports$2,
+ main: main$2,
+ types: types$2,
+ files: files,
+ scripts: scripts$1,
+ dependencies: dependencies,
+ devDependencies: devDependencies$1,
+ "standard-version": {
+ scripts: {
+ postchangelog: "sed -i '' -e 's/### \\[/## [/g' CHANGELOG.md"
+ },
+ types: [
+ {
+ type: "feat",
+ section: "Features"
+ },
+ {
+ type: "fix",
+ section: "Fixes"
+ },
+ {
+ type: "chore",
+ hidden: true
+ },
+ {
+ type: "docs",
+ hidden: true
+ },
+ {
+ type: "style",
+ hidden: true
+ },
+ {
+ type: "refactor",
+ section: "Refactor",
+ hidden: false
+ },
+ {
+ type: "perf",
+ section: "Performance",
+ hidden: false
+ },
+ {
+ type: "test",
+ hidden: true
+ }
+ ]
+}
+};
+
+const HTTP_OPTIONS$2 = Symbol();
+const CLOCK_TOLERANCE$2 = Symbol();
+
+var consts = {
+ CLOCK_TOLERANCE: CLOCK_TOLERANCE$2,
+ HTTP_OPTIONS: HTTP_OPTIONS$2,
+};
+
+const assert$1 = require$$0$5;
+const querystring$1 = require$$1$4;
+const http = require$$0$3;
+const https = require$$1$2;
+const { once: once$1 } = require$$1$3;
+const { URL: URL$1 } = require$$0$4;
+
+const LRU$2 = lruCache;
+
+const pkg = require$$7;
+const { RPError: RPError$7 } = errors;
+
+const pick$2 = pick$3;
+const { deep: defaultsDeep } = defaultsExports;
+const { HTTP_OPTIONS: HTTP_OPTIONS$1 } = consts;
+
+let DEFAULT_HTTP_OPTIONS;
+const NQCHAR = /^[\x21\x23-\x5B\x5D-\x7E]+$/;
+
+const allowed = [
+ 'agent',
+ 'ca',
+ 'cert',
+ 'crl',
+ 'headers',
+ 'key',
+ 'lookup',
+ 'passphrase',
+ 'pfx',
+ 'timeout',
+];
+
+const setDefaults$1 = (props, options) => {
+ DEFAULT_HTTP_OPTIONS = defaultsDeep(
+ {},
+ props.length ? pick$2(options, ...props) : options,
+ DEFAULT_HTTP_OPTIONS,
+ );
+};
+
+setDefaults$1([], {
+ headers: { 'User-Agent': `${pkg.name}/${pkg.version} (${pkg.homepage})` },
+ timeout: 3500,
+});
+
+function send(req, body, contentType) {
+ if (contentType) {
+ req.removeHeader('content-type');
+ req.setHeader('content-type', contentType);
+ }
+ if (body) {
+ req.removeHeader('content-length');
+ req.setHeader('content-length', Buffer.byteLength(body));
+ req.write(body);
+ }
+ req.end();
+}
+
+const nonces = new LRU$2({ max: 100 });
+
+request$4.exports = async function request(options, { accessToken, mTLS = false, DPoP } = {}) {
+ let url;
+ try {
+ url = new URL$1(options.url);
+ delete options.url;
+ assert$1(/^(https?:)$/.test(url.protocol));
+ } catch (err) {
+ throw new TypeError('only valid absolute URLs can be requested');
+ }
+ const optsFn = this[HTTP_OPTIONS$1];
+ let opts = options;
+
+ const nonceKey = `${url.origin}${url.pathname}`;
+ if (DPoP && 'dpopProof' in this) {
+ opts.headers = opts.headers || {};
+ opts.headers.DPoP = await this.dpopProof(
+ {
+ htu: `${url.origin}${url.pathname}`,
+ htm: options.method,
+ nonce: nonces.get(nonceKey),
+ },
+ DPoP,
+ accessToken,
+ );
+ }
+
+ let userOptions;
+ if (optsFn) {
+ userOptions = pick$2(
+ optsFn.call(this, url, defaultsDeep({}, opts, DEFAULT_HTTP_OPTIONS)),
+ ...allowed,
+ );
+ }
+ opts = defaultsDeep({}, userOptions, opts, DEFAULT_HTTP_OPTIONS);
+
+ if (mTLS && !opts.pfx && !(opts.key && opts.cert)) {
+ throw new TypeError('mutual-TLS certificate and key not set');
+ }
+
+ if (opts.searchParams) {
+ for (const [key, value] of Object.entries(opts.searchParams)) {
+ url.searchParams.delete(key);
+ url.searchParams.set(key, value);
+ }
+ }
+
+ let responseType;
+ let form;
+ let json;
+ let body;
+ ({ form, responseType, json, body, ...opts } = opts);
+
+ for (const [key, value] of Object.entries(opts.headers || {})) {
+ if (value === undefined) {
+ delete opts.headers[key];
+ }
+ }
+
+ let response;
+ const req = (url.protocol === 'https:' ? https.request : http.request)(url.href, opts);
+ return (async () => {
+ if (json) {
+ send(req, JSON.stringify(json), 'application/json');
+ } else if (form) {
+ send(req, querystring$1.stringify(form), 'application/x-www-form-urlencoded');
+ } else if (body) {
+ send(req, body);
+ } else {
+ send(req);
+ }
+
+ [response] = await Promise.race([once$1(req, 'response'), once$1(req, 'timeout')]);
+
+ // timeout reached
+ if (!response) {
+ req.destroy();
+ throw new RPError$7(`outgoing request timed out after ${opts.timeout}ms`);
+ }
+
+ const parts = [];
+
+ for await (const part of response) {
+ parts.push(part);
+ }
+
+ if (parts.length) {
+ switch (responseType) {
+ case 'json': {
+ Object.defineProperty(response, 'body', {
+ get() {
+ let value = Buffer.concat(parts);
+ try {
+ value = JSON.parse(value);
+ } catch (err) {
+ Object.defineProperty(err, 'response', { value: response });
+ throw err;
+ } finally {
+ Object.defineProperty(response, 'body', { value, configurable: true });
+ }
+ return value;
+ },
+ configurable: true,
+ });
+ break;
+ }
+ case undefined:
+ case 'buffer': {
+ Object.defineProperty(response, 'body', {
+ get() {
+ const value = Buffer.concat(parts);
+ Object.defineProperty(response, 'body', { value, configurable: true });
+ return value;
+ },
+ configurable: true,
+ });
+ break;
+ }
+ default:
+ throw new TypeError('unsupported responseType request option');
+ }
+ }
+
+ return response;
+ })()
+ .catch((err) => {
+ if (response) Object.defineProperty(err, 'response', { value: response });
+ throw err;
+ })
+ .finally(() => {
+ const dpopNonce = response && response.headers['dpop-nonce'];
+ if (dpopNonce && NQCHAR.test(dpopNonce)) {
+ nonces.set(nonceKey, dpopNonce);
+ }
+ });
+};
+
+request$4.exports.setDefaults = setDefaults$1.bind(undefined, allowed);
+
+var requestExports = request$4.exports;
+
+var weak_cache = {};
+
+weak_cache.keystores = new WeakMap();
+
+var deep_clone = globalThis.structuredClone || ((obj) => JSON.parse(JSON.stringify(obj)));
+
+const jose$2 = cjs;
+
+const clone$4 = deep_clone;
+const isPlainObject$3 = is_plain_object;
+const isKeyObject$1 = is_key_object;
+
+const internal = Symbol();
+
+function fauxAlg(kty) {
+ switch (kty) {
+ case 'RSA':
+ return 'RSA-OAEP';
+ case 'EC':
+ return 'ECDH-ES';
+ case 'OKP':
+ return 'ECDH-ES';
+ case 'oct':
+ return 'HS256';
+ default:
+ return undefined;
+ }
+}
+
+const keyscore = (key, { alg, use }) => {
+ let score = 0;
+
+ if (alg && key.alg) {
+ score++;
+ }
+
+ if (use && key.use) {
+ score++;
+ }
+
+ return score;
+};
+
+function getKtyFromAlg(alg) {
+ switch (typeof alg === 'string' && alg.slice(0, 2)) {
+ case 'RS':
+ case 'PS':
+ return 'RSA';
+ case 'ES':
+ return 'EC';
+ case 'Ed':
+ return 'OKP';
+ default:
+ return undefined;
+ }
+}
+
+function getAlgorithms(use, alg, kty, crv) {
+ // Ed25519, Ed448, and secp256k1 always have "alg"
+ // OKP always has use
+ if (alg) {
+ return new Set([alg]);
+ }
+
+ switch (kty) {
+ case 'EC': {
+ let algs = [];
+
+ if (use === 'enc' || use === undefined) {
+ algs = algs.concat(['ECDH-ES', 'ECDH-ES+A128KW', 'ECDH-ES+A192KW', 'ECDH-ES+A256KW']);
+ }
+
+ if (use === 'sig' || use === undefined) {
+ algs = algs.concat([`ES${crv.slice(-3)}`.replace('21', '12')]);
+ }
+
+ return new Set(algs);
+ }
+ case 'OKP': {
+ return new Set(['ECDH-ES', 'ECDH-ES+A128KW', 'ECDH-ES+A192KW', 'ECDH-ES+A256KW']);
+ }
+ case 'RSA': {
+ let algs = [];
+
+ if (use === 'enc' || use === undefined) {
+ algs = algs.concat(['RSA-OAEP', 'RSA-OAEP-256', 'RSA-OAEP-384', 'RSA-OAEP-512', 'RSA1_5']);
+ }
+
+ if (use === 'sig' || use === undefined) {
+ algs = algs.concat(['PS256', 'PS384', 'PS512', 'RS256', 'RS384', 'RS512']);
+ }
+
+ return new Set(algs);
+ }
+ default:
+ throw new Error('unreachable');
+ }
+}
+
+var keystore$1 = class KeyStore {
+ #keys;
+
+ constructor(i, keys) {
+ if (i !== internal) throw new Error('invalid constructor call');
+ this.#keys = keys;
+ }
+
+ toJWKS() {
+ return {
+ keys: this.map(({ jwk: { d, p, q, dp, dq, qi, ...jwk } }) => jwk),
+ };
+ }
+
+ all({ alg, kid, use } = {}) {
+ if (!use || !alg) {
+ throw new Error();
+ }
+
+ const kty = getKtyFromAlg(alg);
+
+ const search = { alg, use };
+ return this.filter((key) => {
+ let candidate = true;
+
+ if (candidate && kty !== undefined && key.jwk.kty !== kty) {
+ candidate = false;
+ }
+
+ if (candidate && kid !== undefined && key.jwk.kid !== kid) {
+ candidate = false;
+ }
+
+ if (candidate && use !== undefined && key.jwk.use !== undefined && key.jwk.use !== use) {
+ candidate = false;
+ }
+
+ if (candidate && key.jwk.alg && key.jwk.alg !== alg) {
+ candidate = false;
+ } else if (!key.algorithms.has(alg)) {
+ candidate = false;
+ }
+
+ return candidate;
+ }).sort((first, second) => keyscore(second, search) - keyscore(first, search));
+ }
+
+ get(...args) {
+ return this.all(...args)[0];
+ }
+
+ static async fromJWKS(jwks, { onlyPublic = false, onlyPrivate = false } = {}) {
+ if (
+ !isPlainObject$3(jwks) ||
+ !Array.isArray(jwks.keys) ||
+ jwks.keys.some((k) => !isPlainObject$3(k) || !('kty' in k))
+ ) {
+ throw new TypeError('jwks must be a JSON Web Key Set formatted object');
+ }
+
+ const keys = [];
+
+ for (let jwk of jwks.keys) {
+ jwk = clone$4(jwk);
+ const { kty, kid, crv } = jwk;
+
+ let { alg, use } = jwk;
+
+ if (typeof kty !== 'string' || !kty) {
+ continue;
+ }
+
+ if (use !== undefined && use !== 'sig' && use !== 'enc') {
+ continue;
+ }
+
+ if (typeof alg !== 'string' && alg !== undefined) {
+ continue;
+ }
+
+ if (typeof kid !== 'string' && kid !== undefined) {
+ continue;
+ }
+
+ if (kty === 'EC' && use === 'sig') {
+ switch (crv) {
+ case 'P-256':
+ alg = 'ES256';
+ break;
+ case 'P-384':
+ alg = 'ES384';
+ break;
+ case 'P-521':
+ alg = 'ES512';
+ break;
+ }
+ }
+
+ if (crv === 'secp256k1') {
+ use = 'sig';
+ alg = 'ES256K';
+ }
+
+ if (kty === 'OKP') {
+ switch (crv) {
+ case 'Ed25519':
+ case 'Ed448':
+ use = 'sig';
+ alg = 'EdDSA';
+ break;
+ case 'X25519':
+ case 'X448':
+ use = 'enc';
+ break;
+ }
+ }
+
+ if (alg && !use) {
+ switch (true) {
+ case alg.startsWith('ECDH'):
+ use = 'enc';
+ break;
+ case alg.startsWith('RSA'):
+ use = 'enc';
+ break;
+ }
+ }
+
+ const keyObject = await jose$2.importJWK(jwk, alg || fauxAlg(jwk.kty)).catch(() => {});
+
+ if (!keyObject) continue;
+
+ if (keyObject instanceof Uint8Array || keyObject.type === 'secret') {
+ if (onlyPrivate) {
+ throw new Error('jwks must only contain private keys');
+ }
+ continue;
+ }
+
+ if (!isKeyObject$1(keyObject)) {
+ throw new Error('what?!');
+ }
+
+ if (onlyPrivate && keyObject.type !== 'private') {
+ throw new Error('jwks must only contain private keys');
+ }
+
+ if (onlyPublic && keyObject.type !== 'public') {
+ continue;
+ }
+
+ if (kty === 'RSA' && keyObject.asymmetricKeySize < 2048) {
+ continue;
+ }
+
+ keys.push({
+ jwk: { ...jwk, alg, use },
+ keyObject,
+ get algorithms() {
+ Object.defineProperty(this, 'algorithms', {
+ value: getAlgorithms(this.jwk.use, this.jwk.alg, this.jwk.kty, this.jwk.crv),
+ enumerable: true,
+ configurable: false,
+ });
+ return this.algorithms;
+ },
+ });
+ }
+
+ return new this(internal, keys);
+ }
+
+ filter(...args) {
+ return this.#keys.filter(...args);
+ }
+
+ find(...args) {
+ return this.#keys.find(...args);
+ }
+
+ every(...args) {
+ return this.#keys.every(...args);
+ }
+
+ some(...args) {
+ return this.#keys.some(...args);
+ }
+
+ map(...args) {
+ return this.#keys.map(...args);
+ }
+
+ forEach(...args) {
+ return this.#keys.forEach(...args);
+ }
+
+ reduce(...args) {
+ return this.#keys.reduce(...args);
+ }
+
+ sort(...args) {
+ return this.#keys.sort(...args);
+ }
+
+ *[Symbol.iterator]() {
+ for (const key of this.#keys) {
+ yield key;
+ }
+ }
+};
+
+const isPlainObject$2 = is_plain_object;
+
+function merge$2(target, ...sources) {
+ for (const source of sources) {
+ if (!isPlainObject$2(source)) {
+ continue;
+ }
+ for (const [key, value] of Object.entries(source)) {
+ /* istanbul ignore if */
+ if (key === '__proto__' || key === 'constructor') {
+ continue;
+ }
+ if (isPlainObject$2(target[key]) && isPlainObject$2(value)) {
+ target[key] = merge$2(target[key], value);
+ } else if (typeof value !== 'undefined') {
+ target[key] = value;
+ }
+ }
+ }
+
+ return target;
+}
+
+var merge_1 = merge$2;
+
+const jose$1 = cjs;
+
+const { RPError: RPError$6 } = errors;
+
+const { assertIssuerConfiguration: assertIssuerConfiguration$2 } = assert$2;
+const { random: random$2 } = generators$1;
+const now$2 = unix_timestamp;
+const request$3 = requestExports;
+const { keystores: keystores$2 } = weak_cache;
+const merge$1 = merge_1;
+
+const formUrlEncode = (value) => encodeURIComponent(value).replace(/%20/g, '+');
+
+async function clientAssertion(endpoint, payload) {
+ let alg = this[`${endpoint}_endpoint_auth_signing_alg`];
+ if (!alg) {
+ assertIssuerConfiguration$2(
+ this.issuer,
+ `${endpoint}_endpoint_auth_signing_alg_values_supported`,
+ );
+ }
+
+ if (this[`${endpoint}_endpoint_auth_method`] === 'client_secret_jwt') {
+ if (!alg) {
+ const supported = this.issuer[`${endpoint}_endpoint_auth_signing_alg_values_supported`];
+ alg =
+ Array.isArray(supported) && supported.find((signAlg) => /^HS(?:256|384|512)/.test(signAlg));
+ }
+
+ if (!alg) {
+ throw new RPError$6(
+ `failed to determine a JWS Algorithm to use for ${
+ this[`${endpoint}_endpoint_auth_method`]
+ } Client Assertion`,
+ );
+ }
+
+ return new jose$1.CompactSign(Buffer.from(JSON.stringify(payload)))
+ .setProtectedHeader({ alg })
+ .sign(this.secretForAlg(alg));
+ }
+
+ const keystore = await keystores$2.get(this);
+
+ if (!keystore) {
+ throw new TypeError('no client jwks provided for signing a client assertion with');
+ }
+
+ if (!alg) {
+ const supported = this.issuer[`${endpoint}_endpoint_auth_signing_alg_values_supported`];
+ alg =
+ Array.isArray(supported) &&
+ supported.find((signAlg) => keystore.get({ alg: signAlg, use: 'sig' }));
+ }
+
+ if (!alg) {
+ throw new RPError$6(
+ `failed to determine a JWS Algorithm to use for ${
+ this[`${endpoint}_endpoint_auth_method`]
+ } Client Assertion`,
+ );
+ }
+
+ const key = keystore.get({ alg, use: 'sig' });
+ if (!key) {
+ throw new RPError$6(
+ `no key found in client jwks to sign a client assertion with using alg ${alg}`,
+ );
+ }
+
+ return new jose$1.CompactSign(Buffer.from(JSON.stringify(payload)))
+ .setProtectedHeader({ alg, kid: key.jwk && key.jwk.kid })
+ .sign(key.keyObject);
+}
+
+async function authFor(endpoint, { clientAssertionPayload } = {}) {
+ const authMethod = this[`${endpoint}_endpoint_auth_method`];
+ switch (authMethod) {
+ case 'self_signed_tls_client_auth':
+ case 'tls_client_auth':
+ case 'none':
+ return { form: { client_id: this.client_id } };
+ case 'client_secret_post':
+ if (typeof this.client_secret !== 'string') {
+ throw new TypeError(
+ 'client_secret_post client authentication method requires a client_secret',
+ );
+ }
+ return { form: { client_id: this.client_id, client_secret: this.client_secret } };
+ case 'private_key_jwt':
+ case 'client_secret_jwt': {
+ const timestamp = now$2();
+ const audience = [
+ ...new Set([this.issuer.issuer, this.issuer.token_endpoint].filter(Boolean)),
+ ];
+
+ const assertion = await clientAssertion.call(this, endpoint, {
+ iat: timestamp,
+ exp: timestamp + 60,
+ jti: random$2(),
+ iss: this.client_id,
+ sub: this.client_id,
+ aud: audience,
+ ...clientAssertionPayload,
+ });
+
+ return {
+ form: {
+ client_id: this.client_id,
+ client_assertion: assertion,
+ client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
+ },
+ };
+ }
+ case 'client_secret_basic': {
+ // This is correct behaviour, see https://tools.ietf.org/html/rfc6749#section-2.3.1 and the
+ // related appendix. (also https://github.com/panva/node-openid-client/pull/91)
+ // > The client identifier is encoded using the
+ // > "application/x-www-form-urlencoded" encoding algorithm per
+ // > Appendix B, and the encoded value is used as the username; the client
+ // > password is encoded using the same algorithm and used as the
+ // > password.
+ if (typeof this.client_secret !== 'string') {
+ throw new TypeError(
+ 'client_secret_basic client authentication method requires a client_secret',
+ );
+ }
+ const encoded = `${formUrlEncode(this.client_id)}:${formUrlEncode(this.client_secret)}`;
+ const value = Buffer.from(encoded).toString('base64');
+ return { headers: { Authorization: `Basic ${value}` } };
+ }
+ default: {
+ throw new TypeError(`missing, or unsupported, ${endpoint}_endpoint_auth_method`);
+ }
+ }
+}
+
+function resolveResponseType$2() {
+ const { length, 0: value } = this.response_types;
+
+ if (length === 1) {
+ return value;
+ }
+
+ return undefined;
+}
+
+function resolveRedirectUri$2() {
+ const { length, 0: value } = this.redirect_uris || [];
+
+ if (length === 1) {
+ return value;
+ }
+
+ return undefined;
+}
+
+async function authenticatedPost$1(
+ endpoint,
+ opts,
+ { clientAssertionPayload, endpointAuthMethod = endpoint, DPoP } = {},
+) {
+ const auth = await authFor.call(this, endpointAuthMethod, { clientAssertionPayload });
+ const requestOpts = merge$1(opts, auth);
+
+ const mTLS =
+ this[`${endpointAuthMethod}_endpoint_auth_method`].includes('tls_client_auth') ||
+ (endpoint === 'token' && this.tls_client_certificate_bound_access_tokens);
+
+ let targetUrl;
+ if (mTLS && this.issuer.mtls_endpoint_aliases) {
+ targetUrl = this.issuer.mtls_endpoint_aliases[`${endpoint}_endpoint`];
+ }
+
+ targetUrl = targetUrl || this.issuer[`${endpoint}_endpoint`];
+
+ if ('form' in requestOpts) {
+ for (const [key, value] of Object.entries(requestOpts.form)) {
+ if (typeof value === 'undefined') {
+ delete requestOpts.form[key];
+ }
+ }
+ }
+
+ return request$3.call(
+ this,
+ {
+ ...requestOpts,
+ method: 'POST',
+ url: targetUrl,
+ headers: {
+ ...(endpoint !== 'revocation'
+ ? {
+ Accept: 'application/json',
+ }
+ : undefined),
+ ...requestOpts.headers,
+ },
+ },
+ { mTLS, DPoP },
+ );
+}
+
+var client = {
+ resolveResponseType: resolveResponseType$2,
+ resolveRedirectUri: resolveRedirectUri$2,
+ authFor,
+ authenticatedPost: authenticatedPost$1,
+};
+
+var issuer$1 = {};
+
+var objectHash$1 = {exports: {}};
+
+(function (module, exports) {
+
+ var crypto = require$$0$1;
+
+ /**
+ * Exported function
+ *
+ * Options:
+ *
+ * - `algorithm` hash algo to be used by this instance: *'sha1', 'md5'
+ * - `excludeValues` {true|*false} hash object keys, values ignored
+ * - `encoding` hash encoding, supports 'buffer', '*hex', 'binary', 'base64'
+ * - `ignoreUnknown` {true|*false} ignore unknown object types
+ * - `replacer` optional function that replaces values before hashing
+ * - `respectFunctionProperties` {*true|false} consider function properties when hashing
+ * - `respectFunctionNames` {*true|false} consider 'name' property of functions for hashing
+ * - `respectType` {*true|false} Respect special properties (prototype, constructor)
+ * when hashing to distinguish between types
+ * - `unorderedArrays` {true|*false} Sort all arrays before hashing
+ * - `unorderedSets` {*true|false} Sort `Set` and `Map` instances before hashing
+ * * = default
+ *
+ * @param {object} object value to hash
+ * @param {object} options hashing options
+ * @return {string} hash value
+ * @api public
+ */
+ exports = module.exports = objectHash;
+
+ function objectHash(object, options){
+ options = applyDefaults(object, options);
+
+ return hash(object, options);
+ }
+
+ /**
+ * Exported sugar methods
+ *
+ * @param {object} object value to hash
+ * @return {string} hash value
+ * @api public
+ */
+ exports.sha1 = function(object){
+ return objectHash(object);
+ };
+ exports.keys = function(object){
+ return objectHash(object, {excludeValues: true, algorithm: 'sha1', encoding: 'hex'});
+ };
+ exports.MD5 = function(object){
+ return objectHash(object, {algorithm: 'md5', encoding: 'hex'});
+ };
+ exports.keysMD5 = function(object){
+ return objectHash(object, {algorithm: 'md5', encoding: 'hex', excludeValues: true});
+ };
+
+ // Internals
+ var hashes = crypto.getHashes ? crypto.getHashes().slice() : ['sha1', 'md5'];
+ hashes.push('passthrough');
+ var encodings = ['buffer', 'hex', 'binary', 'base64'];
+
+ function applyDefaults(object, sourceOptions){
+ sourceOptions = sourceOptions || {};
+
+ // create a copy rather than mutating
+ var options = {};
+ options.algorithm = sourceOptions.algorithm || 'sha1';
+ options.encoding = sourceOptions.encoding || 'hex';
+ options.excludeValues = sourceOptions.excludeValues ? true : false;
+ options.algorithm = options.algorithm.toLowerCase();
+ options.encoding = options.encoding.toLowerCase();
+ options.ignoreUnknown = sourceOptions.ignoreUnknown !== true ? false : true; // default to false
+ options.respectType = sourceOptions.respectType === false ? false : true; // default to true
+ options.respectFunctionNames = sourceOptions.respectFunctionNames === false ? false : true;
+ options.respectFunctionProperties = sourceOptions.respectFunctionProperties === false ? false : true;
+ options.unorderedArrays = sourceOptions.unorderedArrays !== true ? false : true; // default to false
+ options.unorderedSets = sourceOptions.unorderedSets === false ? false : true; // default to false
+ options.unorderedObjects = sourceOptions.unorderedObjects === false ? false : true; // default to true
+ options.replacer = sourceOptions.replacer || undefined;
+ options.excludeKeys = sourceOptions.excludeKeys || undefined;
+
+ if(typeof object === 'undefined') {
+ throw new Error('Object argument required.');
+ }
+
+ // if there is a case-insensitive match in the hashes list, accept it
+ // (i.e. SHA256 for sha256)
+ for (var i = 0; i < hashes.length; ++i) {
+ if (hashes[i].toLowerCase() === options.algorithm.toLowerCase()) {
+ options.algorithm = hashes[i];
+ }
+ }
+
+ if(hashes.indexOf(options.algorithm) === -1){
+ throw new Error('Algorithm "' + options.algorithm + '" not supported. ' +
+ 'supported values: ' + hashes.join(', '));
+ }
+
+ if(encodings.indexOf(options.encoding) === -1 &&
+ options.algorithm !== 'passthrough'){
+ throw new Error('Encoding "' + options.encoding + '" not supported. ' +
+ 'supported values: ' + encodings.join(', '));
+ }
+
+ return options;
+ }
+
+ /** Check if the given function is a native function */
+ function isNativeFunction(f) {
+ if ((typeof f) !== 'function') {
+ return false;
+ }
+ var exp = /^function\s+\w*\s*\(\s*\)\s*{\s+\[native code\]\s+}$/i;
+ return exp.exec(Function.prototype.toString.call(f)) != null;
+ }
+
+ function hash(object, options) {
+ var hashingStream;
+
+ if (options.algorithm !== 'passthrough') {
+ hashingStream = crypto.createHash(options.algorithm);
+ } else {
+ hashingStream = new PassThrough();
+ }
+
+ if (typeof hashingStream.write === 'undefined') {
+ hashingStream.write = hashingStream.update;
+ hashingStream.end = hashingStream.update;
+ }
+
+ var hasher = typeHasher(options, hashingStream);
+ hasher.dispatch(object);
+ if (!hashingStream.update) {
+ hashingStream.end('');
+ }
+
+ if (hashingStream.digest) {
+ return hashingStream.digest(options.encoding === 'buffer' ? undefined : options.encoding);
+ }
+
+ var buf = hashingStream.read();
+ if (options.encoding === 'buffer') {
+ return buf;
+ }
+
+ return buf.toString(options.encoding);
+ }
+
+ /**
+ * Expose streaming API
+ *
+ * @param {object} object Value to serialize
+ * @param {object} options Options, as for hash()
+ * @param {object} stream A stream to write the serializiation to
+ * @api public
+ */
+ exports.writeToStream = function(object, options, stream) {
+ if (typeof stream === 'undefined') {
+ stream = options;
+ options = {};
+ }
+
+ options = applyDefaults(object, options);
+
+ return typeHasher(options, stream).dispatch(object);
+ };
+
+ function typeHasher(options, writeTo, context){
+ context = context || [];
+ var write = function(str) {
+ if (writeTo.update) {
+ return writeTo.update(str, 'utf8');
+ } else {
+ return writeTo.write(str, 'utf8');
+ }
+ };
+
+ return {
+ dispatch: function(value){
+ if (options.replacer) {
+ value = options.replacer(value);
+ }
+
+ var type = typeof value;
+ if (value === null) {
+ type = 'null';
+ }
+
+ //console.log("[DEBUG] Dispatch: ", value, "->", type, " -> ", "_" + type);
+
+ return this['_' + type](value);
+ },
+ _object: function(object) {
+ var pattern = (/\[object (.*)\]/i);
+ var objString = Object.prototype.toString.call(object);
+ var objType = pattern.exec(objString);
+ if (!objType) { // object type did not match [object ...]
+ objType = 'unknown:[' + objString + ']';
+ } else {
+ objType = objType[1]; // take only the class name
+ }
+
+ objType = objType.toLowerCase();
+
+ var objectNumber = null;
+
+ if ((objectNumber = context.indexOf(object)) >= 0) {
+ return this.dispatch('[CIRCULAR:' + objectNumber + ']');
+ } else {
+ context.push(object);
+ }
+
+ if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(object)) {
+ write('buffer:');
+ return write(object);
+ }
+
+ if(objType !== 'object' && objType !== 'function' && objType !== 'asyncfunction') {
+ if(this['_' + objType]) {
+ this['_' + objType](object);
+ } else if (options.ignoreUnknown) {
+ return write('[' + objType + ']');
+ } else {
+ throw new Error('Unknown object type "' + objType + '"');
+ }
+ }else {
+ var keys = Object.keys(object);
+ if (options.unorderedObjects) {
+ keys = keys.sort();
+ }
+ // Make sure to incorporate special properties, so
+ // Types with different prototypes will produce
+ // a different hash and objects derived from
+ // different functions (`new Foo`, `new Bar`) will
+ // produce different hashes.
+ // We never do this for native functions since some
+ // seem to break because of that.
+ if (options.respectType !== false && !isNativeFunction(object)) {
+ keys.splice(0, 0, 'prototype', '__proto__', 'constructor');
+ }
+
+ if (options.excludeKeys) {
+ keys = keys.filter(function(key) { return !options.excludeKeys(key); });
+ }
+
+ write('object:' + keys.length + ':');
+ var self = this;
+ return keys.forEach(function(key){
+ self.dispatch(key);
+ write(':');
+ if(!options.excludeValues) {
+ self.dispatch(object[key]);
+ }
+ write(',');
+ });
+ }
+ },
+ _array: function(arr, unordered){
+ unordered = typeof unordered !== 'undefined' ? unordered :
+ options.unorderedArrays !== false; // default to options.unorderedArrays
+
+ var self = this;
+ write('array:' + arr.length + ':');
+ if (!unordered || arr.length <= 1) {
+ return arr.forEach(function(entry) {
+ return self.dispatch(entry);
+ });
+ }
+
+ // the unordered case is a little more complicated:
+ // since there is no canonical ordering on objects,
+ // i.e. {a:1} < {a:2} and {a:1} > {a:2} are both false,
+ // we first serialize each entry using a PassThrough stream
+ // before sorting.
+ // also: we can’t use the same context array for all entries
+ // since the order of hashing should *not* matter. instead,
+ // we keep track of the additions to a copy of the context array
+ // and add all of them to the global context array when we’re done
+ var contextAdditions = [];
+ var entries = arr.map(function(entry) {
+ var strm = new PassThrough();
+ var localContext = context.slice(); // make copy
+ var hasher = typeHasher(options, strm, localContext);
+ hasher.dispatch(entry);
+ // take only what was added to localContext and append it to contextAdditions
+ contextAdditions = contextAdditions.concat(localContext.slice(context.length));
+ return strm.read().toString();
+ });
+ context = context.concat(contextAdditions);
+ entries.sort();
+ return this._array(entries, false);
+ },
+ _date: function(date){
+ return write('date:' + date.toJSON());
+ },
+ _symbol: function(sym){
+ return write('symbol:' + sym.toString());
+ },
+ _error: function(err){
+ return write('error:' + err.toString());
+ },
+ _boolean: function(bool){
+ return write('bool:' + bool.toString());
+ },
+ _string: function(string){
+ write('string:' + string.length + ':');
+ write(string.toString());
+ },
+ _function: function(fn){
+ write('fn:');
+ if (isNativeFunction(fn)) {
+ this.dispatch('[native]');
+ } else {
+ this.dispatch(fn.toString());
+ }
+
+ if (options.respectFunctionNames !== false) {
+ // Make sure we can still distinguish native functions
+ // by their name, otherwise String and Function will
+ // have the same hash
+ this.dispatch("function-name:" + String(fn.name));
+ }
+
+ if (options.respectFunctionProperties) {
+ this._object(fn);
+ }
+ },
+ _number: function(number){
+ return write('number:' + number.toString());
+ },
+ _xml: function(xml){
+ return write('xml:' + xml.toString());
+ },
+ _null: function() {
+ return write('Null');
+ },
+ _undefined: function() {
+ return write('Undefined');
+ },
+ _regexp: function(regex){
+ return write('regex:' + regex.toString());
+ },
+ _uint8array: function(arr){
+ write('uint8array:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _uint8clampedarray: function(arr){
+ write('uint8clampedarray:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _int8array: function(arr){
+ write('uint8array:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _uint16array: function(arr){
+ write('uint16array:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _int16array: function(arr){
+ write('uint16array:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _uint32array: function(arr){
+ write('uint32array:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _int32array: function(arr){
+ write('uint32array:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _float32array: function(arr){
+ write('float32array:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _float64array: function(arr){
+ write('float64array:');
+ return this.dispatch(Array.prototype.slice.call(arr));
+ },
+ _arraybuffer: function(arr){
+ write('arraybuffer:');
+ return this.dispatch(new Uint8Array(arr));
+ },
+ _url: function(url) {
+ return write('url:' + url.toString());
+ },
+ _map: function(map) {
+ write('map:');
+ var arr = Array.from(map);
+ return this._array(arr, options.unorderedSets !== false);
+ },
+ _set: function(set) {
+ write('set:');
+ var arr = Array.from(set);
+ return this._array(arr, options.unorderedSets !== false);
+ },
+ _file: function(file) {
+ write('file:');
+ return this.dispatch([file.name, file.size, file.type, file.lastModfied]);
+ },
+ _blob: function() {
+ if (options.ignoreUnknown) {
+ return write('[blob]');
+ }
+
+ throw Error('Hashing Blob objects is currently not supported\n' +
+ '(see https://github.com/puleos/object-hash/issues/26)\n' +
+ 'Use "options.replacer" or "options.ignoreUnknown"\n');
+ },
+ _domwindow: function() { return write('domwindow'); },
+ _bigint: function(number){
+ return write('bigint:' + number.toString());
+ },
+ /* Node.js standard native objects */
+ _process: function() { return write('process'); },
+ _timer: function() { return write('timer'); },
+ _pipe: function() { return write('pipe'); },
+ _tcp: function() { return write('tcp'); },
+ _udp: function() { return write('udp'); },
+ _tty: function() { return write('tty'); },
+ _statwatcher: function() { return write('statwatcher'); },
+ _securecontext: function() { return write('securecontext'); },
+ _connection: function() { return write('connection'); },
+ _zlib: function() { return write('zlib'); },
+ _context: function() { return write('context'); },
+ _nodescript: function() { return write('nodescript'); },
+ _httpparser: function() { return write('httpparser'); },
+ _dataview: function() { return write('dataview'); },
+ _signal: function() { return write('signal'); },
+ _fsevent: function() { return write('fsevent'); },
+ _tlswrap: function() { return write('tlswrap'); },
+ };
+ }
+
+ // Mini-implementation of stream.PassThrough
+ // We are far from having need for the full implementation, and we can
+ // make assumptions like "many writes, then only one final read"
+ // and we can ignore encoding specifics
+ function PassThrough() {
+ return {
+ buf: '',
+
+ write: function(b) {
+ this.buf += b;
+ },
+
+ end: function(b) {
+ this.buf += b;
+ },
+
+ read: function() {
+ return this.buf;
+ }
+ };
+ }
+} (objectHash$1, objectHash$1.exports));
+
+var objectHashExports = objectHash$1.exports;
+
+const objectHash = objectHashExports;
+const LRU$1 = lruCache;
+
+const { RPError: RPError$5 } = errors;
+
+const { assertIssuerConfiguration: assertIssuerConfiguration$1 } = assert$2;
+const KeyStore$1 = keystore$1;
+const { keystores: keystores$1 } = weak_cache;
+const processResponse$2 = process_response;
+const request$2 = requestExports;
+
+const inFlight = new WeakMap();
+const caches = new WeakMap();
+const lrus = (ctx) => {
+ if (!caches.has(ctx)) {
+ caches.set(ctx, new LRU$1({ max: 100 }));
+ }
+ return caches.get(ctx);
+};
+
+async function getKeyStore(reload = false) {
+ assertIssuerConfiguration$1(this, 'jwks_uri');
+
+ const keystore = keystores$1.get(this);
+ const cache = lrus(this);
+
+ if (reload || !keystore) {
+ if (inFlight.has(this)) {
+ return inFlight.get(this);
+ }
+ cache.reset();
+ inFlight.set(
+ this,
+ (async () => {
+ const response = await request$2
+ .call(this, {
+ method: 'GET',
+ responseType: 'json',
+ url: this.jwks_uri,
+ headers: {
+ Accept: 'application/json, application/jwk-set+json',
+ },
+ })
+ .finally(() => {
+ inFlight.delete(this);
+ });
+ const jwks = processResponse$2(response);
+
+ const joseKeyStore = KeyStore$1.fromJWKS(jwks, { onlyPublic: true });
+ cache.set('throttle', true, 60 * 1000);
+ keystores$1.set(this, joseKeyStore);
+
+ return joseKeyStore;
+ })(),
+ );
+
+ return inFlight.get(this);
+ }
+
+ return keystore;
+}
+
+async function queryKeyStore$1({ kid, kty, alg, use }, { allowMulti = false } = {}) {
+ const cache = lrus(this);
+
+ const def = {
+ kid,
+ kty,
+ alg,
+ use,
+ };
+
+ const defHash = objectHash(def, {
+ algorithm: 'sha256',
+ ignoreUnknown: true,
+ unorderedArrays: true,
+ unorderedSets: true,
+ });
+
+ // refresh keystore on every unknown key but also only upto once every minute
+ const freshJwksUri = cache.get(defHash) || cache.get('throttle');
+
+ const keystore = await getKeyStore.call(this, !freshJwksUri);
+ const keys = keystore.all(def);
+
+ delete def.use;
+ if (keys.length === 0) {
+ throw new RPError$5({
+ printf: ["no valid key found in issuer's jwks_uri for key parameters %j", def],
+ jwks: keystore,
+ });
+ }
+
+ if (!allowMulti && keys.length > 1 && !kid) {
+ throw new RPError$5({
+ printf: [
+ "multiple matching keys found in issuer's jwks_uri for key parameters %j, kid must be provided in this case",
+ def,
+ ],
+ jwks: keystore,
+ });
+ }
+
+ cache.set(defHash, true);
+
+ return keys;
+}
+
+issuer$1.queryKeyStore = queryKeyStore$1;
+issuer$1.keystore = getKeyStore;
+
+const { inspect: inspect$2 } = require$$1$1;
+
+const { RPError: RPError$4, OPError: OPError$3 } = errors;
+const now$1 = unix_timestamp;
+
+let DeviceFlowHandle$1 = class DeviceFlowHandle {
+ #aborted;
+ #client;
+ #clientAssertionPayload;
+ #DPoP;
+ #exchangeBody;
+ #expires_at;
+ #interval;
+ #maxAge;
+ #response;
+ constructor({ client, exchangeBody, clientAssertionPayload, response, maxAge, DPoP }) {
+ ['verification_uri', 'user_code', 'device_code'].forEach((prop) => {
+ if (typeof response[prop] !== 'string' || !response[prop]) {
+ throw new RPError$4(
+ `expected ${prop} string to be returned by Device Authorization Response, got %j`,
+ response[prop],
+ );
+ }
+ });
+
+ if (!Number.isSafeInteger(response.expires_in)) {
+ throw new RPError$4(
+ 'expected expires_in number to be returned by Device Authorization Response, got %j',
+ response.expires_in,
+ );
+ }
+
+ this.#expires_at = now$1() + response.expires_in;
+ this.#client = client;
+ this.#DPoP = DPoP;
+ this.#maxAge = maxAge;
+ this.#exchangeBody = exchangeBody;
+ this.#clientAssertionPayload = clientAssertionPayload;
+ this.#response = response;
+ this.#interval = response.interval * 1000 || 5000;
+ }
+
+ abort() {
+ this.#aborted = true;
+ }
+
+ async poll({ signal } = {}) {
+ if ((signal && signal.aborted) || this.#aborted) {
+ throw new RPError$4('polling aborted');
+ }
+
+ if (this.expired()) {
+ throw new RPError$4(
+ 'the device code %j has expired and the device authorization session has concluded',
+ this.device_code,
+ );
+ }
+
+ await new Promise((resolve) => setTimeout(resolve, this.#interval));
+
+ let tokenset;
+ try {
+ tokenset = await this.#client.grant(
+ {
+ ...this.#exchangeBody,
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
+ device_code: this.device_code,
+ },
+ { clientAssertionPayload: this.#clientAssertionPayload, DPoP: this.#DPoP },
+ );
+ } catch (err) {
+ switch (err instanceof OPError$3 && err.error) {
+ case 'slow_down':
+ this.#interval += 5000;
+ case 'authorization_pending':
+ return this.poll({ signal });
+ default:
+ throw err;
+ }
+ }
+
+ if ('id_token' in tokenset) {
+ await this.#client.decryptIdToken(tokenset);
+ await this.#client.validateIdToken(tokenset, undefined, 'token', this.#maxAge);
+ }
+
+ return tokenset;
+ }
+
+ get device_code() {
+ return this.#response.device_code;
+ }
+
+ get user_code() {
+ return this.#response.user_code;
+ }
+
+ get verification_uri() {
+ return this.#response.verification_uri;
+ }
+
+ get verification_uri_complete() {
+ return this.#response.verification_uri_complete;
+ }
+
+ get expires_in() {
+ return Math.max.apply(null, [this.#expires_at - now$1(), 0]);
+ }
+
+ expired() {
+ return this.expires_in === 0;
+ }
+
+ /* istanbul ignore next */
+ [inspect$2.custom]() {
+ return `${this.constructor.name} ${inspect$2(this.#response, {
+ depth: Infinity,
+ colors: process.stdout.isTTY,
+ compact: false,
+ sorted: true,
+ })}`;
+ }
+};
+
+var device_flow_handle = DeviceFlowHandle$1;
+
+const { inspect: inspect$1 } = require$$1$1;
+const stdhttp = require$$0$3;
+const crypto$2 = require$$0$1;
+const { strict: assert } = require$$0$5;
+const querystring = require$$1$4;
+const url$2 = require$$0$4;
+
+const jose = cjs;
+const tokenHash = lib$2;
+
+const isKeyObject = is_key_object;
+const decodeJWT = decode_jwt;
+const base64url$1 = base64url$5;
+const defaults$1 = defaultsExports;
+const parseWwwAuthenticate = www_authenticate_parser;
+const { assertSigningAlgValuesSupport, assertIssuerConfiguration } = assert$2;
+const pick$1 = pick$3;
+const isPlainObject$1 = is_plain_object;
+const processResponse$1 = process_response;
+const TokenSet$1 = token_set;
+const { OPError: OPError$2, RPError: RPError$3 } = errors;
+const now = unix_timestamp;
+const { random: random$1 } = generators$1;
+const request$1 = requestExports;
+const { CLOCK_TOLERANCE: CLOCK_TOLERANCE$1 } = consts;
+const { keystores } = weak_cache;
+const KeyStore = keystore$1;
+const clone$3 = deep_clone;
+const { authenticatedPost, resolveResponseType: resolveResponseType$1, resolveRedirectUri: resolveRedirectUri$1 } = client;
+const { queryKeyStore } = issuer$1;
+const DeviceFlowHandle = device_flow_handle;
+
+const [major$2, minor$2] = process.version
+ .slice(1)
+ .split('.')
+ .map((str) => parseInt(str, 10));
+
+const rsaPssParams = major$2 >= 17 || (major$2 === 16 && minor$2 >= 9);
+const retryAttempt = Symbol();
+const skipNonceCheck = Symbol();
+const skipMaxAgeCheck = Symbol();
+
+function pickCb(input) {
+ return pick$1(
+ input,
+ 'access_token', // OAuth 2.0
+ 'code', // OAuth 2.0
+ 'error_description', // OAuth 2.0
+ 'error_uri', // OAuth 2.0
+ 'error', // OAuth 2.0
+ 'expires_in', // OAuth 2.0
+ 'id_token', // OIDC Core 1.0
+ 'iss', // draft-ietf-oauth-iss-auth-resp
+ 'response', // FAPI JARM
+ 'session_state', // OIDC Session Management
+ 'state', // OAuth 2.0
+ 'token_type', // OAuth 2.0
+ );
+}
+
+function authorizationHeaderValue(token, tokenType = 'Bearer') {
+ return `${tokenType} ${token}`;
+}
+
+function verifyPresence(payload, jwt, prop) {
+ if (payload[prop] === undefined) {
+ throw new RPError$3({
+ message: `missing required JWT property ${prop}`,
+ jwt,
+ });
+ }
+}
+
+function authorizationParams(params) {
+ const authParams = {
+ client_id: this.client_id,
+ scope: 'openid',
+ response_type: resolveResponseType$1.call(this),
+ redirect_uri: resolveRedirectUri$1.call(this),
+ ...params,
+ };
+
+ Object.entries(authParams).forEach(([key, value]) => {
+ if (value === null || value === undefined) {
+ delete authParams[key];
+ } else if (key === 'claims' && typeof value === 'object') {
+ authParams[key] = JSON.stringify(value);
+ } else if (key === 'resource' && Array.isArray(value)) {
+ authParams[key] = value;
+ } else if (typeof value !== 'string') {
+ authParams[key] = String(value);
+ }
+ });
+
+ return authParams;
+}
+
+function getKeystore(jwks) {
+ if (
+ !isPlainObject$1(jwks) ||
+ !Array.isArray(jwks.keys) ||
+ jwks.keys.some((k) => !isPlainObject$1(k) || !('kty' in k))
+ ) {
+ throw new TypeError('jwks must be a JSON Web Key Set formatted object');
+ }
+
+ return KeyStore.fromJWKS(jwks, { onlyPrivate: true });
+}
+
+// if an OP doesnt support client_secret_basic but supports client_secret_post, use it instead
+// this is in place to take care of most common pitfalls when first using discovered Issuers without
+// the support for default values defined by Discovery 1.0
+function checkBasicSupport(client, properties) {
+ try {
+ const supported = client.issuer.token_endpoint_auth_methods_supported;
+ if (!supported.includes(properties.token_endpoint_auth_method)) {
+ if (supported.includes('client_secret_post')) {
+ properties.token_endpoint_auth_method = 'client_secret_post';
+ }
+ }
+ } catch (err) {}
+}
+
+function handleCommonMistakes(client, metadata, properties) {
+ if (!metadata.token_endpoint_auth_method) {
+ // if no explicit value was provided
+ checkBasicSupport(client, properties);
+ }
+
+ // :fp: c'mon people... RTFM
+ if (metadata.redirect_uri) {
+ if (metadata.redirect_uris) {
+ throw new TypeError('provide a redirect_uri or redirect_uris, not both');
+ }
+ properties.redirect_uris = [metadata.redirect_uri];
+ delete properties.redirect_uri;
+ }
+
+ if (metadata.response_type) {
+ if (metadata.response_types) {
+ throw new TypeError('provide a response_type or response_types, not both');
+ }
+ properties.response_types = [metadata.response_type];
+ delete properties.response_type;
+ }
+}
+
+function getDefaultsForEndpoint(endpoint, issuer, properties) {
+ if (!issuer[`${endpoint}_endpoint`]) return;
+
+ const tokenEndpointAuthMethod = properties.token_endpoint_auth_method;
+ const tokenEndpointAuthSigningAlg = properties.token_endpoint_auth_signing_alg;
+
+ const eam = `${endpoint}_endpoint_auth_method`;
+ const easa = `${endpoint}_endpoint_auth_signing_alg`;
+
+ if (properties[eam] === undefined && properties[easa] === undefined) {
+ if (tokenEndpointAuthMethod !== undefined) {
+ properties[eam] = tokenEndpointAuthMethod;
+ }
+ if (tokenEndpointAuthSigningAlg !== undefined) {
+ properties[easa] = tokenEndpointAuthSigningAlg;
+ }
+ }
+}
+
+let BaseClient$1 = class BaseClient {
+ #metadata;
+ #issuer;
+ #aadIssValidation;
+ #additionalAuthorizedParties;
+ constructor(issuer, aadIssValidation, metadata = {}, jwks, options) {
+ this.#metadata = new Map();
+ this.#issuer = issuer;
+ this.#aadIssValidation = aadIssValidation;
+
+ if (typeof metadata.client_id !== 'string' || !metadata.client_id) {
+ throw new TypeError('client_id is required');
+ }
+
+ const properties = {
+ grant_types: ['authorization_code'],
+ id_token_signed_response_alg: 'RS256',
+ authorization_signed_response_alg: 'RS256',
+ response_types: ['code'],
+ token_endpoint_auth_method: 'client_secret_basic',
+ ...(this.fapi()
+ ? {
+ grant_types: ['authorization_code', 'implicit'],
+ id_token_signed_response_alg: 'PS256',
+ authorization_signed_response_alg: 'PS256',
+ response_types: ['code id_token'],
+ tls_client_certificate_bound_access_tokens: true,
+ token_endpoint_auth_method: undefined,
+ }
+ : undefined),
+ ...metadata,
+ };
+
+ if (this.fapi()) {
+ switch (properties.token_endpoint_auth_method) {
+ case 'self_signed_tls_client_auth':
+ case 'tls_client_auth':
+ break;
+ case 'private_key_jwt':
+ if (!jwks) {
+ throw new TypeError('jwks is required');
+ }
+ break;
+ case undefined:
+ throw new TypeError('token_endpoint_auth_method is required');
+ default:
+ throw new TypeError('invalid or unsupported token_endpoint_auth_method');
+ }
+ }
+
+ handleCommonMistakes(this, metadata, properties);
+
+ assertSigningAlgValuesSupport('token', this.issuer, properties);
+ ['introspection', 'revocation'].forEach((endpoint) => {
+ getDefaultsForEndpoint(endpoint, this.issuer, properties);
+ assertSigningAlgValuesSupport(endpoint, this.issuer, properties);
+ });
+
+ Object.entries(properties).forEach(([key, value]) => {
+ this.#metadata.set(key, value);
+ if (!this[key]) {
+ Object.defineProperty(this, key, {
+ get() {
+ return this.#metadata.get(key);
+ },
+ enumerable: true,
+ });
+ }
+ });
+
+ if (jwks !== undefined) {
+ const keystore = getKeystore.call(this, jwks);
+ keystores.set(this, keystore);
+ }
+
+ if (options != null && options.additionalAuthorizedParties) {
+ this.#additionalAuthorizedParties = clone$3(options.additionalAuthorizedParties);
+ }
+
+ this[CLOCK_TOLERANCE$1] = 0;
+ }
+
+ authorizationUrl(params = {}) {
+ if (!isPlainObject$1(params)) {
+ throw new TypeError('params must be a plain object');
+ }
+ assertIssuerConfiguration(this.issuer, 'authorization_endpoint');
+ const target = url$2.parse(this.issuer.authorization_endpoint, true);
+ target.search = null;
+ target.query = {
+ ...target.query,
+ ...authorizationParams.call(this, params),
+ };
+ return url$2.format(target);
+ }
+
+ authorizationPost(params = {}) {
+ if (!isPlainObject$1(params)) {
+ throw new TypeError('params must be a plain object');
+ }
+ const inputs = authorizationParams.call(this, params);
+ const formInputs = Object.keys(inputs)
+ .map((name) => ``)
+ .join('\n');
+
+ return `
+
+Requesting Authorization
+
+
+
+
+