From f2f3f96d157dba99abdbc0062f591b7c649e1ba2 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 3 Apr 2024 22:34:47 +0200 Subject: [PATCH 001/151] automatic changes to workspace --- wdbplus.code-workspace | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wdbplus.code-workspace b/wdbplus.code-workspace index fbd804c4..2740209c 100644 --- a/wdbplus.code-workspace +++ b/wdbplus.code-workspace @@ -4,5 +4,7 @@ "path": "." } ], - "settings": {} + "settings": { + "window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${profileName}${separator}${appName}${separator}[Branch: 24Q2]" + } } From dd2f3050e7cb32a7a95beb1fca23be75550d0baa Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 10 Apr 2024 01:35:45 +0200 Subject: [PATCH 002/151] prep some stuff --- eslint.config.js | 23 + package-lock.json | 2039 ++++++++++++++++++++++++++++++++++++++------ package.json | 7 +- test/entities.http | 4 +- 4 files changed, 1823 insertions(+), 250 deletions(-) create mode 100644 eslint.config.js diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..14ab3934 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,23 @@ +module.exports = { + "env": { + "browser": true, + "es2021": true + }, + "extends": "xo", + "overrides": [ + { + "files": [ + ".eslintrc.{js,cjs}" + ], + "parserOptions": { + "sourceType": "script" + } + } + ], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "rules": { + } +} diff --git a/package-lock.json b/package-lock.json index e9ff5e8e..e5cb8ade 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,11 +4,167 @@ "requires": true, "packages": { "": { + "devDependencies": { + "@types/jquery": "^3.5.29", + "eslint": "^8.55.0", + "eslint-config-xo": "^0.43.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { - "jshint": "^2.13.5" + "eslint-visitor-keys": "^3.3.0" }, - "devDependencies": { - "@types/jquery": "^3.5.29" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/@types/jquery": { @@ -26,127 +182,469 @@ "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "exit": "0.1.2", - "glob": "^7.1.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.2.5" + "node": ">=7.0.0" } }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true }, - "node_modules/console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { - "date-now": "^0.1.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, - "node_modules/date-now": { + "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "node_modules/eslint-config-xo": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.43.1.tgz", + "integrity": "sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "1.0.11" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "eslint": ">=8.27.0" + } }, - "node_modules/domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, "dependencies": { - "domelementtype": "1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==" + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -162,10 +660,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -173,22 +684,75 @@ "node": "*" } }, - "node_modules/htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -197,39 +761,123 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/jshint": { - "version": "2.13.5", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.5.tgz", - "integrity": "sha512-dB2n1w3OaQ35PLcBGIWXlszjbPZwsgZoxsg6G8PtNf2cFMC1l0fObkYLUuXqTTdi6tKw4sAjfUseTdmDMHQRcg==", - "dependencies": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "strip-json-comments": "1.0.x" + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" }, "bin": { - "jshint": "bin/jshint" + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -237,56 +885,437 @@ "node": "*" } }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } }, - "node_modules/path-is-absolute": { + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, - "node_modules/strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", - "bin": { - "strip-json-comments": "cli.js" - }, - "engines": { - "node": ">=0.8.0" + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - }, - "dependencies": { "@types/jquery": { "version": "3.5.29", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.29.tgz", @@ -302,114 +1331,355 @@ "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { - "date-now": "^0.1.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "date-now": { + "deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "dev": true, "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } } } }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "eslint-config-xo": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.43.1.tgz", + "integrity": "sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==", + "dev": true, + "requires": { + "confusing-browser-globals": "1.0.11" + } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "requires": { - "domelementtype": "1" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" } }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "estraverse": "^5.1.0" } }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==" + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -423,28 +1693,70 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } } } }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -453,78 +1765,317 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } }, - "jshint": { - "version": "2.13.5", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.5.tgz", - "integrity": "sha512-dB2n1w3OaQ35PLcBGIWXlszjbPZwsgZoxsg6G8PtNf2cFMC1l0fObkYLUuXqTTdi6tKw4sAjfUseTdmDMHQRcg==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "strip-json-comments": "1.0.x" + "p-locate": "^5.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "glob": "^7.1.3" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==" + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 473b8db2..97df6c5d 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,7 @@ { "devDependencies": { - "@types/jquery": "^3.5.29" - }, - "dependencies": { - "jshint": "^2.13.5" + "@types/jquery": "^3.5.29", + "eslint": "^8.55.0", + "eslint-config-xo": "^0.43.1" } } diff --git a/test/entities.http b/test/entities.http index b16d5d86..f5be7633 100644 --- a/test/entities.http +++ b/test/entities.http @@ -13,8 +13,8 @@ GET https://tueditions.ulb.tu-darmstadt.de/r/edoc/resource/pa000018-0001 ### -GET https://tueditions.ulb.tu-darmstadt.de/v/pa000018-0001 -If-Modified-Since: Thu, 15 Feb 2024 18:14:21 GMT +GET https://tueditions.ulb.tu-darmstadt.de/v/pa000018-0005 +If-Modified-Since: Fri, 23 Feb 2024 18:04:12 GMT ### From 0bdeca599a6a48d746f0dc8aab0277e742b4ddae Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 10 Apr 2024 01:37:38 +0200 Subject: [PATCH 003/151] no error handlet for calls to *.html we format error pages in error.xqm; passing this through a handler will output HTML code in an HTML page instead of showing the desired output Cf. #343 #304 --- edoc/controller.xql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/edoc/controller.xql b/edoc/controller.xql index f39f39e8..9fb9e239 100644 --- a/edoc/controller.xql +++ b/edoc/controller.xql @@ -83,10 +83,6 @@ else if ( ends-with($exist:resource, ".html") ) then { login:set-user("wd", $cookiePath, $duration, false()) } - - - - else if ( contains($exist:path, "/$shared/") ) then From c28fbb2befd572a7397c26fb5b043f315fa1e0a4 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 10 Apr 2024 01:40:09 +0200 Subject: [PATCH 004/151] 404 page if file ID not found --- edoc/modules/error.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/error.xqm b/edoc/modules/error.xqm index bfa56cfc..80c8fd06 100644 --- a/edoc/modules/error.xqm +++ b/edoc/modules/error.xqm @@ -33,7 +33,7 @@ declare function wdbErr:error ( $data as map (*) ) as item()+ { case "wdbErr:wdb3001" return "Error creating model in function.xqm" default return "An unknown error has occurred: " || $data("code") - let $statusCode := if ( xs:string($data?code) = ("wdbErr:wdb0200", "wdbErr:wdb0000", "wdbErr:wdb0404") ) + let $statusCode := if ( xs:string($data?code) = ("wdbErr:wdb0200", "wdbErr:wdb0000", "wdb0000", "wdbErr:wdb0404") ) then 404 else 418 From 0da43704e67f0133290d21408d03da49375c5319 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 10 Apr 2024 02:23:43 +0200 Subject: [PATCH 005/151] Improve selection of MD when getting file path --- edoc/modules/wdb-files.xqm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 8579ea14..e9606197 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -62,7 +62,7 @@ declare function wdbFiles:getAbsolutePath ( $path as attribute() ) as xs:anyURI : @throws wdbErr:wdb0001 :) declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs:string, xs:string? )? { - let $file := collection("/db")/id($id)[self::meta:file] + let $file := collection("/db")/id($id) return if ( count($file) = 0 ) then error( @@ -70,7 +70,7 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs "no file with ID " || $id, map { "id": $id, "request": request:get-url() } ) - else if ( count($file) > 1 ) then + else if ( count($file[self::meta:file]) > 1 ) then error( QName('https://github.com/dariok/wdbErr', 'wdb0001'), "multiple files with ID " || $id, @@ -92,8 +92,8 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs "fileURL": doc("../config.xml")/id($peer) || '/' || $id } else - let $projectPath := base-uri($file) => substring-before("wdbmeta.xml") - , $path := $projectPath || $file/@path + let $projectPath := base-uri($file[self::meta:file]) => substring-before("wdbmeta.xml") + , $path := $projectPath || $file[self::meta:file]/@path return map{ "projectPath": $projectPath, From 32c4085b07f21ce09f54c0c787a10e7d4358ec45 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 10 Apr 2024 19:05:41 +0200 Subject: [PATCH 006/151] re-enable creating a view for meta:struct[@xml:id] --- edoc/modules/wdb-files.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index e9606197..109e7060 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -76,7 +76,7 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs "multiple files with ID " || $id, map { "id": $id, "request": request:get-url() } ) - else if ( $file[self::meta:projectMD] ) then + else if ( $file[self::meta:projectMD or self::meta:struct] ) then let $projectPath := base-uri($file) => substring-before("wdbmeta.xml") return map { "projectPath": $projectPath, From e5f4ccd5cd6b9da552f51f14079533f5f5289197 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 10 Apr 2024 19:54:27 +0200 Subject: [PATCH 007/151] remove unused file --- edoc/resources/wdbmeta.xsl | 164 ------------------------------------- 1 file changed, 164 deletions(-) delete mode 100644 edoc/resources/wdbmeta.xsl diff --git a/edoc/resources/wdbmeta.xsl b/edoc/resources/wdbmeta.xsl deleted file mode 100644 index 8f57c070..00000000 --- a/edoc/resources/wdbmeta.xsl +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - -
- -
-
- - -
    - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
  • - - - -
  • -
    - - - - -
  • - - - -
      - - - - - - -
    -
  • -
    -
    - - - - -
  • - - - -
  • -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " - - - - - - - - - - - - - - - - - -
    From 2c97c36ba49810c17f36cb0453bd21869e099d26 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 12 Apr 2024 00:01:42 +0200 Subject: [PATCH 008/151] replace wdb:getEdPath() by wdbFiles:getFullPath() where possibl Cf. #549 #313 required for #317 --- README.md | 5 +++++ edoc/admin/admin.xqm | 13 ++++++++----- edoc/modules/app.xqm | 33 +-------------------------------- edoc/modules/entity.xqm | 2 +- edoc/modules/function.xqm | 10 +++++----- edoc/modules/stats.xqm | 6 +++--- edoc/modules/wdb-files.xqm | 2 +- edoc/rest/rest-coll.xql | 11 +++++------ edoc/rest/rest-entity.xql | 14 +++++++------- edoc/rest/rest-files.xql | 2 +- edoc/rest/rest-search.xql | 15 ++++++++------- 11 files changed, 45 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index a09379b8..f7f1c9c2 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,11 @@ This framework still lacks a good name. If you have an idea, please let me know! ## Incompatible changes +Release 24Q2 dropped functions `wdb:getEdPath( $ed as xs:string , $absolute as xs:boolean() )` and +`wdb:getEdPath( $ed as xs:string )`. These queries can be replaced by `(wdbFile:getFullPath($id))` which returns a map +with `projectPath` (the path to the project, i.e. the collection where `project.xqm` is stored), `collectionPath` (for +the subcollection where a file is actually located), and `fileName`. + Release 24Q1 dropped support for METS-based projects. As METS files can have a number of very different ways of encoding information, especially when it comes to behaviours, native support is hard to achieve. At the same time, most installations use wdb+’s native wdbmeta system as this is what the admin functions work with. diff --git a/edoc/admin/admin.xqm b/edoc/admin/admin.xqm index 7f9aaa44..af1707b9 100644 --- a/edoc/admin/admin.xqm +++ b/edoc/admin/admin.xqm @@ -2,10 +2,13 @@ xquery version "3.1"; module namespace wdbAdmin = "https://github.com/dariok/wdbplus/Admin"; -import module namespace console = "http://exist-db.org/xquery/console" at "java:org.exist.console.xquery.ConsoleModule"; +(: note for code maintenance: as of 2024-04-10, this module uses the following exports from app.xqm: + : - $wdb:data + :) import module namespace templates = "http://exist-db.org/xquery/html-templating"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; -import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "/db/apps/edoc/modules/error.xqm"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; +import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "/db/apps/edoc/modules/error.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare namespace sm = "http://exist-db.org/xquery/securitymanager"; @@ -22,10 +25,10 @@ function wdbAdmin:start ( $node as node(), $model as map(*), $ed as xs:string ) try { let $pathToEd := if ( $ed = "" ) then $wdb:data - else wdb:getEdPath($ed, true()) + else (wdbFiles:getFullPath($ed))?projectPath (: The meta data are taken from wdbmeta.xml :) - let $infoFileLoc := wdb:getMetaFile($pathToEd) + let $infoFileLoc := $pathToEd || "/wdbmeta.xml" , $title := normalize-space((doc($infoFileLoc)//meta:title)[1]) return map { diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index 3f191fd6..35b1f0cb 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -591,37 +591,6 @@ declare function wdb:getFilePath ( $id as xs:string ) as xs:string { else $pathToFile }; -(:~ - : Return the (relative or absolute) path to the project - : - : @param $id the ID of a resource within a project - : @param $absolute (optional) if true(), return an absolute URL - : - : @returns the path (relative) to the app root - :) -declare function wdb:getEdPath($id as xs:string, $absolute as xs:boolean) as xs:string { - let $file := collection($wdb:data)/id($id)[self::meta:file or self::meta:projectMD or self::meta:struct] - - let $edPath := if ( count($file) = 1 ) then - xstring:substring-before-last(base-uri($file), '/') - else if ( count($file) > 1 ) then - fn:error(fn:QName('https://github.com/dariok/wdbErr', 'wdb0001')) - else - fn:error(fn:QName('https://github.com/dariok/wdbErr', 'wdb0200')) - - return if ($absolute) then replace($edPath, '//', '/') else substring-after($edPath, $wdb:edocBaseDB) -}; - -(:~ - : Return the relative path to the project - : - : @param $id the ID of a resource within a project - : @return the path relative to the app root - :) -declare function wdb:getEdPath($id as xs:string) as xs:string { - wdb:getEdPath($id, false()) -}; - (:~ : Tries to return an absolute path for a path within a project : @@ -632,7 +601,7 @@ declare function wdb:getEdPath($id as xs:string) as xs:string { declare function wdb:getAbsolutePath ( $ed as xs:string, $path as xs:string ) { if ( starts-with($path, '/') ) then $path - else wdb:getEdPath($ed, true()) || "/" || $path + else (wdbFile:getFullPath($ed))?projectPath || "/" || $path }; (:~ diff --git a/edoc/modules/entity.xqm b/edoc/modules/entity.xqm index 301a2e07..f1b31579 100644 --- a/edoc/modules/entity.xqm +++ b/edoc/modules/entity.xqm @@ -10,7 +10,7 @@ declare namespace tei = "http://www.tei-c.org/ns/1.0"; (: $ent ID-String of the entity to be displayed – must be globally unique $ed ID of the project from which specific information shall be drawn :) declare function wdbe:getEntity ( $node as node(), $model as map(*), $ent as xs:string, $ed as xs:string ) as map(*) { - let $edPath := wdb:getEdPath($ed, true()) + let $edPath := (wdbFile:getFullPath($ed))?projectPath , $entry := collection($edPath || "/index")/id($ent) return map { "entry": $entry, "ent": $ent, "ed": $ed, "pathToEd": $edPath } diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 571d8a09..2772f649 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -58,25 +58,25 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a else if ( request:exists() and request:get-uri() => ends-with('/entity.html') ) then let $regFile := switch ( $q ) case "per" - return collection(wdb:getEdPath($ed, true()))//*:listPerson[ancestor::*:text] + return (wdbFile:getFullPath($ed))?projectPath//*:listPerson[ancestor::*:text] case "org" - return collection(wdb:getEdPath($ed, true()))//*:listOrg[ancestor::*:text] + return (wdbFile:getFullPath($ed))?projectPath//*:listOrg[ancestor::*:text] case "pla" - return collection(wdb:getEdPath($ed, true()))//*:listPlace[ancestor::*:text] + return (wdbFile:getFullPath($ed))?projectPath//*:listPlace[ancestor::*:text] default return error(xs:QName("wdbErr:wdb3010"), "unknown entity type", map { "type": $q }) let $entryEd := $regFile/id($id) , $pathToEd := if ( $ed = "" ) then $wdb:data - else wdb:getEdPath($ed, true()) + else (wdbFile:getFullPath($ed))?projectPath (: TODO: this only uses a project specific list* file; we want ot use (or at least support) globals files :) return map { "entry": $entryEd, "id": $id, "ed": $ed, "pathToEd": $pathToEd } else if ( $id = "" ) then (: no ID: related to a project :) let $pathToEd := if ( $ed = "" ) then $wdb:data - else wdb:getEdPath($ed, true()), + else (wdbFile:getFullPath($ed))?projectPath, $infoFileLoc := wdb:getMetaFile($pathToEd) , $pp := try { parse-json($p) diff --git a/edoc/modules/stats.xqm b/edoc/modules/stats.xqm index ab5984a8..4b614534 100644 --- a/edoc/modules/stats.xqm +++ b/edoc/modules/stats.xqm @@ -15,11 +15,11 @@ function wdbs:getEd($node as node(), $model as map(*), $ed as xs:string) { wdbs:projectList(sm:is-dba(sm:id()//sm:real/sm:username/string()), $ed) }; -declare function wdbs:projectList($admin as xs:boolean, $ed) { - let $pathToEd := if ($ed = "") then +declare function wdbs:projectList ( $admin as xs:boolean, $ed ) { + let $pathToEd := if ( $ed = "" ) then $wdb:data else try { - wdb:getEdPath($ed, true()) + (wdbFile:getFullPath($ed))?projectPath } catch * {()} let $editionsW := collection($pathToEd)//wdbmeta:projectMD diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 109e7060..70b8e897 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -77,7 +77,7 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs map { "id": $id, "request": request:get-url() } ) else if ( $file[self::meta:projectMD or self::meta:struct] ) then - let $projectPath := base-uri($file) => substring-before("wdbmeta.xml") + let $projectPath := base-uri($file[self::meta:projectMD or self::meta:struct]) => substring-before("wdbmeta.xml") return map { "projectPath": $projectPath, "collectionPath": $projectPath, diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index 46e81b55..86cc29ce 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -71,13 +71,12 @@ function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as "no project with ID " || $collectionID || " or project not using wdbmeta.xml" ) else - let $collection := wdb:getEdPath($collectionID, true()) - - let $parentMeta := doc($collection || "/wdbmeta.xml") + let $collection := (wdbFile:getFullPath($collectionID))?projectPath + , $parentMeta := doc($collection || "/wdbmeta.xml") let $errUser := not(sm:has-access(base-uri($parentMeta), "w")) let $errCollectionPresent := try { - wdb:getEdPath($collectionData?id) + (wdbFile:getFullPath($collectionData?id))?collectionPath } catch * { false() } @@ -187,7 +186,7 @@ function wdbRc:createFile ($data as xs:string*, $collection as xs:string, $heade then error (QName("https://github.com/dariok/wdbplus/errors", "wdbErr:h400"), "collection " || $collection || " not found", 404) else () - let $collectionPath := replace($wdb:edocBaseDB || '/' || wdb:getEdPath($collection), "//", "/") + let $collectionPath := (wdbFile:getFullPath($collection))?collectionPath let $err := if (not(sm:has-access(xs:anyURI($collectionPath), "w"))) then error (QName("https://github.com/dariok/wdbplus/errors", "wdbErr:h400"), "user " || $user || " has no access to write to collection " || $collectionPath, 403) else () @@ -391,7 +390,7 @@ declare %rest:path("/edoc/collection/{$id}/structure.json") %output:method("json") function wdbRc:getStructureJson ( $id ) { - let $collection-uri := wdb:getEdPath($id, true()) + let $collection-uri := (wdbFile:getFullPath($id))?projectPath return ( diff --git a/edoc/rest/rest-entity.xql b/edoc/rest/rest-entity.xql index 6f881d1e..82c3b634 100644 --- a/edoc/rest/rest-entity.xql +++ b/edoc/rest/rest-entity.xql @@ -16,8 +16,8 @@ declare %rest:path("/edoc/entities/scan/{$type}/{$collection}.xml") %rest:query-param("q", "{$q}") function wdbRe:scan ($collection as xs:string, $type as xs:string*, $q as xs:string*) { - let $coll := try { wdb:getEdPath($collection, true()) } catch * { "" } - let $query := xmldb:decode($q) || '*' + let $coll := try { (wdbFile:getFullPath($id))?projectPath } catch * { "" } + , $query := xmldb:decode($q) || '*' let $errNoColl := if ($coll eq "") then (404, "Project " || $collection || " not found") @@ -71,7 +71,7 @@ declare %output:method("html") function wdbRe:scanHtml ($collection as xs:string, $type as xs:string, $q as xs:string*) { let $md := collection($wdb:data)//id($collection)[self::meta:projectMD] - , $coll := substring-before(wdb:findProjectXQM(wdb:getEdPath($collection, true())), 'project.xqm') + , $coll := (wdbFile:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := @@ -95,7 +95,7 @@ declare %rest:path("/edoc/entities/collection/{$collection}/{$type}/{$ref}.xml") %rest:query-param("start", "{$start}", 1) function wdbRe:collectionEntity ($collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int*) { - let $coll := wdb:getEdPath($collection, true()) + let $coll := (wdbFile:getFullPath($id))?projectPath let $query := xmldb:decode($ref) let $res := collection($coll)//tei:TEI[descendant::tei:rs[@ref=$query or @ref='#'||$query or @ref = $type || ':' || $ref]] @@ -125,7 +125,7 @@ declare %output:method("html") function wdbRe:collectionEntityHtml ($collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int*) { let $md := collection($wdb:data)//id($collection)[self::meta:projectMD] - , $coll := substring-before(wdb:findProjectXQM(wdb:getEdPath($collection, true())), 'project.xqm') + , $coll := (wdbFile:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := @@ -176,7 +176,7 @@ declare %rest:query-param("start", "{$start}", 1) %output:method("html") function wdbRe:fileEntityHtml ( $id as xs:string*, $ref as xs:string*, $start as xs:int*, $type as xs:string* ) { - let $coll := wdb:getEdPath($id, true()) + let $coll := (wdbFile:getFullPath($id))?collectionPath , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := @@ -199,7 +199,7 @@ declare %rest:path("/edoc/entities/{$ed}/{$type}/byId") %rest:query-param("q", "{$externalId}", "") function wdbRe:entityById ( $ed as xs:string*, $type as xs:string*, $externalId as xs:string* ) { - let $coll := try { wdb:getEdPath($ed, true()) } catch * { "" } + let $coll := try { (wdbFile:getFullPath($ed))?collectionPath } catch * { "" } , $query := xmldb:decode($externalId) let $res := switch ( $type ) diff --git a/edoc/rest/rest-files.xql b/edoc/rest/rest-files.xql index a2458e63..113502f7 100644 --- a/edoc/rest/rest-files.xql +++ b/edoc/rest/rest-files.xql @@ -189,7 +189,7 @@ function wdbRf:getResource ( $id as xs:string, $modified as xs:string* ) { (: Admins are advised by the documentation they REALLY SHOULD NOT have more than one entry for every ID : To be on the safe side, we go for the first one anyway :) let $files := collection($wdb:data)//id($id)[self::meta:file] - , $collectionPath := wdb:getEdPath($id, true()) + , $collectionPath := (wdbFile:getFullPath($id))?collectionPath , $f := $files[1] , $path := $collectionPath || '/' || $f/@path , $readable := sm:has-access($path, "r") diff --git a/edoc/rest/rest-search.xql b/edoc/rest/rest-search.xql index fe81ada5..8028d515 100644 --- a/edoc/rest/rest-search.xql +++ b/edoc/rest/rest-search.xql @@ -3,6 +3,7 @@ xquery version "3.1"; module namespace wdbRs = "https://github.com/dariok/wdbplus/RestSearch"; import module namespace kwic = "http://exist-db.org/xquery/kwic"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; @@ -21,7 +22,7 @@ declare %rest:path("/edoc/search/collection/{$id}.xml") %rest:query-param("q", "{$q}") %rest:query-param("start", "{$start}", 1) -function wdbRs:collectionText ($id as xs:string*, $q as xs:string*, $start as xs:int*) { +function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as xs:int* ) { if (0 = (count($q), string-length($q))) then ( @@ -37,16 +38,16 @@ function wdbRs:collectionText ($id as xs:string*, $q as xs:string*, $start as xs "Error: no query content!" ) else - let $coll := wdb:getEdPath($id, true()) - - let $query := xmldb:decode($q) + let $coll := (wdbFile:getFullPath($id))?projectPath + , $query := xmldb:decode($q) (: going through several thousand hits is too costly (base-uri for 10,000 hits alone would take about one second); subsequence here and then looping through grouped results leads to problems with IDs of ancestors and KWIC. Hence, only look for matching files and then do the search in subsequences of files. This way, KWIC works and IDs can be retrieved. The cost of the extra searches should not be as high as before :) let $res := collection($coll)//tei:text[ft:query(., $query)] - let $max := count($res) + , $max := count($res) + let $result := for $r in $res order by $r/ancestor::tei:TEI//tei:date[@type = 'published']/@when return $r @@ -91,7 +92,7 @@ function wdbRs:collectionHtml ($id as xs:string*, $q as xs:string*, $start as xs ) else let $md := collection($wdb:data)//id($id)[self::meta:projectMD] - , $coll := substring-before(wdb:findProjectXQM(wdb:getEdPath($id, true())), 'project.xqm') + , $coll := (wdbFile:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') let $params := @@ -192,7 +193,7 @@ function wdbRs:fileHtml ($id as xs:string*, $q as xs:string*, $start as xs:int*) ) else let $file := (collection($wdb:data)/id($id))[self::tei:TEI][1] - , $coll := substring-before(wdb:findProjectXQM(wdb:getEdPath($id, true())), 'project.xqm') + , $coll := (wdbFile:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') let $params := From f0fe264e3f4111124417360e379be5986308f611 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 15 Apr 2024 16:53:20 +0200 Subject: [PATCH 009/151] view of meta:struct : add struct ID to file name --- edoc/modules/app.xqm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index 35b1f0cb..b11886a9 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -454,7 +454,9 @@ declare function wdb:wrapText ( $node as node(), $model as map(*), $key as xs:st : return the body :) declare function wdb:getContent($node as node(), $model as map(*)) { - let $file := $model("fileLoc") + let $file := if ( ends-with($model?fileLoc, 'wdbmeta.xml') ) + then $model?fileLoc || '#' || $model?id + else $model?fileLoc let $xslt := if (string-length($model?xslt) = 0) then wdbErr:error(map {"code": "wdbErr:wdb0002", "model": $model}) From c945f8c05eb9315f87ad227b6a7cd44054dc3113 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 22 Apr 2024 12:17:56 +0200 Subject: [PATCH 010/151] Apply config to /admin, too Otherwise, RESTXQ might not work I forgot this in https://github.com/dariok/wdbplus/commit/0261e1e405bbd985f28a84163aef4826d2f6bce8 --- edoc/post-install.xql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/edoc/post-install.xql b/edoc/post-install.xql index 8153df4d..4a98a91e 100644 --- a/edoc/post-install.xql +++ b/edoc/post-install.xql @@ -51,8 +51,9 @@ let $chmod := ( let $reindex := ( xmldb:reindex($targetCollection || '/data'), xmldb:reindex($targetCollection || '/rest'), - xmldb:reindex($targetCollection || '/annotation'), - xmldb:reindex($targetCollection || '/addins') + xmldb:reindex($targetCollection || '/annotations'), + xmldb:reindex($targetCollection || '/addins'), + xmldb:reindex($targetCollection || '/admin') ) return ($reindex, $chmod) \ No newline at end of file From 2d3e6a99fe590a2a38adc2fe22d43b9ef6860744 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 22 Apr 2024 12:40:48 +0200 Subject: [PATCH 011/151] toc.html: full link to admin functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit a relative link will obviously only work from projects.html – but this may also be called from toc.html with results in a toc.html for only a project without a working link to the admin pages. reverts 370fe43 Closes #556 --- edoc/modules/stats.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/stats.xqm b/edoc/modules/stats.xqm index 4b614534..738c27e3 100644 --- a/edoc/modules/stats.xqm +++ b/edoc/modules/stats.xqm @@ -52,7 +52,7 @@ declare function wdbs:projectList ( $admin as xs:boolean, $ed ) { { if ( $admin ) then ( {xs:string($metaFile)}, - verwalten + verwalten ) else () } From dc248cc984926e8e1564930ccd55ae0540d0c656 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 17 May 2024 10:28:17 +0200 Subject: [PATCH 012/151] Fix typo in namespace prefix --- edoc/modules/app.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index b11886a9..7c559228 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -603,7 +603,7 @@ declare function wdb:getFilePath ( $id as xs:string ) as xs:string { declare function wdb:getAbsolutePath ( $ed as xs:string, $path as xs:string ) { if ( starts-with($path, '/') ) then $path - else (wdbFile:getFullPath($ed))?projectPath || "/" || $path + else (wdbFiles:getFullPath($ed))?projectPath || "/" || $path }; (:~ From 69de5fca38ab62eb604a2c339bf53e433f8ddbbe Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 17 May 2024 10:29:24 +0200 Subject: [PATCH 013/151] =?UTF-8?q?add=20=E2=80=9Csponsors=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index f7f1c9c2..004feeb9 100644 --- a/README.md +++ b/README.md @@ -101,5 +101,12 @@ See the Wiki for details! * Akademie der Wissenschaften, Heidelberg * Theologenbriefwechsel * ULB Darmstadt + * TUEditions + * WDM If you use wdbplus for your editions, please drop me a message so I can add you to this list. + +## Sponsoring + +Development of wdb+ is chiefly done in projects funded by DFG and the German BMBF. +Additionally, we would like to say thank you to BrowserStack for giving us sponsored access! From b8381263f92fd33edfb9ad45accdfb155faacc07 Mon Sep 17 00:00:00 2001 From: WunschK <64890303+WunschK@users.noreply.github.com> Date: Tue, 21 May 2024 12:08:04 +0200 Subject: [PATCH 014/151] wdbFile to wdbFiles shouldn't wdbFile be wdbFiles? --- edoc/modules/function.xqm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 2772f649..611253e8 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -58,18 +58,18 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a else if ( request:exists() and request:get-uri() => ends-with('/entity.html') ) then let $regFile := switch ( $q ) case "per" - return (wdbFile:getFullPath($ed))?projectPath//*:listPerson[ancestor::*:text] + return (wdbFiles:getFullPath($ed))?projectPath//*:listPerson[ancestor::*:text] case "org" - return (wdbFile:getFullPath($ed))?projectPath//*:listOrg[ancestor::*:text] + return (wdbFiles:getFullPath($ed))?projectPath//*:listOrg[ancestor::*:text] case "pla" - return (wdbFile:getFullPath($ed))?projectPath//*:listPlace[ancestor::*:text] + return (wdbFiles:getFullPath($ed))?projectPath//*:listPlace[ancestor::*:text] default return error(xs:QName("wdbErr:wdb3010"), "unknown entity type", map { "type": $q }) let $entryEd := $regFile/id($id) , $pathToEd := if ( $ed = "" ) then $wdb:data - else (wdbFile:getFullPath($ed))?projectPath + else (wdbFiles:getFullPath($ed))?projectPath (: TODO: this only uses a project specific list* file; we want ot use (or at least support) globals files :) return map { "entry": $entryEd, "id": $id, "ed": $ed, "pathToEd": $pathToEd } else if ( $id = "" ) then From def6d9402687c6b948c5483c72ee246e96d80712 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Tue, 21 May 2024 12:14:00 +0200 Subject: [PATCH 015/151] Fix typo in module namespace prefix --- README.md | 2 +- edoc/modules/entity.xqm | 6 +++--- edoc/modules/function.xqm | 11 ++++++----- edoc/modules/stats.xqm | 3 ++- edoc/rest/rest-coll.xql | 8 ++++---- edoc/rest/rest-entity.xql | 17 +++++++++-------- edoc/rest/rest-files.xql | 2 +- edoc/rest/rest-search.xql | 6 +++--- 8 files changed, 29 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 004feeb9..d2f1ded9 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ This framework still lacks a good name. If you have an idea, please let me know! ## Incompatible changes Release 24Q2 dropped functions `wdb:getEdPath( $ed as xs:string , $absolute as xs:boolean() )` and -`wdb:getEdPath( $ed as xs:string )`. These queries can be replaced by `(wdbFile:getFullPath($id))` which returns a map +`wdb:getEdPath( $ed as xs:string )`. These queries can be replaced by `(wdbFiles:getFullPath($id))` which returns a map with `projectPath` (the path to the project, i.e. the collection where `project.xqm` is stored), `collectionPath` (for the subcollection where a file is actually located), and `fileName`. diff --git a/edoc/modules/entity.xqm b/edoc/modules/entity.xqm index f1b31579..bec3c0ce 100644 --- a/edoc/modules/entity.xqm +++ b/edoc/modules/entity.xqm @@ -2,15 +2,15 @@ xquery version "3.1"; module namespace wdbe = "https://github.com/dariok/wdbplus/entity"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; -import module namespace console = "http://exist-db.org/xquery/console"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; declare namespace tei = "http://www.tei-c.org/ns/1.0"; (: $ent ID-String of the entity to be displayed – must be globally unique $ed ID of the project from which specific information shall be drawn :) declare function wdbe:getEntity ( $node as node(), $model as map(*), $ent as xs:string, $ed as xs:string ) as map(*) { - let $edPath := (wdbFile:getFullPath($ed))?projectPath + let $edPath := (wdbFiles:getFullPath($ed))?projectPath , $entry := collection($edPath || "/index")/id($ent) return map { "entry": $entry, "ent": $ent, "ed": $ed, "pathToEd": $edPath } diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 2772f649..69b5e7c2 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -10,6 +10,7 @@ import module namespace wdba = "https://github.com/dariok/wdbplus/auth" import module namespace wdbAddinMain = "https://github.com/dariok/wdbplus/addins-main" at "/db/apps/edoc/modules/addin.xqm"; import module namespace wdbe = "https://github.com/dariok/wdbplus/entity" at "/db/apps/edoc/modules/entity.xqm"; import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "/db/apps/edoc/modules/error.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; import module namespace wdbpq = "https://github.com/dariok/wdbplus/pquery" at "/db/apps/edoc/modules/pquery.xqm"; import module namespace wdbs = "https://github.com/dariok/wdbplus/stats" at "stats.xqm"; import module namespace wdbSearch = "https://github.com/dariok/wdbplus/wdbs" at "/db/apps/edoc/modules/search.xqm"; @@ -58,25 +59,25 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a else if ( request:exists() and request:get-uri() => ends-with('/entity.html') ) then let $regFile := switch ( $q ) case "per" - return (wdbFile:getFullPath($ed))?projectPath//*:listPerson[ancestor::*:text] + return (wdbFiles:getFullPath($ed))?projectPath//*:listPerson[ancestor::*:text] case "org" - return (wdbFile:getFullPath($ed))?projectPath//*:listOrg[ancestor::*:text] + return (wdbFiles:getFullPath($ed))?projectPath//*:listOrg[ancestor::*:text] case "pla" - return (wdbFile:getFullPath($ed))?projectPath//*:listPlace[ancestor::*:text] + return (wdbFiles:getFullPath($ed))?projectPath//*:listPlace[ancestor::*:text] default return error(xs:QName("wdbErr:wdb3010"), "unknown entity type", map { "type": $q }) let $entryEd := $regFile/id($id) , $pathToEd := if ( $ed = "" ) then $wdb:data - else (wdbFile:getFullPath($ed))?projectPath + else (wdbFiles:getFullPath($ed))?projectPath (: TODO: this only uses a project specific list* file; we want ot use (or at least support) globals files :) return map { "entry": $entryEd, "id": $id, "ed": $ed, "pathToEd": $pathToEd } else if ( $id = "" ) then (: no ID: related to a project :) let $pathToEd := if ( $ed = "" ) then $wdb:data - else (wdbFile:getFullPath($ed))?projectPath, + else (wdbFiles:getFullPath($ed))?projectPath, $infoFileLoc := wdb:getMetaFile($pathToEd) , $pp := try { parse-json($p) diff --git a/edoc/modules/stats.xqm b/edoc/modules/stats.xqm index 738c27e3..65350fe0 100644 --- a/edoc/modules/stats.xqm +++ b/edoc/modules/stats.xqm @@ -3,6 +3,7 @@ xquery version "3.0"; module namespace wdbs = "https://github.com/dariok/wdbplus/stats"; import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; import module namespace templates = "http://exist-db.org/xquery/html-templating"; declare namespace tei = "http://www.tei-c.org/ns/1.0"; @@ -19,7 +20,7 @@ declare function wdbs:projectList ( $admin as xs:boolean, $ed ) { let $pathToEd := if ( $ed = "" ) then $wdb:data else try { - (wdbFile:getFullPath($ed))?projectPath + (wdbFiles:getFullPath($ed))?projectPath } catch * {()} let $editionsW := collection($pathToEd)//wdbmeta:projectMD diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index 86cc29ce..f692696c 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -71,12 +71,12 @@ function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as "no project with ID " || $collectionID || " or project not using wdbmeta.xml" ) else - let $collection := (wdbFile:getFullPath($collectionID))?projectPath + let $collection := (wdbFiles:getFullPath($collectionID))?projectPath , $parentMeta := doc($collection || "/wdbmeta.xml") let $errUser := not(sm:has-access(base-uri($parentMeta), "w")) let $errCollectionPresent := try { - (wdbFile:getFullPath($collectionData?id))?collectionPath + (wdbFiles:getFullPath($collectionData?id))?collectionPath } catch * { false() } @@ -186,7 +186,7 @@ function wdbRc:createFile ($data as xs:string*, $collection as xs:string, $heade then error (QName("https://github.com/dariok/wdbplus/errors", "wdbErr:h400"), "collection " || $collection || " not found", 404) else () - let $collectionPath := (wdbFile:getFullPath($collection))?collectionPath + let $collectionPath := (wdbFiles:getFullPath($collection))?collectionPath let $err := if (not(sm:has-access(xs:anyURI($collectionPath), "w"))) then error (QName("https://github.com/dariok/wdbplus/errors", "wdbErr:h400"), "user " || $user || " has no access to write to collection " || $collectionPath, 403) else () @@ -390,7 +390,7 @@ declare %rest:path("/edoc/collection/{$id}/structure.json") %output:method("json") function wdbRc:getStructureJson ( $id ) { - let $collection-uri := (wdbFile:getFullPath($id))?projectPath + let $collection-uri := (wdbFiles:getFullPath($id))?projectPath return ( diff --git a/edoc/rest/rest-entity.xql b/edoc/rest/rest-entity.xql index 82c3b634..661e7570 100644 --- a/edoc/rest/rest-entity.xql +++ b/edoc/rest/rest-entity.xql @@ -2,8 +2,9 @@ xquery version "3.1"; module namespace wdbRe = "https://github.com/dariok/wdbplus/RestEntities"; -import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "../modules/app.xqm"; +import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "../modules/app.xqm"; declare namespace http = "http://expath.org/ns/http-client"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; @@ -16,7 +17,7 @@ declare %rest:path("/edoc/entities/scan/{$type}/{$collection}.xml") %rest:query-param("q", "{$q}") function wdbRe:scan ($collection as xs:string, $type as xs:string*, $q as xs:string*) { - let $coll := try { (wdbFile:getFullPath($id))?projectPath } catch * { "" } + let $coll := try { (wdbFiles:getFullPath($id))?projectPath } catch * { "" } , $query := xmldb:decode($q) || '*' let $errNoColl := if ($coll eq "") @@ -71,7 +72,7 @@ declare %output:method("html") function wdbRe:scanHtml ($collection as xs:string, $type as xs:string, $q as xs:string*) { let $md := collection($wdb:data)//id($collection)[self::meta:projectMD] - , $coll := (wdbFile:getFullPath($id))?projectPath + , $coll := (wdbFiles:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := @@ -95,7 +96,7 @@ declare %rest:path("/edoc/entities/collection/{$collection}/{$type}/{$ref}.xml") %rest:query-param("start", "{$start}", 1) function wdbRe:collectionEntity ($collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int*) { - let $coll := (wdbFile:getFullPath($id))?projectPath + let $coll := (wdbFiles:getFullPath($id))?projectPath let $query := xmldb:decode($ref) let $res := collection($coll)//tei:TEI[descendant::tei:rs[@ref=$query or @ref='#'||$query or @ref = $type || ':' || $ref]] @@ -125,7 +126,7 @@ declare %output:method("html") function wdbRe:collectionEntityHtml ($collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int*) { let $md := collection($wdb:data)//id($collection)[self::meta:projectMD] - , $coll := (wdbFile:getFullPath($id))?projectPath + , $coll := (wdbFiles:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := @@ -176,7 +177,7 @@ declare %rest:query-param("start", "{$start}", 1) %output:method("html") function wdbRe:fileEntityHtml ( $id as xs:string*, $ref as xs:string*, $start as xs:int*, $type as xs:string* ) { - let $coll := (wdbFile:getFullPath($id))?collectionPath + let $coll := (wdbFiles:getFullPath($id))?collectionPath , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := @@ -199,7 +200,7 @@ declare %rest:path("/edoc/entities/{$ed}/{$type}/byId") %rest:query-param("q", "{$externalId}", "") function wdbRe:entityById ( $ed as xs:string*, $type as xs:string*, $externalId as xs:string* ) { - let $coll := try { (wdbFile:getFullPath($ed))?collectionPath } catch * { "" } + let $coll := try { (wdbFiles:getFullPath($ed))?collectionPath } catch * { "" } , $query := xmldb:decode($externalId) let $res := switch ( $type ) diff --git a/edoc/rest/rest-files.xql b/edoc/rest/rest-files.xql index 113502f7..d26a2412 100644 --- a/edoc/rest/rest-files.xql +++ b/edoc/rest/rest-files.xql @@ -189,7 +189,7 @@ function wdbRf:getResource ( $id as xs:string, $modified as xs:string* ) { (: Admins are advised by the documentation they REALLY SHOULD NOT have more than one entry for every ID : To be on the safe side, we go for the first one anyway :) let $files := collection($wdb:data)//id($id)[self::meta:file] - , $collectionPath := (wdbFile:getFullPath($id))?collectionPath + , $collectionPath := (wdbFiles:getFullPath($id))?collectionPath , $f := $files[1] , $path := $collectionPath || '/' || $f/@path , $readable := sm:has-access($path, "r") diff --git a/edoc/rest/rest-search.xql b/edoc/rest/rest-search.xql index 8028d515..9ab2710e 100644 --- a/edoc/rest/rest-search.xql +++ b/edoc/rest/rest-search.xql @@ -38,7 +38,7 @@ function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as x "Error: no query content!" ) else - let $coll := (wdbFile:getFullPath($id))?projectPath + let $coll := (wdbFiles:getFullPath($id))?projectPath , $query := xmldb:decode($q) (: going through several thousand hits is too costly (base-uri for 10,000 hits alone would take about one second); @@ -92,7 +92,7 @@ function wdbRs:collectionHtml ($id as xs:string*, $q as xs:string*, $start as xs ) else let $md := collection($wdb:data)//id($id)[self::meta:projectMD] - , $coll := (wdbFile:getFullPath($id))?projectPath + , $coll := (wdbFiles:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') let $params := @@ -193,7 +193,7 @@ function wdbRs:fileHtml ($id as xs:string*, $q as xs:string*, $start as xs:int*) ) else let $file := (collection($wdb:data)/id($id))[self::tei:TEI][1] - , $coll := (wdbFile:getFullPath($id))?projectPath + , $coll := (wdbFiles:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') let $params := From f30cbe0f03fbb7f14fddde57bbcc7a63909b9448 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 22 May 2024 13:27:11 +0200 Subject: [PATCH 016/151] remove wdb:getProjectXQM() replaced by info in wdbFiles:getFullPath() Cf. #549 --- README.md | 9 +++++---- edoc/modules/app.xqm | 22 +++------------------- edoc/modules/function.xqm | 6 +++--- edoc/modules/wdb-files.xqm | 24 +++++++++++++++++++++--- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index d2f1ded9..adabe7a7 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,11 @@ This framework still lacks a good name. If you have an idea, please let me know! ## Incompatible changes -Release 24Q2 dropped functions `wdb:getEdPath( $ed as xs:string , $absolute as xs:boolean() )` and -`wdb:getEdPath( $ed as xs:string )`. These queries can be replaced by `(wdbFiles:getFullPath($id))` which returns a map -with `projectPath` (the path to the project, i.e. the collection where `project.xqm` is stored), `collectionPath` (for -the subcollection where a file is actually located), and `fileName`. +Release 24Q2 dropped functions `wdb:getEdPath( $ed as xs:string , $absolute as xs:boolean() )`, +`wdb:getEdPath( $ed as xs:string )`, and `wdb:findProjectXQM( $project )`. These queries can be replaced by +`(wdbFiles:getFullPath($id))` which returns a map with `projectPath` (the path to the project, i.e. the collection where +`project.xqm` is stored), `collectionPath` (for the subcollection where a file is actually located), `mainProject` for +the path to the project containing `project.xqm`, and `fileName`. Release 24Q1 dropped support for METS-based projects. As METS files can have a number of very different ways of encoding information, especially when it comes to behaviours, native support is hard to achieve. At the same time, most diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index 7c559228..4db5e7a3 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -304,9 +304,9 @@ declare function wdb:populateModel ( $id as xs:string, $view as xs:string, $mode let $title := normalize-space((doc($pathToFile)//tei:title)[1]) - let $proFile := wdb:findProjectXQM($pathToEd) - , $mainProject := substring-before($proFile, "project.xqm") - , $resource := $mainProject || "resources/" + let $proFile := $filePathInfo?mainProject || "/project.xqm" + , $mainProject := $filePathInfo?mainProject + , $resource := $filePathInfo?mainProject || "/resources/" let $projectFunctions := for $function in doc($mainProject || "project-functions.xml")//function return $function/@name || '#' || count($function/argument) @@ -700,22 +700,6 @@ declare function wdb:getProjectFunction ( $model as map(*), $name as xs:string, else () }; -(:~ - : Lookup a project's project.xqm: if present in $model("pathToEd"), use it; else, ascend and look for project.xqm - : there. Use if present. Ulitmately, if even $wdb:data/project.xqm does not exist, panic. - : - : @param $project a string representation of the path to the project - : @returns the path to a project.xqm if one was found; false() otherwise - :) -declare function wdb:findProjectXQM ( $project as xs:string ) { - if ( util:binary-doc-available($project || "/project.xqm") ) then - $project || "/project.xqm" - else if (substring-after($project, $wdb:data) = '') then - $wdb:data || "/instance.xqm" - else - wdb:findProjectXQM(xstring:substring-before-last($project, '/')) -}; - (:~ : Generic finder for files in the project hierarchy (bottom up) : it is assumed that this is a binary file diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 69b5e7c2..8852d2b7 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -84,9 +84,9 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a } catch * { normalize-space($p) } - let $proFile := wdb:findProjectXQM($pathToEd) - , $mainProject := substring-before($proFile, "project.xqm") - , $resource := $mainProject || "resources/" + let $proFile := $filePathInfo?mainProject || "/project.xqm" + , $mainProject := $filePathInfo?mainProject + , $resource := $filePathInfo?mainProject || "/resources/" let $projectFunctions := for $function in doc($mainProject || "project-functions.xml")//function diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 70b8e897..d5f28a36 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -61,7 +61,7 @@ declare function wdbFiles:getAbsolutePath ( $path as attribute() ) as xs:anyURI : @throws wdbErr:wdb0000 : @throws wdbErr:wdb0001 :) -declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs:string, xs:string? )? { +declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs:string, xs:string?, xs:string? )? { let $file := collection("/db")/id($id) return if ( count($file) = 0 ) then @@ -81,7 +81,8 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs return map { "projectPath": $projectPath, "collectionPath": $projectPath, - "fileName": "wdbmeta.xml" + "fileName": "wdbmeta.xml", + "mainProject": wdbFiles:findMainProject($projectPath) } else if ( starts-with($file/@path, '$') ) then let $projectPath := base-uri($file) => substring-before("wdbmeta.xml") @@ -98,10 +99,27 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs return map{ "projectPath": $projectPath, "collectionPath": functx:substring-before-last($path, '/') , - "fileName": functx:substring-after-last($path, '/') + "fileName": functx:substring-after-last($path, '/'), + "mainProject": wdbFiles:findMainProject($projectPath) } }; +(:~ + : Find the main project: if a project.xqm is present in $projectPath, use it; else, ascend and look for project.xqm + : there. Use if present. Ulitmately, if even $wdb:data/project.xqm does not exist, panic. + : + : @param $projectPath a string representation of the path to the project + : @returns the path to the main project + :) +declare function wdbFiles:findMainProject ( $projectPath as xs:string ) as xs:string { + if ( util:binary-doc-available($projectPath || "/project.xqm") ) + then $projectPath + else if ( substring-after($projectPath, "/db/apps/edoc/data") = '' ) then + "/db/apps/edoc/data/instance.xqm" + else + wdbFiles:findMainProject(functx:substring-before-last($projectPath, '/')) +}; + (:~ : Check whether the current user has the right to access the file with the given mode : From cac7643752644023bbc91578bcf66bdac0bb9c49 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 22 May 2024 17:15:32 +0200 Subject: [PATCH 017/151] Entity processing is done entirely in entity.xqm Also, remove depency from app.xqm Cf. #549 --- edoc/admin/admin.xqm | 6 +++--- edoc/modules/entity.xqm | 28 ++++++++++++++++++++-------- edoc/modules/function.xqm | 20 ++++---------------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/edoc/admin/admin.xqm b/edoc/admin/admin.xqm index af1707b9..53220f25 100644 --- a/edoc/admin/admin.xqm +++ b/edoc/admin/admin.xqm @@ -6,9 +6,9 @@ module namespace wdbAdmin = "https://github.com/dariok/wdbplus/Admin"; : - $wdb:data :) import module namespace templates = "http://exist-db.org/xquery/html-templating"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; -import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "/db/apps/edoc/modules/error.xqm"; -import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; +import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "/db/apps/edoc/modules/error.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "/db/apps/edoc/modules/wdb-files.xqm"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare namespace sm = "http://exist-db.org/xquery/securitymanager"; diff --git a/edoc/modules/entity.xqm b/edoc/modules/entity.xqm index bec3c0ce..f17fd26f 100644 --- a/edoc/modules/entity.xqm +++ b/edoc/modules/entity.xqm @@ -2,24 +2,36 @@ xquery version "3.1"; module namespace wdbe = "https://github.com/dariok/wdbplus/entity"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; declare namespace tei = "http://www.tei-c.org/ns/1.0"; -(: $ent ID-String of the entity to be displayed – must be globally unique +(: $id ID-String of the entity to be displayed – must be globally unique $ed ID of the project from which specific information shall be drawn :) -declare function wdbe:getEntity ( $node as node(), $model as map(*), $ent as xs:string, $ed as xs:string ) as map(*) { - let $edPath := (wdbFiles:getFullPath($ed))?projectPath - , $entry := collection($edPath || "/index")/id($ent) - - return map { "entry": $entry, "ent": $ent, "ed": $ed, "pathToEd": $edPath } +declare function wdbe:getEntity ( $node as node(), $model as map(*), $ent as xs:string, $ed as xs:string, $q as xs:string ) as map(*) { + let $fullPath := wdbFiles:getFullPath($ed) + , $collection := collection($fullPath?mainProject) + + let $entryEd := switch ( $q ) + case "per" + return $collection/id($ent)[self::tei:person and ancestor::*:text] + case "org" + return $collection/id($ent)[self::tei:org and ancestor::*:text] + case "pla" + return $collection/id($ent)[self::tei:place and ancestor::*:text] + default + return error(xs:QName("wdbErr:wdb3010"), "unknown entity type", map { "type": $q }) + + (: TODO: this only uses a project specific list* file; we want ot use (or at least support) globals files :) + return map { "entry": $entryEd, "ed": $ed, "pathToEd": $fullPath?mainProject } }; declare function wdbe:getEntityBody( $node as node(), $model as map(*) ) as element() { let $xsl := if ( doc-available($model?pathToEd || "/resources/tei-index.xsl") ) then doc($model?pathToEd || "/resources/tei-index.xsl") - else doc("/db/apps/edoc/resources/tei-index.xsl") + else if ( doc-available("/db/apps/edoc/data" || "/resources/tei-index.xsl") ) + then doc("/db/apps/edoc/data" || "/resources/tei-index.xsl") + else doc("/db/apps/edoc/resources/xsl/tei-index.xsl") , $result := transform:transform($model?entry, $xsl, ()) return if ( count($result) = 1 ) diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 8852d2b7..8728a962 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -57,22 +57,10 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a "pathToEd": $wdb:data } else if ( request:exists() and request:get-uri() => ends-with('/entity.html') ) then - let $regFile := switch ( $q ) - case "per" - return (wdbFiles:getFullPath($ed))?projectPath//*:listPerson[ancestor::*:text] - case "org" - return (wdbFiles:getFullPath($ed))?projectPath//*:listOrg[ancestor::*:text] - case "pla" - return (wdbFiles:getFullPath($ed))?projectPath//*:listPlace[ancestor::*:text] - default - return error(xs:QName("wdbErr:wdb3010"), "unknown entity type", map { "type": $q }) - - let $entryEd := $regFile/id($id) - , $pathToEd := if ( $ed = "" ) - then $wdb:data - else (wdbFiles:getFullPath($ed))?projectPath - (: TODO: this only uses a project specific list* file; we want ot use (or at least support) globals files :) - return map { "entry": $entryEd, "id": $id, "ed": $ed, "pathToEd": $pathToEd } + ( + util:log("error", "function.xqm called for an entity"), + error(xs:QName("wdbErr:wdb3200")) + ) else if ( $id = "" ) then (: no ID: related to a project :) let $pathToEd := if ( $ed = "" ) From 462735d00f3969f1c05d66e730e3a8dbfd5dbec3 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 12 Jun 2024 19:40:13 +0200 Subject: [PATCH 018/151] return index entries for books --- edoc/modules/entity.xqm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/edoc/modules/entity.xqm b/edoc/modules/entity.xqm index f17fd26f..430a4896 100644 --- a/edoc/modules/entity.xqm +++ b/edoc/modules/entity.xqm @@ -4,7 +4,8 @@ module namespace wdbe = "https://github.com/dariok/wdbplus/entity"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; -declare namespace tei = "http://www.tei-c.org/ns/1.0"; +declare namespace tei = "http://www.tei-c.org/ns/1.0"; +declare namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; (: $id ID-String of the entity to be displayed – must be globally unique $ed ID of the project from which specific information shall be drawn :) @@ -19,11 +20,13 @@ declare function wdbe:getEntity ( $node as node(), $model as map(*), $ent as xs: return $collection/id($ent)[self::tei:org and ancestor::*:text] case "pla" return $collection/id($ent)[self::tei:place and ancestor::*:text] + case "bib" + return $collection/id($ent)[self::tei:bibl and ancestor::*:text] default return error(xs:QName("wdbErr:wdb3010"), "unknown entity type", map { "type": $q }) (: TODO: this only uses a project specific list* file; we want ot use (or at least support) globals files :) - return map { "entry": $entryEd, "ed": $ed, "pathToEd": $fullPath?mainProject } + return map { "entry": $entryEd[1], "ed": $ed, "pathToEd": $fullPath?mainProject } }; declare function wdbe:getEntityBody( $node as node(), $model as map(*) ) as element() { From f818f42f85197ab777ed7bfbdb8b91dd90b9e2fb Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 14 Jun 2024 17:46:43 +0200 Subject: [PATCH 019/151] view: prepare methods other than GET only use templates:apply when a GET request has been made for now, only return the method (which should be enough to return headers) Cf. #529 --- edoc/modules/view.xql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/edoc/modules/view.xql b/edoc/modules/view.xql index 8a378877..d69b2b5a 100644 --- a/edoc/modules/view.xql +++ b/edoc/modules/view.xql @@ -49,5 +49,6 @@ let $lookup := function($functionName as xs:string, $arity as xs:integer) { : Run it through the templating system and return the result. :) let $content := request:get-data() -return - templates:apply($content, $lookup, (), $config) +return if ( request:get-method() = 'GET' ) + then templates:apply($content, $lookup, (), $config) + else request:get-method() From f63f48855a0533ce2db60172e797c6dd686453bc Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 1 Jul 2024 19:11:07 +0200 Subject: [PATCH 020/151] revert typo in docu string --- edoc/modules/entity.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/entity.xqm b/edoc/modules/entity.xqm index 430a4896..ef0b5ba1 100644 --- a/edoc/modules/entity.xqm +++ b/edoc/modules/entity.xqm @@ -7,7 +7,7 @@ import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at declare namespace tei = "http://www.tei-c.org/ns/1.0"; declare namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; -(: $id ID-String of the entity to be displayed – must be globally unique +(: $ent ID-String of the entity to be displayed – must be globally unique $ed ID of the project from which specific information shall be drawn :) declare function wdbe:getEntity ( $node as node(), $model as map(*), $ent as xs:string, $ed as xs:string, $q as xs:string ) as map(*) { let $fullPath := wdbFiles:getFullPath($ed) From f65913d94a29db6a5cc7c810ab236b3a1a45027b Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 1 Jul 2024 20:07:04 +0200 Subject: [PATCH 021/151] support HTTP HEAD method Closes #529 --- edoc/modules/view.xql | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/edoc/modules/view.xql b/edoc/modules/view.xql index d69b2b5a..e228b157 100644 --- a/edoc/modules/view.xql +++ b/edoc/modules/view.xql @@ -48,7 +48,26 @@ let $lookup := function($functionName as xs:string, $arity as xs:integer) { : The HTML is passed in the request from the controller. : Run it through the templating system and return the result. :) + let $content := request:get-data() + , $id := request:get-parameter("id", "") + return if ( request:get-method() = 'GET' ) then templates:apply($content, $lookup, (), $config) - else request:get-method() + else if ( request:get-method() = 'HEAD' ) then + let $requestedModified := ( + request:get-attribute("if-modified"), + request:get-header("If-Modified-Since") + )[1] + , $isModified := if ( $requestedModified != '' ) + then wdbFiles:evaluateIfModifiedSince($id, $requestedModified) + else 200 + + return if ( $isModified = 200 ) then + response:set-header( + "Last-Modified", + wdbFiles:getModificationDate($id) => wdbFiles:ietfDate() + ) + else + response:set-status-code(304) + else templates:apply($content, $lookup, (), $config) From 208714597bff90888434f3d8119171ae7833e5e1 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 1 Jul 2024 20:29:57 +0200 Subject: [PATCH 022/151] stylebook conformance --- edoc/modules/wdb-files.xqm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index d5f28a36..98238cdf 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -112,8 +112,8 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs : @returns the path to the main project :) declare function wdbFiles:findMainProject ( $projectPath as xs:string ) as xs:string { - if ( util:binary-doc-available($projectPath || "/project.xqm") ) - then $projectPath + if ( util:binary-doc-available($projectPath || "/project.xqm") ) then + $projectPath else if ( substring-after($projectPath, "/db/apps/edoc/data") = '' ) then "/db/apps/edoc/data/instance.xqm" else From 2599c04903e6a00e9486e617016a53ec200d7522 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 4 Jul 2024 13:34:22 +0200 Subject: [PATCH 023/151] improve positioning of marginalia --- edoc/resources/scripts/function.js | 49 ++++++++++++++++-------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/edoc/resources/scripts/function.js b/edoc/resources/scripts/function.js index e2d64ba6..dee83e9e 100644 --- a/edoc/resources/scripts/function.js +++ b/edoc/resources/scripts/function.js @@ -249,31 +249,36 @@ const wdbDocument = { }, /* actual positioning */ - marginaliaPositioningCallback: function (index, element) { - let referenceElementID = $(element).attr('id'), - referenceElementTop = $(element).position().top, - marginNote = $("#margin-" + referenceElementID), - previousMarginNote = marginNote.prev(), - targetTop; - - if (previousMarginNote.length == 0) { - targetTop = referenceElementTop; - } else { - let previousNoteHeight = $(previousMarginNote).height(), - previousNoteTop = $(previousMarginNote).position().top, - minimumTargetTop = previousNoteHeight + previousNoteTop; - - if ( Math.floor(referenceElementTop) < minimumTargetTop ) { - targetTop = previousNoteTop + previousNoteHeight; - } else { + marginaliaPositioningCallback: function ( index, element ) { + let referenceElementID = $(element).attr('id') + , marginNote = $("#margin-" + referenceElementID) + , previousMarginNote = marginNote.prev(); + + try { + let referenceElementTop = $(element).position().top + , targetTop; + + if ( previousMarginNote.length == 0 ) { targetTop = referenceElementTop; + } else { + let previousNoteHeight = $(previousMarginNote).height() ?? 0 + , previousNoteTop = $(previousMarginNote).position().top + , minimumTargetTop = previousNoteHeight + previousNoteTop; + + if ( Math.floor(referenceElementTop) < minimumTargetTop ) { + targetTop = previousNoteTop + previousNoteHeight; + } else { + targetTop = referenceElementTop; + } } - } - wdb.report("info", "position for " + referenceElementID + ': ' + targetTop); - // offset is relative to the document, so the header has to be substracted if top is set via - // CSS - which is necessary because setting the offset will change position and left - marginNote.css('top', targetTop + "px"); + wdb.report("info", "position for " + referenceElementID + ': ' + targetTop); + // offset is relative to the document, so the header has to be substracted if top is set via + // CSS - which is necessary because setting the offset will change position and left + marginNote.css('top', targetTop + "px"); + } catch ( e ) { + wdb.report("error", "Error positioning margin note #" + index + " for " + referenceElementID, e); + } }, /* load an element by ID and display it to the right */ From 12661b5d1bc3a6049353c6331f8818abc89a8b5f Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 31 Jul 2024 23:03:43 +0200 Subject: [PATCH 024/151] Admin: short stats for mass uploads currently, only in German, i18n pending --- edoc/resources/scripts/admin.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/edoc/resources/scripts/admin.js b/edoc/resources/scripts/admin.js index 763ef34e..8df058a1 100644 --- a/edoc/resources/scripts/admin.js +++ b/edoc/resources/scripts/admin.js @@ -95,9 +95,14 @@ const wdbAdmin = { wdbAdmin.uploadFiles(contents); }, + + successfulUL: 0, + failedUL: 0, + numFiles: 0, uploadFiles: function ( collectionContent ) { - $('p img').show(); + $('main p').html(''); + this.numFiles = this.files.length; for (let i = 0; i < this.files.length; i++) { let reader = new FileReader(), @@ -185,7 +190,6 @@ const wdbAdmin = { reader.readAsText(file, "UTF-8"); } - $('p img').hide(); }, doUpload: async function (method, url, headers, formdata, item) { @@ -198,9 +202,11 @@ const wdbAdmin = { processData: false, dataType: "text", success: function (response, textStatus) { + $('#d').html(++wdbAdmin.successfulUL + " erfolgreich, " + wdbAdmin.failedUL + " fehlgeschlagen von insgesamt " + wdbAdmin.numFiles + " Dateien"); wdb.report("success", "uploaded to " + url, textStatus, item); }, error: function (response) { + $('#d').html(wdbAdmin.successfulUL + " erfolgreich, " + ++wdbAdmin.failedUL + " fehlgeschlagen von insgesamt " + wdbAdmin.numFiles + " Dateien"); wdb.report("error", "Error uploading to " + url + " : " + response.status, response.responseText, item); } }); From 7807b2be52fce0c7412aa43c3c95979f7ed20d78 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 31 Jul 2024 23:05:03 +0200 Subject: [PATCH 025/151] Model for a project in function.xqm uses correct path data --- edoc/modules/function.xqm | 26 +++++++++++++++----------- edoc/modules/view.xql | 1 + edoc/modules/wdb-files.xqm | 2 +- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 8728a962..1266c539 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -63,20 +63,24 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a ) else if ( $id = "" ) then (: no ID: related to a project :) - let $pathToEd := if ( $ed = "" ) - then $wdb:data - else (wdbFiles:getFullPath($ed))?projectPath, - $infoFileLoc := wdb:getMetaFile($pathToEd) + let $pathInfo := if ( $ed = "" ) + then map { + "projectPath": $wdb:data, + "collectionPath": $wdb:data, + "fileName": $wdb:data || "/wdbmeta.xml", + "mainProject": $wdb:data + } + else (wdbFiles:getFullPath($ed)) + , $infoFileLoc := wdb:getMetaFile($pathInfo?projectPath) , $pp := try { parse-json($p) } catch * { normalize-space($p) } - let $proFile := $filePathInfo?mainProject || "/project.xqm" - , $mainProject := $filePathInfo?mainProject - , $resource := $filePathInfo?mainProject || "/resources/" + let $proFile := $pathInfo?mainProject || "/project.xqm" + , $mainProject := $pathInfo?mainProject + , $resource := $pathInfo?mainProject || "/resources/" - let $projectFunctions := for $function in doc($mainProject || "project-functions.xml")//function return $function/@name || '#' || count($function/argument) , $instanceFunctions := for $function in doc($wdb:data || "/instance-functions.xml")//function @@ -84,7 +88,7 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a return map { "p": $pp, - "pathToEd": $pathToEd, + "pathToEd": $pathInfo?projectPath, "q": $q, "ed": $ed, "auth": sm:id()/sm:id, @@ -126,7 +130,7 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a "p": $p, "q": $q, "wdb:data": $wdb:data, - "request": request:get-url() + "request": if ( request:exists() ) then request:get-url() else "" } ) } catch * { @@ -190,7 +194,7 @@ function wdbfp:start ( $node as node(), $model as map(*), $id as xs:string, $ed util:log("error", "error when applying templates in function.xqm: " || $err:description), wdbErr:error(map{ "code": $err:code, - "model": $newModel, + "model": $model, "err:value": $err:value, "err:description": $err:description, "err:additional": $err:additional, diff --git a/edoc/modules/view.xql b/edoc/modules/view.xql index e228b157..e1a896f1 100644 --- a/edoc/modules/view.xql +++ b/edoc/modules/view.xql @@ -17,6 +17,7 @@ import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" import module namespace wdba = "https://github.com/dariok/wdbplus/auth" at "/db/apps/edoc/modules/auth.xqm"; import module namespace wdbAddinMain = "https://github.com/dariok/wdbplus/addins-main" at "/db/apps/edoc/modules/addin.xqm"; import module namespace wdbe = "https://github.com/dariok/wdbplus/entity" at "/db/apps/edoc/modules/entity.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "/db/apps/edoc/modules/wdb-files.xqm"; import module namespace wdbfp = "https://github.com/dariok/wdbplus/functionpages" at "/db/apps/edoc/modules/function.xqm"; import module namespace wdbpq = "https://github.com/dariok/wdbplus/pquery" at "/db/apps/edoc/modules/pquery.xqm"; import module namespace wdbs = "https://github.com/dariok/wdbplus/stats" at "/db/apps/edoc/modules/stats.xqm"; diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 98238cdf..281a9b20 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -96,7 +96,7 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs let $projectPath := base-uri($file[self::meta:file]) => substring-before("wdbmeta.xml") , $path := $projectPath || $file[self::meta:file]/@path - return map{ + return map { "projectPath": $projectPath, "collectionPath": functx:substring-before-last($path, '/') , "fileName": functx:substring-after-last($path, '/'), From c845f2918ae813228a97017d86369662a1e89d62 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 2 Aug 2024 23:44:13 +0200 Subject: [PATCH 026/151] fix wrong param in getFullPath() for collection --- edoc/rest/rest-entity.xql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/edoc/rest/rest-entity.xql b/edoc/rest/rest-entity.xql index 661e7570..84b99425 100644 --- a/edoc/rest/rest-entity.xql +++ b/edoc/rest/rest-entity.xql @@ -17,7 +17,7 @@ declare %rest:path("/edoc/entities/scan/{$type}/{$collection}.xml") %rest:query-param("q", "{$q}") function wdbRe:scan ($collection as xs:string, $type as xs:string*, $q as xs:string*) { - let $coll := try { (wdbFiles:getFullPath($id))?projectPath } catch * { "" } + let $coll := try { (wdbFiles:getFullPath($collection))?projectPath } catch * { "" } , $query := xmldb:decode($q) || '*' let $errNoColl := if ($coll eq "") @@ -72,7 +72,7 @@ declare %output:method("html") function wdbRe:scanHtml ($collection as xs:string, $type as xs:string, $q as xs:string*) { let $md := collection($wdb:data)//id($collection)[self::meta:projectMD] - , $coll := (wdbFiles:getFullPath($id))?projectPath + , $coll := (wdbFiles:getFullPath($collection))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := @@ -96,7 +96,7 @@ declare %rest:path("/edoc/entities/collection/{$collection}/{$type}/{$ref}.xml") %rest:query-param("start", "{$start}", 1) function wdbRe:collectionEntity ($collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int*) { - let $coll := (wdbFiles:getFullPath($id))?projectPath + let $coll := (wdbFiles:getFullPath($collection))?projectPath let $query := xmldb:decode($ref) let $res := collection($coll)//tei:TEI[descendant::tei:rs[@ref=$query or @ref='#'||$query or @ref = $type || ':' || $ref]] @@ -126,7 +126,7 @@ declare %output:method("html") function wdbRe:collectionEntityHtml ($collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int*) { let $md := collection($wdb:data)//id($collection)[self::meta:projectMD] - , $coll := (wdbFiles:getFullPath($id))?projectPath + , $coll := (wdbFiles:getFullPath($collection))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := From 2e9c414c31f6ac38292710eeb5a984bfc4b6b77e Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 2 Aug 2024 23:45:38 +0200 Subject: [PATCH 027/151] bug fixes when using getPullPath() --- edoc/modules/function.xqm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 1266c539..9dadec61 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -71,7 +71,7 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a "mainProject": $wdb:data } else (wdbFiles:getFullPath($ed)) - , $infoFileLoc := wdb:getMetaFile($pathInfo?projectPath) + , $infoFileLoc := $pathInfo?projectPath || "wdbmeta.xml" (: projectPath is derived from the path to wdbmeta.xml :) , $pp := try { parse-json($p) } catch * { @@ -81,7 +81,7 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a , $mainProject := $pathInfo?mainProject , $resource := $pathInfo?mainProject || "/resources/" - let $projectFunctions := for $function in doc($mainProject || "project-functions.xml")//function + let $projectFunctions := for $function in doc($mainProject || "/project-functions.xml")//function return $function/@name || '#' || count($function/argument) , $instanceFunctions := for $function in doc($wdb:data || "/instance-functions.xml")//function return $function/@name || '#' || count($function/argument) @@ -94,8 +94,8 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a "auth": sm:id()/sm:id, "functions": map { "project": $projectFunctions, "instance": $instanceFunctions }, "infoFileLoc": $infoFileLoc, - "mainEd": substring-after($mainProject, 'data/') => substring-before('/'), - "title": doc($infoFileLoc)//meta:title[1]/text(), + "mainEd": substring-after($mainProject, 'data/'), + "title": string(doc($infoFileLoc)//meta:title[1]), "projectFile": $proFile, "projectResources": $resource, "requestUrl": if ( request:exists() ) then request:get-url() else "" From f34881b4695ed74b9aaa8e56ee563ee8b074b7fb Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Sat, 3 Aug 2024 01:07:45 +0200 Subject: [PATCH 028/151] provide module path for wdbFiles Also, a bit of stylebook --- edoc/rest/rest-search.xql | 40 ++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/edoc/rest/rest-search.xql b/edoc/rest/rest-search.xql index 9ab2710e..16051f91 100644 --- a/edoc/rest/rest-search.xql +++ b/edoc/rest/rest-search.xql @@ -2,10 +2,10 @@ xquery version "3.1"; module namespace wdbRs = "https://github.com/dariok/wdbplus/RestSearch"; -import module namespace kwic = "http://exist-db.org/xquery/kwic"; -import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; -import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; +import module namespace kwic = "http://exist-db.org/xquery/kwic"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "/db/apps/edoc/modules/wdb-files.xqm"; +import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; declare namespace http = "http://expath.org/ns/http-client"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; @@ -13,7 +13,7 @@ declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; declare namespace rest = "http://exquery.org/ns/restxq"; declare namespace tei = "http://www.tei-c.org/ns/1.0"; -declare variable $wdbRs:callback := function ( $node, $direction ) { +declare variable $wdbRs:callback := function ( $node as node(), $mode as xs:string ) as xs:string? { if ( $node/ancestor::tei:note ) then () else $node }; @@ -22,8 +22,8 @@ declare %rest:path("/edoc/search/collection/{$id}.xml") %rest:query-param("q", "{$q}") %rest:query-param("start", "{$start}", 1) -function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as xs:int* ) { - if (0 = (count($q), string-length($q))) then ( +function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as xs:int* ) as item()+ { + if ( 0 = (count($q), string-length($q)) ) then ( @@ -75,7 +75,7 @@ declare %rest:query-param("q", "{$q}") %rest:query-param("start", "{$start}", 1) %output:method("html") -function wdbRs:collectionHtml ($id as xs:string*, $q as xs:string*, $start as xs:int*) { +function wdbRs:collectionHtml ( $id as xs:string*, $q as xs:string*, $start as xs:int* ) as item()+ { if ( 0 = (count($q), string-length($q)) ) then ( @@ -126,8 +126,8 @@ declare %rest:path("/edoc/search/file/{$id}.xml") %rest:query-param("q", "{$q}") %rest:query-param("start", "{$start}", 1) -function wdbRs:fileText ($id as xs:string*, $q as xs:string*, $start as xs:int*) { - if (0 = (count($q), string-length($q))) then ( +function wdbRs:fileText ( $id as xs:string*, $q as xs:string*, $start as xs:int* ) as item()+ { + if ( 0 = (count($q), string-length($q)) ) then ( @@ -143,8 +143,8 @@ function wdbRs:fileText ($id as xs:string*, $q as xs:string*, $start as xs:int*) ) else let $file := (collection($wdb:data)/id($id))[self::tei:TEI][1]/tei:text - let $query := lower-case(xmldb:decode($q)) - (: querying for tei:w only will return no context :) + , $query := lower-case(xmldb:decode($q)) + let $res := $file//tei:p[ft:query(., $query)] | $file//tei:ab[ft:query(., $query)] | $file//tei:cell[ft:query(., $query)] @@ -176,8 +176,8 @@ declare %rest:query-param("q", "{$q}") %rest:query-param("start", "{$start}", 1) %output:method("html") -function wdbRs:fileHtml ($id as xs:string*, $q as xs:string*, $start as xs:int*) { - if (0 = (count($q), string-length($q))) then ( +function wdbRs:fileHtml ( $id as xs:string*, $q as xs:string*, $start as xs:int* ) as item()+ { + if ( 0 = (count($q), string-length($q)) ) then ( @@ -196,13 +196,15 @@ function wdbRs:fileHtml ($id as xs:string*, $q as xs:string*, $start as xs:int*) , $coll := (wdbFiles:getFullPath($id))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') - let $params := - - - + let $params := + + + + let $searchResult := wdbRs:fileText($id, $q, $start) - return if (count($searchResult) gt 0) then ( + + return if ( count($searchResult) gt 0 ) then ( From ccfd1d779621b3814a9c4b98ea71f57e723b3ca6 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Sat, 3 Aug 2024 01:36:13 +0200 Subject: [PATCH 029/151] do not order collection search results ordering will take up considerable time on large result sets --- edoc/rest/rest-search.xql | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/edoc/rest/rest-search.xql b/edoc/rest/rest-search.xql index 16051f91..314ecd0c 100644 --- a/edoc/rest/rest-search.xql +++ b/edoc/rest/rest-search.xql @@ -44,15 +44,12 @@ function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as x (: going through several thousand hits is too costly (base-uri for 10,000 hits alone would take about one second); subsequence here and then looping through grouped results leads to problems with IDs of ancestors and KWIC. Hence, only look for matching files and then do the search in subsequences of files. This way, KWIC works and IDs - can be retrieved. The cost of the extra searches should not be as high as before :) - let $res := collection($coll)//tei:text[ft:query(., $query)] + can be retrieved. The cost of the extra searches should not be as high as before. + For the same reason, we do not sort the results anymore as this will take considerable time for large data sets :) + let $result := collection($coll)//tei:text[ft:query(., $query)] , $max := count($res) - let $result := for $r in $res - order by $r/ancestor::tei:TEI//tei:date[@type = 'published']/@when - return $r - - return ( + return ( From 810825210707432825617f50df9293352c84d1ae Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Tue, 20 Aug 2024 21:30:36 +0200 Subject: [PATCH 030/151] find XSLT by traversing up the project tree --- edoc/modules/app.xqm | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index 4db5e7a3..c9ea3200 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -780,29 +780,38 @@ declare function wdb:getMetaElementFromEd ( $ed as xs:string ) as element() { : @returns The path to the XSLT :) declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:string, $target as xs:string ) as xs:string { - let $metaFile := doc($infoFileLoc), - $process := ( + let $metaFile := doc($infoFileLoc) + , $process := ( $metaFile//meta:process[@target = $target], $metaFile//meta:process[1] )[1] - let $sel := for $c in $process/meta:command - return if ( $c/@refs ) then - (: if a list of IDREFS is given, this command matches if $id is part of that list :) - let $map := tokenize($c/@refs, ' ') - return if ( $map = $id ) then $c else () - else if ( $c/@regex and matches($id, $c/@regex) ) - (: if a regex is given and $id matches that regex, the command matches :) - then $c - else if ( $c/@group and $metaFile/id($id)/parent::meta:filegroup/@xml:id = $c/@group ) - then $c - else if ( not($c/@refs or $c/@regex or $c/@group) ) - (: if no selection method is given, the command is considered the default :) - then $c - else () (: neither refs nor regex match and no default given :) + let $sel := if ( $process/meta:command ) + then + for $c in $process/meta:command + return if ( $c/@refs ) then + (: if a list of IDREFS is given, this command matches if $id is part of that list :) + let $map := tokenize($c/@refs, ' ') + return if ( $map = $id ) then $c else () + else if ( $c/@regex and matches($id, $c/@regex) ) + (: if a regex is given and $id matches that regex, the command matches :) + then $c + else if ( $c/@group and $metaFile/id($id)/parent::meta:filegroup/@xml:id = $c/@group ) + then $c + else if ( not($c/@refs or $c/@regex or $c/@group) ) + (: if no selection method is given, the command is considered the default :) + then $c + else () (: neither refs nor regex match and no default given :) + (: if no command is defined, traverse up the project ancestors :) + else if ( $metaFile/meta:projectMD/meta:struct/*[1][self::meta:import] ) then + let $path := xstring:substring-before-last($infoFileLoc, '/') + , $parent := $metaFile/meta:projectMD/meta:struct/meta:import + return + wdb:getXslFromWdbMeta ($path || '/' || $parent/@path, $id, $target) + else ( ) (: As we check from most specific to default, the first command in the sequence is the right one :) - return ($sel)[1]/text() + return normalize-space($sel[1]) }; (: we need a lookup function for the templating system to work :) From 160bd68af77baf2200b1cf56148e4eb6a73a9286 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Oct 2024 22:25:48 +0200 Subject: [PATCH 031/151] set basic variables from config file only This is an incompatible change but should not really have an impact as a config.xml is always present. Cf. #542 #313 --- edoc/modules/app.xqm | 86 +++++--------------------------------------- 1 file changed, 9 insertions(+), 77 deletions(-) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index c9ea3200..1be2cb4a 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -37,58 +37,26 @@ declare variable $wdb:configFile := doc('../config.xml'); declare variable $wdb:edocBaseDB := $wdb:configFile => base-uri() => substring-before('/config.xml'); (:~ - : Try to get the data collection. Documentation explicitly tells users to have a wdbmeta.xml - : in the Collection that contains all projects + : Get the data collection. Since v4.0, we only support setting this in the config file – for standard installations, + the default will do just fine. :) -declare variable $wdb:data := - if ($wdb:configFile//config:data) - then normalize-space($wdb:configFile//config:data) - else - let $editionsW := collection($wdb:edocBaseDB)//meta:projectMD - - let $paths := for $f in $editionsW - let $path := base-uri($f) - where contains($path, '.xml') - order by string-length($path) - return $path - - return replace(xstring:substring-before-last($paths[1], '/'), '//', '/') -; +declare variable $wdb:data := $wdb:configFile//config:data; (:~ - : get the base URI either from the data of the last call or from the configuration + : get the base URI either from the configuration :) -declare variable $wdb:edocBaseURL := - if ($wdb:configFile//config:server) - then normalize-space($wdb:configFile//config:server) - else - let $dir := try { xstring:substring-before-last(request:get-uri(), '/') } catch * { "" } - let $db := substring-after($wdb:edocBaseDB, 'db/') - let $local := xstring:substring-after($dir, $db) - let $path := if (string-length($local) > 0) - then xstring:substring-before($dir, $local) (: there is a local part, e.g. 'admin' :) - else $dir (: no local part, e.g. for view.html in app root :) - - return wdb:getServerApp() || replace($path, '//', '/') -; +declare variable $wdb:edocBaseURL := $wdb:configFile//config:server; (: ~ : get the base URL for REST calls :) -declare variable $wdb:restURL := - if ($wdb:configFile//config:rest) - then normalize-space($wdb:configFile//config:rest) - else if ($wdb:edocBaseURL = "") - then rest:base-uri() || "/edoc" - else substring-before($wdb:edocBaseURL, substring-after($wdb:edocBaseDB, '/db/')) || "restxq/edoc/"; - +declare variable $wdb:restURL := $wdb:configFile//config:rest; (:~ : the server role :) -declare variable $wdb:role := - ($wdb:configFile//main:role/main:type, "standalone")[1] -; +declare variable $wdb:role := $wdb:configFile//main:role/main:type; + (:~ : the peer in a sandbox/publication configuration :) @@ -157,41 +125,6 @@ declare function wdb:test($node as node(), $model as map(*)) as node() { }; - -(: ~ - : get the name of the server, possibly including the port - : If resolution fails, set the value in config.xml instead - : This cannot be used for RESTXQ - :) -declare function wdb:getServerApp() as xs:string { - (: config:server contains the full base URL :) - let $config := - let $scheme := substring-before($wdb:configFile//config:server, '//') - let $server := substring-before(substring-after($wdb:configFile//config:server, '//'), '/') - return if ($scheme != "") then $scheme || '//' || $server else () - - let $origin := try { request:get-header("Origin") } catch * { () } - let $request := try { - let $scheme := if (request:get-header-names() = 'X-Forwarded-Proto') - then normalize-space(request:get-header('X-Forwarded-Proto')) - else normalize-space(request:get-scheme()) - - return if (request:get-server-port() != 80) - then $scheme || '://' || request:get-server-name() || ':' || request:get-server-port() - else $scheme || '://' || request:get-server-name() - } catch * { () } - let $ref := try { - let $r := request:get-header('referer') - let $scheme := substring-before($r, '://') - let $server := substring-before(substring-after($r, '://'), '/') - return $scheme || '://' || $server - } catch * { () } - - let $server := ($config, $request, $ref, $origin) - return if (count($server) > 0) - then $server[1] - else "" -}; (: END FUNCTIONS TO GET SERVER INFO :) (: FUNCTIONS USED BY THE TEMPLATING SYSTEM :) @@ -439,8 +372,7 @@ declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element( }; declare function wdb:pageTitle($node as node(), $model as map(*)) { - let $ti := $model("title") - return {normalize-space($wdb:configFile//main:short)} – {$ti} + { normalize-space($wdb:configFile//main:short) } – { $model("title") } }; (:~ From 1551deacbea9aa604ac4f1f0a32beecec44f3fc7 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Oct 2024 22:33:28 +0200 Subject: [PATCH 032/151] Use $ed for collection IDs Cf. #499 --- edoc/rest/rest-search.xql | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/edoc/rest/rest-search.xql b/edoc/rest/rest-search.xql index 314ecd0c..46e3208d 100644 --- a/edoc/rest/rest-search.xql +++ b/edoc/rest/rest-search.xql @@ -19,10 +19,10 @@ declare variable $wdbRs:callback := function ( $node as node(), $mode as xs:stri declare %rest:GET - %rest:path("/edoc/search/collection/{$id}.xml") + %rest:path("/edoc/search/collection/{$ed}.xml") %rest:query-param("q", "{$q}") %rest:query-param("start", "{$start}", 1) -function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as xs:int* ) as item()+ { +function wdbRs:collectionText ( $ed as xs:string*, $q as xs:string*, $start as xs:int* ) as item()+ { if ( 0 = (count($q), string-length($q)) ) then ( @@ -38,7 +38,7 @@ function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as x "Error: no query content!" ) else - let $coll := (wdbFiles:getFullPath($id))?projectPath + let $coll := (wdbFiles:getFullPath($ed))?projectPath , $query := xmldb:decode($q) (: going through several thousand hits is too costly (base-uri for 10,000 hits alone would take about one second); @@ -47,7 +47,7 @@ function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as x can be retrieved. The cost of the extra searches should not be as high as before. For the same reason, we do not sort the results anymore as this will take considerable time for large data sets :) let $result := collection($coll)//tei:text[ft:query(., $query)] - , $max := count($res) + , $max := count($result) return ( @@ -57,7 +57,7 @@ function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as x , - { + { for $f in subsequence($result, $start, 25) return {$f/ancestor::tei:TEI//tei:titleStmt} @@ -67,12 +67,12 @@ function wdbRs:collectionText ( $id as xs:string*, $q as xs:string*, $start as x declare %rest:GET - %rest:path("/edoc/search/collection/{$id}.html") + %rest:path("/edoc/search/collection/{$ed}.html") %rest:produces("text/html") %rest:query-param("q", "{$q}") %rest:query-param("start", "{$start}", 1) %output:method("html") -function wdbRs:collectionHtml ( $id as xs:string*, $q as xs:string*, $start as xs:int* ) as item()+ { +function wdbRs:collectionHtml ( $ed as xs:string*, $q as xs:string*, $start as xs:int* ) as item()+ { if ( 0 = (count($q), string-length($q)) ) then ( @@ -88,8 +88,8 @@ function wdbRs:collectionHtml ( $id as xs:string*, $q as xs:string*, $start as x "Error: no query content!" ) else - let $md := collection($wdb:data)//id($id)[self::meta:projectMD] - , $coll := (wdbFiles:getFullPath($id))?projectPath + let $md := collection($wdb:data)//id($ed)[self::meta:projectMD] + , $coll := (wdbFiles:getFullPath($ed))?projectPath , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') let $params := @@ -98,7 +98,7 @@ function wdbRs:collectionHtml ( $id as xs:string*, $q as xs:string*, $start as x - let $searchResult := wdbRs:collectionText($id, $q, $start) + let $searchResult := wdbRs:collectionText($ed, $q, $start) return if ( count($searchResult) gt 0 ) then ( From d7912fe618dcab6509b1b1a925c4d1c0bcbf2a11 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Oct 2024 22:34:07 +0200 Subject: [PATCH 033/151] A few additional REST tests --- test/entities.http | 4 ++++ test/search.http | 5 +++++ 2 files changed, 9 insertions(+) create mode 100644 test/search.http diff --git a/test/entities.http b/test/entities.http index f5be7633..eaac3423 100644 --- a/test/entities.http +++ b/test/entities.http @@ -1,5 +1,9 @@ GET https://exist.ulb.tu-darmstadt.de/2/r/edoc/entities/list/file/pa000008-0130/person.xml +### + +GET https://exist.ulb.tu-darmstadt.de/2/r/edoc/entities/scan/per/pa000008.xml?q=luther + ### diff --git a/test/search.http b/test/search.http new file mode 100644 index 00000000..04188256 --- /dev/null +++ b/test/search.http @@ -0,0 +1,5 @@ +GET https://exist.ulb.tu-darmstadt.de/3/r/edoc/search/collection/data.xml?q=theater + +### + +GET https://tueditions.ulb.tu-darmstadt.de/r/edoc/search/collection/data.xml?q=gesetz \ No newline at end of file From 1a40e73d416111c95a674a996e84679c26551cb5 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Oct 2024 22:34:17 +0200 Subject: [PATCH 034/151] Also include wdbmeta in project workspace --- wdbplus.code-workspace | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wdbplus.code-workspace b/wdbplus.code-workspace index 2740209c..ff973e2d 100644 --- a/wdbplus.code-workspace +++ b/wdbplus.code-workspace @@ -2,9 +2,12 @@ "folders": [ { "path": "." + }, + { + "path": "../wdbmeta" } ], "settings": { - "window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${profileName}${separator}${appName}${separator}[Branch: 24Q2]" + "window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${profileName}${separator}${appName}${separator}[Branch: 24Q3]" } } From f5c528e26440c58818898824f31d6d3d17e4ee9e Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 24 Oct 2024 22:34:40 +0200 Subject: [PATCH 035/151] Create index files for file and collection info Cf. #555 --- edoc/index/file-index.xml | 3 +++ edoc/index/index-projects.xq | 19 +++++++++++++++++++ edoc/index/project-index.xml | 3 +++ 3 files changed, 25 insertions(+) create mode 100644 edoc/index/file-index.xml create mode 100644 edoc/index/index-projects.xq create mode 100644 edoc/index/project-index.xml diff --git a/edoc/index/file-index.xml b/edoc/index/file-index.xml new file mode 100644 index 00000000..edc5cd73 --- /dev/null +++ b/edoc/index/file-index.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/edoc/index/index-projects.xq b/edoc/index/index-projects.xq new file mode 100644 index 00000000..d3a0c425 --- /dev/null +++ b/edoc/index/index-projects.xq @@ -0,0 +1,19 @@ +xquery version "3.1"; + +declare namespace index = "https://github.com/dariok/wdbplus/index"; +declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; + +for $project in //meta:projectMD + let $path := util:collection-name($project) + where contains($path, '/data/') + + let $files := $project//meta:file + let $file-entries := for $file in $files + return + + return ( + update insert into doc("/db/apps/edoc/index/project-index.xml")/index:index, + if ( not(empty($file-entries)) ) + then update insert $file-entries into doc("/db/apps/edoc/index/file-index.xml")/index:index + else () + ) diff --git a/edoc/index/project-index.xml b/edoc/index/project-index.xml new file mode 100644 index 00000000..edc5cd73 --- /dev/null +++ b/edoc/index/project-index.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file From f1ad06ea1085adae81732a5a4119363f723139e1 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 24 Oct 2024 22:35:12 +0200 Subject: [PATCH 036/151] Use file or project index instead of collection() where possible Cf. #555 --- README.md | 8 ++++++- edoc/modules/app.xqm | 35 +++---------------------------- edoc/modules/wdb-files.xqm | 4 +++- edoc/rest/rest-coll.xql | 43 +++++++++++++++++--------------------- edoc/rest/rest-entity.xql | 12 +++++------ edoc/rest/rest-files.xql | 11 +++++----- edoc/rest/rest-search.xql | 4 ++-- wdbplus.code-workspace | 2 +- 8 files changed, 46 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index adabe7a7..2f39b68b 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,17 @@ This framework still lacks a good name. If you have an idea, please let me know! ## Incompatible changes +Release 24Q4 dropped another set of functions that were unused: +- `wdb:getEdFromFileID( $id as xs:string )`: `(wdbFiles:getFullPath($id))?projectPath` returns the base path to `wdbmeta.xml` +- `wdb:getMetaElementFromEd ( $ed as xs:string )`: use `doc( (doc("/db/apps/edoc/index/project-index.xml")/id($ed))/@path || '/wdbmeta.xml' )/id($ed)[self::meta:projectMD]` instead +- `wdb:getMetaFile( $pathToEd )`: `(wdbFiles:getFullPath($ed))?projectPath` returns the base path to `wdbmeta.xml` + Release 24Q2 dropped functions `wdb:getEdPath( $ed as xs:string , $absolute as xs:boolean() )`, `wdb:getEdPath( $ed as xs:string )`, and `wdb:findProjectXQM( $project )`. These queries can be replaced by `(wdbFiles:getFullPath($id))` which returns a map with `projectPath` (the path to the project, i.e. the collection where -`project.xqm` is stored), `collectionPath` (for the subcollection where a file is actually located), `mainProject` for +`wdbmeta.xml`¹ is stored), `collectionPath` (for the subcollection where a file is actually located), `mainProject` for the path to the project containing `project.xqm`, and `fileName`. +1) (24Q4): this corrects a typo as previous versions incorrectly read `project.xqm`. Release 24Q1 dropped support for METS-based projects. As METS files can have a number of very different ways of encoding information, especially when it comes to behaviours, native support is hard to achieve. At the same time, most diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index 1be2cb4a..e1ff9537 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -538,17 +538,6 @@ declare function wdb:getAbsolutePath ( $ed as xs:string, $path as xs:string ) { else (wdbFiles:getFullPath($ed))?projectPath || "/" || $path }; -(:~ - : Return the ID of a project from a resource ID within the project - : - : @param $id the ID of a resource within a project - : @return the ID of the project - :) -declare function wdb:getEdFromFileId ($id as xs:string) as xs:string { - let $file := collection($wdb:data)/id($id)[self::meta:file] - return $file/ancestor::meta:projectMD/@xml:id -}; - (: ~ : Return the path to a project : @@ -677,27 +666,9 @@ declare function wdb:eval($function as xs:string, $cache-flag as xs:boolean, $ex : @return The path to the project :) declare function wdb:getProjectPathFromId ( $ed as xs:string ) as xs:string { - let $md := collection($wdb:data)/id($ed)[self::meta:projectMD] - - return xstring:substring-before-last(base-uri(($md)[1]), '/') -}; - -(:~ - : Get the meta data file from the ed path - :) -declare function wdb:getMetaFile($pathToEd) { - if ( doc-available($pathToEd||'/wdbmeta.xml') ) - then $pathToEd || '/wdbmeta.xml' - else fn:error(fn:QName('https://github.com/dariok/wdbErr', 'wdbErr:wdb0003')) -}; - -(:~ - : Get the meta data file by project ID - : - : @param $ed The project ID to be evaluated - :) -declare function wdb:getMetaElementFromEd ( $ed as xs:string ) as element() { - collection($wdb:data)/id($ed)[self::meta:projectMD] + if ( $ed = ( "", "data" ) ) + then $wdb:data + else string( (doc("/db/apps/edoc/index/project-index.xml")/id($ed))/@path ) }; (: END GENERAL HELPER FUNCTIONS :) diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 281a9b20..0b39edeb 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -62,7 +62,9 @@ declare function wdbFiles:getAbsolutePath ( $path as attribute() ) as xs:anyURI : @throws wdbErr:wdb0001 :) declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs:string, xs:string?, xs:string? )? { - let $file := collection("/db")/id($id) + let $file-hint := doc("/db/apps/edoc/index/file-index.xml")/id($id) + , $project-hint := doc("/db/apps/edoc/index/project-index.xml")/id($id) + , $file := ( doc($file-hint/@project)/id($id), doc($project-hint/@path || "/wdbmeta.xml")/id($id) ) return if ( count($file) = 0 ) then error( diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index f692696c..05ad6f25 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -181,12 +181,12 @@ function wdbRc:createFile ($data as xs:string*, $collection as xs:string, $heade then error (QName("https://github.com/dariok/wdbplus/errors", "wdbErr:h400"), "no Content Type declared for file") else () - let $collectionFile := collection($wdb:data)/id($collection)[self::meta:projectMD] + let $collectionPath := wdb:getProjectPathFromId($collection) + , $collectionFile := doc($collectionPath || '/wdbmeta.xml')/*[self::meta:projectMD] let $err := if (not($collectionFile)) then error (QName("https://github.com/dariok/wdbplus/errors", "wdbErr:h400"), "collection " || $collection || " not found", 404) else () - - let $collectionPath := (wdbFiles:getFullPath($collection))?collectionPath + let $err := if (not(sm:has-access(xs:anyURI($collectionPath), "w"))) then error (QName("https://github.com/dariok/wdbplus/errors", "wdbErr:h400"), "user " || $user || " has no access to write to collection " || $collectionPath, 403) else () @@ -311,14 +311,13 @@ declare %rest:GET %rest:path("/edoc/collection/full/{$id}.zip") %output:method("binary") -function wdb:getResourcesZip ($id as xs:string) { - let $meta := collection($wdb:data)/id($id)[self::meta:projectMD] - let $base := substring-before(base-uri($meta), 'wdbmeta') +function wdb:getResourcesZip ( $ed as xs:string ) { + let $base := wdb:getProjectPathFromId($ed) - return if ($meta = "") - then - - + return if ( $base = "" ) then + + + else ( @@ -408,9 +407,8 @@ declare %rest:GET %rest:path("/edoc/collection/{$ed}/nav.xml") function wdbRc:getCollectionNavXML ( $ed as xs:string ) { - let $md := collection($wdb:data)/id($ed)[self::meta:projectMD] - , $uri := base-uri($md) - , $struct := $md/meta:struct + let $md := doc(wdb:getProjectPathFromId($collection) || '/wdbmeta.xml') + , $struct := $md//meta:struct let $content := {( $struct/@*, @@ -510,30 +508,27 @@ function wdbRc:getCollectionNavHTML ( $ed as xs:string, $externalModel as map(*) ) }; -declare function wdbRc:getGeneral ($id, $mt, $content) { +declare function wdbRc:getGeneral ( $ed as xs:string, $mt as xs:string+, $content as xs:string ) as item()+ { let $wdbRc:acceptable := ("application/json", "application/xml") let $content := if ( $mt = $wdbRc:acceptable ) then try { - let $path := wdb:getProjectPathFromId($id) - , $meta := doc(wdb:getMetaFile($path)) + let $meta := doc(wdb:getProjectPathFromId($ed) || '/wdbmeta.xml') - return if ( $meta/*[self::meta:projectMD] ) then - let $eval := wdb:eval ( $content, false(), (xs:QName("meta"), $meta)) + return if ( count($meta) = 0 ) + then + ( 404, "no collection with ID " || $ed ) + else + let $eval := wdb:eval($content, false(), (xs:QName("meta"), $meta)) return if ( count($eval) gt 0 ) then ( 200, - { + { $eval } ) else ( 204, "" ) - else - ( 400, "no a wdbmeta project" ) - } - catch *:wdb0200 { - ( 404, "no collection with ID " || $id ) } catch * { ( 400, "" ) diff --git a/edoc/rest/rest-entity.xql b/edoc/rest/rest-entity.xql index 84b99425..e9c12a5f 100644 --- a/edoc/rest/rest-entity.xql +++ b/edoc/rest/rest-entity.xql @@ -70,9 +70,9 @@ declare %rest:path("/edoc/entities/scan/{$type}/{$collection}.html") %rest:query-param("q", "{$q}") %output:method("html") -function wdbRe:scanHtml ($collection as xs:string, $type as xs:string, $q as xs:string*) { - let $md := collection($wdb:data)//id($collection)[self::meta:projectMD] - , $coll := (wdbFiles:getFullPath($collection))?projectPath +function wdbRe:scanHtml ( $collection as xs:string, $type as xs:string, $q as xs:string* ) as item()+ { + let $coll := (wdbFiles:getFullPath($collection))?projectPath + , $md := doc($coll || '/wdbmeta.xml')/*[self::meta:projectMD] , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := @@ -124,9 +124,9 @@ declare %rest:path("/edoc/entities/collection/{$collection}/{$type}/{$ref}.html") %rest:query-param("start", "{$start}", 1) %output:method("html") -function wdbRe:collectionEntityHtml ($collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int*) { - let $md := collection($wdb:data)//id($collection)[self::meta:projectMD] - , $coll := (wdbFiles:getFullPath($collection))?projectPath +function wdbRe:collectionEntityHtml ( $collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int* ) as item()+ { + let $coll := (wdbFiles:getFullPath($collection))?projectPath + , $md := doc($coll || '/wdbmeta.xml')/*[self::meta:projectMD] , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') let $params := diff --git a/edoc/rest/rest-files.xql b/edoc/rest/rest-files.xql index d26a2412..339aa2d0 100644 --- a/edoc/rest/rest-files.xql +++ b/edoc/rest/rest-files.xql @@ -2,7 +2,6 @@ xquery version "3.1"; module namespace wdbRf = "https://github.com/dariok/wdbplus/RestFiles"; -import module namespace console = "http://exist-db.org/xquery/console" at "java:org.exist.console.xquery.ConsoleModule"; import module namespace json = "http://www.json.org"; import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "/db/apps/edoc/modules/wdb-files.xqm"; @@ -188,10 +187,10 @@ declare function wdbRf:getResource ( $id as xs:string, $modified as xs:string* ) { (: Admins are advised by the documentation they REALLY SHOULD NOT have more than one entry for every ID : To be on the safe side, we go for the first one anyway :) - let $files := collection($wdb:data)//id($id)[self::meta:file] + let $file-hint := doc("/db/apps/edoc/index/file-index.xml")/id($id) + , $file := doc($file-hint/@project)/id($id) , $collectionPath := (wdbFiles:getFullPath($id))?collectionPath - , $f := $files[1] - , $path := $collectionPath || '/' || $f/@path + , $path := $collectionPath || '/' || $file/@path , $readable := sm:has-access($path, "r") let $doc := if ( not($readable) ) then @@ -216,7 +215,7 @@ function wdbRf:getResource ( $id as xs:string, $modified as xs:string* ) { else "binary" - let $respCode := if ( count($files) = 0 ) then + let $respCode := if ( count($file) = 0 ) then 404 else if ( not($readable) ) then 401 @@ -460,7 +459,7 @@ declare function wdbRf:processXSL( $id as xs:string, $process as element(), $mod } catch * { ("error", $err:description, - console:log("Processing " || $id || ": " || $err:description)) + util:log("error", "Processing " || $id || ": " || $err:description)) } return if ($content[1] = "error") diff --git a/edoc/rest/rest-search.xql b/edoc/rest/rest-search.xql index 46e3208d..b5dfd3e3 100644 --- a/edoc/rest/rest-search.xql +++ b/edoc/rest/rest-search.xql @@ -88,8 +88,8 @@ function wdbRs:collectionHtml ( $ed as xs:string*, $q as xs:string*, $start as x "Error: no query content!" ) else - let $md := collection($wdb:data)//id($ed)[self::meta:projectMD] - , $coll := (wdbFiles:getFullPath($ed))?projectPath + let $coll := wdbFiles:getProjectPathFromId($ed) + , $md := doc($coll || '/wdbmeta.xml')/*[self::meta:projectMD] , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') let $params := diff --git a/wdbplus.code-workspace b/wdbplus.code-workspace index ff973e2d..8422f633 100644 --- a/wdbplus.code-workspace +++ b/wdbplus.code-workspace @@ -8,6 +8,6 @@ } ], "settings": { - "window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${profileName}${separator}${appName}${separator}[Branch: 24Q3]" + "window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${profileName}${separator}${appName}${separator}[Branch: 24Q4]" } } From 92730b373deef3e696dcd1be9834460f784e204a Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 30 Oct 2024 12:55:45 +0100 Subject: [PATCH 037/151] prepare openAPI description for REST v2 --- edoc/rest2/v2.yaml | 168 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 edoc/rest2/v2.yaml diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml new file mode 100644 index 00000000..bec2e330 --- /dev/null +++ b/edoc/rest2/v2.yaml @@ -0,0 +1,168 @@ +openapi: 3.0.0 +info: + description: "wdb+ REST API v2 (wdb+ > v4.0) – see https://github.com/dariok/wdbplus for details" + version: "2.0" + title: "wdb+ API" + # termsOfService: "see instance" + contact: + url: https://github.com/dariok/wdbplus + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html +servers: + - url: https://wdbplus.instance/exist/restxq/edoc/v2 +tags: + - name: annotations + description: Concerning Hobbits + - name: projects + description: Operations on wdb+ projects + - name: entities + description: Operations on entities + - name: resources + description: Operations on resources (usually texts) + - name: search + description: Full text search +paths: + /annotations: + # post: + # tags: + # - annotations + # summary: Add a new annotation + # description: "Create an annotation for a file (to be identified by ID in the request body)" + # operationId: insertAnnotation + # requestBody: + # $ref: "#/components/requestBodies/Annotation" + # responses: + # "201": + # description: Annotation has been created + # "400": + # description: Invalid input + /annotations/{$id}: + # get: + # tags: + # - annotations + # summary: Get annotation by ID + # operationId: getAnnotationById + # responses: + # "200": + # description: Annotation has been found + # content: + # application/json: + # schema: + # $ref: "#/components/schemas/Annotation" + # "404": + # description: No ID found by this ID + # delete: + # tags: + # - annotations + # summary: Delete the annotation + # operationId: deleteAnnotation + # responses: + # "200": + # description: The annotation has been deleted + # "404": + # description: This annotation was not found + /annotations/byFile/{$id}: + # get: + # tags: + # - annotations + # summary: Get a list of annotations related to a file + # responses: + # "200": + # description: Found annotations for this file + # content: + # application/json: + # schema: + # $ref: #TODO + # "204": + # description: No annotations for this file + # "404": + # description: File not found + # operationId: #TODO + + /projects: + # get: + # tags: + # - projects + # summary: Get a list of all projects + # operationId: listProjects + # responses: + # "200": + # description: Contains a list of projects + # content: #TODO + /projects/{$ed}: + # get: + # tags: + # - projects + # summary: Get project by ID + # delete: + # tags: + # - projects + # summary: Delete project by ID + # put: + # tags: + # - projects + # summary: Create project with known ID + /projects/{$ed}/nav: + # get: + # tags: + # - projects + # summary: Get project navigation + + /entities: + # get: + # tags: + # - entities + # summary: Get entities from global registry + # parameters: + # - name: q + # in: query + # schema: + # type: string + # description: filter by name / title + # - name: type + # in: query + # schema: + # enum: + # - per + # - pla + # - org + # - bib + # - evt + # description: + /entities/project/{$ed}/{$type}/list: + /entities/project/{$ed}/refs/{$entity}: + /entities/resource/{$id}/refs/{$entity}: + + /resource/{$id}: + /resource/{$id}/views: + /resource/{$id}/views/{$view}: + /resource/byPid/{$pid}: + + /search/ft/project/{$ed}: + /search/ft/resource/{$id}: + + +# components: +# requestBodies: +# Annotation: +# required: true +# description: A new annotation for a file +# content: +# application/json: +# schema: +# $ref: "#/components/schemas/Annotation" + +# schemas: +# Annotation: +# type: object +# required: +# - id #file ID +# - content #text of the annotation +# properties: +# id: +# type: string +# description: "The ID of the file" +# content: +# type: string +# description: "The text of the annotation" From a925bc6ecc2bdcdac4cad8a43c8b5ddd22feb19f Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 30 Oct 2024 14:02:37 +0100 Subject: [PATCH 038/151] openAPI: define methods --- edoc/rest2/v2.yaml | 109 ++++++++++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 36 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index bec2e330..9938d39f 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -22,11 +22,12 @@ tags: description: Operations on resources (usually texts) - name: search description: Full text search + paths: /annotations: - # post: - # tags: - # - annotations + post: + tags: + - annotations # summary: Add a new annotation # description: "Create an annotation for a file (to be identified by ID in the request body)" # operationId: insertAnnotation @@ -38,9 +39,9 @@ paths: # "400": # description: Invalid input /annotations/{$id}: - # get: - # tags: - # - annotations + get: + tags: + - annotations # summary: Get annotation by ID # operationId: getAnnotationById # responses: @@ -52,9 +53,9 @@ paths: # $ref: "#/components/schemas/Annotation" # "404": # description: No ID found by this ID - # delete: - # tags: - # - annotations + delete: + tags: + - annotations # summary: Delete the annotation # operationId: deleteAnnotation # responses: @@ -62,10 +63,10 @@ paths: # description: The annotation has been deleted # "404": # description: This annotation was not found - /annotations/byFile/{$id}: - # get: - # tags: - # - annotations + /annotations/forFile/{$id}: + get: + tags: + - annotations # summary: Get a list of annotations related to a file # responses: # "200": @@ -81,9 +82,9 @@ paths: # operationId: #TODO /projects: - # get: - # tags: - # - projects + get: + tags: + - projects # summary: Get a list of all projects # operationId: listProjects # responses: @@ -91,28 +92,28 @@ paths: # description: Contains a list of projects # content: #TODO /projects/{$ed}: - # get: - # tags: - # - projects + get: + tags: + - projects # summary: Get project by ID - # delete: - # tags: - # - projects + delete: + tags: + - projects # summary: Delete project by ID - # put: - # tags: - # - projects + put: + tags: + - projects # summary: Create project with known ID /projects/{$ed}/nav: - # get: - # tags: - # - projects + get: + tags: + - projects # summary: Get project navigation /entities: - # get: - # tags: - # - entities + get: + tags: + - entities # summary: Get entities from global registry # parameters: # - name: q @@ -130,17 +131,53 @@ paths: # - bib # - evt # description: - /entities/project/{$ed}/{$type}/list: + /entities/project/{$ed}/{$type}: + get: + tags: + - entities /entities/project/{$ed}/refs/{$entity}: + get: + tags: + - entities /entities/resource/{$id}/refs/{$entity}: + get: + tags: + - entities - /resource/{$id}: - /resource/{$id}/views: - /resource/{$id}/views/{$view}: - /resource/byPid/{$pid}: + /resources/{$id}: + get: + tags: + - resources + put: + tags: + - resources + head: + tags: + - resources + options: + tags: + - resources + /resources/{$id}/views: + get: + tags: + - resources + /resources/{$id}/views/{$view}: + get: + tags: + - resources + /resources/byPid/{$pid}: + get: + tags: + - resources /search/ft/project/{$ed}: + get: + tags: + - search /search/ft/resource/{$id}: + get: + tags: + - search # components: From 590be29d735962d24aa31fba09d773c4742764ea Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 30 Oct 2024 17:13:22 +0100 Subject: [PATCH 039/151] OpenAPI: add summaries to methods --- edoc/rest2/v2.yaml | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index 9938d39f..b6fa1937 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -28,7 +28,7 @@ paths: post: tags: - annotations - # summary: Add a new annotation + summary: Add a new annotation # description: "Create an annotation for a file (to be identified by ID in the request body)" # operationId: insertAnnotation # requestBody: @@ -42,7 +42,7 @@ paths: get: tags: - annotations - # summary: Get annotation by ID + summary: Get annotation by ID # operationId: getAnnotationById # responses: # "200": @@ -56,7 +56,7 @@ paths: delete: tags: - annotations - # summary: Delete the annotation + summary: Delete an annotation # operationId: deleteAnnotation # responses: # "200": @@ -67,7 +67,7 @@ paths: get: tags: - annotations - # summary: Get a list of annotations related to a file + summary: List of annotations related to a file # responses: # "200": # description: Found annotations for this file @@ -85,7 +85,7 @@ paths: get: tags: - projects - # summary: Get a list of all projects + summary: List all projects # operationId: listProjects # responses: # "200": @@ -95,26 +95,26 @@ paths: get: tags: - projects - # summary: Get project by ID + summary: Project info by ID delete: tags: - projects - # summary: Delete project by ID + summary: Delete project put: tags: - projects - # summary: Create project with known ID + summary: Create project with given ID /projects/{$ed}/nav: get: tags: - projects - # summary: Get project navigation + summary: Get project navigation /entities: get: tags: - entities - # summary: Get entities from global registry + summary: Query entities in global registry # parameters: # - name: q # in: query @@ -135,49 +135,65 @@ paths: get: tags: - entities + summary: Query entities in a project’s registry /entities/project/{$ed}/refs/{$entity}: get: tags: - entities + summary: List texts in a project referring to an entity /entities/resource/{$id}/refs/{$entity}: get: tags: - entities + summary: List all fragments containina reference to an entity /resources/{$id}: get: tags: - resources + summary: Get resource by ID put: tags: - resources + summary: Create or update a file + patch: + tags: + - resources + summary: Change a fragment from a file head: tags: - resources + summary: Preflight request options: tags: - resources + summary: Preflight request /resources/{$id}/views: get: tags: - resources + summary: List views for a file /resources/{$id}/views/{$view}: get: tags: - resources + summary: Get resource as represented by view /resources/byPid/{$pid}: get: tags: - resources + summary: Return our ID for a external PID /search/ft/project/{$ed}: get: tags: - search + summary: List files in project containing text /search/ft/resource/{$id}: get: tags: - search + summary: List fragments in file containing text # components: From 960cc7f85df0a7c6b28551f95d6f23b6f6c2237d Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 30 Oct 2024 18:03:18 +0100 Subject: [PATCH 040/151] openAPI: prepare operationIDs --- edoc/rest2/v2.yaml | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index b6fa1937..98676519 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -30,7 +30,7 @@ paths: - annotations summary: Add a new annotation # description: "Create an annotation for a file (to be identified by ID in the request body)" - # operationId: insertAnnotation + operationId: #TODO # requestBody: # $ref: "#/components/requestBodies/Annotation" # responses: @@ -43,7 +43,7 @@ paths: tags: - annotations summary: Get annotation by ID - # operationId: getAnnotationById + operationId: #TODO getAnnotationById # responses: # "200": # description: Annotation has been found @@ -57,7 +57,7 @@ paths: tags: - annotations summary: Delete an annotation - # operationId: deleteAnnotation + operationId: #TODO deleteAnnotation # responses: # "200": # description: The annotation has been deleted @@ -68,6 +68,7 @@ paths: tags: - annotations summary: List of annotations related to a file + operationId: #TODO # responses: # "200": # description: Found annotations for this file @@ -79,14 +80,13 @@ paths: # description: No annotations for this file # "404": # description: File not found - # operationId: #TODO /projects: get: tags: - projects summary: List all projects - # operationId: listProjects + operationId: #TODO listProjects # responses: # "200": # description: Contains a list of projects @@ -96,25 +96,30 @@ paths: tags: - projects summary: Project info by ID + operationId: #TODO delete: tags: - projects summary: Delete project + operationId: #TODO put: tags: - projects summary: Create project with given ID + operationId: #TODO /projects/{$ed}/nav: get: tags: - projects summary: Get project navigation + operationId: #TODO /entities: get: tags: - entities summary: Query entities in global registry + operationId: #TODO # parameters: # - name: q # in: query @@ -136,64 +141,78 @@ paths: tags: - entities summary: Query entities in a project’s registry + operationId: #TODO /entities/project/{$ed}/refs/{$entity}: get: tags: - entities summary: List texts in a project referring to an entity + operationId: #TODO /entities/resource/{$id}/refs/{$entity}: get: tags: - entities summary: List all fragments containina reference to an entity + operationId: #TODO /resources/{$id}: get: tags: - resources summary: Get resource by ID + operationId: #TODO put: tags: - resources summary: Create or update a file + operationId: #TODO patch: tags: - resources summary: Change a fragment from a file + operationId: #TODO head: tags: - resources summary: Preflight request + operationId: #TODO options: tags: - resources summary: Preflight request + operationId: #TODO /resources/{$id}/views: get: tags: - resources summary: List views for a file + operationId: #TODO /resources/{$id}/views/{$view}: get: tags: - resources summary: Get resource as represented by view + operationId: #TODO /resources/byPid/{$pid}: get: tags: - resources summary: Return our ID for a external PID + operationId: #TODO /search/ft/project/{$ed}: get: tags: - search summary: List files in project containing text + operationId: #TODO /search/ft/resource/{$id}: - get: + + operationId: #TODO get: tags: - search summary: List fragments in file containing text + operationId: #TODO # components: From 12ea837a5314fee4966613f982c880859621575f Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 6 Nov 2024 13:22:20 +0100 Subject: [PATCH 041/151] =?UTF-8?q?add=20=E2=80=9Cdelete=20file=E2=80=9D?= =?UTF-8?q?=20to=20API=20definition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- edoc/rest2/v2.yaml | 117 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 110 insertions(+), 7 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index 98676519..fa890ddb 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -30,7 +30,7 @@ paths: - annotations summary: Add a new annotation # description: "Create an annotation for a file (to be identified by ID in the request body)" - operationId: #TODO + operationId: TODO # requestBody: # $ref: "#/components/requestBodies/Annotation" # responses: @@ -38,12 +38,19 @@ paths: # description: Annotation has been created # "400": # description: Invalid input - /annotations/{$id}: + /annotations/{annotation}: + parameters: + - name: "annotation" + in: path + description: The ID of the annotation + schema: + type: string + required: true get: tags: - annotations summary: Get annotation by ID - operationId: #TODO getAnnotationById + operationId: TODO getAnnotationById # responses: # "200": # description: Annotation has been found @@ -63,7 +70,14 @@ paths: # description: The annotation has been deleted # "404": # description: This annotation was not found - /annotations/forFile/{$id}: + /annotations/forFile/{id}: + parameters: + - name: "id" + in: path + description: The ID of the file to which the annotation is to be attached + schema: + type: string + required: true get: tags: - annotations @@ -92,6 +106,13 @@ paths: # description: Contains a list of projects # content: #TODO /projects/{$ed}: + parameters: + - name: "ed" + in: path + description: The ID of the project + schema: + type: string + required: true get: tags: - projects @@ -108,6 +129,13 @@ paths: summary: Create project with given ID operationId: #TODO /projects/{$ed}/nav: + parameters: + - name: "ed" + in: path + description: The ID of the project + schema: + type: string + required: true get: tags: - projects @@ -137,25 +165,76 @@ paths: # - evt # description: /entities/project/{$ed}/{$type}: + parameters: + - name: "ed" + in: path + description: The ID of the project + schema: + type: string + required: true + - name: "type" + in: path + description: The type of entity + schema: + enum: + - per + - pla + - org + - bib + - evt + required: true get: tags: - entities summary: Query entities in a project’s registry operationId: #TODO /entities/project/{$ed}/refs/{$entity}: + parameters: + - name: "ed" + in: path + description: The ID of the project + schema: + type: string + required: true + - name: "entity" + in: path + description: The ID of the entity + schema: + type: string + required: true get: tags: - entities summary: List texts in a project referring to an entity operationId: #TODO /entities/resource/{$id}/refs/{$entity}: + parameters: + - name: "id" + in: path + description: The ID of the file + schema: + type: string + required: true + - name: "entity" + in: path + description: The ID of the entity + schema: + type: string + required: true get: tags: - entities - summary: List all fragments containina reference to an entity + summary: List all fragments containing a reference to an entity operationId: #TODO /resources/{$id}: + parameters: + - name: "id" + in: path + description: The ID of the file + schema: + type: string + required: true get: tags: - resources @@ -181,13 +260,38 @@ paths: - resources summary: Preflight request operationId: #TODO + delete: + tags: + - resources + summary: delete a file + operationId: #TODO /resources/{$id}/views: + parameters: + - name: "id" + in: path + description: The ID of the file + schema: + type: string + required: true get: tags: - resources summary: List views for a file operationId: #TODO /resources/{$id}/views/{$view}: + parameters: + - name: id + in: path + description: The ID of the file + schema: + type: string + required: true + - name: view + in: path + description: The ID of the view to be invoked + schema: + type: string + required: true get: tags: - resources @@ -207,8 +311,7 @@ paths: summary: List files in project containing text operationId: #TODO /search/ft/resource/{$id}: - - operationId: #TODO get: + get: tags: - search summary: List fragments in file containing text From 5a6dc496de4eed7075f9c72aa674cd5a6655fe74 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 6 Nov 2024 15:42:45 +0100 Subject: [PATCH 042/151] openAPI: prepare requestBody statements --- edoc/rest2/v2.yaml | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index fa890ddb..5a173b9a 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -28,11 +28,17 @@ paths: post: tags: - annotations - summary: Add a new annotation - # description: "Create an annotation for a file (to be identified by ID in the request body)" + summary: Add a new full text annotation + description: This creates full text annotations only. Changes to the file, including entity markup, must use PATCH /resources/{$id} operationId: TODO - # requestBody: - # $ref: "#/components/requestBodies/Annotation" + requestBody: + description: the full text annotation to be added + required: true + content: + application/json: + schema: #TODO + application/xml: + schema: #TODO # responses: # "201": # description: Annotation has been created @@ -127,7 +133,14 @@ paths: tags: - projects summary: Create project with given ID + description: This creates a new project with the ID given as $ed and the necessary meta data in the request body operationId: #TODO + requestBody: + description: The necessary data for the project to be created + required: true + content: + application/xml: + schema: #TODO /projects/{$ed}/nav: parameters: - name: "ed" @@ -245,11 +258,23 @@ paths: - resources summary: Create or update a file operationId: #TODO + requestBody: + description: Create or replace a file with the ID given in $id and the content in the request body + required: true + content: + application/xml: + schema: #TODO patch: tags: - resources summary: Change a fragment from a file operationId: #TODO + requestBody: + description: The replacement XML fragment + required: true + content: + application/xml: + schema: #TODO or use an example head: tags: - resources From c0d0c8c6d2ec1cfdfac604a001fa62826d161b56 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 6 Nov 2024 16:29:26 +0100 Subject: [PATCH 043/151] openAPI: use refs for common path parameters --- edoc/rest2/v2.yaml | 140 +++++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 81 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index 5a173b9a..24593574 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -29,7 +29,7 @@ paths: tags: - annotations summary: Add a new full text annotation - description: This creates full text annotations only. Changes to the file, including entity markup, must use PATCH /resources/{$id} + description: This creates full text annotations only. Changes to the file, including entity markup, must use PATCH /resources/{id} operationId: TODO requestBody: description: the full text annotation to be added @@ -78,12 +78,7 @@ paths: # description: This annotation was not found /annotations/forFile/{id}: parameters: - - name: "id" - in: path - description: The ID of the file to which the annotation is to be attached - schema: - type: string - required: true + - "$ref": "#/components/parameters/id" get: tags: - annotations @@ -111,14 +106,9 @@ paths: # "200": # description: Contains a list of projects # content: #TODO - /projects/{$ed}: + /projects/{ed}: parameters: - - name: "ed" - in: path - description: The ID of the project - schema: - type: string - required: true + - "$ref": "#/components/parameters/ed" get: tags: - projects @@ -133,7 +123,7 @@ paths: tags: - projects summary: Create project with given ID - description: This creates a new project with the ID given as $ed and the necessary meta data in the request body + description: This creates a new project with the ID given as ed and the necessary meta data in the request body operationId: #TODO requestBody: description: The necessary data for the project to be created @@ -141,14 +131,9 @@ paths: content: application/xml: schema: #TODO - /projects/{$ed}/nav: + /projects/{ed}/nav: parameters: - - name: "ed" - in: path - description: The ID of the project - schema: - type: string - required: true + - "$ref": "#/components/parameters/ed" get: tags: - projects @@ -177,14 +162,9 @@ paths: # - bib # - evt # description: - /entities/project/{$ed}/{$type}: + /entities/project/{ed}/{type}: parameters: - - name: "ed" - in: path - description: The ID of the project - schema: - type: string - required: true + - "$ref": "#/components/parameters/ed" - name: "type" in: path description: The type of entity @@ -201,53 +181,28 @@ paths: - entities summary: Query entities in a project’s registry operationId: #TODO - /entities/project/{$ed}/refs/{$entity}: + /entities/project/{ed}/refs/{entity}: parameters: - - name: "ed" - in: path - description: The ID of the project - schema: - type: string - required: true - - name: "entity" - in: path - description: The ID of the entity - schema: - type: string - required: true + - "$ref": "#/components/parameters/ed" + - "$ref": "#/components/parameters/entity" get: tags: - entities summary: List texts in a project referring to an entity operationId: #TODO - /entities/resource/{$id}/refs/{$entity}: + /entities/resource/{id}/refs/{entity}: parameters: - - name: "id" - in: path - description: The ID of the file - schema: - type: string - required: true - - name: "entity" - in: path - description: The ID of the entity - schema: - type: string - required: true + - "$ref": "#/components/parameters/id" + - "$ref": "#/components/parameters/entity" get: tags: - entities summary: List all fragments containing a reference to an entity operationId: #TODO - /resources/{$id}: + /resources/{id}: parameters: - - name: "id" - in: path - description: The ID of the file - schema: - type: string - required: true + - "$ref": "#/components/parameters/id" get: tags: - resources @@ -259,7 +214,7 @@ paths: summary: Create or update a file operationId: #TODO requestBody: - description: Create or replace a file with the ID given in $id and the content in the request body + description: Create or replace a file with the ID given in id and the content in the request body required: true content: application/xml: @@ -290,27 +245,17 @@ paths: - resources summary: delete a file operationId: #TODO - /resources/{$id}/views: + /resources/{id}/views: parameters: - - name: "id" - in: path - description: The ID of the file - schema: - type: string - required: true + - "$ref": "#/components/parameters/id" get: tags: - resources summary: List views for a file operationId: #TODO - /resources/{$id}/views/{$view}: + /resources/{id}/views/{view}: parameters: - - name: id - in: path - description: The ID of the file - schema: - type: string - required: true + - "$ref": "#/components/parameters/id" - name: view in: path description: The ID of the view to be invoked @@ -322,20 +267,31 @@ paths: - resources summary: Get resource as represented by view operationId: #TODO - /resources/byPid/{$pid}: + /resources/byPid/{pid}: + parameters: + - name: "pid" + in: path + description: The externally defined persistend ID of a file + schema: + type: string + required: true get: tags: - resources summary: Return our ID for a external PID operationId: #TODO - /search/ft/project/{$ed}: + /search/ft/project/{ed}: + parameters: + - "$ref": "#/components/parameters/ed" get: tags: - search summary: List files in project containing text operationId: #TODO - /search/ft/resource/{$id}: + /search/ft/resource/{id}: + parameters: + - "$ref": "#/components/parameters/id" get: tags: - search @@ -343,7 +299,29 @@ paths: operationId: #TODO -# components: +components: + parameters: + id: + name: "id" + in: path + description: The ID of the + schema: + type: string + required: true + ed: + name: "ed" + in: path + description: The ID of the project + schema: + type: string + required: true + entity: + name: "entity" + in: path + description: The ID of the entity + schema: + type: string + required: true # requestBodies: # Annotation: # required: true From 35de212ea0e8bb7c9517d6c7761339f444857a1a Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 6 Nov 2024 17:10:55 +0100 Subject: [PATCH 044/151] openAPI: define query parameters --- edoc/rest2/v2.yaml | 58 ++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index 24593574..ac79ed78 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -24,6 +24,9 @@ tags: description: Full text search paths: + # TODO: + # /admin + /annotations: post: tags: @@ -146,36 +149,14 @@ paths: - entities summary: Query entities in global registry operationId: #TODO - # parameters: - # - name: q - # in: query - # schema: - # type: string - # description: filter by name / title - # - name: type - # in: query - # schema: - # enum: - # - per - # - pla - # - org - # - bib - # - evt - # description: - /entities/project/{ed}/{type}: + parameters: + - "$ref": "#/components/parameters/q" + - "$ref": "#/components/parameters/type" + /entities/project/{ed}: parameters: - "$ref": "#/components/parameters/ed" - - name: "type" - in: path - description: The type of entity - schema: - enum: - - per - - pla - - org - - bib - - evt - required: true + - "$ref": "#/components/parameters/q" + - "$ref": "#/components/parameters/type" get: tags: - entities @@ -284,6 +265,7 @@ paths: /search/ft/project/{ed}: parameters: - "$ref": "#/components/parameters/ed" + - "$ref": "#/components/parameters/q" get: tags: - search @@ -292,6 +274,7 @@ paths: /search/ft/resource/{id}: parameters: - "$ref": "#/components/parameters/id" + - "$ref": "#/components/parameters/q" get: tags: - search @@ -322,6 +305,25 @@ components: schema: type: string required: true + q: + name: q + in: query + schema: + type: string + description: query or filter by name / title + type: + name: "type" + in: path + description: The type of entity + schema: + enum: + - per + - pla + - org + - bib + - evt + required: true + # requestBodies: # Annotation: # required: true From 3aad747b59b235155a96232a3360f3b9e8df6b94 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 6 Nov 2024 17:38:00 +0100 Subject: [PATCH 045/151] openAPI: add optional query and header parameters --- edoc/rest2/v2.yaml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index ac79ed78..f57c13ec 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -137,6 +137,7 @@ paths: /projects/{ed}/nav: parameters: - "$ref": "#/components/parameters/ed" + - "$ref": "#/components/parameters/modified" get: tags: - projects @@ -152,11 +153,13 @@ paths: parameters: - "$ref": "#/components/parameters/q" - "$ref": "#/components/parameters/type" + - "$ref": "#/components/parameters/start" /entities/project/{ed}: parameters: - "$ref": "#/components/parameters/ed" - "$ref": "#/components/parameters/q" - "$ref": "#/components/parameters/type" + - "$ref": "#/components/parameters/start" get: tags: - entities @@ -175,6 +178,7 @@ paths: parameters: - "$ref": "#/components/parameters/id" - "$ref": "#/components/parameters/entity" + - "$ref": "#/components/parameters/start" get: tags: - entities @@ -237,6 +241,7 @@ paths: /resources/{id}/views/{view}: parameters: - "$ref": "#/components/parameters/id" + - "$ref": "#/components/parameters/modified" - name: view in: path description: The ID of the view to be invoked @@ -266,6 +271,7 @@ paths: parameters: - "$ref": "#/components/parameters/ed" - "$ref": "#/components/parameters/q" + - "$ref": "#/components/parameters/start" get: tags: - search @@ -275,6 +281,7 @@ paths: parameters: - "$ref": "#/components/parameters/id" - "$ref": "#/components/parameters/q" + - "$ref": "#/components/parameters/start" get: tags: - search @@ -312,8 +319,8 @@ components: type: string description: query or filter by name / title type: - name: "type" - in: path + name: type + in: query description: The type of entity schema: enum: @@ -323,6 +330,19 @@ components: - bib - evt required: true + start: + name: start + in: query + description: from which position in a list to start (1-based) + schema: + type: integer + default: 1 + modified: + name: "If-Modified-Since" + in: header + schema: + type: string + format: date-time # requestBodies: # Annotation: From 24a3b481da228e6faa0b6330ab71eb3802f3e6c3 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 21 Nov 2024 12:01:16 +0100 Subject: [PATCH 046/151] basic design of API v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - no operationIDs yet - open for discussion – needs feedback --- edoc/rest2/v2.yaml | 839 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 753 insertions(+), 86 deletions(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index f57c13ec..4ed9d2a1 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - description: "wdb+ REST API v2 (wdb+ > v4.0) – see https://github.com/dariok/wdbplus for details" + description: "wdb+ API v2 (wdb+ > v4.0) – see https://github.com/dariok/wdbplus for details" version: "2.0" title: "wdb+ API" # termsOfService: "see instance" @@ -10,7 +10,7 @@ info: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html servers: - - url: https://wdbplus.instance/exist/restxq/edoc/v2 + - url: https://wdbplus.instance/exist/edoc/api/v2 tags: - name: annotations description: Concerning Hobbits @@ -32,21 +32,15 @@ paths: tags: - annotations summary: Add a new full text annotation - description: This creates full text annotations only. Changes to the file, including entity markup, must use PATCH /resources/{id} - operationId: TODO + description: "Create a new full text annotation; return its location when sucessful.
    **Note:** 1. no checks are performed and multiple requests will create multiple entries. 2. This creates full text annotations only. Changes to the file, including entity markup, must be made using → `PATCH /resources/{id}`" + operationId: #TODO requestBody: - description: the full text annotation to be added - required: true - content: - application/json: - schema: #TODO - application/xml: - schema: #TODO - # responses: - # "201": - # description: Annotation has been created - # "400": - # description: Invalid input + "$ref": "#/components/requestBodies/annotation" + responses: + "201": + "$ref": "#/components/responses/created" + "400": + "$ref": "#/components/responses/invalidBody" /annotations/{annotation}: parameters: - name: "annotation" @@ -60,25 +54,41 @@ paths: - annotations summary: Get annotation by ID operationId: TODO getAnnotationById - # responses: - # "200": - # description: Annotation has been found - # content: - # application/json: - # schema: - # $ref: "#/components/schemas/Annotation" - # "404": - # description: No ID found by this ID + responses: + "200": + description: Annotation has been found + content: + application/json: + schema: + "$ref": "#/components/schemas/annotation.json" + application/xml: + schema: + "$ref": "#/components/schemas/annotation.xml" + "404": + description: No annotation found by this ID + put: + tags: + - annotations + summary: Update an annotation + requestBody: + "$ref": "#/components/requestBodies/annotation" + responses: + "204": + description: Update sucessful. + "400": + "$ref": "#/components/responses/invalidBody" + "404": + description: No annotation found by this ID delete: tags: - annotations summary: Delete an annotation operationId: #TODO deleteAnnotation - # responses: - # "200": - # description: The annotation has been deleted - # "404": - # description: This annotation was not found + responses: + "204": + description: The annotation has been deleted + "404": + description: This annotation was not found /annotations/forFile/{id}: parameters: - "$ref": "#/components/parameters/id" @@ -87,17 +97,20 @@ paths: - annotations summary: List of annotations related to a file operationId: #TODO - # responses: - # "200": - # description: Found annotations for this file - # content: - # application/json: - # schema: - # $ref: #TODO - # "204": - # description: No annotations for this file - # "404": - # description: File not found + responses: + "200": + description: Found annotations for this file + content: + application/json: + schema: + "$ref": "#/components/schemas/listAnnotations" + application/xml: + schema: + "$ref": "#/components/schemas/listAnnotations" + "204": + description: No annotations for this file + "404": + description: File $id not found /projects: get: @@ -105,35 +118,66 @@ paths: - projects summary: List all projects operationId: #TODO listProjects - # responses: - # "200": - # description: Contains a list of projects - # content: #TODO + responses: + "200": + "$ref": "#/components/responses/projects" + post: + tags: + - projects + summary: Create a project without specifying an ID + description: Create a project with the meta data provided while auto-generating the ID + operationId: #TODO + requestBody: + "$ref": "#/components/requestBodies/project" + responses: + "204": + "$ref": "#/components/responses/created" + "400": + "$ref": "#/components/responses/invalidBody" + "409": + description: A project already exists in this location /projects/{ed}: parameters: - "$ref": "#/components/parameters/ed" get: tags: - projects - summary: Project info by ID + summary: Get project contents by ID operationId: #TODO + responses: + "200": + "$ref": "#/components/responses/projectContents" + "204": + description: The project was found but currently has neither subprojects nor registered resources + "404": + description: No project found by this ID delete: tags: - projects summary: Delete project operationId: #TODO + responses: + "204": + description: The project has been deleted + "404": + description: This project was not found put: tags: - projects summary: Create project with given ID - description: This creates a new project with the ID given as ed and the necessary meta data in the request body + description: This creates a new or updates an existing project with the ID given as ed and the necessary meta data in the request body operationId: #TODO requestBody: - description: The necessary data for the project to be created - required: true - content: - application/xml: - schema: #TODO + "$ref": "#/components/requestBodies/project" + responses: + "204": + description: The project was created or updated + "400": + "$ref": "#/components/responses/invalidBody" + "404": + description: Project $ed not found + "409": + description: A project exists with this ID in a different location or the location requested contains a project with a different ID /projects/{ed}/nav: parameters: - "$ref": "#/components/parameters/ed" @@ -143,6 +187,14 @@ paths: - projects summary: Get project navigation operationId: #TODO + responses: + "200": + description: Returning navigation + content: + "application/xml": + example: + "text/html": + example: /entities: get: @@ -154,18 +206,155 @@ paths: - "$ref": "#/components/parameters/q" - "$ref": "#/components/parameters/type" - "$ref": "#/components/parameters/start" + responses: + "200": + "$ref": "#/components/responses/entities" + "204": + description: No entities were found for the combination of query parameters + post: + tags: + - entities + summary: Create a global entity without specifying an ID + operationId: #TODO + requestBody: + "$ref": "#/components/requestBodies/entity" + responses: + "201": + "$ref": "#/components/responses/created" + "400": + "$ref": "#/components/responses/invalidBody" + "409": + description: The body contains an ID for which an entity is already present + /entities/{entity}: + get: + tags: + - entities + summary: Get details of entity + operationId: #TODO + parameters: + - "$ref": "#/components/parameters/entity" + responses: + "200": + "$ref": "#/components/responses/entity" + "404": + description: Entity not found + put: + tags: + - entities + summary: Create a global entity specifying an ID + operationId: #TODO + requestBody: + "$ref": "#/components/requestBodies/entity" + responses: + "201": + "$ref": "#/components/responses/created" + "204": + description: The entity was updated + "400": + "$ref": "#/components/responses/invalidBody" + "404": + description: Entity $ed not found + "409": + description: The body contains an ID for which an entity is already present + delete: + tags: + - entities + summary: Delete global entity + operationId: #TODO + responses: + "204": + description: The entity has been deleted + "404": + description: This entity was not found /entities/project/{ed}: - parameters: - - "$ref": "#/components/parameters/ed" - - "$ref": "#/components/parameters/q" - - "$ref": "#/components/parameters/type" - - "$ref": "#/components/parameters/start" get: tags: - entities summary: Query entities in a project’s registry + parameters: + - "$ref": "#/components/parameters/ed" + - "$ref": "#/components/parameters/q" + - "$ref": "#/components/parameters/type" + - "$ref": "#/components/parameters/start" + operationId: #TODO + responses: + "200": + "$ref": "#/components/responses/entities" + "204": + description: No entities were found for the combination of query parameters + "404": + description: No project by the given ID + post: + tags: + - entities + summary: Create an entity with a project without specifying an ID + operationId: #TODO + requestBody: + "$ref": "#/components/requestBodies/entity" + responses: + "201": + "$ref": "#/components/responses/created" + "400": + "$ref": "#/components/responses/invalidBody" + "409": + description: The body contains an ID for which an entity is already present + /entities/project/{ed}/{entity}: + get: + tags: + - entities + summary: Get details of project entity + operationId: #TODO + parameters: + - "$ref": "#/components/parameters/entity" + responses: + "200": + "$ref": "#/components/responses/entity" + "404": + description: Entity not foun + put: + tags: + - entities + summary: Create a project entity specifying an ID + operationId: #TODO + requestBody: + "$ref": "#/components/requestBodies/entity" + responses: + "201": + "$ref": "#/components/responses/created" + "204": + description: The entity was updated + "400": + "$ref": "#/components/responses/invalidBody" + "404": + description: Project $ed or entity $entity not found + "409": + description: The body contains an ID for which an entity is already present + delete: + tags: + - entities + summary: Delete project entity + operationId: #TODO + responses: + "204": + description: The entity has been deleted + "404": + description: This entity was not found + /entities/refs/{entity}: + parameters: + - "$ref": "#/components/parameters/entity" + get: + tags: + - entities + summary: List projects referring to an entity operationId: #TODO - /entities/project/{ed}/refs/{entity}: + parameters: + - "$ref": "#/components/parameters/start" + responses: + "200": + "$ref": "#/components/responses/projects" + "204": + description: No references to the queried entity were found + /entities/refs/project/{ed}/{entity}: parameters: - "$ref": "#/components/parameters/ed" - "$ref": "#/components/parameters/entity" @@ -174,16 +363,33 @@ paths: - entities summary: List texts in a project referring to an entity operationId: #TODO - /entities/resource/{id}/refs/{entity}: + parameters: + - "$ref": "#/components/parameters/start" + responses: + "200": + "$ref": "#/components/responses/files" + "204": + description: No references to the queried entity were found + "404": + description: The project was not found + /entities/refs/resource/{id}/{entity}: parameters: - "$ref": "#/components/parameters/id" - "$ref": "#/components/parameters/entity" - - "$ref": "#/components/parameters/start" get: tags: - entities - summary: List all fragments containing a reference to an entity + summary: List all fragments in a text containing a reference to an entity operationId: #TODO + parameters: + - "$ref": "#/components/parameters/start" + responses: + "200": + "$ref": "#/components/responses/fragments" + "204": + description: No references to the queried entity were found + "404": + description: The project was not found /resources/{id}: parameters: @@ -193,6 +399,15 @@ paths: - resources summary: Get resource by ID operationId: #TODO + responses: + "200": + description: Resource by ID + content: + "application/tei+xml": + schema: + "$ref": "#/components/schemas/TEI" + "404": + description: No resource found by this ID put: tags: - resources @@ -202,8 +417,26 @@ paths: description: Create or replace a file with the ID given in id and the content in the request body required: true content: - application/xml: - schema: #TODO + multipart/form-data: + schema: + type: object + properties: + path: + type: string + file: + type: string + format: binary + responses: + "201": + "$ref": "#/components/responses/created" + "204": + description: File has been updated + "400": + "$ref": "#/components/responses/invalidBody" + "404": + description: File $id not found + "409": + description: A file with this ID is present in a different location or a file in this location exists with a different ID patch: tags: - resources @@ -215,21 +448,45 @@ paths: content: application/xml: schema: #TODO or use an example + responses: + "204": + description: File has been updated + "400": + "$ref": "#/components/responses/invalidBody" + "404": + description: File $id not found head: tags: - resources summary: Preflight request operationId: #TODO + responses: + "204": + description: File was found + "404": + description: File $id not found + "409": + description: A file with this ID is present in a different location or a file in this location exists with a different ID options: tags: - resources summary: Preflight request operationId: #TODO + responses: + "204": + description: File was found + "404": + description: File $id not found delete: tags: - resources summary: delete a file operationId: #TODO + responses: + "204": + description: File was deleted + "404": + description: File $id not found /resources/{id}/views: parameters: - "$ref": "#/components/parameters/id" @@ -238,6 +495,16 @@ paths: - resources summary: List views for a file operationId: #TODO + responses: + "200": + description: Returns a list of available views + content: + application/json: + schema: + "$ref": "#/components/schemas/listViews" + application/xml: + schema: + "$ref": "#/components/schemas/listViews" /resources/{id}/views/{view}: parameters: - "$ref": "#/components/parameters/id" @@ -253,6 +520,11 @@ paths: - resources summary: Get resource as represented by view operationId: #TODO + responses: + 200: + description: The resource in the selected representation + 404: + description: The resource or view was not found /resources/byPid/{pid}: parameters: - name: "pid" @@ -266,6 +538,15 @@ paths: - resources summary: Return our ID for a external PID operationId: #TODO + responses: + 200: + description: The internal ID for this PID + content: + text/plain: + schema: + type: string + 404: + description: This external PID was not found /search/ft/project/{ed}: parameters: @@ -277,6 +558,15 @@ paths: - search summary: List files in project containing text operationId: #TODO + responses: + 200: + "$ref": "#/components/responses/files" + 204: + description: Search result list is empty + 400: + description: An error was found in the query + 404: + description: project not found /search/ft/resource/{id}: parameters: - "$ref": "#/components/parameters/id" @@ -287,7 +577,15 @@ paths: - search summary: List fragments in file containing text operationId: #TODO - + responses: + 200: + "$ref": "#/components/responses/fragments" + 204: + description: Search result list is empty + 400: + description: An error was found in the query + 404: + description: File not found components: parameters: @@ -315,6 +613,7 @@ components: q: name: q in: query + required: true schema: type: string description: query or filter by name / title @@ -344,25 +643,393 @@ components: type: string format: date-time -# requestBodies: -# Annotation: -# required: true -# description: A new annotation for a file -# content: -# application/json: -# schema: -# $ref: "#/components/schemas/Annotation" - -# schemas: -# Annotation: -# type: object -# required: -# - id #file ID -# - content #text of the annotation -# properties: -# id: -# type: string -# description: "The ID of the file" -# content: -# type: string -# description: "The text of the annotation" + responses: + created: + description: Annotation, file, etc. has been created + headers: + Location: + description: Location of the annotation, file etc. + schema: + type: string + format: uri + invalidBody: + description: Request body is invalid or not wellformed + authenticate: + description: Authentication necessary + headers: + WWW-Authenticate: + description: Challenge for authentication + schema: + type: string + + annotations: + description: A list of annotations matching the query + content: + application/json: + schema: + "$ref": "#/components/schemas/listAnnotations" + application/xml: + schema: + "$ref": "#/components/schemas/listAnnotations" + fragments: + description: A list of fragments within a file matching the query + content: + application/json: + schema: + "$ref": "#/components/schemas/listFragments" + application/xml: + schema: + "$ref": "#/components/schemas/listFragments" + files: + description: A list of fragments within a file matching the query + content: + application/json: + schema: + "$ref": "#/components/schemas/listFiles" + application/xml: + schema: + "$ref": "#/components/schemas/listFiles" + projects: + description: A list of projects matching the query + content: + application/json: + schema: + "$ref": "#/components/schemas/listProjects" + application/xml: + schema: + "$ref": "#/components/schemas/listProjects" + entities: + description: A list of entities matching the query + content: + application/json: + schema: + "$ref": "#/components/schemas/listEntities" + application/xml: + schema: + "$ref": "#/components/schemas/listEntities" + entity: + description: A (TEI) description of one entity + content: + application/xml: + schema: + xml: + name: entity + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + oneOf: + - "$ref": "#/components/schemas/entity-person" + - "$ref": "#/components/schemas/entity-place" + - "$ref": "#/components/schemas/entity-org" + - "$ref": "#/components/schemas/entity-bibl" + - "$ref": "#/components/schemas/entity-event" + projectContents: + description: Lists the registered contents of a project + content: + application/json: + schema: + xml: + name: contents + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + anyOf: + - "$ref": "#/components/schemas/files" + - "$ref": "#/components/schemas/projects" + application/xml: + schema: + xml: + name: contents + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + anyOf: + - "$ref": "#/components/schemas/files" + - "$ref": "#/components/schemas/projects" + + requestBodies: + annotation: + description: the full text annotation to be added + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/annotation.json" + application/xml: + schema: + "$ref": "#/components/schemas/annotation.xml" + project: + description: The necessary data for the project to be created or updated + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/projectMetadata" + application/xml: + schema: + "$ref": "#/components/schemas/projectMetadata" + entity: + description: A (TEI) description of one entity + required: true + content: + application/xml: + schema: + xml: + name: entity + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + oneOf: + - "$ref": "#/components/schemas/entity-person" + - "$ref": "#/components/schemas/entity-place" + - "$ref": "#/components/schemas/entity-org" + - "$ref": "#/components/schemas/entity-bibl" + - "$ref": "#/components/schemas/entity-event" + file: + description: A full TEI file + required: true + content: + application/xml: + schema: + "$ref": "#/components/schemas/TEI" + + + schemas: + TEI: + description: A full TEI file + type: object + xml: + namespace: "http://www.tei-c.org/ns/1.0" + name: "TEI" + + listAnnotations: + description: A result set, containing a list of pointers to annotations + type: object + xml: + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + name: "result" + properties: + start: + "$ref": "#/components/schemas/start" + total: + "$ref": "#/components/schemas/total" + annotations: + type: array + items: + xml: + name: annotation + properties: + id: + "$ref": "#/components/schemas/id" + listEntities: + description: A result set, containing a list of entities + type: object + xml: + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + name: "result" + properties: + start: + "$ref": "#/components/schemas/start" + total: + "$ref": "#/components/schemas/total" + entities: + type: array + items: + xml: + name: entity + properties: + id: + "$ref": "#/components/schemas/id" + label: + "$ref": "#/components/schemas/label" + listViews: + description: A result set, containing a list of views for a file + type: object + xml: + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + name: "result" + properties: + start: + "$ref": "#/components/schemas/start" + total: + "$ref": "#/components/schemas/total" + views: + type: array + items: + xml: + name: view + properties: + id: + "$ref": "#/components/schemas/id" + listProjects: + description: A result set, containing a list of projects + type: object + xml: + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + name: "result" + properties: + start: + "$ref": "#/components/schemas/start" + total: + "$ref": "#/components/schemas/total" + projects: + "$ref": "#/components/schemas/projects" + listFiles: + description: A result set, containing a list of files + type: object + xml: + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + name: "result" + properties: + start: + "$ref": "#/components/schemas/start" + total: + "$ref": "#/components/schemas/total" + files: + "$ref": "#/components/schemas/files" + listFragments: + description: A result set, containing a list of fragments within a file + type: object + xml: + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + name: "result" + properties: + start: + "$ref": "#/components/schemas/start" + total: + "$ref": "#/components/schemas/total" + fragments: + "$ref": "#/components/schemas/fragments" + + files: + type: array + description: describes one file + items: + xml: + name: file + properties: + id: + "$ref": "#/components/schemas/id" + label: + "$ref": "#/components/schemas/label" + fragments: + type: array + description: describes a fragment within a file + items: + xml: + name: fragment + properties: + id: + "$ref": "#/components/schemas/id" + projects: + type: array + description: describes one file + items: + xml: + name: project + properties: + id: + "$ref": "#/components/schemas/id" + label: + "$ref": "#/components/schemas/label" + + projectMetadata: + description: project meta data + type: object + xml: + name: projectMD + namespace: "https://github.com/dariok/wdbmeta" + + + entity-person: + type: object + description: describes one person + properties: + person: + xml: + namespace: "http://www.tei-c.org/ns/1.0" + entity-place: + type: object + description: describes one place + properties: + place: + xml: + namespace: "http://www.tei-c.org/ns/1.0" + entity-org: + type: object + description: describes one organization + properties: + org: + xml: + namespace: "http://www.tei-c.org/ns/1.0" + entity-bibl: + type: object + description: describes one bibliographical entity + properties: + bibl: + xml: + namespace: "http://www.tei-c.org/ns/1.0" + entity-event: + type: object + description: describes one event + properties: + event: + xml: + namespace: "http://www.tei-c.org/ns/1.0" + + annotation.xml: + type: object + xml: + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # example: + # Text + properties: + id: + "$ref": "#/components/schemas/id" + file: + "$ref": "#/components/schemas/file" + createdBy: + type: string + xml: + attribute: true + createdOn: + type: string + format: date-time + xml: + attribute: true + text: + type: string + xml: + text: true + annotation.json: + type: object + properties: + id: + "$ref": "#/components/schemas/id" + file: + "$ref": "#/components/schemas/file" + createdBy: + type: string + createdOn: + type: string + format: date-time + text: + type: string + + file: + description: Link to a file + type: string + format: URI + xml: + attribute: true + id: + description: ID of this entry + type: string + xml: + attribute: true + label: + description: Title to be displayed for this entry + type: string + xml: + attribute: true + start: + type: integer + default: 1 + xml: + attribute: true + total: + type: integer + xml: + attribute: true From f12ba1145a1ada1dbb05d2eded51cd73d8c1fcf6 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 2 Dec 2024 16:36:11 +0100 Subject: [PATCH 047/151] fix typo --- edoc/modules/app.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index e1ff9537..4d4e8af2 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -43,7 +43,7 @@ declare variable $wdb:edocBaseDB := $wdb:configFile => base-uri() => substring-b declare variable $wdb:data := $wdb:configFile//config:data; (:~ - : get the base URI either from the configuration + : get the base URI from the configuration :) declare variable $wdb:edocBaseURL := $wdb:configFile//config:server; From d5e9592f2d8ca2dd8a73579ddde91b6bc70612b9 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 6 Dec 2024 15:10:15 +0100 Subject: [PATCH 048/151] =?UTF-8?q?remove=20imports=20of=20app.xqm=20where?= =?UTF-8?q?=20it=E2=80=99s=20only=20used=20for=20variables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cf. [maintenance] avoid circular dependencies #549 Closes Read $wdb:data, $wdb:edocBaseDB from config.xml only #542 --- edoc/admin/admin.xqm | 15 ++-- edoc/admin/global.xqm | 40 +++++------ edoc/admin/new.xqm | 11 ++- edoc/admin/projects.xqm | 13 ++-- edoc/modules/addin.xqm | 3 +- edoc/modules/annotations.xqm | 6 +- edoc/modules/app.xqm | 136 ++++++++++++----------------------- edoc/modules/function.xqm | 61 ++++++++-------- edoc/modules/search.xqm | 10 +-- edoc/modules/start.xqm | 7 +- edoc/modules/stats.xqm | 14 ++-- edoc/modules/wdb-config.xqm | 47 ++++++++++++ edoc/rest/rest-anno.xql | 13 ++-- edoc/rest/rest-coll.xql | 15 ++-- edoc/rest/rest-entity.xql | 10 +-- edoc/rest/rest-files.xql | 39 +++++----- edoc/rest/rest-search.xql | 10 +-- edoc/rest/rest-test.xql | 6 +- 18 files changed, 229 insertions(+), 227 deletions(-) create mode 100644 edoc/modules/wdb-config.xqm diff --git a/edoc/admin/admin.xqm b/edoc/admin/admin.xqm index 53220f25..3e307d28 100644 --- a/edoc/admin/admin.xqm +++ b/edoc/admin/admin.xqm @@ -2,16 +2,13 @@ xquery version "3.1"; module namespace wdbAdmin = "https://github.com/dariok/wdbplus/Admin"; -(: note for code maintenance: as of 2024-04-10, this module uses the following exports from app.xqm: - : - $wdb:data - :) -import module namespace templates = "http://exist-db.org/xquery/html-templating"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xml"; import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "/db/apps/edoc/modules/error.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "/db/apps/edoc/modules/wdb-files.xqm"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare namespace sm = "http://exist-db.org/xquery/securitymanager"; +declare namespace wdb = "https://github.com/dariok/wdbplus/wdb"; (:~ : populate the model for functions pages (similar but not identical to wdb:populateModel) @@ -24,7 +21,7 @@ declare function wdbAdmin:start ( $node as node(), $model as map(*), $ed as xs:string ) { try { let $pathToEd := if ( $ed = "" ) - then $wdb:data + then $config:data else (wdbFiles:getFullPath($ed))?projectPath (: The meta data are taken from wdbmeta.xml :) @@ -32,7 +29,7 @@ function wdbAdmin:start ( $node as node(), $model as map(*), $ed as xs:string ) , $title := normalize-space((doc($infoFileLoc)//meta:title)[1]) return map { - "ed": if ( $pathToEd = $wdb:data ) then "data" else $ed, + "ed": if ( $pathToEd = $config:data ) then "data" else $ed, "infoFileLoc": $infoFileLoc, "page": substring-after(request:get-uri(), "admin/"), "pathToEd": $pathToEd, @@ -92,10 +89,10 @@ declare function wdbAdmin:getAside ($node as node(), $model as map(*)) as elemen }; declare function wdbAdmin:css ( $node as node(), $model as map(*) ) as element()* { - if ( unparsed-text-available($wdb:data || "/resources/wdb.css") ) + if ( unparsed-text-available($config:data || "/resources/wdb.css") ) then else (), - if ( unparsed-text-available($wdb:data || "/resources/admin.css") ) + if ( unparsed-text-available($config:data || "/resources/admin.css") ) then else () }; diff --git a/edoc/admin/global.xqm b/edoc/admin/global.xqm index 1e759203..eae4da22 100644 --- a/edoc/admin/global.xqm +++ b/edoc/admin/global.xqm @@ -2,21 +2,19 @@ xquery version "3.0"; module namespace wdbGS = "https://github.com/dariok/wdbplus/GlobalSettings"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "../modules/app.xqm"; import module namespace console = "http://exist-db.org/xquery/console"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xqm"; -declare namespace config = "https://github.com/dariok/wdbplus/config"; declare namespace exgit = "http://exist-db.org/xquery/exgit"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare namespace system = "http://exist-db.org/xquery/system"; declare function wdbGS:getRest ( $node as node(), $model as map(*) ) { - + }; declare function wdbGS:body ( $node as node(), $model as map(*) ) { let $param := request:get-parameter('job', 'main') - let $metaFile := doc('../config.xml') return switch ( $param ) case 'main' return @@ -32,24 +30,24 @@ declare function wdbGS:body ( $node as node(), $model as map(*) ) { case 'title' return - local:titleForm($metaFile) + local:titleForm($config:configFile) case 'chgTitle' return - let $u1 := update replace $metaFile//config:meta/config:name + let $u1 := update replace $config:configFile//config:meta/config:name with {request:get-parameter('longTitle', '')} - let $u1 := update replace $metaFile//config:meta/config:short + let $u1 := update replace $config:configFile//config:meta/config:short with {request:get-parameter('shortTitle', '')} - return local:titleForm($metaFile) + return local:titleForm($config:configFile) case 'role' return - local:roleForm($metaFile) + local:roleForm($config:configFile) case 'chgRole' return - let $u1 := update replace $metaFile//config:role/config:type + let $u1 := update replace $config:configFile//config:role/config:type with {request:get-parameter('role', '')} - let $u1 := update replace $metaFile//config:role/config:other + let $u1 := update replace $config:configFile//config:role/config:other with {request:get-parameter('other', '')} - return local:roleForm($metaFile) + return local:roleForm($config:configFile) default return
    @@ -58,23 +56,23 @@ declare function wdbGS:body ( $node as node(), $model as map(*) ) {
    }; -declare function local:titleForm($metaFile) { +declare function local:titleForm($config:configFile) {

    Titeldaten verändern


    + value="{$config:configFile//config:meta/config:name}" />

    + value="{$config:configFile//config:meta/config:short}" />
    }; -declare function local:roleForm($metaFile) { - let $role := $metaFile//config:role/config:type - let $other := $metaFile//config:role/config:other +declare function local:roleForm($config:configFile) { + let $role := $config:configFile//config:role/config:type + let $other := $config:configFile//config:role/config:other return
    @@ -85,7 +83,7 @@ declare function local:roleForm($metaFile) {

    @@ -95,5 +93,5 @@ declare function local:roleForm($metaFile) { }; declare function wdbGS:ingest($node as node(), $model as map(*)) { - bestehendes Projekt hochladen -}; \ No newline at end of file + bestehendes Projekt hochladen +}; diff --git a/edoc/admin/new.xqm b/edoc/admin/new.xqm index 540770d6..756b4a3e 100644 --- a/edoc/admin/new.xqm +++ b/edoc/admin/new.xqm @@ -2,11 +2,10 @@ xquery version "3.0"; module namespace wdbPN = "https://github.com/dariok/wdbplus/ProjectNew"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; -import module namespace wdbRc = "https://github.com/dariok/wdbplus/RestCollections" at "/db/apps/edoc/rest/rest-coll.xql"; -import module namespace sm = "http://exist-db.org/xquery/securitymanager"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xqm"; +import module namespace wdbRc = "https://github.com/dariok/wdbplus/RestCollections" at "/db/apps/edoc/rest/rest-coll.xql"; +import module namespace sm = "http://exist-db.org/xquery/securitymanager"; -declare namespace config = "https://github.com/dariok/wdbplus/config"; declare namespace http = "http://expath.org/ns/http-client"; declare namespace map = "http://www.w3.org/2005/xpath-functions/map"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; @@ -50,11 +49,11 @@ declare function wdbPN:body ( $node as node(), $model as map(*), $pName as xs:st let $copy := if (system:function-available(xs:QName("xmldb:copy-collection"), 2)) then util:eval("xmldb:copy-collection($source, $destination)", false(), ( - xs:QName("source"), $wdb:edocBaseDB || "/resources/xsl", + xs:QName("source"), $config:edocBaseDB || "/resources/xsl", xs:QName("destination"), $collection-uri )) else util:eval("xmldb:copy($source, $destination)", false(), ( - xs:QName("source"), $wdb:edocBaseDB || "/resources/xsl", + xs:QName("source"), $config:edocBaseDB || "/resources/xsl", xs:QName("destination"), $collection-uri )) diff --git a/edoc/admin/projects.xqm b/edoc/admin/projects.xqm index 0400a10f..ebcbb60a 100644 --- a/edoc/admin/projects.xqm +++ b/edoc/admin/projects.xqm @@ -2,17 +2,16 @@ xquery version "3.0"; module namespace wdbPL = "https://github.com/dariok/wdbplus/ProjectList"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xqm"; import module namespace sm = "http://exist-db.org/xquery/securitymanager"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "../modules/app.xqm"; import module namespace wdbs = "https://github.com/dariok/wdbplus/stats" at "../modules/stats.xqm"; import module namespace xstring = "https://github.com/dariok/XStringUtils" at "../include/xstring/string-pack.xql"; -declare namespace config = "https://github.com/dariok/wdbplus/config"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare namespace tei = "http://www.tei-c.org/ns/1.0"; declare function wdbPL:pageTitle ($node as node(), $model as map(*)) { - let $t := $wdb:configFile//config:short + let $t := $config:configFile//config:short return {normalize-space($t)} – Admin }; @@ -228,8 +227,8 @@ declare function local:getFileStat($model, $file) { { - if ($wdb:role = 'workbench') then - let $remoteMetaFilePath := $wdb:peer || '/' || substring-after($model?pathToEd, $wdb:data) || '/wdbmeta.xml' + if ( $config:role = 'workbench' ) then + let $remoteMetaFilePath := $config:peer || '/' || substring-after($model?pathToEd, $config:data) || '/wdbmeta.xml' let $remoteMetaFile := try { doc($remoteMetaFilePath) } catch * { @@ -246,7 +245,7 @@ declare function local:getFileStat($model, $file) { Peer Server - {$wdb:peer} + { $config:peer } Eintrag in wdbmeta.xml vorhanden? @@ -287,7 +286,7 @@ declare function local:getFileStat($model, $file) { else () } { - if ($wdb:role = 'standalone') then + if ( $config:role = 'standalone' ) then let $status := if ($metaFile//meta:view[@file = $file]) then let $view := ($metaFile//meta:view[@file = $file])[1] diff --git a/edoc/modules/addin.xqm b/edoc/modules/addin.xqm index 606dc0fe..ef18b94b 100644 --- a/edoc/modules/addin.xqm +++ b/edoc/modules/addin.xqm @@ -5,7 +5,6 @@ xquery version "3.1"; module namespace wdbAddinMain = "https://github.com/dariok/wdbplus/addins-main"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; declare namespace wdbadd = "https://github.com/dariok/wdbplus/addins"; @@ -13,7 +12,7 @@ declare namespace wdbadd = "https://github.com/dariok/wdbplus/addins"; (: load the main XQuery module for the requested addin. It is mandatory these implement wdbadd:main($map as map(*)) :) declare function wdbAddinMain:body ( $node as node(), $model as map(*) ) as element()+ { let $addinName := substring-before(substring-after(request:get-uri(), 'addins/'), '/') - , $path := $wdb:edocBaseDB || "/addins/" || $addinName || "/addin.xqm" + , $path := substring-before(base-uri(), '/addin.xqm') || "/addins/" || $addinName || "/addin.xqm" , $map := map { "location-hints": $path } let $module := try { diff --git a/edoc/modules/annotations.xqm b/edoc/modules/annotations.xqm index 71b6b32e..830c0cbd 100644 --- a/edoc/modules/annotations.xqm +++ b/edoc/modules/annotations.xqm @@ -2,7 +2,7 @@ xquery version "3.1"; module namespace wdbanno = "https://github.com/dariok/wdbplus/anno"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; (:~ : return the annotation file for the given user on the given file. @@ -13,8 +13,8 @@ import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xq : @return node(): the annotation file :) declare function wdbanno:getAnnoFile($file as xs:anyURI, $username as xs:string) as node() { - let $annotationCollectionName := substring-before(substring-after($file, $wdb:data), '.xml') - let $annotationCollectionBase := $wdb:edocBaseDB || '/annotations/' + let $annotationCollectionName := substring-before(substring-after($file, $config:data), '.xml') + let $annotationCollectionBase := $config:edocBaseDB || '/annotations/' let $annotationCollection := if (xmldb:collection-available($annotationCollectionBase || $annotationCollectionName)) then $annotationCollectionBase || $annotationCollectionName else if (sm:has-access($annotationCollectionBase, 'w')) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index 4d4e8af2..e86d4e71 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -11,6 +11,7 @@ xquery version "3.1"; module namespace wdb = "https://github.com/dariok/wdbplus/wdb"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; import module namespace templates = "http://exist-db.org/xquery/html-templating"; import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; @@ -24,49 +25,6 @@ declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare namespace rest = "http://exquery.org/ns/restxq"; declare namespace tei = "http://www.tei-c.org/ns/1.0"; -(: ALL-PURPOSE VARIABLES :) -(:~ - : load the config file - : See https://github.com/dariok/wdbplus/wiki/Global-Configuration - :) -declare variable $wdb:configFile := doc('../config.xml'); - -(:~ - : the base of this instance within the db - :) -declare variable $wdb:edocBaseDB := $wdb:configFile => base-uri() => substring-before('/config.xml'); - -(:~ - : Get the data collection. Since v4.0, we only support setting this in the config file – for standard installations, - the default will do just fine. - :) -declare variable $wdb:data := $wdb:configFile//config:data; - -(:~ - : get the base URI from the configuration - :) -declare variable $wdb:edocBaseURL := $wdb:configFile//config:server; - -(: ~ - : get the base URL for REST calls - :) -declare variable $wdb:restURL := $wdb:configFile//config:rest; - -(:~ - : the server role - :) -declare variable $wdb:role := $wdb:configFile//main:role/main:type; - -(:~ - : the peer in a sandbox/publication configuration - :) -declare variable $wdb:peer := - if ($wdb:role != "standalone") - then $wdb:configFile//main:role/main:peer - else "" -; -(: END ALL-PURPOSE VARIABLES :) - (: FUNCTIONS TO GET SERVER INFO :) (:~ : get some test info about variables and other properties of the framework @@ -75,7 +33,7 @@ declare variable $wdb:peer := :) declare function wdb:test($node as node(), $model as map(*)) as node() {
    -

    APP CONTEXT test on {$wdb:configFile//config:name}

    +

    APP CONTEXT test on {$config:configFile//config:name}

    global variables (function.xqm)

    @@ -162,13 +120,13 @@ function wdb:getEE($node as node(), $model as map(*), $id as xs:string, $view as for $h in $node/* return if ( $h/*[@data-template] ) then for $c in $h/* return try { - templates:apply($c, $wdb:lookup, $newModel) + templates:apply($c, $config:lookup, $newModel) } catch * { util:log("error", $err:description) } else try { - templates:apply($h, $wdb:lookup, $newModel) + templates:apply($h, $config:lookup, $newModel) } catch * { util:log("error", $err:description) } @@ -226,7 +184,7 @@ declare function wdb:populateModel ( $id as xs:string, $view as xs:string, $mode let $xsl := if ( $filePathInfo?fileName = "wdbmeta.xml" ) then (: TODO get path to XSL via function (use what’s in rest-files.xql) :) - xs:anyURI($wdb:data || '/resources/nav.xsl') + xs:anyURI($config:data || '/resources/nav.xsl') else wdb:getXslFromWdbMeta($infoFileLoc, $id, 'html') let $xslt := if (doc-available($xsl)) @@ -243,7 +201,7 @@ declare function wdb:populateModel ( $id as xs:string, $view as xs:string, $mode let $projectFunctions := for $function in doc($mainProject || "project-functions.xml")//function return $function/@name || '#' || count($function/argument) - , $instanceFunctions := for $function in doc($wdb:data || "/instance-functions.xml")//function + , $instanceFunctions := for $function in doc($config:data || "/instance-functions.xml")//function return $function/@name || '#' || count($function/argument) let $header := if ( request:exists() ) @@ -287,19 +245,19 @@ declare function wdb:getHead ( $node as node(), $model as map(*) ) as element(he - - { $model("title") } – { normalize-space($wdb:configFile//config:short) } + + { $model("title") } – { normalize-space($config:configFile//config:short) } { if ( wdb:findProjectFunction($model, "wdbPF:overrideCssJs", 1) ) then (wdb:getProjectFunction($model, "wdbPF:overrideCssJs", 1))($model) else ( , - if ( util:binary-doc-available($wdb:data || "/resources/wdb.css") ) + if ( util:binary-doc-available($config:data || "/resources/wdb.css") ) then else (), , - if ( util:binary-doc-available($wdb:data || "/resources/view.css") ) + if ( util:binary-doc-available($config:data || "/resources/view.css") ) then else (), wdb:getBlob($node, $model, 'jquery-ui-css'), @@ -309,7 +267,7 @@ declare function wdb:getHead ( $node as node(), $model as map(*) ) as element(he , , , - if ( util:binary-doc-available($wdb:data || "/resources/function.js") ) + if ( util:binary-doc-available($config:data || "/resources/function.js") ) then else (), wdb:getProjectFiles($node, $model, 'js') @@ -326,45 +284,45 @@ declare function wdb:getHead ( $node as node(), $model as map(*) ) as element(he : contents of which will be sent through the templating system : 2. instance or project specific wdbPF:getHeader#1 : 3. evaluation of all 4 constituents of the header in a row - : a) wdbPF:getHeaderLeft#1 or {$wdb:data}/resources/headerLeft.html or empty html:p - : b) wdbPF:getHeaderCentre#1 or {$wdb:data}/resources/headerCentre.html or html:h1 - : c) wdbPF:getHeaderMenu#1 or {$wdb:data}/resources/headerMenu.html or html:button - : d) wdbPF:getHeaderRight#1 or {$wdb:data}/resources/headerRight.html or empty html:p + : a) wdbPF:getHeaderLeft#1 or {$config:data}/resources/headerLeft.html or empty html:p + : b) wdbPF:getHeaderCentre#1 or {$config:data}/resources/headerCentre.html or html:h1 + : c) wdbPF:getHeaderMenu#1 or {$config:data}/resources/headerMenu.html or html:button + : d) wdbPF:getHeaderRight#1 or {$config:data}/resources/headerRight.html or empty html:p :) declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element() {
    { if ( doc-available($model?projectResources || '/header.html') ) - then templates:apply(doc($model?projectResources || '/header.html')/header/*, $wdb:lookup, $model) + then templates:apply(doc($model?projectResources || '/header.html')/header/*, $config:lookup, $model) else if ( wdb:findProjectFunction($model, 'wdbPF:getHeader', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeader", 1))($model) else ( ,
    { if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderCentre', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeaderCentre", 1))($model) - else if ( doc-available($wdb:data || "/resources/headerCentre.html") ) then - templates:apply(doc($wdb:data || "/resources/headerCentre.html"), $wdb:lookup, $model)/* + else if ( doc-available($config:data || "/resources/headerCentre.html") ) then + templates:apply(doc($config:data || "/resources/headerCentre.html"), $config:lookup, $model)/* else

    {$model("title")}

    }
    , , ) @@ -372,7 +330,7 @@ declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element( }; declare function wdb:pageTitle($node as node(), $model as map(*)) { - { normalize-space($wdb:configFile//main:short) } – { $model("title") } + { normalize-space($config:configFile//main:short) } – { $model("title") } }; (:~ @@ -445,15 +403,15 @@ declare function wdb:getContent($node as node(), $model as map(*)) { : return the global (i.e., full width) footer : : order of evaluation: - : 1. {$wdb:data}/resources/mainFooter.html + : 1. {$config:data}/resources/mainFooter.html : 2. {$projectResources}/mainFooter.html : 3. wdbPF:getMainFooter#1 :) declare function wdb:getGlobalFooter($node as node(), $model as map(*)) { - if ( doc-available($wdb:data || "/resources/mainFooter.html") ) - then templates:apply(doc($wdb:data || "/resources/mainFooter.html"), $wdb:lookup, $model) + if ( doc-available($config:data || "/resources/mainFooter.html") ) + then templates:apply(doc($config:data || "/resources/mainFooter.html"), $config:lookup, $model) else if ( doc-available($model?projectResources || '/mainFooter.html') ) - then templates:apply(doc($model?projectResources || '/mainFooter.html'), $wdb:lookup, $model) + then templates:apply(doc($model?projectResources || '/mainFooter.html'), $config:lookup, $model) else if ( wdb:findProjectFunction($model, "wdbPF:getMainFooter", 1) ) then (wdb:getProjectFunction($model, "wdbPF:getMainFooter", 1))($model) else () @@ -461,20 +419,20 @@ declare function wdb:getGlobalFooter($node as node(), $model as map(*)) { declare function wdb:getLeftFooter($node as node(), $model as map(*)) as element()? { if (doc-available($model?projectResources || "/footer.html")) then - templates:apply(doc($model?projectResources || "/footer.html"), $wdb:lookup, $model) + templates:apply(doc($model?projectResources || "/footer.html"), $config:lookup, $model) else if (wdb:findProjectFunction($model, "wdbPF:getProjectFooter", 1)) then (wdb:getProjectFunction($model, "wdbPF:getProjectFooter", 1))($model) - else if (doc-available($wdb:edocBaseDB || "/resources/footer.html")) then - templates:apply(doc($wdb:edocBaseDB || "/resources/footer.html"), $wdb:lookup, $model) + else if (doc-available($config:edocBaseDB || "/resources/footer.html")) then + templates:apply(doc($config:edocBaseDB || "/resources/footer.html"), $config:lookup, $model) else () }; declare function wdb:getRightFooter($node as node(), $model as map(*)) as element()? { if (doc-available($model?projectResources || "/projectRightFooter.html")) then - templates:apply(doc($model?projectResources || "/projectRightFooter.html"), $wdb:lookup, $model) + templates:apply(doc($model?projectResources || "/projectRightFooter.html"), $config:lookup, $model) else if (wdb:findProjectFunction($model, "wdbPF:getProjectRightFooter", 1)) then (wdb:getProjectFunction($model, "wdbPF:getProjectRightFooter", 1))($model) - else if (doc-available($wdb:data || "/resources/rightFooter.html")) then - templates:apply(doc($wdb:data || "/resources/rightFooter.html"), $wdb:lookup, $model) + else if (doc-available($config:data || "/resources/rightFooter.html")) then + templates:apply(doc($config:data || "/resources/rightFooter.html"), $config:lookup, $model) else () }; @@ -496,20 +454,20 @@ declare function wdb:getAnnotationDialogue ( $node as node(), $model as map(*) ) : @throws wdbErr:wdb0001 :) declare function wdb:getFilePath ( $id as xs:string ) as xs:string { - let $files := wdbFiles:getFilePaths($wdb:data, $id) + let $files := wdbFiles:getFilePaths($config:data, $id) (: do not just return a random URI but add some checks for better error messages: : no files found or more than one TEI file found or only wdbmeta entry but no other info :) let $pathToFile := if ( count($files) = 0 ) then error( QName('https://github.com/dariok/wdbErr', 'wdb0000'), - "no file with ID " || $id || " in " || $wdb:data, + "no file with ID " || $id || " in " || $config:data, map { "id": $id, "request": request:get-url() } ) else if ( count($files) > 1 ) then error( QName('https://github.com/dariok/wdbErr', 'wdb0001'), - "multiple files with ID " || $id || " in " || $wdb:data, + "multiple files with ID " || $id || " in " || $config:data, map { "id": $id, "request": request:get-url() } ) else if ( local-name($files[1]) = 'id' ) then @@ -521,7 +479,7 @@ declare function wdb:getFilePath ( $id as xs:string ) as xs:string { then let $peer := $files[1] => substring(2) => substring-before('/') , $id := $files[1] => substring-after('/') - return $wdb:configFile/id($peer) || '/' || $id + return $config:configFile/id($peer) || '/' || $id else $pathToFile }; @@ -547,10 +505,10 @@ declare function wdb:getAbsolutePath ( $ed as xs:string, $path as xs:string ) { : @return the path :) declare function wdb:getEdFromPath($path as xs:string, $absolute as xs:boolean) as xs:string { - let $tok := tokenize(xstring:substring-after($path, $wdb:edocBaseDB||'/'), '/') + let $tok := tokenize(xstring:substring-after($path, $config:edocBaseDB||'/'), '/') let $pa := for $i in 1 to count($tok) - let $t := $wdb:edocBaseDB || '.*' || string-join ($tok[position() < $i+1], '/') + let $t := $config:edocBaseDB || '.*' || string-join ($tok[position() < $i+1], '/') return xmldb:match-collection($t) let $path := if (count($pa) = 0) @@ -563,7 +521,7 @@ declare function wdb:getEdFromPath($path as xs:string, $absolute as xs:boolean) return if ( $absolute ) then $path[1] - else substring-after($path[1], $wdb:edocBaseDB||'/') + else substring-after($path[1], $config:edocBaseDB||'/') }; (:~ : Try ro load project specific XQuery to import CSS and JS @@ -632,7 +590,7 @@ declare function wdb:getProjectFunction ( $model as map(*), $name as xs:string, declare function wdb:findProjectFile ( $pathToEd as xs:string, $fileName as xs:string ) as xs:anyURI { if ( util:binary-doc-available($pathToEd || "/" || $fileName) ) then xs:anyURI($pathToEd || "/" || $fileName) - else if ( substring-after($pathToEd, $wdb:data) = '' ) then + else if ( substring-after($pathToEd, $config:data) = '' ) then xs:anyURI("") else wdb:findProjectFile(xstring:substring-before-last($pathToEd, '/'), $fileName) @@ -641,7 +599,7 @@ declare function wdb:findProjectFile ( $pathToEd as xs:string, $fileName as xs:s (: GENERAL HELPER FUNCTIONS :) declare function wdb:getUrl ( $path as xs:string ) as xs:string { - $wdb:edocBaseURL || substring-after($path, $wdb:edocBaseDB) + $config:edocBaseURL || substring-after($path, $config:edocBaseDB) }; (:~ @@ -667,7 +625,7 @@ declare function wdb:eval($function as xs:string, $cache-flag as xs:boolean, $ex :) declare function wdb:getProjectPathFromId ( $ed as xs:string ) as xs:string { if ( $ed = ( "", "data" ) ) - then $wdb:data + then $config:data else string( (doc("/db/apps/edoc/index/project-index.xml")/id($ed))/@path ) }; (: END GENERAL HELPER FUNCTIONS :) @@ -718,7 +676,7 @@ declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:st }; (: we need a lookup function for the templating system to work :) -declare variable $wdb:lookup := function($functionName as xs:string, $arity as xs:int) { +declare variable $config:lookup := function($functionName as xs:string, $arity as xs:int) { try { function-lookup(xs:QName($functionName), $arity) } catch * { @@ -809,7 +767,7 @@ declare function wdb:getContentTypeFromExt ( $extension as xs:string, $namespace }; declare function wdb:getBlob ( $node as node(), $model as map(*), $name as xs:string ) { - let $path := $wdb:configFile//config:source[@name = $name]/@path + let $path := $config:configFile//config:source[@name = $name]/@path return if ( ends-with($path, 'js') ) then diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 9dadec61..2c713e3a 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -2,6 +2,7 @@ xquery version "3.1"; module namespace wdbfp = "https://github.com/dariok/wdbplus/functionpages"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "config.xml"; import module namespace request = "http://exist-db.org/xquery/request"; import module namespace templates = "http://exist-db.org/xquery/html-templating"; import module namespace util = "http://exist-db.org/xquery/util"; @@ -32,13 +33,13 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a try { if ( request:exists() and contains(request:get-uri(), 'addins') ) then let $addinName := substring-before(substring-after(request:get-uri(), 'addins/'), '/') - , $path := $wdb:edocBaseDB || "/addins/" || $addinName + , $path := $config:edocBaseDB || "/addins/" || $addinName , $pp := try { parse-json($p) } catch * { normalize-space($p) } - , $functions := load-xquery-module("https://github.com/dariok/wdbplus/projectFiles", map { "location-hints": $wdb:data || "/instance.xqm" }) + , $functions := load-xquery-module("https://github.com/dariok/wdbplus/projectFiles", map { "location-hints": $config:data || "/instance.xqm" }) return map { "requestUrl": request:get-uri(), @@ -53,8 +54,8 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a else if ( request:exists() and request:get-uri() => ends-with('/toc.html') ) then map { "auth": sm:id()/sm:id, - "title": $wdb:configFile//*:name || " – Table of Contents", - "pathToEd": $wdb:data + "title": $config:configFile//*:name || " – Table of Contents", + "pathToEd": $config:data } else if ( request:exists() and request:get-uri() => ends-with('/entity.html') ) then ( @@ -65,10 +66,10 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a (: no ID: related to a project :) let $pathInfo := if ( $ed = "" ) then map { - "projectPath": $wdb:data, - "collectionPath": $wdb:data, - "fileName": $wdb:data || "/wdbmeta.xml", - "mainProject": $wdb:data + "projectPath": $config:data, + "collectionPath": $config:data, + "fileName": $config:data || "/wdbmeta.xml", + "mainProject": $config:data } else (wdbFiles:getFullPath($ed)) , $infoFileLoc := $pathInfo?projectPath || "wdbmeta.xml" (: projectPath is derived from the path to wdbmeta.xml :) @@ -83,7 +84,7 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a let $projectFunctions := for $function in doc($mainProject || "/project-functions.xml")//function return $function/@name || '#' || count($function/argument) - , $instanceFunctions := for $function in doc($wdb:data || "/instance-functions.xml")//function + , $instanceFunctions := for $function in doc($config:data || "/instance-functions.xml")//function return $function/@name || '#' || count($function/argument) return map { @@ -129,7 +130,7 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a "ed": $ed, "p": $p, "q": $q, - "wdb:data": $wdb:data, + "wdb:data": $config:data, "request": if ( request:exists() ) then request:get-url() else "" } ) @@ -140,7 +141,7 @@ declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p a "ed": $ed, "p": $p, "q": $q, - "wdb:data": $wdb:data, + "wdb:data": $config:data, "errC": $err:code, "errA": $err:additional, "errM": $err:description, @@ -223,19 +224,19 @@ declare function wdbfp:getHead ( $node as node(), $model as map(*), $templateFil - + {$model("title")} { if ( wdb:findProjectFunction($model, "wdbPF:overrideFunctionCssJs", 2) ) then (wdb:getProjectFunction($model, "wdbPF:overrideFunctionCssJs", 2))($model, $templateFile) else ( , - if ( util:binary-doc-available($wdb:data || "/resources/wdb.css") ) - then + if ( util:binary-doc-available($config:data || "/resources/wdb.css") ) + then else (), , - if ( util:binary-doc-available($wdb:data || "/resources/" || $templateFile || ".css") ) - then + if ( util:binary-doc-available($config:data || "/resources/" || $templateFile || ".css") ) + then else (), wdbfp:get('css', $model?pathToEd, $model), wdb:getBlob($node, $model, 'jquery'), @@ -280,11 +281,11 @@ declare function wdbfp:getHeader ( $node as node(), $model as map(*) ) as elemen else if ( wdb:findProjectFunction($model, 'wdbPF:getFunctionHeader', 1) ) then (wdb:getProjectFunction($model, 'wdbPF:getFunctionHeader', 1))($model) (: 3a. :) - else if ( doc-available($wdb:data || '/resources/' || $name || 'Header.html') ) then - templates:apply(doc($wdb:data || '/resources/' || $name || 'Header.html'), $wdbfp:lookup, $model) + else if ( doc-available($config:data || '/resources/' || $name || 'Header.html') ) then + templates:apply(doc($config:data || '/resources/' || $name || 'Header.html'), $wdbfp:lookup, $model) (: 4a. :) - else if ( doc-available($wdb:data || "/resources/functionHeader.html") ) then - templates:apply(doc($wdb:data|| "/resources/functionHeader.html"), $wdbfp:lookup, $model) + else if ( doc-available($config:data || "/resources/functionHeader.html") ) then + templates:apply(doc($config:data|| "/resources/functionHeader.html"), $wdbfp:lookup, $model) (: 5. :) else
    @@ -317,7 +318,7 @@ function wdbfp:get ( $type as xs:string, $edPath as xs:string, $model ) { let $fun := if (util:binary-doc-available($model?projectResources || 'projectFunction.css')) then else() - let $gen := if (util:binary-doc-available($wdb:edocBaseDB || '/resources/css/' || $name || '.css')) + let $gen := if (util:binary-doc-available($config:edocBaseDB || '/resources/css/' || $name || '.css')) then else() let $pro := if (util:binary-doc-available($model?projectResources || $unam || '.css')) @@ -326,12 +327,12 @@ function wdbfp:get ( $type as xs:string, $edPath as xs:string, $model ) { let $add := if ( util:binary-doc-available($edPath || "/addin.css") ) then else() - let $ins := if ( util:binary-doc-available($wdb:data || "/resources/" || $name || ".css") ) - then + let $ins := if ( util:binary-doc-available($config:data || "/resources/" || $name || ".css") ) + then else () return ($fun, $gen, $ins, $pro, $add) case "js" return - let $gen := if (util:binary-doc-available($wdb:edocBaseDB || '/resources/scripts/' || $name || '.js')) + let $gen := if (util:binary-doc-available($config:edocBaseDB || '/resources/scripts/' || $name || '.js')) then , - , - , - if ( util:binary-doc-available($config:data || "/resources/function.js") ) - then - else (), - wdb:getProjectFiles($node, $model, 'js') - ) - } - -}; - -(:~ - : return the header - if there is a project specific function, use it - : - : order of evaluation: - : 1. {$projectResources}/header.html – this must contain one html:header, the - : contents of which will be sent through the templating system - : 2. instance or project specific wdbPF:getHeader#1 - : 3. evaluation of all 4 constituents of the header in a row - : a) wdbPF:getHeaderLeft#1 or {$config:data}/resources/headerLeft.html or empty html:p - : b) wdbPF:getHeaderCentre#1 or {$config:data}/resources/headerCentre.html or html:h1 - : c) wdbPF:getHeaderMenu#1 or {$config:data}/resources/headerMenu.html or html:button - : d) wdbPF:getHeaderRight#1 or {$config:data}/resources/headerRight.html or empty html:p - :) -declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element() { -
    { - if ( doc-available($model?projectResources || '/header.html') ) - then templates:apply(doc($model?projectResources || '/header.html')/header/*, $wdb:lookup, $model) - else if ( wdb:findProjectFunction($model, 'wdbPF:getHeader', 1) ) then - (wdb:getProjectFunction($model, "wdbPF:getHeader", 1))($model) - else ( - , -
    { - if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderCentre', 1) ) then - (wdb:getProjectFunction($model, "wdbPF:getHeaderCentre", 1))($model) - else if ( doc-available($config:data || "/resources/headerCentre.html") ) then - templates:apply(doc($config:data || "/resources/headerCentre.html"), $wdb:lookup, $model)/* - else -

    {$model("title")}

    - }
    , - , - - ) - }
    -}; - -declare function wdb:pageTitle($node as node(), $model as map(*)) { - { normalize-space($config:configFile//main:short) } – { $model("title") } -}; - (:~ : generic function to wrap some info from the model in an HTML element via templating :) @@ -330,102 +171,6 @@ declare function wdb:wrapText ( $node as node(), $model as map(*), $key as xs:st element { node-name($node) } { $model($key) } }; -(:~ - : return the body - :) -declare function wdb:getContent($node as node(), $model as map(*)) { - let $file := if ( ends-with($model?fileLoc, 'wdbmeta.xml') ) - then $model?fileLoc || '#' || $model?id - else $model?fileLoc - - let $xslt := if (string-length($model?xslt) = 0) - then wdbErr:error(map {"code": "wdbErr:wdb0002", "model": $model}) - else $model("xslt") - - let $params := - - - - - - { - if ($model("view") != '') - then - else () - } - { - if ($model("p") != '') - then - else () - } - - - - (: do not stop transformation on ambiguous rule match and similar warnings :) - let $attr := - - (: TODO: use generic processXSL function (currently in restFiles.xql but to be moved) so there is only one way of doing things :) - (: TODO: consider removing this entirely and instead load content of main via AJAX :) - return - try { -
    - { transform:transform(doc($file), doc($xslt), $params, $attr, "") } - { wdb:getLeftFooter($node, $model) } -
    - } catch * { (util:log("error", - - {$file} - {$xslt} - {$params} - {$attr} - {$err:code || ': ' || $err:description} - {$err:module || '@' || $err:line-number ||':'||$err:column-number} - {$err:additional} - ), - wdbErr:error(map{"code": "wdbErr:wdb1001", "model": $model, "additional": $params, "error": map { - "code": $err:code, "desc": $err:description, "module": $err:module, "line": $err:line-number, - "col": $err:column-number, "add": $err:additional - }})) - } -}; - -(:~ - : return the global (i.e., full width) footer - : - : order of evaluation: - : 1. {$config:data}/resources/mainFooter.html - : 2. {$projectResources}/mainFooter.html - : 3. wdbPF:getMainFooter#1 - :) -declare function wdb:getGlobalFooter($node as node(), $model as map(*)) { - if ( doc-available($config:data || "/resources/mainFooter.html") ) - then templates:apply(doc($config:data || "/resources/mainFooter.html"), $wdb:lookup, $model) - else if ( doc-available($model?projectResources || '/mainFooter.html') ) - then templates:apply(doc($model?projectResources || '/mainFooter.html'), $wdb:lookup, $model) - else if ( wdb:findProjectFunction($model, "wdbPF:getMainFooter", 1) ) then - (wdb:getProjectFunction($model, "wdbPF:getMainFooter", 1))($model) - else () -}; - -declare function wdb:getLeftFooter($node as node(), $model as map(*)) as element()? { - if (doc-available($model?projectResources || "/footer.html")) then - templates:apply(doc($model?projectResources || "/footer.html"), $wdb:lookup, $model) - else if (wdb:findProjectFunction($model, "wdbPF:getProjectFooter", 1)) then - (wdb:getProjectFunction($model, "wdbPF:getProjectFooter", 1))($model) - else if (doc-available($config:edocBaseDB || "/resources/footer.html")) then - templates:apply(doc($config:edocBaseDB || "/resources/footer.html"), $wdb:lookup, $model) - else () -}; -declare function wdb:getRightFooter($node as node(), $model as map(*)) as element()? { - if (doc-available($model?projectResources || "/projectRightFooter.html")) then - templates:apply(doc($model?projectResources || "/projectRightFooter.html"), $wdb:lookup, $model) - else if (wdb:findProjectFunction($model, "wdbPF:getProjectRightFooter", 1)) then - (wdb:getProjectFunction($model, "wdbPF:getProjectRightFooter", 1))($model) - else if (doc-available($config:data || "/resources/rightFooter.html")) then - templates:apply(doc($config:data || "/resources/rightFooter.html"), $wdb:lookup, $model) - else () -}; - declare function wdb:getAnnotationDialogue ( $node as node(), $model as map(*) ) { () }; diff --git a/edoc/modules/view.xql b/edoc/modules/view.xql index 3e47f03b..d92d8e43 100644 --- a/edoc/modules/view.xql +++ b/edoc/modules/view.xql @@ -22,6 +22,7 @@ import module namespace wdbpq = "https://github.com/dariok/wdbplus/pquery import module namespace wdbs = "https://github.com/dariok/wdbplus/stats" at "stats.xqm"; import module namespace wdbSearch = "https://github.com/dariok/wdbplus/wdbs" at "search.xqm"; import module namespace wdbst = "https://github.com/dariok/wdbplus/start" at "start.xqm"; +import module namespace wdbv = "https://github.com/dariok/wdbplus/mView" at "view.xqm"; declare option output:method "html5"; declare option output:media-type "text/html"; diff --git a/edoc/modules/view.xqm b/edoc/modules/view.xqm new file mode 100644 index 00000000..0f78188b --- /dev/null +++ b/edoc/modules/view.xqm @@ -0,0 +1,264 @@ +(:~ + : VIEW.XQM + : + : Central functions that create the representation of an XML in HTML. These are mostly called by the templating system + : and could also be used by REST functions. + : + : 2025-01-30 — dario.kampkaspar@tu-darmstadt.de — Created from functions as previously contained in app.xqm + :) + +xquery version "3.1"; + +module namespace wdbv = "https://github.com/dariok/wdbplus/mView"; + +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; + +(:~ + : Templating function; called from layout.html. Entry point for content pages + :) +declare + %templates:default("view", "") + %templates:default("p", "") +function wdbv:getEE ( $node as node(), $model as map(*), $id as xs:string, $view as xs:string, $p as xs:string ) as item()* { + try { + let $newModel := wdb:populateModel($id, $view, $model, $p) + + return if ( contains($newModel?fileLoc, 'http') ) then + $newModel + else + let $lastModified := + wdbFiles:getModificationDate($newModel?filePathInfo?collectionPath, $newModel?filePathInfo?fileName) + => wdbFiles:ietfDate() + + let $requestedModified := ( + request:get-attribute("if-modified"), + request:get-header("If-Modified-Since") + )[1] + let $isModified := if ( $requestedModified != '' ) + then wdbFiles:evaluateIfModifiedSince($id, $requestedModified) + else 200 + + return if ( count($newModel) = 1 and $isModified = 200 ) + then ( + response:set-header("Last-Modified", $lastModified), + + { + attribute lang { if ( $newModel?language ) then $newModel?language else "de" }, + templates:process($node/node(), $newModel) + } + + ) + else if ( $isModified = 304 ) then + response:set-status-code(304) + else + + +
    +

    An unknown error has occurred

    +
    + + { util:log("error", $newModel) } + + } catch * { + util:log("error", $err:code || ': ' || $err:description), + wdbErr:error(map { + "code": $err:code, + "model": $model, + "err:value": $err:value, + "err:description": $err:description, + "err:additional": $err:additional, + "location": $err:module || '@' || $err:line-number || ':' || $err:column-number + }) + } +}; + +(: ~ + : Create the head for HTML files served via the templating system + : @created 2018-02-02 DK + :) +declare function wdb:getHead ( $node as node(), $model as map(*) ) as element(head) { + + + + + + + + { $model("title") } – { normalize-space($config:configFile//config:short) } + + { + if ( wdb:findProjectFunction($model, "wdbPF:overrideCssJs", 1) ) then + (wdb:getProjectFunction($model, "wdbPF:overrideCssJs", 1))($model) + else ( + , + if ( util:binary-doc-available($config:data || "/resources/wdb.css") ) + then + else (), + , + if ( util:binary-doc-available($config:data || "/resources/view.css") ) + then + else (), + wdb:getBlob($node, $model, 'jquery-ui-css'), + wdb:getProjectFiles($node, $model, 'css'), + wdb:getBlob($node, $model, 'jquery'), + wdb:getBlob($node, $model, 'jquery-ui-js'), + , + , + , + if ( util:binary-doc-available($config:data || "/resources/function.js") ) + then + else (), + wdb:getProjectFiles($node, $model, 'js') + ) + } + +}; + +(:~ + : return the header - if there is a project specific function, use it + : + : order of evaluation: + : 1. {$projectResources}/header.html – this must contain one html:header, the + : contents of which will be sent through the templating system + : 2. instance or project specific wdbPF:getHeader#1 + : 3. evaluation of all 4 constituents of the header in a row + : a) wdbPF:getHeaderLeft#1 or {$config:data}/resources/headerLeft.html or empty html:p + : b) wdbPF:getHeaderCentre#1 or {$config:data}/resources/headerCentre.html or html:h1 + : c) wdbPF:getHeaderMenu#1 or {$config:data}/resources/headerMenu.html or html:button + : d) wdbPF:getHeaderRight#1 or {$config:data}/resources/headerRight.html or empty html:p + :) +declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element() { +
    { + if ( doc-available($model?projectResources || '/header.html') ) + then templates:apply(doc($model?projectResources || '/header.html')/header/*, $wdb:lookup, $model) + else if ( wdb:findProjectFunction($model, 'wdbPF:getHeader', 1) ) then + (wdb:getProjectFunction($model, "wdbPF:getHeader", 1))($model) + else ( + , +
    { + if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderCentre', 1) ) then + (wdb:getProjectFunction($model, "wdbPF:getHeaderCentre", 1))($model) + else if ( doc-available($config:data || "/resources/headerCentre.html") ) then + templates:apply(doc($config:data || "/resources/headerCentre.html"), $wdb:lookup, $model)/* + else +

    {$model("title")}

    + }
    , + , + + ) + }
    +}; + +(:~ + : return the body + :) +declare function wdb:getContent ( $node as node(), $model as map ) { + let $file := if ( ends-with($model?fileLoc, 'wdbmeta.xml') ) + then $model?fileLoc || '#' || $model?id + else $model?fileLoc + + let $xslt := if (string-length($model?xslt) = 0) + then wdbErr:error(map {"code": "wdbErr:wdb0002", "model": $model}) + else $model("xslt") + + let $params := + + + + + + { + if ($model("view") != '') + then + else () + } + { + if ($model("p") != '') + then + else () + } + + + + (: do not stop transformation on ambiguous rule match and similar warnings :) + let $attr := + + (: TODO: use generic processXSL function (currently in restFiles.xql but to be moved) so there is only one way of doing things :) + (: TODO: consider removing this entirely and instead load content of main via AJAX :) + return + try { +
    + { transform:transform(doc($file), doc($xslt), $params, $attr, "") } + { wdb:getLeftFooter($node, $model) } +
    + } catch * { (util:log("error", + + {$file} + {$xslt} + {$params} + {$attr} + {$err:code || ': ' || $err:description} + {$err:module || '@' || $err:line-number ||':'||$err:column-number} + {$err:additional} + ), + wdbErr:error(map{"code": "wdbErr:wdb1001", "model": $model, "additional": $params, "error": map { + "code": $err:code, "desc": $err:description, "module": $err:module, "line": $err:line-number, + "col": $err:column-number, "add": $err:additional + }})) + } +}; + +(:~ + : return the global (i.e., full width) footer + : + : order of evaluation: + : 1. {$config:data}/resources/mainFooter.html + : 2. {$projectResources}/mainFooter.html + : 3. wdbPF:getMainFooter#1 + :) +declare function wdbv:getGlobalFooter ( $node as node(), $model as map(*) ) as element(footer)? { + if ( doc-available($config:data || "/resources/mainFooter.html") ) + then templates:apply(doc($config:data || "/resources/mainFooter.html"), $wdb:lookup, $model) + else if ( doc-available($model?projectResources || '/mainFooter.html') ) + then templates:apply(doc($model?projectResources || '/mainFooter.html'), $wdb:lookup, $model) + else if ( wdb:findProjectFunction($model, "wdbPF:getMainFooter", 1) ) then + (wdb:getProjectFunction($model, "wdbPF:getMainFooter", 1))($model) + else () +}; +declare function wdbv:getLeftFooter ( $node as node(), $model as map(*) ) as element(footer)? { + if (doc-available($model?projectResources || "/footer.html")) then + templates:apply(doc($model?projectResources || "/footer.html"), $wdb:lookup, $model) + else if (wdb:findProjectFunction($model, "wdbPF:getProjectFooter", 1)) then + (wdb:getProjectFunction($model, "wdbPF:getProjectFooter", 1))($model) + else if (doc-available($config:edocBaseDB || "/resources/footer.html")) then + templates:apply(doc($config:edocBaseDB || "/resources/footer.html"), $wdb:lookup, $model) + else () +}; +declare function wdbv:getRightFooter ( $node as node(), $model as map(*) ) as element(footer)? { + if (doc-available($model?projectResources || "/projectRightFooter.html")) then + templates:apply(doc($model?projectResources || "/projectRightFooter.html"), $wdb:lookup, $model) + else if (wdb:findProjectFunction($model, "wdbPF:getProjectRightFooter", 1)) then + (wdb:getProjectFunction($model, "wdbPF:getProjectRightFooter", 1))($model) + else if (doc-available($config:data || "/resources/rightFooter.html")) then + templates:apply(doc($config:data || "/resources/rightFooter.html"), $wdb:lookup, $model) + else () +}; diff --git a/edoc/view.html b/edoc/view.html index 7a12759e..490ae3dd 100644 --- a/edoc/view.html +++ b/edoc/view.html @@ -1,12 +1,12 @@ - - + + head set by app.xqm
    -
    -
    +
    +
    -
    +
    -
    +
    - \ No newline at end of file + From e9bb3d1a0e1a61fd29c5cefe2bd5be725a6c0c20 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 5 Feb 2025 15:59:49 +0100 Subject: [PATCH 079/151] populateModel is now a generalised function Cf. #511 #313 --- edoc/admin/admin.xqm | 33 ++------- edoc/modules/app.xqm | 97 +----------------------- edoc/modules/function.xqm | 144 +----------------------------------- edoc/modules/model.xqm | 152 ++++++++++++++++++++++++++++++++++++++ edoc/rest/rest-coll.xql | 18 ++--- edoc/rest/rest-files.xql | 15 ++-- 6 files changed, 183 insertions(+), 276 deletions(-) create mode 100644 edoc/modules/model.xqm diff --git a/edoc/admin/admin.xqm b/edoc/admin/admin.xqm index aca61d06..356a8898 100644 --- a/edoc/admin/admin.xqm +++ b/edoc/admin/admin.xqm @@ -2,9 +2,10 @@ xquery version "3.1"; module namespace wdbAdmin = "https://github.com/dariok/wdbplus/Admin"; -import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xml"; -import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "../modules/error.xqm"; -import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "../modules/wdb-files.xqm"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xqm"; +import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "../modules/error.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "../modules/wdb-files.xqm"; +import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "../modules/model.xqm"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare namespace sm = "http://exist-db.org/xquery/securitymanager"; @@ -12,35 +13,15 @@ declare namespace templates = "http://exist-db.org/xquery/html-templating"; declare namespace wdb = "https://github.com/dariok/wdbplus/wdb"; (:~ - : populate the model for functions pages (similar but not identical to wdb:populateModel) + : populate the model for admin pages : : @param $ed The ID of a _project_ : @return The model :) declare %templates:default("ed", "data") -function wdbAdmin:start ( $node as node(), $model as map(*), $ed as xs:string ) { - try { - let $pathToEd := (wdbFiles:getFullPath($ed))?projectPath - - (: The meta data are taken from wdbmeta.xml :) - let $infoFileLoc := $pathToEd || "/wdbmeta.xml" - , $title := normalize-space((doc($infoFileLoc)//meta:title)[1]) - - return map { - "ed": $ed, - "infoFileLoc": $infoFileLoc, - "page": substring-after(request:get-uri(), "admin/"), - "pathToEd": $pathToEd, - "title": $title, - "auth": sm:id()/sm:id - } - } catch * { - util:log("error", "No collection found for project ID " || $ed), - map { - "ed": "" - } - } +function wdbAdmin:start ( $node as node(), $model as map(*), $ed as xs:string ) as item()* { + wdbm:populateModel("", $ed, "", "", "") }; declare function wdbAdmin:getEd ( $node as node(), $model as map(*) ) as element(meta) { diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index d96a7c0a..65e1d270 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -52,13 +52,13 @@ declare function wdb:test( $node as node(), $model as map(*) ) as node() {
    -

    populateModel (app.xqm)

    +

    populateModel (model.xqm)

    { if (exists($model?id)) - then - let $computedModel := wdb:populateModel($model?id, "", map {}) - return wdbErr:get($computedModel, "") + then "currently, no model view is available" + (: let $computedModel := wdb:populateModel($model?id, "", map {}) + return wdbErr:get($computedModel, "") :) else "Keine ID zur Auswertung vorhanden" }
    @@ -84,86 +84,6 @@ declare function wdb:test( $node as node(), $model as map(*) ) as node() { (: END FUNCTIONS TO GET SERVER INFO :) (: FUNCTIONS USED BY THE TEMPLATING SYSTEM :) -(:~ - : Populate the model with the most important global settings when displaying a file - : Moved to a separate function as this one may be called by other functions, too - : - : @param $id the id for the file to be displayed - : @param $view a string to be passed to the processing XSLT - : @param $p general parameter to be passed to the processing XSLT - : @return a map; in case of error, an HTML file - :) -declare function wdb:populateModel ( $id as xs:string, $view as xs:string, $model as map(*) ) as item()* { - wdb:populateModel($id, $view, $model, "") -}; -declare function wdb:populateModel ( $id as xs:string, $view as xs:string, $model as map(*), $p as xs:string ) as item()* { - let $filePathInfo := wdbFiles:getFullPath($id) - , $pathToFile := if ( map:keys($filePathInfo) = 'fileURL' ) - then - $filePathInfo?fileURL - else - $filePathInfo?collectionPath || '/' || $filePathInfo?fileName - , $pathToEd := $filePathInfo?projectPath - , $infoFileLoc := $filePathInfo?projectPath || '/wdbmeta.xml' - - let $ed := string(doc($infoFileLoc)/meta:projectMD/@xml:id) - - let $xsl := if ( $filePathInfo?fileName = "wdbmeta.xml" ) - then - (: TODO get path to XSL via function (use what’s in rest-files.xql) :) - xs:anyURI($config:data || '/resources/nav.xsl') - else wdb:getXslFromWdbMeta($infoFileLoc, $id, 'html') - - let $xslt := if (doc-available($xsl)) - then $xsl - else if (doc-available($pathToEd || '/' || $xsl)) - then $pathToEd || '/' || $xsl - else "" - - let $doc := doc($pathToFile) - , $title := normalize-space(($doc//tei:title)[1]) - , $language := normalize-space($doc//tei:langUsage/tei:language[1]/@ident) - - let $proFile := $filePathInfo?mainProject || "/project.xqm" - , $mainProject := $filePathInfo?mainProject - , $resource := $filePathInfo?mainProject || "/resources/" - - let $projectFunctions := for $function in doc($mainProject || "project-functions.xml")//function - return $function/@name || '#' || count($function/argument) - , $instanceFunctions := for $function in doc($config:data || "/instance-functions.xml")//function - return $function/@name || '#' || count($function/argument) - - let $header := if ( request:exists() ) - then map:merge( for $header in request:get-header-names() return map:entry($header, request:get-header($header)) ) - else () - , $requestUrl := if ( request:exists() ) - then request:get-url() - else () - - (: TODO read global parameters from config.xml and store as a map :) - let $map := map { - "ed": $ed, - "fileLoc": $pathToFile, - "filePathInfo": $filePathInfo, - "functions": map { "project": $projectFunctions, "instance": $instanceFunctions }, - "header": $header, - "id": $id, - "infoFileLoc": $infoFileLoc, - "language": $language, - "mainEd": substring-after($mainProject, 'data/') => substring-before('/'), - "p": $p, - "pathToEd": $pathToEd, - "projectFile": $proFile, - "projectResources": $resource, - "requestUrl": $requestUrl, - "title": $title, - "view": $view, - "xslt": $xslt - } - - return map:merge( ($model, $map) ) -}; - (:~ : generic function to wrap some info from the model in an HTML element via templating :) @@ -398,15 +318,6 @@ declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:st (: As we check from most specific to default, the first command in the sequence is the right one :) return normalize-space($sel[1]) }; - -(: we need a lookup function for the templating system to work :) -declare variable $wdb:lookup := function($functionName as xs:string, $arity as xs:int) { - try { - function-lookup(xs:QName($functionName), $arity) - } catch * { - () - } -}; (: END LOCAL HELPER FUNCTIONS :) (: HELPERS FOR REST AND HTTP REQUESTS :) diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 0f58b9e6..ab604ab0 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -2,7 +2,7 @@ xquery version "3.1"; module namespace wdbfp = "https://github.com/dariok/wdbplus/functionpages"; -import module namespace config = "https://github.com/dariok/wdbplus/config" at "config.xml"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; import module namespace request = "http://exist-db.org/xquery/request"; import module namespace templates = "http://exist-db.org/xquery/html-templating"; import module namespace util = "http://exist-db.org/xquery/util"; @@ -12,6 +12,7 @@ import module namespace wdbAddinMain = "https://github.com/dariok/wdbplus/addins import module namespace wdbe = "https://github.com/dariok/wdbplus/entity" at "entity.xqm"; import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; +import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "model.xqm"; import module namespace wdbpq = "https://github.com/dariok/wdbplus/pquery" at "pquery.xqm"; import module namespace wdbs = "https://github.com/dariok/wdbplus/stats" at "stats.xqm"; import module namespace wdbSearch = "https://github.com/dariok/wdbplus/wdbs" at "search.xqm"; @@ -20,145 +21,6 @@ import module namespace xstring = "https://github.com/dariok/XStringUtils" declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; -(:~ - : populate the model for functions pages (similar but not identical to wdb:populateModel) - : - : @param $id The ID of a _resource_ - : @param $ed The ID of a _project_ - : @param $p A string or a JSON-like string containing additional query parameters - : @param $q The main query parameter - : @return The model - :) -declare function wdbfp:populateModel ( $id as xs:string?, $ed as xs:string, $p as xs:string?, $q as xs:string? ) as item()+ { - try { - if ( request:exists() and contains(request:get-uri(), 'addins') ) then - let $addinName := substring-before(substring-after(request:get-uri(), 'addins/'), '/') - , $path := $config:edocBaseDB || "/addins/" || $addinName - , $pp := try { - parse-json($p) - } catch * { - normalize-space($p) - } - , $functions := load-xquery-module("https://github.com/dariok/wdbplus/projectFiles", map { "location-hints": $config:data || "/instance.xqm" }) - - return map { - "requestUrl": request:get-uri(), - "pathToEd": $path, - "p": $pp, - "job": $q, - "id": $id, - "functions": $functions?functions, - "ed": $ed, - "auth": sm:id()/sm:id - } - else if ( request:exists() and request:get-uri() => ends-with('/toc.html') ) then - map { - "auth": sm:id()/sm:id, - "title": $config:configFile//*:name || " – Table of Contents", - "pathToEd": $config:data - } - else if ( request:exists() and request:get-uri() => ends-with('/entity.html') ) then - ( - util:log("error", "function.xqm called for an entity"), - error(xs:QName("wdbErr:wdb3200")) - ) - else if ( $id = "" ) then - (: no ID: related to a project :) - let $pathInfo := if ( $ed = "" ) - then map { - "projectPath": $config:data, - "collectionPath": $config:data, - "fileName": $config:data || "/wdbmeta.xml", - "mainProject": $config:data - } - else (wdbFiles:getFullPath($ed)) - , $infoFileLoc := $pathInfo?projectPath || "wdbmeta.xml" (: projectPath is derived from the path to wdbmeta.xml :) - , $pp := try { - parse-json($p) - } catch * { - normalize-space($p) - } - let $proFile := $pathInfo?mainProject || "/project.xqm" - , $mainProject := $pathInfo?mainProject - , $resource := $pathInfo?mainProject || "/resources/" - - let $projectFunctions := for $function in doc($mainProject || "/project-functions.xml")//function - return $function/@name || '#' || count($function/argument) - , $instanceFunctions := for $function in doc($config:data || "/instance-functions.xml")//function - return $function/@name || '#' || count($function/argument) - - return map { - "p": $pp, - "pathToEd": $pathInfo?projectPath, - "q": $q, - "ed": $ed, - "auth": sm:id()/sm:id, - "functions": map { "project": $projectFunctions, "instance": $instanceFunctions }, - "infoFileLoc": $infoFileLoc, - "mainEd": substring-after($mainProject, 'data/'), - "title": string(doc($infoFileLoc)//meta:title[1]), - "projectFile": $proFile, - "projectResources": $resource, - "requestUrl": if ( request:exists() ) then request:get-url() else "" - } - else - let $map := wdb:populateModel($id, "", map{}) - let $pp := try { - parse-json($p) - } catch * { - normalize-space($p) - } - - return if ( $map instance of map(*) ) then - let $mmap := map { - "title": (doc($map("infoFileLoc"))//*:title)[1]/text(), - "q": $q, - "p": $pp, - "id": $id, - "ed": $ed, - "auth": sm:id()/sm:id - } - return map:merge(($map, $mmap)) - else $map (: if it is an element, this usually means that populateModel has returned an error :) - } catch *:wdb0200 { - (: app.xqm: no file with ID :) - error( - xs:QName("wdbErr:wdb0200"), - "project not found", - map { - "id": $id, - "ed": $ed, - "p": $p, - "q": $q, - "wdb:data": $config:data, - "request": if ( request:exists() ) then request:get-url() else "" - } - ) - } catch * { - let $errorMap := map { - "code": "wdbErr:wdb3001", - "id": $id, - "ed": $ed, - "p": $p, - "q": $q, - "wdb:data": $config:data, - "errC": $err:code, - "errA": $err:additional, - "errM": $err:description, - "errLocation": $err:module || '@' || $err:line-number ||':'||$err:column-number, - "request": request:get-url() - } - return ( - util:log("error", $errorMap), - error( - xs:QName("wdbErr:wdb3001"), - "error creating map in function.xqm", - $errorMap - ) - ) - } -}; - (:~ : create the outer HTML shell for a function page, including an html:lang attribute :) @@ -170,7 +32,7 @@ declare function wdbfp:start ( $node as node(), $model as map(*), $id as xs:string, $ed as xs:string, $p as xs:string, $q as xs:string ) as item()* { try { - let $newModel := wdbfp:populateModel($id, $ed, $p, $q) + let $newModel := wdbm:populateModel($id, $ed, "", $p, $q) (: TODO: use a function to get the actual content language :) return diff --git a/edoc/modules/model.xqm b/edoc/modules/model.xqm new file mode 100644 index 00000000..cdb1ecd9 --- /dev/null +++ b/edoc/modules/model.xqm @@ -0,0 +1,152 @@ +(:~ + : MODEL.XQM + : + : Create the global map(*) for $model + : + : 2025-02-03 — dario.kampkaspar@tu-darmstadt.de — Created from functions previously contained in app.xqm and function.xqm + :) + +xquery version "3.1"; + +module namespace wdbm = "https://github.com/dariok/wdbplus/model"; + +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; + +declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; +declare namespace request = "http://exist-db.org/xquery/request"; +declare namespace sm = "http://exist-db.org/xquery/securitymanager"; +declare namespace tei = "http://www.tei-c.org/ns/1.0"; + +(:~ + : Populate the model with the most important global settings when displaying a file + : + : @param $id the id for the file to be displayed + : @param $view a string to be passed to the processing XSLT + : @param $model the pre-generated (empty) model + : @param $p general parameter to be passed to the processing XSLT + : @return a map; in case of error, an HTML file + :) + declare function wdbm:populateModel ( $id as xs:string, $ed as xs:string, + $view as xs:string, $p as xs:string, $q as xs:string ) as item()* { + try { + let $filePathInfo := if ( $ed = "" and $id = "" ) + then + map { + "projectPath": $config:data, + "collectionPath": $config:data, + "fileName": $config:data || "/wdbmeta.xml", + "mainProject": $config:data + } + else + wdbFiles:getFullPath( ($id, $ed)[1] ) (: $id and $ed should never be present at the same time :) + , $pathToFile := if ( map:keys($filePathInfo) = 'fileURL' ) (: fileURL: URL to a file located on a peer :) + then $filePathInfo?fileURL + else $filePathInfo?collectionPath || '/' || $filePathInfo?fileName + + (: URI-endcoded JSON parameter :) + let $parsedParam := try { + parse-json($p) + } catch * { + normalize-space($p) + } + + (: the project in question; if $ed is given, this has to be the right one; else get it from the path info; + in case of conflict, $ed will win but this should not happen :) + let $projectID := if ( $ed != "" ) + then $ed + else string(doc($filePathInfo?projectPath || '/wdbmeta.xml')/meta:projectMD/@xml:id) + , $projectFile := if ( $projectID != "data" ) + then $filePathInfo?mainProject || "/project.xqm" + else "" + + let $projectFunctions := for $function in doc($filePathInfo?mainProject || "project-functions.xml")//function + return $function/@name || '#' || count($function/argument) + , $instanceFunctions := for $function in doc($config:data || "/instance-functions.xml")//function + return $function/@name || '#' || count($function/argument) + + let $xsl := if ( $filePathInfo?fileName = "wdbmeta.xml" ) + then + (: TODO get path to XSL via function – unify with REST function (rest-files) :) + xs:anyURI($config:data || '/resources/nav.xsl') + else + wdb:getXslFromWdbMeta($filePathInfo?projectPath || '/wdbmeta.xml', $id, 'html') + + let $xslt := if ( doc-available($xsl) ) + then $xsl + else if ( doc-available($filePathInfo?projectPath || '/' || $xsl) ) + then $filePathInfo?projectPath || '/' || $xsl + else "" + + let $doc := doc($pathToFile) + , $title := if ( $id != "" ) + then normalize-space(($doc//tei:title)[1]) + else normalize-space($doc//meta:title[1]) + , $language := if ( $id != "" ) + then normalize-space($doc//tei:langUsage/tei:language[1]/@ident) + else normalize-space($doc//meta:language[1]) + + let $requestHeaders := if ( request:exists() ) + then map:merge( for $header in request:get-header-names() return map:entry($header, request:get-header($header)) ) + else () + , $requestUrl := if ( request:exists() ) + then request:get-url() + else () + + (: TODO read global parameters from config.xml and store as a map :) + return map { + "auth": sm:id()/sm:id, + "ed": $projectID, + "fileLoc": $pathToFile, + "filePathInfo": $filePathInfo, + "functions": map { "project": $projectFunctions, "instance": $instanceFunctions }, + "header": $requestHeaders, + "id": $id, + "infoFileLoc": $filePathInfo?projectPath || '/wdbmeta.xml', + "language": $language, + "mainEd": $filePathInfo?mainProject, + "p": $parsedParam, + "pathToEd": $filePathInfo?projectPath, + "projectFile": $projectFile, + "projectResources": $filePathInfo?mainProject || "/resources/", + "q": $q, + "requestUrl": $requestUrl, + "title": $title, + "view": $view, + "xslt": $xslt + } + } catch *:wdb0000 { (: wdb-files.xqm: no file with ID :) + error( + xs:QName("wdbErr:wdb0200"), + "file or project not found", + map { + "code": "wdbErr:wdb0000", + "id": $id, + "ed": $ed, + "p": $p, + "q": $q, + "wdb:data": $config:data, + "request": if ( request:exists() ) then request:get-url() else "" + } + ) + } catch * { (: TODO: add more descriptions:) + error( + xs:QName("wdbErr:wdb3001"), + "error creating map", + map { + "code": "wdbErr:wdb3001", + "id": $id, + "ed": $ed, + "p": $p, + "q": $q, + "wdb:data": $config:data, + "errC": $err:code, + "errA": $err:additional, + "errM": $err:description, + "errLocation": $err:module || '@' || $err:line-number || ':' || $err:column-number, + "request": request:get-url() + } + ) + } +}; diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index 891db8f9..a100f687 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -2,14 +2,14 @@ xquery version "3.1"; module namespace wdbRc = "https://github.com/dariok/wdbplus/RestCollections"; -import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xqm"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "../modules/app.xqm"; -import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "../modules/error.xqm"; -import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "../modules/wdb-files.xqm"; -import module namespace wdbfp = "https://github.com/dariok/wdbplus/functionpages" at "../modules/function.xqm"; -import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "../rest/common.xqm"; -import module namespace wdbRMi = "https://github.com/dariok/wdbplus/RestMIngest" at "../rest/ingest.xqm"; -import module namespace xstring = "https://github.com/dariok/XStringUtils" at "../include/xstring/string-pack.xql"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xqm"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "../modules/app.xqm"; +import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "../modules/error.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "../modules/wdb-files.xqm"; +import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "../modules/model.xqm"; +import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; +import module namespace wdbRMi = "https://github.com/dariok/wdbplus/RestMIngest" at "ingest.xqm"; +import module namespace xstring = "https://github.com/dariok/XStringUtils" at "../include/xstring/string-pack.xql"; declare namespace http = "http://expath.org/ns/http-client"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; @@ -462,7 +462,7 @@ declare %rest:path("/edoc/collection/{$ed}/nav.html") %rest:header-param("If-Modified-Since", "{$modified}") function wdbRc:getCollectionNavHTML ( $ed as xs:string, $externalModel as map(*)?, $modified as xs:string* ) { - let $model := if ( exists($externalModel) ) then $externalModel else wdbfp:populateModel("", $ed, "", "") + let $model := if ( exists($externalModel) ) then $externalModel else wdbm:populateModel("", $ed, "", "", "") return if ( $modified != '' and wdbFiles:evaluateIfModifiedSince($model?pathToEd, 'wdbmeta.xml', $modified) = 304 ) then diff --git a/edoc/rest/rest-files.xql b/edoc/rest/rest-files.xql index df6dbda1..d783d19c 100644 --- a/edoc/rest/rest-files.xql +++ b/edoc/rest/rest-files.xql @@ -5,8 +5,9 @@ module namespace wdbRf = "https://github.com/dariok/wdbplus/RestFiles"; import module namespace config = "https://github.com/dariok/wdbplus/config" at "../modules/wdb-config.xqm"; import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "../modules/app.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "../modules/wdb-files.xqm"; -import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "../rest/common.xqm"; -import module namespace wdbRMi = "https://github.com/dariok/wdbplus/RestMIngest" at "../rest/ingest.xqm"; +import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "../modules/model.xqm"; +import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; +import module namespace wdbRMi = "https://github.com/dariok/wdbplus/RestMIngest" at "ingest.xqm"; import module namespace xstring = "https://github.com/dariok/XStringUtils" at "../include/xstring/string-pack.xql"; declare namespace http = "http://expath.org/ns/http-client"; @@ -388,8 +389,8 @@ declare %rest:GET %rest:path("/edoc/resource/view/{$id}.{$type}") %rest:query-param("view", "{$view}", "") -function wdbRf:getResourceView ($id as xs:string, $type as xs:string, $view as xs:string*) { - let $model := wdb:populateModel($id, $view, map {}) +function wdbRf:getResourceView ( $id as xs:string, $type as xs:string, $view as xs:string* ) as item()* { + let $model := wdbm:populateModel($id, "", $view, "", "") , $wdbmeta := doc($model?infoFileLoc) (: by definition in wdbmeta.rng and in analogy to the behaviour of view.html: $type maps to process/@target, @@ -573,7 +574,7 @@ function wdbRf:getImages($id as xs:string) { then "File not found or other error: " || $retrFile//http:response/@status else () let $file := $retrFile/tei:TEI - let $map := wdb:populateModel($id, '', map{}) + let $map := wdbm:populateModel($id, "", '', "", "") let $canv := for $fa in $file//tei:surface return wdbRf:image($id, $fa/@xml:id, $map) @@ -601,7 +602,7 @@ function wdbRf:getImageDesc($id as xs:string, $image as xs:string) { else () let $file := $retrFile/tei:TEI - let $map := wdb:populateModel($id, '', map{}) + let $map := wdbm:populateModel($id, "", "", "", "") let $meta := doc($map("infoFileLoc")) let $errors := string-join($errorFile, ' - ') @@ -634,7 +635,7 @@ function wdbRf:getFileManifest ($id as xs:string) { else () let $file := $retrFile/tei:TEI - let $map := wdb:populateModel($id, '', map{}) + let $map := wdbm:populateModel($id, "", "", "", "") let $meta := doc($map("infoFileLoc")) let $title := normalize-space($meta//meta:view[@file = $id]/@label) From 07ed9006c45f6dfc9c3801e824a28b532b09b96b Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 5 Feb 2025 16:04:51 +0100 Subject: [PATCH 080/151] Code maintenance: declare namespaces in cases where eXist just knows --- edoc/modules/addin.xqm | 3 +- edoc/modules/annotations.xqm | 2 ++ edoc/modules/entity.xqm | 7 +++-- edoc/modules/error.xqm | 6 ++-- edoc/modules/pquery.xqm | 2 +- edoc/modules/search.xqm | 5 ++-- edoc/modules/stats.xqm | 2 +- edoc/modules/view.xqm | 57 ++++++++++++++++++++++-------------- edoc/modules/wdb-files.xqm | 8 +++-- edoc/rest/common.xqm | 1 + edoc/rest/rest-entity.xql | 2 ++ 11 files changed, 59 insertions(+), 36 deletions(-) diff --git a/edoc/modules/addin.xqm b/edoc/modules/addin.xqm index ef18b94b..71166b81 100644 --- a/edoc/modules/addin.xqm +++ b/edoc/modules/addin.xqm @@ -5,8 +5,9 @@ xquery version "3.1"; module namespace wdbAddinMain = "https://github.com/dariok/wdbplus/addins-main"; -import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; +import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; +declare namespace request = "http://exist-db.org/xquery/request"; declare namespace wdbadd = "https://github.com/dariok/wdbplus/addins"; (: load the main XQuery module for the requested addin. It is mandatory these implement wdbadd:main($map as map(*)) :) diff --git a/edoc/modules/annotations.xqm b/edoc/modules/annotations.xqm index 830c0cbd..e6a9592c 100644 --- a/edoc/modules/annotations.xqm +++ b/edoc/modules/annotations.xqm @@ -4,6 +4,8 @@ module namespace wdbanno = "https://github.com/dariok/wdbplus/anno"; import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; +declare namespace xmldb = "http://exist-db.org/xquery/xmldb"; + (:~ : return the annotation file for the given user on the given file. : If no user is given, the public annotation file is returned. diff --git a/edoc/modules/entity.xqm b/edoc/modules/entity.xqm index ef0b5ba1..f25b0301 100644 --- a/edoc/modules/entity.xqm +++ b/edoc/modules/entity.xqm @@ -2,10 +2,11 @@ xquery version "3.1"; module namespace wdbe = "https://github.com/dariok/wdbplus/entity"; -import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; -declare namespace tei = "http://www.tei-c.org/ns/1.0"; -declare namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; +declare namespace tei = "http://www.tei-c.org/ns/1.0"; +declare namespace transform = "http://exist-db.org/xquery/transform"; +declare namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; (: $ent ID-String of the entity to be displayed – must be globally unique $ed ID of the project from which specific information shall be drawn :) diff --git a/edoc/modules/error.xqm b/edoc/modules/error.xqm index 4aa082c7..172ac661 100644 --- a/edoc/modules/error.xqm +++ b/edoc/modules/error.xqm @@ -2,9 +2,9 @@ xquery version "3.1"; module namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; -import module namespace response = "http://exist-db.org/xquery/response" at "java:org.exist.xquery.functions.response.ResponseModule"; -import module namespace map = "http://www.w3.org/2005/xpath-functions/map" at "java:org.exist.xquery.functions.map.MapModule"; -import module namespace functx = "http://www.functx.com" at "/db/system/repo/functx-1.0.1/functx/functx.xq"; +declare namespace response = "http://exist-db.org/xquery/response"; +declare namespace map = "http://www.w3.org/2005/xpath-functions/map"; +declare namespace functx = "http://www.functx.com"; declare function wdbErr:error ( $data as map (*) ) as item()+ { diff --git a/edoc/modules/pquery.xqm b/edoc/modules/pquery.xqm index 50347808..d2c3bef2 100644 --- a/edoc/modules/pquery.xqm +++ b/edoc/modules/pquery.xqm @@ -29,7 +29,7 @@ declare function wdbpq:body ( $node as node(), $model as map(*) ) as item()* { wdbErr:error(map { "code": fn:QName('https://github.com/dariok/wdbErr', 'wdbErr:wdb2002'), "path": $path, "model": $model, "err": $err:value, "module": $module, "desc": $err:description, - "available": system:function-available(xs:QName("wdbq:query"), 1), + "available": exists(function-lookup(xs:QName("wdbq:query"), 1)), "functions": inspect:module-functions(xs:anyURI($path)), "location": $err:module || '@' || $err:line-number }) diff --git a/edoc/modules/search.xqm b/edoc/modules/search.xqm index 39d3a851..b2040381 100644 --- a/edoc/modules/search.xqm +++ b/edoc/modules/search.xqm @@ -2,8 +2,9 @@ xquery version "3.1"; module namespace wdbSearch = "https://github.com/dariok/wdbplus/wdbs"; -declare namespace tei = "http://www.tei-c.org/ns/1.0"; -declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; +declare namespace response = "http://exist-db.org/xquery/response"; +declare namespace tei = "http://www.tei-c.org/ns/1.0"; +declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; import module namespace wdbRe = "https://github.com/dariok/wdbplus/RestEntities" at "../rest/rest-entity.xql"; diff --git a/edoc/modules/stats.xqm b/edoc/modules/stats.xqm index 582cc20a..2f7cbafe 100644 --- a/edoc/modules/stats.xqm +++ b/edoc/modules/stats.xqm @@ -6,7 +6,7 @@ import module namespace config = "https://github.com/dariok/wdbplus/config" at import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "/db/apps/edoc/modules/app.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; - +declare namespace sm = "http://exist-db.org/xquery/securitymanager"; declare namespace tei = "http://www.tei-c.org/ns/1.0"; declare namespace templates = "http://exist-db.org/xquery/html-templating"; declare namespace wdbmeta = "https://github.com/dariok/wdbplus/wdbmeta"; diff --git a/edoc/modules/view.xqm b/edoc/modules/view.xqm index 0f78188b..4342f244 100644 --- a/edoc/modules/view.xqm +++ b/edoc/modules/view.xqm @@ -11,8 +11,21 @@ xquery version "3.1"; module namespace wdbv = "https://github.com/dariok/wdbplus/mView"; -import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; +import module namespace request = "http://exist-db.org/xquery/request"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "model.xqm"; + +declare namespace templates = "http://exist-db.org/xquery/html-templating"; + +(: we need a lookup function for the templating system to work :) +declare variable $wdbv:lookup := function($functionName as xs:string, $arity as xs:int) { + try { + function-lookup(xs:QName($functionName), $arity) + } catch * { + () + } +}; (:~ : Templating function; called from layout.html. Entry point for content pages @@ -22,15 +35,11 @@ declare %templates:default("p", "") function wdbv:getEE ( $node as node(), $model as map(*), $id as xs:string, $view as xs:string, $p as xs:string ) as item()* { try { - let $newModel := wdb:populateModel($id, $view, $model, $p) + let $newModel := wdbm:populateModel($id, $view, $model, $p) return if ( contains($newModel?fileLoc, 'http') ) then $newModel else - let $lastModified := - wdbFiles:getModificationDate($newModel?filePathInfo?collectionPath, $newModel?filePathInfo?fileName) - => wdbFiles:ietfDate() - let $requestedModified := ( request:get-attribute("if-modified"), request:get-header("If-Modified-Since") @@ -41,7 +50,11 @@ function wdbv:getEE ( $node as node(), $model as map(*), $id as xs:string, $view return if ( count($newModel) = 1 and $isModified = 200 ) then ( - response:set-header("Last-Modified", $lastModified), + response:set-header( + "Last-Modified", + wdbFiles:getModificationDate($newModel?filePathInfo?collectionPath, $newModel?filePathInfo?fileName) + => wdbFiles:ietfDate() + ), { attribute lang { if ( $newModel?language ) then $newModel?language else "de" }, @@ -77,7 +90,7 @@ function wdbv:getEE ( $node as node(), $model as map(*), $id as xs:string, $view : Create the head for HTML files served via the templating system : @created 2018-02-02 DK :) -declare function wdb:getHead ( $node as node(), $model as map(*) ) as element(head) { +declare function wdbv:getHead ( $node as node(), $model as map(*) ) as element(head) { @@ -128,10 +141,10 @@ declare function wdb:getHead ( $node as node(), $model as map(*) ) as element(he : c) wdbPF:getHeaderMenu#1 or {$config:data}/resources/headerMenu.html or html:button : d) wdbPF:getHeaderRight#1 or {$config:data}/resources/headerRight.html or empty html:p :) -declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element() { +declare function wdbv:getHeader ( $node as node(), $model as map(*) ) as element() {
    { if ( doc-available($model?projectResources || '/header.html') ) - then templates:apply(doc($model?projectResources || '/header.html')/header/*, $wdb:lookup, $model) + then templates:apply(doc($model?projectResources || '/header.html')/header/*, $wdbv:lookup, $model) else if ( wdb:findProjectFunction($model, 'wdbPF:getHeader', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeader", 1))($model) else ( @@ -139,14 +152,14 @@ declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element( if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderLeft', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeaderLeft", 1))($model) else if ( doc-available($config:data || "/resources/headerLeft.html") ) then - templates:apply(doc($config:data || "/resources/headerLeft.html"), $wdb:lookup, $model)/* + templates:apply(doc($config:data || "/resources/headerLeft.html"), $wdbv:lookup, $model)/* else

    }

    ,
    { if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderCentre', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeaderCentre", 1))($model) else if ( doc-available($config:data || "/resources/headerCentre.html") ) then - templates:apply(doc($config:data || "/resources/headerCentre.html"), $wdb:lookup, $model)/* + templates:apply(doc($config:data || "/resources/headerCentre.html"), $wdbv:lookup, $model)/* else

    {$model("title")}

    }
    , @@ -154,14 +167,14 @@ declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element( if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderMenu', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeaderMenu", 1))($model) else if ( doc-available($config:data || "/resources/headerMenu.html") ) then - templates:apply(doc($config:data || "/resources/headerMenu.html"), $wdb:lookup, $model)/* + templates:apply(doc($config:data || "/resources/headerMenu.html"), $wdbv:lookup, $model)/* else )}
    , ) @@ -171,7 +184,7 @@ declare function wdb:getHeader ( $node as node(), $model as map(*) ) as element( (:~ : return the body :) -declare function wdb:getContent ( $node as node(), $model as map ) { +declare function wdbv:getContent ( $node as node(), $model as map ) { let $file := if ( ends-with($model?fileLoc, 'wdbmeta.xml') ) then $model?fileLoc || '#' || $model?id else $model?fileLoc @@ -237,28 +250,28 @@ declare function wdb:getContent ( $node as node(), $model as map ) { :) declare function wdbv:getGlobalFooter ( $node as node(), $model as map(*) ) as element(footer)? { if ( doc-available($config:data || "/resources/mainFooter.html") ) - then templates:apply(doc($config:data || "/resources/mainFooter.html"), $wdb:lookup, $model) + then templates:apply(doc($config:data || "/resources/mainFooter.html"), $wdbv:lookup, $model) else if ( doc-available($model?projectResources || '/mainFooter.html') ) - then templates:apply(doc($model?projectResources || '/mainFooter.html'), $wdb:lookup, $model) + then templates:apply(doc($model?projectResources || '/mainFooter.html'), $wdbv:lookup, $model) else if ( wdb:findProjectFunction($model, "wdbPF:getMainFooter", 1) ) then (wdb:getProjectFunction($model, "wdbPF:getMainFooter", 1))($model) else () }; declare function wdbv:getLeftFooter ( $node as node(), $model as map(*) ) as element(footer)? { if (doc-available($model?projectResources || "/footer.html")) then - templates:apply(doc($model?projectResources || "/footer.html"), $wdb:lookup, $model) + templates:apply(doc($model?projectResources || "/footer.html"), $wdbv:lookup, $model) else if (wdb:findProjectFunction($model, "wdbPF:getProjectFooter", 1)) then (wdb:getProjectFunction($model, "wdbPF:getProjectFooter", 1))($model) else if (doc-available($config:edocBaseDB || "/resources/footer.html")) then - templates:apply(doc($config:edocBaseDB || "/resources/footer.html"), $wdb:lookup, $model) + templates:apply(doc($config:edocBaseDB || "/resources/footer.html"), $wdbv:lookup, $model) else () }; declare function wdbv:getRightFooter ( $node as node(), $model as map(*) ) as element(footer)? { if (doc-available($model?projectResources || "/projectRightFooter.html")) then - templates:apply(doc($model?projectResources || "/projectRightFooter.html"), $wdb:lookup, $model) + templates:apply(doc($model?projectResources || "/projectRightFooter.html"), $wdbv:lookup, $model) else if (wdb:findProjectFunction($model, "wdbPF:getProjectRightFooter", 1)) then (wdb:getProjectFunction($model, "wdbPF:getProjectRightFooter", 1))($model) else if (doc-available($config:data || "/resources/rightFooter.html")) then - templates:apply(doc($config:data || "/resources/rightFooter.html"), $wdb:lookup, $model) + templates:apply(doc($config:data || "/resources/rightFooter.html"), $wdbv:lookup, $model) else () }; diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 0b39edeb..53ca6ec1 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -14,8 +14,10 @@ module namespace wdbFiles = "https://github.com/dariok/wdbplus/files"; import module namespace functx = "http://www.functx.com" at "/db/system/repo/functx-1.0.1/functx/functx.xq"; -declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; -declare namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; +declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; +declare namespace request = "http://exist-db.org/xquery/request"; +declare namespace util = "http://exist-db.org/xquery/util"; +declare namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; (:~ : Return the path to all Resources with a given ID @@ -61,7 +63,7 @@ declare function wdbFiles:getAbsolutePath ( $path as attribute() ) as xs:anyURI : @throws wdbErr:wdb0000 : @throws wdbErr:wdb0001 :) -declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs:string, xs:string?, xs:string? )? { +declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs:string )? { let $file-hint := doc("/db/apps/edoc/index/file-index.xml")/id($id) , $project-hint := doc("/db/apps/edoc/index/project-index.xml")/id($id) , $file := ( doc($file-hint/@project)/id($id), doc($project-hint/@path || "/wdbmeta.xml")/id($id) ) diff --git a/edoc/rest/common.xqm b/edoc/rest/common.xqm index 6aa0102c..44842d6f 100644 --- a/edoc/rest/common.xqm +++ b/edoc/rest/common.xqm @@ -5,6 +5,7 @@ module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon"; declare namespace config = "https://github.com/dariok/wdbplus/config"; declare namespace http = "http://expath.org/ns/http-client"; declare namespace rest = "http://exquery.org/ns/restxq"; +declare namespace xmldb = "http://exist-db.org/xquery/xmldb"; (: To avoid circular dependencies, app.xqm is not imported; all relevant variables must be read from config.xml, or : handed to the functions :) diff --git a/edoc/rest/rest-entity.xql b/edoc/rest/rest-entity.xql index 97fd9c94..c3471394 100644 --- a/edoc/rest/rest-entity.xql +++ b/edoc/rest/rest-entity.xql @@ -6,11 +6,13 @@ import module namespace config = "https://github.com/dariok/wdbplus/config" import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "../modules/wdb-files.xqm"; +declare namespace ft = "http://exist-db.org/xquery/lucene"; declare namespace http = "http://expath.org/ns/http-client"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; declare namespace rest = "http://exquery.org/ns/restxq"; declare namespace tei = "http://www.tei-c.org/ns/1.0"; +declare namespace xmldb = "http://exist-db.org/xquery/xmldb"; declare %rest:GET From a5f7d7753a7e92a6587798812b00cdd0b02e7890 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 5 Feb 2025 16:05:40 +0100 Subject: [PATCH 081/151] =?UTF-8?q?HTML:=20pb=E2=86=92button=20only=20if?= =?UTF-8?q?=20URL=20is=20present?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- edoc/resources/xsl/tei-common.xsl | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/edoc/resources/xsl/tei-common.xsl b/edoc/resources/xsl/tei-common.xsl index a38f0b88..38929a6e 100644 --- a/edoc/resources/xsl/tei-common.xsl +++ b/edoc/resources/xsl/tei-common.xsl @@ -322,7 +322,7 @@ - + @@ -332,19 +332,34 @@ + + + + + + + + + + + + + + + + + + - - - + From 72641a57fba8ab0cf206c179e3408cbfbedc3834 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 6 Feb 2025 12:26:55 +0100 Subject: [PATCH 082/151] small bug fixes re extracting populateModel Cf. #511 --- edoc/admin/admin.xqm | 2 +- edoc/modules/error.xqm | 4 ++-- edoc/modules/function.xqm | 15 +++++++++------ edoc/modules/model.xqm | 3 ++- edoc/modules/view.xql | 1 - edoc/modules/view.xqm | 32 ++++++++++++++++++-------------- 6 files changed, 32 insertions(+), 25 deletions(-) diff --git a/edoc/admin/admin.xqm b/edoc/admin/admin.xqm index 356a8898..7c5af798 100644 --- a/edoc/admin/admin.xqm +++ b/edoc/admin/admin.xqm @@ -21,7 +21,7 @@ declare namespace wdb = "https://github.com/dariok/wdbplus/wdb"; declare %templates:default("ed", "data") function wdbAdmin:start ( $node as node(), $model as map(*), $ed as xs:string ) as item()* { - wdbm:populateModel("", $ed, "", "", "") + wdbm:populateModel((), $ed, "", "", "") }; declare function wdbAdmin:getEd ( $node as node(), $model as map(*) ) as element(meta) { diff --git a/edoc/modules/error.xqm b/edoc/modules/error.xqm index 172ac661..7fb32b89 100644 --- a/edoc/modules/error.xqm +++ b/edoc/modules/error.xqm @@ -2,10 +2,10 @@ xquery version "3.1"; module namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; +import module namespace functx = "http://www.functx.com"; + declare namespace response = "http://exist-db.org/xquery/response"; declare namespace map = "http://www.w3.org/2005/xpath-functions/map"; -declare namespace functx = "http://www.functx.com"; - declare function wdbErr:error ( $data as map (*) ) as item()+ { let $error := switch ( xs:string($data("code")) ) diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index ab604ab0..59485c4a 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -27,16 +27,19 @@ declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; declare %templates:default("q", "") %templates:default("p", "") - %templates:default("id", "") - %templates:default("ed", "") -function wdbfp:start ( $node as node(), $model as map(*), $id as xs:string, $ed as xs:string, $p as xs:string, +function wdbfp:start ( $node as node(), $model as map(*), $id as xs:string?, $ed as xs:string?, $p as xs:string, $q as xs:string ) as item()* { try { - let $newModel := wdbm:populateModel($id, $ed, "", $p, $q) + let $newModel := map:merge(( + wdbm:populateModel($id, $ed, "", $p, $q), + $model + )) + , $language := if ( $newModel?language != "" ) + then $newModel?language + else "sco" - (: TODO: use a function to get the actual content language :) return - + { for $h in $node/* return if ( $h/*[@data-template] ) diff --git a/edoc/modules/model.xqm b/edoc/modules/model.xqm index cdb1ecd9..c8315fc5 100644 --- a/edoc/modules/model.xqm +++ b/edoc/modules/model.xqm @@ -12,6 +12,7 @@ module namespace wdbm = "https://github.com/dariok/wdbplus/model"; import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; @@ -28,7 +29,7 @@ declare namespace tei = "http://www.tei-c.org/ns/1.0"; : @param $p general parameter to be passed to the processing XSLT : @return a map; in case of error, an HTML file :) - declare function wdbm:populateModel ( $id as xs:string, $ed as xs:string, + declare function wdbm:populateModel ( $id as xs:string?, $ed as xs:string?, $view as xs:string, $p as xs:string, $q as xs:string ) as item()* { try { let $filePathInfo := if ( $ed = "" and $id = "" ) diff --git a/edoc/modules/view.xql b/edoc/modules/view.xql index d92d8e43..3e47f03b 100644 --- a/edoc/modules/view.xql +++ b/edoc/modules/view.xql @@ -22,7 +22,6 @@ import module namespace wdbpq = "https://github.com/dariok/wdbplus/pquery import module namespace wdbs = "https://github.com/dariok/wdbplus/stats" at "stats.xqm"; import module namespace wdbSearch = "https://github.com/dariok/wdbplus/wdbs" at "search.xqm"; import module namespace wdbst = "https://github.com/dariok/wdbplus/start" at "start.xqm"; -import module namespace wdbv = "https://github.com/dariok/wdbplus/mView" at "view.xqm"; declare option output:method "html5"; declare option output:media-type "text/html"; diff --git a/edoc/modules/view.xqm b/edoc/modules/view.xqm index 4342f244..d06ca60b 100644 --- a/edoc/modules/view.xqm +++ b/edoc/modules/view.xqm @@ -11,20 +11,21 @@ xquery version "3.1"; module namespace wdbv = "https://github.com/dariok/wdbplus/mView"; -import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; -import module namespace request = "http://exist-db.org/xquery/request"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; -import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "model.xqm"; - -declare namespace templates = "http://exist-db.org/xquery/html-templating"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; +import module namespace request = "http://exist-db.org/xquery/request"; +import module namespace templates = "http://exist-db.org/xquery/html-templating"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; +import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; +import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "model.xqm"; (: we need a lookup function for the templating system to work :) declare variable $wdbv:lookup := function($functionName as xs:string, $arity as xs:int) { - try { - function-lookup(xs:QName($functionName), $arity) - } catch * { - () - } + try { + function-lookup(xs:QName($functionName), $arity) + } catch * { + () + } }; (:~ @@ -35,7 +36,10 @@ declare %templates:default("p", "") function wdbv:getEE ( $node as node(), $model as map(*), $id as xs:string, $view as xs:string, $p as xs:string ) as item()* { try { - let $newModel := wdbm:populateModel($id, $view, $model, $p) + let $newModel := map:merge(( + wdbm:populateModel($id, (), $view, $p, ""), + $model + )) return if ( contains($newModel?fileLoc, 'http') ) then $newModel @@ -184,7 +188,7 @@ declare function wdbv:getHeader ( $node as node(), $model as map(*) ) as element (:~ : return the body :) -declare function wdbv:getContent ( $node as node(), $model as map ) { +declare function wdbv:getContent ( $node as node(), $model as map(*) ) { let $file := if ( ends-with($model?fileLoc, 'wdbmeta.xml') ) then $model?fileLoc || '#' || $model?id else $model?fileLoc @@ -221,7 +225,7 @@ declare function wdbv:getContent ( $node as node(), $model as map ) { try {
    { transform:transform(doc($file), doc($xslt), $params, $attr, "") } - { wdb:getLeftFooter($node, $model) } + { wdbv:getLeftFooter($node, $model) }
    } catch * { (util:log("error", From 7dc1322b1f7d63aa738dfee636f84bddb3fdcc08 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 6 Feb 2025 12:27:21 +0100 Subject: [PATCH 083/151] better handling of multiple file/project index entries --- edoc/modules/wdb-files.xqm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 53ca6ec1..98b3db93 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -66,7 +66,7 @@ declare function wdbFiles:getAbsolutePath ( $path as attribute() ) as xs:anyURI declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs:string )? { let $file-hint := doc("/db/apps/edoc/index/file-index.xml")/id($id) , $project-hint := doc("/db/apps/edoc/index/project-index.xml")/id($id) - , $file := ( doc($file-hint/@project)/id($id), doc($project-hint/@path || "/wdbmeta.xml")/id($id) ) + , $file := ( doc($file-hint[1]/@project)/id($id), doc($project-hint[1]/@path || "/wdbmeta.xml")/id($id) ) return if ( count($file) = 0 ) then error( @@ -74,12 +74,18 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs "no file with ID " || $id, map { "id": $id, "request": request:get-url() } ) - else if ( count($file[self::meta:file]) > 1 ) then + else if ( count($file-hint) gt 1 ) then error( QName('https://github.com/dariok/wdbErr', 'wdb0001'), "multiple files with ID " || $id, map { "id": $id, "request": request:get-url() } ) + else if ( count($project-hint) gt 1 ) then + error( + QName('https://github.com/dariok/wdbErr', 'wdb1001'), + "multiple projects with ID " || $id, + map { "id": $id, "request": request:get-url() } + ) else if ( $file[self::meta:projectMD or self::meta:struct] ) then let $projectPath := base-uri($file[self::meta:projectMD or self::meta:struct]) => substring-before("wdbmeta.xml") return map { From cdee691fb4d8d8a328ff2738cb2a1a1158759a73 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 6 Feb 2025 12:29:21 +0100 Subject: [PATCH 084/151] REST must not enter files/project into index this is done by the file update trigger on wdbmeta entries --- edoc/rest/rest-coll.xql | 9 +-------- edoc/rest/rest-files.xql | 8 ++++---- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index a100f687..0dd80744 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -130,13 +130,6 @@ function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as let $insStruct := update insert into $parentMeta/meta:projectMD/meta:struct - - (: Create entry in project index :) - let $insertIndexEntry := update insert into doc("/db/apps/edoc/index/project-index.xml")/* return ( @@ -462,7 +455,7 @@ declare %rest:path("/edoc/collection/{$ed}/nav.html") %rest:header-param("If-Modified-Since", "{$modified}") function wdbRc:getCollectionNavHTML ( $ed as xs:string, $externalModel as map(*)?, $modified as xs:string* ) { - let $model := if ( exists($externalModel) ) then $externalModel else wdbm:populateModel("", $ed, "", "", "") + let $model := if ( exists($externalModel) ) then $externalModel else wdbm:populateModel((), $ed, "", "", "") return if ( $modified != '' and wdbFiles:evaluateIfModifiedSince($model?pathToEd, 'wdbmeta.xml', $modified) = 304 ) then diff --git a/edoc/rest/rest-files.xql b/edoc/rest/rest-files.xql index d783d19c..daca33a6 100644 --- a/edoc/rest/rest-files.xql +++ b/edoc/rest/rest-files.xql @@ -390,7 +390,7 @@ declare %rest:path("/edoc/resource/view/{$id}.{$type}") %rest:query-param("view", "{$view}", "") function wdbRf:getResourceView ( $id as xs:string, $type as xs:string, $view as xs:string* ) as item()* { - let $model := wdbm:populateModel($id, "", $view, "", "") + let $model := wdbm:populateModel($id, (), $view, "", "") , $wdbmeta := doc($model?infoFileLoc) (: by definition in wdbmeta.rng and in analogy to the behaviour of view.html: $type maps to process/@target, @@ -574,7 +574,7 @@ function wdbRf:getImages($id as xs:string) { then "File not found or other error: " || $retrFile//http:response/@status else () let $file := $retrFile/tei:TEI - let $map := wdbm:populateModel($id, "", '', "", "") + let $map := wdbm:populateModel($id, (), '', "", "") let $canv := for $fa in $file//tei:surface return wdbRf:image($id, $fa/@xml:id, $map) @@ -602,7 +602,7 @@ function wdbRf:getImageDesc($id as xs:string, $image as xs:string) { else () let $file := $retrFile/tei:TEI - let $map := wdbm:populateModel($id, "", "", "", "") + let $map := wdbm:populateModel($id, (), "", "", "") let $meta := doc($map("infoFileLoc")) let $errors := string-join($errorFile, ' - ') @@ -635,7 +635,7 @@ function wdbRf:getFileManifest ($id as xs:string) { else () let $file := $retrFile/tei:TEI - let $map := wdbm:populateModel($id, "", "", "", "") + let $map := wdbm:populateModel($id, (), "", "", "") let $meta := doc($map("infoFileLoc")) let $title := normalize-space($meta//meta:view[@file = $id]/@label) From 9fb21c715636d998c370b7b389684d2a41a462b3 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 6 Feb 2025 12:30:04 +0100 Subject: [PATCH 085/151] validation for XQuery --- wdbplus.xpr | 212 +++++++++++++++++----------------------------------- 1 file changed, 70 insertions(+), 142 deletions(-) diff --git a/wdbplus.xpr b/wdbplus.xpr index e3ca28f3..18aa5167 100644 --- a/wdbplus.xpr +++ b/wdbplus.xpr @@ -35,7 +35,7 @@ - edoc/rest/common.xqm + edoc/rest/ @@ -55,67 +55,7 @@ - edoc/rest/ingest.xqm - - - - XQuery (ULB) - - - - - Validation_scenario - - - - - 2 - - - - - - edoc/rest/rest-files.xql - - - - XQuery (ULB) - - - - - Validation_scenario - - - - - 2 - - - - - - edoc/rest/rest-coll.xql - - - - XQuery (ULB) - - - - - Validation_scenario - - - - - 2 - - - - - - edoc/modules/app.xqm + edoc/modules/ @@ -153,46 +93,6 @@ - - - edoc/modules/error.xqm - - - - XQuery (ULB) - - - - - Validation_scenario - - - - - 2 - - - - - - edoc/modules/function.xqm - - - - XQuery (ULB) - - - - - Validation_scenario - - - - - 2 - - - edoc/config/edoc/data/collection.xconf @@ -233,26 +133,6 @@ - - - edoc/rest/rest-search.xql - - - - XQuery (ULB) - - - - - Validation_scenario - - - - - 2 - - - edoc/controller.xql @@ -273,26 +153,6 @@ - - - edoc/modules/auth.xqm - - - - XQuery (ULB) - - - - - Validation_scenario - - - - - 2 - - - edoc/auth.xql @@ -375,6 +235,74 @@ + + + + + text/xquery + + + + + ${currentFileURL} + + + + + eXist-db thbw.hadw-bw.de + + + true + + + + + true + + + + + + + + + + + + + + + + text/xquery + + + + + ${currentFileURL} + + + + + <Default engine> + + + true + + + + + true + + + + + + + + + + + From 5510486a088f7ff1471ffb75307a6d8cff4cf953 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 17 Mar 2025 10:53:50 +0100 Subject: [PATCH 086/151] grow/shrink main and aside in view --- edoc/resources/css/view.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/resources/css/view.css b/edoc/resources/css/view.css index c4458b9a..0d97f486 100644 --- a/edoc/resources/css/view.css +++ b/edoc/resources/css/view.css @@ -11,7 +11,7 @@ */ body { - grid-template-columns: 1fr 1fr; + grid-template-columns: auto 1fr; /* this should allow main to grow/shrink and aside with contents to follow */ } /* hide right side on small broser windows, e.g. mobile */ From 04b6c606312281744ad9aacba1bfd1d4672638e3 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Tue, 13 May 2025 12:51:20 +0200 Subject: [PATCH 087/151] import view.xqm in main view --- edoc/modules/view.xql | 1 + 1 file changed, 1 insertion(+) diff --git a/edoc/modules/view.xql b/edoc/modules/view.xql index 3e47f03b..d92d8e43 100644 --- a/edoc/modules/view.xql +++ b/edoc/modules/view.xql @@ -22,6 +22,7 @@ import module namespace wdbpq = "https://github.com/dariok/wdbplus/pquery import module namespace wdbs = "https://github.com/dariok/wdbplus/stats" at "stats.xqm"; import module namespace wdbSearch = "https://github.com/dariok/wdbplus/wdbs" at "search.xqm"; import module namespace wdbst = "https://github.com/dariok/wdbplus/start" at "start.xqm"; +import module namespace wdbv = "https://github.com/dariok/wdbplus/mView" at "view.xqm"; declare option output:method "html5"; declare option output:media-type "text/html"; From 366c9d480ee69cb793af9152f3797f5981f831e2 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Tue, 13 May 2025 12:51:41 +0200 Subject: [PATCH 088/151] adjust extraction of document title --- edoc/rest/rest-coll.xql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index 0dd80744..eb57c51d 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -291,7 +291,7 @@ function wdbRc:getCollection ($id as xs:string, $mt as xs:string*) { for $s in $meta//meta:struct[@file] return , for $s in $meta//meta:view return - )') + )') }; declare %rest:GET From d98ac641a01ee22f06d480fd36feb8c4ac32922b Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Tue, 13 May 2025 12:52:21 +0200 Subject: [PATCH 089/151] add OAI-PMH and DTS endpoints to planned REST v2 --- edoc/rest2/v2.yaml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index 4ed9d2a1..ed872cfb 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -22,9 +22,13 @@ tags: description: Operations on resources (usually texts) - name: search description: Full text search + - name: oai + description: OAI PMH endpoints + - name: dts + description: Endpoints for Distributed Text Services paths: - # TODO: + # TODO – this should only contain functions that are not already covered by the other endpoint (if any): # /admin /annotations: @@ -587,6 +591,12 @@ paths: 404: description: File not found + # TODO + # /oai + + # TODO + # /dts + components: parameters: id: From a3eea6832679094087f1dfb638b42cea9eec748f Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Sat, 12 Jul 2025 16:37:55 +0200 Subject: [PATCH 090/151] improve nav - better sorting - better includes - some CSS --- edoc/resources/css/wdb.css | 8 ++++++++ edoc/resources/nav.xsl | 30 +++++++++++++++++++++++++----- edoc/rest/rest-coll.xql | 38 +++++++++++++++++++++++--------------- 3 files changed, 56 insertions(+), 20 deletions(-) diff --git a/edoc/resources/css/wdb.css b/edoc/resources/css/wdb.css index 6c53793d..a39e72a8 100644 --- a/edoc/resources/css/wdb.css +++ b/edoc/resources/css/wdb.css @@ -166,6 +166,14 @@ nav ul { list-style-type: none; } +nav li { + display: table-row; +} +li .label { + display: table-cell; + padding-right: 0.5em; +} + nav li ul { margin-left: 1.25em; } diff --git a/edoc/resources/nav.xsl b/edoc/resources/nav.xsl index e6e37c78..b2fbda25 100644 --- a/edoc/resources/nav.xsl +++ b/edoc/resources/nav.xsl @@ -28,7 +28,7 @@ @@ -58,12 +58,31 @@
  • Noch kein Inhalt
  • - + + + + + + + + + + + + + + + + + + + + @@ -72,9 +91,7 @@ - - - + - @@ -91,6 +108,9 @@
  • + + + diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index eb57c51d..b2891915 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -421,25 +421,33 @@ function wdbRc:getCollectionNavXML ( $ed as xs:string ) { else $content }; -declare function wdbRc:imported ( $import, $child ) { - let $uri := base-uri($import) - let $path := substring-before($uri, "wdbmeta.xml") || $import/@path - let $meta := doc($path) - - let $content := $meta/meta:projectMD/meta:struct - let $struct := {( - $content/@*, - for $st in $content/* return - if ($st/@file = $child/@ed) - then $child - else $st - )} +declare function wdbRc:imported ( $import, $importerContent ) { + let $base-uri := base-uri($import) + , $fullImportedPath := substring-before($base-uri, "wdbmeta.xml") || $import/@path + , $importedMeta := doc($fullImportedPath) + , $importedContent := $importedMeta/meta:projectMD/meta:struct + + let $struct := wdbRc:importedStruct ( $importedContent, $importerContent ) - return if ($content/meta:import) - then wdbRc:imported ( $content/meta:import, $struct) + return if ($importedContent/meta:import) + then wdbRc:imported ( $importedContent/meta:import, $struct) else $struct }; +declare function wdbRc:importedStruct ( $struct, $importerContent ) { + { $struct/@* }{ + for $content in $struct/* return + if ( $content[self::meta:struct and not(*)] ) then + if ( $content/@file = $importerContent/@ed) + then $importerContent +(: then { $importerContent/* }:) + else $content + else if ( $content[self::meta:struct and meta:struct] ) + then wdbRc:importedStruct ( $content, $importerContent ) + else $content + } +}; + (:~ : Return the navigation for a given project as HTML : Tries to load a project specific function, project specific XSLT, instance specific XSLT or uses the WDB+ default From 15d842f227737ac58c13d98021c5f5715101b360 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Sat, 12 Jul 2025 16:38:49 +0200 Subject: [PATCH 091/151] some local tests for endpoints (old API) --- test/rest-coll.http | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 test/rest-coll.http diff --git a/test/rest-coll.http b/test/rest-coll.http new file mode 100644 index 00000000..a20ada70 --- /dev/null +++ b/test/rest-coll.http @@ -0,0 +1,11 @@ +GET https://tueditions.ulb.tu-darmstadt.de/r/edoc/collection/pa000023/nav.xml + +### +GET https://tueditions.ulb.tu-darmstadt.de/r/edoc/collection/pa000018/nav.xml + +### +GET https://tueditions.ulb.tu-darmstadt.de/r/edoc/collection/pa000019/nav.html + +### + +GET https://exist.ulb.tu-darmstadt.de/2/r/edoc/collection/pa000009/nav.xml \ No newline at end of file From 8b40fdf3058e60811098a169fc701e2ae0d77c4f Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Sat, 12 Jul 2025 16:59:36 +0200 Subject: [PATCH 092/151] button in coookie info to full height --- edoc/resources/scripts/legal.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edoc/resources/scripts/legal.js b/edoc/resources/scripts/legal.js index 8a6d8dfe..32597831 100644 --- a/edoc/resources/scripts/legal.js +++ b/edoc/resources/scripts/legal.js @@ -17,8 +17,8 @@ $(function(){ information with third parties. Learn more\
    '); + flex: 1 0 auto;">Got it!'); } $(document).on('click', '#cookieConsentOK', () => { cookieConsent() }); -}); \ No newline at end of file +}); From 118e35bb9b452f34c00fdf9a131a8181a995db19 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Sat, 12 Jul 2025 17:13:20 +0200 Subject: [PATCH 093/151] start: licence info as div with heading --- edoc/resources/start.xsl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/edoc/resources/start.xsl b/edoc/resources/start.xsl index b8f7efea..339d9e3b 100644 --- a/edoc/resources/start.xsl +++ b/edoc/resources/start.xsl @@ -103,10 +103,10 @@ -

    - Lizenzinformationen: +

    +

    Lizenzinformationen:

    -

    +
    From bd2135f54af00acb1b9af3b4b47584e18c1aa941 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 16 Jul 2025 17:21:35 +0200 Subject: [PATCH 094/151] extend error.xqm, expect numerical keys --- edoc/modules/error.xqm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/edoc/modules/error.xqm b/edoc/modules/error.xqm index 7fb32b89..b7148abe 100644 --- a/edoc/modules/error.xqm +++ b/edoc/modules/error.xqm @@ -84,8 +84,11 @@ declare function wdbErr:get ( $test as item()*, $prefix as xs:string* ) as eleme then wdbErr:get($test($key), string-join(($prefix, $key), ' → ')) else if ($test($key) instance of function(*)) then (
    {string-join(($prefix, $key), ' → ')}
    ,
    {function-name($test($key))}#{function-arity($test($key))}
    ) - else if ($test($key) instance of xs:string or $test($key) instance of xs:boolean) - then wdbErr:get($test($key), string-join(($prefix, $key), ' → ')) + else if ($test($key) instance of xs:string + or $test($key) instance of xs:boolean + or $test($key) instance of xs:integer + or $test($key) instance of xs:double) + then wdbErr:get($test($key), string-join(($prefix, $key), ' → ')) else (
    {string-join(($prefix, $key), ' → ')}
    ,
    {functx:atomic-type($test($key))}
    ) } catch * { functx:atomic-type($key) || " - " || functx:atomic-type($prefix) From 4df43c53ce13d213800dd4d8f51843703a87f7af Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 16 Jul 2025 17:22:08 +0200 Subject: [PATCH 095/151] add path to xslt as meta --- edoc/modules/view.xqm | 1 + 1 file changed, 1 insertion(+) diff --git a/edoc/modules/view.xqm b/edoc/modules/view.xqm index d06ca60b..826fff6e 100644 --- a/edoc/modules/view.xqm +++ b/edoc/modules/view.xqm @@ -102,6 +102,7 @@ declare function wdbv:getHead ( $node as node(), $model as map(*) ) as element(h + { $model("title") } – { normalize-space($config:configFile//config:short) } { From 9e298fd0adeeea74703d787c115d68c0c1163ab6 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 16 Jul 2025 17:22:31 +0200 Subject: [PATCH 096/151] add missing gt to make file wellformed --- edoc/resources/start.xsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/resources/start.xsl b/edoc/resources/start.xsl index 339d9e3b..056d5743 100644 --- a/edoc/resources/start.xsl +++ b/edoc/resources/start.xsl @@ -106,7 +106,7 @@

    Lizenzinformationen:

    -
    From 63adbc93cb7375799650339ab1521adb53c1c382 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 16 Jul 2025 17:23:27 +0200 Subject: [PATCH 097/151] use image instead of attrib balue in image link --- edoc/resources/xsl/tei-common.xsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/resources/xsl/tei-common.xsl b/edoc/resources/xsl/tei-common.xsl index 38929a6e..0dd4f5ce 100644 --- a/edoc/resources/xsl/tei-common.xsl +++ b/edoc/resources/xsl/tei-common.xsl @@ -335,7 +335,7 @@ - + From 34137a92ef8cd9a34ba4fcbcf6cf85c50ced8995 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 16 Jul 2025 17:23:56 +0200 Subject: [PATCH 098/151] use processes as wrapper for process as per current schema --- edoc/resources/wdbmeta.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/edoc/resources/wdbmeta.xml b/edoc/resources/wdbmeta.xml index cb0654c4..f58904df 100644 --- a/edoc/resources/wdbmeta.xml +++ b/edoc/resources/wdbmeta.xml @@ -22,8 +22,10 @@ - - xsl/tei-transcript.xsl - + + + xsl/tei-transcript.xsl + + \ No newline at end of file From f8528568eae61002c8dfe67bd00254836c92262e Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 16 Jul 2025 17:42:35 +0200 Subject: [PATCH 099/151] =?UTF-8?q?error:=20don=E2=80=99t=20=20set=20statu?= =?UTF-8?q?s=20code=20when=20in=20REST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- edoc/modules/error.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/error.xqm b/edoc/modules/error.xqm index b7148abe..55d26fa0 100644 --- a/edoc/modules/error.xqm +++ b/edoc/modules/error.xqm @@ -53,7 +53,7 @@ declare function wdbErr:error ( $data as map (*) ) as item()+ { return ( util:log("error", $error), util:log("info", $data), - response:set-status-code($statusCode), + if ( response:exists() ) then response:set-status-code($statusCode) else (), From eadd11862bdfb727f054da51c6fbee19a4721000 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 09:54:53 +0200 Subject: [PATCH 100/151] revert grid columns to 1fr 1fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit a real resize is not possible in CSS and requires JS (which I’m currently not willing to create) --- edoc/resources/css/view.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/resources/css/view.css b/edoc/resources/css/view.css index 0d97f486..d22971c0 100644 --- a/edoc/resources/css/view.css +++ b/edoc/resources/css/view.css @@ -11,7 +11,7 @@ */ body { - grid-template-columns: auto 1fr; /* this should allow main to grow/shrink and aside with contents to follow */ + grid-template-columns: 1fr 1fr; /* this should allow main to grow/shrink and aside with contents to follow */ } /* hide right side on small broser windows, e.g. mobile */ From 9a692b7037304912ae85c67909899a0eb1306fc0 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 10:13:21 +0200 Subject: [PATCH 101/151] bug fixing in getResourceById and wdbfiles --- edoc/modules/wdb-files.xqm | 7 ++++--- edoc/rest/rest-files.xql | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 98b3db93..48c018b0 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -67,24 +67,25 @@ declare function wdbFiles:getFullPath ( $id as xs:string ) as map( xs:string, xs let $file-hint := doc("/db/apps/edoc/index/file-index.xml")/id($id) , $project-hint := doc("/db/apps/edoc/index/project-index.xml")/id($id) , $file := ( doc($file-hint[1]/@project)/id($id), doc($project-hint[1]/@path || "/wdbmeta.xml")/id($id) ) + , $request := if ( request:exists() ) then request:get-url() else 'no request context' return if ( count($file) = 0 ) then error( QName('https://github.com/dariok/wdbErr', 'wdb0000'), "no file with ID " || $id, - map { "id": $id, "request": request:get-url() } + map { "id": $id, "request": $request } ) else if ( count($file-hint) gt 1 ) then error( QName('https://github.com/dariok/wdbErr', 'wdb0001'), "multiple files with ID " || $id, - map { "id": $id, "request": request:get-url() } + map { "id": $id, "request": $request } ) else if ( count($project-hint) gt 1 ) then error( QName('https://github.com/dariok/wdbErr', 'wdb1001'), "multiple projects with ID " || $id, - map { "id": $id, "request": request:get-url() } + map { "id": $id, "request": $request } ) else if ( $file[self::meta:projectMD or self::meta:struct] ) then let $projectPath := base-uri($file[self::meta:projectMD or self::meta:struct]) => substring-before("wdbmeta.xml") diff --git a/edoc/rest/rest-files.xql b/edoc/rest/rest-files.xql index daca33a6..07427913 100644 --- a/edoc/rest/rest-files.xql +++ b/edoc/rest/rest-files.xql @@ -247,7 +247,7 @@ function wdbRf:getResource ( $id as xs:string, $modified as xs:string* ) { else } - + , From ad2255f2b42975b70afb79df05ec3891d9542e86 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 10:50:57 +0200 Subject: [PATCH 102/151] XSLT selection: use view parameter if one is present --- edoc/modules/app.xqm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index 65e1d270..141b43ba 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -277,15 +277,20 @@ declare function wdb:eval($function as xs:string, $cache-flag as xs:boolean, $ex (:~ : Evaluate wdbmeta.xml to get the process used for transformation : - : @param $ed The (relative) path to the project : @param $id The ID of the file to be processed : @param $target The processing target to be used + : @param $infoFileLoc The location of the wdbmeta.xml file + : @param $view (optional) a view parameter for selecting the right process : : @returns The path to the XSLT :) declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:string, $target as xs:string ) as xs:string { + wdb:getXslFromWdbMeta($infoFileLoc, $id, $target, "") +}; +declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:string, $target as xs:string, $view as xs:string? ) as xs:string { let $metaFile := doc($infoFileLoc) , $process := ( + $metaFile//meta:process[@target = $target and @view = $view], $metaFile//meta:process[@target = $target], $metaFile//meta:process[1] )[1] @@ -312,7 +317,7 @@ declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:st let $path := xstring:substring-before-last($infoFileLoc, '/') , $parent := $metaFile/meta:projectMD/meta:struct/meta:import return - wdb:getXslFromWdbMeta ($path || '/' || $parent/@path, $id, $target) + wdb:getXslFromWdbMeta ($path || '/' || $parent/@path, $id, $target, $view) else ( util:log("error", $metaFile) ) (: As we check from most specific to default, the first command in the sequence is the right one :) From 87c531651b1fdf22d8131cc735936b8ca177d3e6 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 10:51:25 +0200 Subject: [PATCH 103/151] populate model must pass view parameter to XSLT selection --- edoc/modules/model.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/model.xqm b/edoc/modules/model.xqm index c8315fc5..513bbd6a 100644 --- a/edoc/modules/model.xqm +++ b/edoc/modules/model.xqm @@ -72,7 +72,7 @@ declare namespace tei = "http://www.tei-c.org/ns/1.0"; (: TODO get path to XSL via function – unify with REST function (rest-files) :) xs:anyURI($config:data || '/resources/nav.xsl') else - wdb:getXslFromWdbMeta($filePathInfo?projectPath || '/wdbmeta.xml', $id, 'html') + wdb:getXslFromWdbMeta($filePathInfo?projectPath || '/wdbmeta.xml', $id, 'html', $view) let $xslt := if ( doc-available($xsl) ) then $xsl From 5afb855718d7913f8a1f079394f7b2f533702c27 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 14:47:37 +0200 Subject: [PATCH 104/151] search instance specific funstion.js in data/resources/js Cf. uniform location for project specifics Fixes #326 --- edoc/modules/view.xqm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edoc/modules/view.xqm b/edoc/modules/view.xqm index 826fff6e..5606226c 100644 --- a/edoc/modules/view.xqm +++ b/edoc/modules/view.xqm @@ -124,8 +124,8 @@ declare function wdbv:getHead ( $node as node(), $model as map(*) ) as element(h , , , - if ( util:binary-doc-available($config:data || "/resources/function.js") ) - then + if ( util:binary-doc-available($config:data || "/resources/js/function.js") ) + then else (), wdb:getProjectFiles($node, $model, 'js') ) From 6b48e2634c3c20839cee10321ff88c8beffcc491 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 15:28:20 +0200 Subject: [PATCH 105/151] getXsl return process element - contains the view as well - works through inheritance Cf. #571 --- edoc/modules/app.xqm | 17 +++++++++++++---- edoc/modules/model.xqm | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index 141b43ba..ef0741e5 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -12,7 +12,6 @@ xquery version "3.1"; module namespace wdb = "https://github.com/dariok/wdbplus/wdb"; import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; -import module namespace templates = "http://exist-db.org/xquery/html-templating"; import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; import module namespace wdbPF = "https://github.com/dariok/wdbplus/projectFiles" at "../data/instance.xqm"; @@ -284,10 +283,10 @@ declare function wdb:eval($function as xs:string, $cache-flag as xs:boolean, $ex : : @returns The path to the XSLT :) -declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:string, $target as xs:string ) as xs:string { +declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:string, $target as xs:string ) as element(process)? { wdb:getXslFromWdbMeta($infoFileLoc, $id, $target, "") }; -declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:string, $target as xs:string, $view as xs:string? ) as xs:string { +declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:string, $target as xs:string, $view as xs:string? ) as element(process)? { let $metaFile := doc($infoFileLoc) , $process := ( $metaFile//meta:process[@target = $target and @view = $view], @@ -321,7 +320,17 @@ declare function wdb:getXslFromWdbMeta ( $infoFileLoc as xs:string, $id as xs:st else ( util:log("error", $metaFile) ) (: As we check from most specific to default, the first command in the sequence is the right one :) - return normalize-space($sel[1]) + return if ( $sel[1] instance of element(meta:process) ) + then $sel[1] + else if ( $sel[1] instance of xs:string ) + then + {$sel[1]} + + else + error( + QName('wdbRErr', 'wdb0002'), + "no process found for target '" || $target || "' and view '" || $view || "' in " || $infoFileLoc + ) }; (: END LOCAL HELPER FUNCTIONS :) diff --git a/edoc/modules/model.xqm b/edoc/modules/model.xqm index 513bbd6a..29f44e4e 100644 --- a/edoc/modules/model.xqm +++ b/edoc/modules/model.xqm @@ -73,6 +73,7 @@ declare namespace tei = "http://www.tei-c.org/ns/1.0"; xs:anyURI($config:data || '/resources/nav.xsl') else wdb:getXslFromWdbMeta($filePathInfo?projectPath || '/wdbmeta.xml', $id, 'html', $view) + => normalize-space() let $xslt := if ( doc-available($xsl) ) then $xsl From 8b9b42c0e1bc1ca72d3fb88a4c121b8f1037f30e Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 15:30:22 +0200 Subject: [PATCH 106/151] wdbmeta stub: use uniform path for xsl Cf. #326 --- edoc/resources/wdbmeta.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/resources/wdbmeta.xml b/edoc/resources/wdbmeta.xml index f58904df..b927dac4 100644 --- a/edoc/resources/wdbmeta.xml +++ b/edoc/resources/wdbmeta.xml @@ -24,7 +24,7 @@ - xsl/tei-transcript.xsl + resources/xsl/tei-transcript.xsl From e9f843aab276cbfba69a54c432d5ac564b998687 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 16:19:45 +0200 Subject: [PATCH 107/151] file transformations are in a separate module now processing moved from rest-files.xql also, rest-files now makes use of other standard functions Cf. #479 --- edoc/modules/wdb-process.xqm | 68 +++++++++++++++++++++++++++++ edoc/rest/rest-files.xql | 84 ++++++------------------------------ 2 files changed, 82 insertions(+), 70 deletions(-) create mode 100644 edoc/modules/wdb-process.xqm diff --git a/edoc/modules/wdb-process.xqm b/edoc/modules/wdb-process.xqm new file mode 100644 index 00000000..b58d68cb --- /dev/null +++ b/edoc/modules/wdb-process.xqm @@ -0,0 +1,68 @@ +xquery version "3.1"; + +module namespace wdbProc = "https://github.com/dariok/wdbplus/Process"; + +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; + +declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; + +declare function wdbProc:getContent($id as xs:string, $process as element(), $view as xs:string, $model as map(*)) as item()* { + (: TODO if multiple commands are defined, check that one is actually applicable – #395 :) + (: TODO pass the position of this command on to the processing function or pass target and view on :) + (: TODO once dev on wdbmeta, -- steps -- is done, implement these here – #394:) + (: TODO this should be moved to a more generic location (e.g. common.xq) as it is also used in app.xqm :) + let $type := $process[1]/meta:command/@type + return if ($type = "xsl") + then wdbProc:processXSL($id, $process, $model, $view) + else if ($type = "xquery") + then wdbProc:processXQuery($id, $process, $model) + else (500, "Invalid command type " || $type) +}; + +(: TODO: move this functions to a more generic location (e.g. common.xq) as is should also be used from app.xqm :) +(: TODO: use parameter list as defined in app.xqm :) +(: TODO: inject additional parameters? :) +(: TODO: move this to a more generic location (e.g. common.xq) as it is also used in app.xqm :) +declare function wdbProc:processXSL( $id as xs:string, $process as element(), $model as map(*), $view as xs:string ) as item()* { + let $content := try { + let $attr := + + + , + $params := + + + + + (: TODO: for multiple commands, we need recursion here :) + return transform:transform(doc($model?fileLoc), + doc(normalize-space($process/meta:command)), + $params, + $attr, + "expand-xincludes=no" + ) + } catch * { + ("error", + $err:description, + util:log("error", "Processing " || $id || ": " || $err:description)) + } + + return if ($content[1] = "error") + then (500, $content[2]) + else (200, $content) +}; + +(: TODO: move this to a more generic location (e.g. common.xq) as it is also used in app.xqm :) +declare function wdbProc:processXQuery($id as xs:string, $process as element(), $model as map(*)) as item()* { + let $function := $process/meta:command/text() + return if (starts-with($function, 'http') or starts-with($function, '/')) + then () (: TODO :) + else + let $fn := wdb:findProjectFunction($model, $function, 2) + return if ($fn) then try { + (200, wdb:eval($function || "($id, $process)", false(), (xs:QName("id"), $id, xs:QName("process"), $process))) + } catch * { + (500, $err:description) + } + else (500, "function " || $function || " not found") +}; diff --git a/edoc/rest/rest-files.xql b/edoc/rest/rest-files.xql index 07427913..89d97481 100644 --- a/edoc/rest/rest-files.xql +++ b/edoc/rest/rest-files.xql @@ -6,6 +6,7 @@ import module namespace config = "https://github.com/dariok/wdbplus/config" import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "../modules/app.xqm"; import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "../modules/wdb-files.xqm"; import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "../modules/model.xqm"; +import module namespace wdbProc = "https://github.com/dariok/wdbplus/Process" at "../modules/wdb-process.xqm"; import module namespace wdbRCo = "https://github.com/dariok/wdbplus/RestCommon" at "common.xqm"; import module namespace wdbRMi = "https://github.com/dariok/wdbplus/RestMIngest" at "ingest.xqm"; import module namespace xstring = "https://github.com/dariok/XStringUtils" at "../include/xstring/string-pack.xql"; @@ -390,25 +391,25 @@ declare %rest:path("/edoc/resource/view/{$id}.{$type}") %rest:query-param("view", "{$view}", "") function wdbRf:getResourceView ( $id as xs:string, $type as xs:string, $view as xs:string* ) as item()* { - let $model := wdbm:populateModel($id, (), $view, "", "") - , $wdbmeta := doc($model?infoFileLoc) - (: by definition in wdbmeta.rng and in analogy to the behaviour of view.html: $type maps to process/@target, $view is used as a parameter. If there is only one process for $type, $view will be handed over as a parameter; if there are multiple processes for $type, $view will be used to select via process/@view. If the are multiple processes but none with the given $view, this is an error :) - let $processes := $wdbmeta//meta:process[@target = $type] - let $process := if ( count($processes) = 1 ) - then $processes[1] - else $processes[@view = $view] - let $status := if ( $wdbmeta = () ) - then (500, "no wdbmeta found for " || $id || "!") - else if (not($processes)) - then (404, "no process found for target type " || $type) - else if (not($process)) + let $pathInfo := wdbFiles:getFullPath($id) + , $infoFileLoc := $pathInfo?projectPath || 'wdbmeta.xml' + , $process := wdb:getXslFromWdbMeta($infoFileLoc, $id, $type, $view) + + let $status := if ( $infoFileLoc = "" ) + then (404, "No file with ID " || $id || " found!") + else if ( not($process) ) then (400, "no process found for target type " || $type || " that has a view " || $view) - else wdbRf:getContent($id, $process, $view, $model) + else wdbProc:getContent($id, $process, $view, + map { + 'fileLoc': $pathInfo?collectionPath || '/' || $pathInfo?fileName, + 'pathToEd': $pathInfo?projectPath + } + ) let $namespace := if ($status[2] instance of element()) then $status[2]/*[1]/namespace-uri() @@ -425,63 +426,6 @@ function wdbRf:getResourceView ( $id as xs:string, $type as xs:string, $view as ) }; -declare function wdbRf:getContent($id as xs:string, $process as element(), $view as xs:string, $model as map(*)) as item()* { - (: TODO if multiple commands are defined, check that one is actually applicable – #395 :) - (: TODO pass the position of this command on to the processing function or pass target and view on :) - (: TODO once dev on wdbmeta, -- steps -- is done, implement these here – #394:) - let $type := $process[1]/meta:command/@type - return if ($type = "xsl") - then wdbRf:processXSL($id, $process, $model) - else if ($type = "xquery") - then wdbRf:processXQuery($id, $process, $model) - else (500, "Invalid command type " || $type) -}; - -(: TODO: move this functions to a more generic location (e.g. common.xq) as is should also be used from app.xqm :) -(: TODO: use parameter list as defined in app.xqm :) -(: TODO: inject additional parameters? :) -declare function wdbRf:processXSL( $id as xs:string, $process as element(), $model as map(*) ) as item()* { - let $content := try { - let $attr := - - - , - $params := - - - - - return transform:transform(doc($model?fileLoc), - doc($model?pathToEd || '/' || normalize-space($process/meta:command)), - $params, - $attr, - "expand-xincludes=no" - ) - } catch * { - ("error", - $err:description, - util:log("error", "Processing " || $id || ": " || $err:description)) - } - - return if ($content[1] = "error") - then (500, $content[2]) - else (200, $content) -}; - -declare function wdbRf:processXQuery($id as xs:string, $process as element(), $model as map(*)) as item()* { - let $function := $process/meta:command/text() - return if (starts-with($function, 'http') or starts-with($function, '/')) - then () (: TODO :) - else - let $fn := wdb:findProjectFunction($model, $function, 2) - return if ($fn) then try { - (200, wdb:eval($function || "($id, $process)", false(), (xs:QName("id"), $id, xs:QName("process"), $process))) - } catch * { - (500, $err:description) - } - else (500, "function " || $function || " not found") -}; - declare %private function wdbRf:image ($fileID as xs:string, $image as xs:string, $map as map(*)) { From af623eafadb6cc068f753b6cc53b53689e01d39b Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 17:31:41 +0200 Subject: [PATCH 108/151] view.xqm now uses wdbProcess to get contents This also includes the handling of subcorpora (i.e. meta:struct[@xml:id]) Cf. #479 --- edoc/modules/model.xqm | 26 ++++++++---- edoc/modules/view.xqm | 80 +++++++++++------------------------- edoc/modules/wdb-process.xqm | 32 ++++++++++++--- 3 files changed, 68 insertions(+), 70 deletions(-) diff --git a/edoc/modules/model.xqm b/edoc/modules/model.xqm index 29f44e4e..5cc51346 100644 --- a/edoc/modules/model.xqm +++ b/edoc/modules/model.xqm @@ -67,20 +67,28 @@ declare namespace tei = "http://www.tei-c.org/ns/1.0"; , $instanceFunctions := for $function in doc($config:data || "/instance-functions.xml")//function return $function/@name || '#' || count($function/argument) + (: even though it’s called xsl, we use the whole meta:process element here so that later we can use multi-command + processing (#394) :) let $xsl := if ( $filePathInfo?fileName = "wdbmeta.xml" ) then - (: TODO get path to XSL via function – unify with REST function (rest-files) :) - xs:anyURI($config:data || '/resources/nav.xsl') + (: TODO nav.xsl: use edoc/resources/xsl/nav.xsl if none in data/resources :) + + { xs:anyURI($config:data || '/resources/xsl/nav.xsl') } + else wdb:getXslFromWdbMeta($filePathInfo?projectPath || '/wdbmeta.xml', $id, 'html', $view) - => normalize-space() - let $xslt := if ( doc-available($xsl) ) - then $xsl - else if ( doc-available($filePathInfo?projectPath || '/' || $xsl) ) - then $filePathInfo?projectPath || '/' || $xsl - else "" - + let $xslt := if ( not($xsl) instance of element(meta:process) ) + then wdbErr:error(map { "code": "wdbErr:wdb0002", "err:description": "no XSLT found for file with ID " || $id, + "err:additional": + {$filePathInfo?fileName} + {$filePathInfo?projectPath} + {$id} + + } + ) + else $xsl + let $doc := doc($pathToFile) , $title := if ( $id != "" ) then normalize-space(($doc//tei:title)[1]) diff --git a/edoc/modules/view.xqm b/edoc/modules/view.xqm index 5606226c..f6df7919 100644 --- a/edoc/modules/view.xqm +++ b/edoc/modules/view.xqm @@ -11,13 +11,14 @@ xquery version "3.1"; module namespace wdbv = "https://github.com/dariok/wdbplus/mView"; -import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; import module namespace request = "http://exist-db.org/xquery/request"; import module namespace templates = "http://exist-db.org/xquery/html-templating"; -import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; -import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; -import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; -import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "model.xqm"; +import module namespace wdb = "https://github.com/dariok/wdbplus/wdb" at "app.xqm"; +import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "wdb-files.xqm"; +import module namespace wdbErr = "https://github.com/dariok/wdbplus/errors" at "error.xqm"; +import module namespace wdbm = "https://github.com/dariok/wdbplus/model" at "model.xqm"; +import module namespace wdbProc = "https://github.com/dariok/wdbplus/Process" at "wdb-process.xqm"; (: we need a lookup function for the templating system to work :) declare variable $wdbv:lookup := function($functionName as xs:string, $arity as xs:int) { @@ -190,59 +191,26 @@ declare function wdbv:getHeader ( $node as node(), $model as map(*) ) as element : return the body :) declare function wdbv:getContent ( $node as node(), $model as map(*) ) { - let $file := if ( ends-with($model?fileLoc, 'wdbmeta.xml') ) - then $model?fileLoc || '#' || $model?id - else $model?fileLoc - - let $xslt := if (string-length($model?xslt) = 0) - then wdbErr:error(map {"code": "wdbErr:wdb0002", "model": $model}) - else $model("xslt") - - let $params := - - - - - - { - if ($model("view") != '') - then - else () - } - { - if ($model("p") != '') - then - else () - } - - - - (: do not stop transformation on ambiguous rule match and similar warnings :) - let $attr := - (: TODO: use generic processXSL function (currently in restFiles.xql but to be moved) so there is only one way of doing things :) (: TODO: consider removing this entirely and instead load content of main via AJAX :) - return - try { -
    - { transform:transform(doc($file), doc($xslt), $params, $attr, "") } - { wdbv:getLeftFooter($node, $model) } -
    - } catch * { (util:log("error", - - {$file} - {$xslt} - {$params} - {$attr} - {$err:code || ': ' || $err:description} - {$err:module || '@' || $err:line-number ||':'||$err:column-number} - {$err:additional} - ), - wdbErr:error(map{"code": "wdbErr:wdb1001", "model": $model, "additional": $params, "error": map { - "code": $err:code, "desc": $err:description, "module": $err:module, "line": $err:line-number, - "col": $err:column-number, "add": $err:additional - }})) - } + try { +
    + { wdbProc:getContent($model?id, $model?xslt, $model?view, $model) } + { wdbv:getLeftFooter($node, $model) } +
    + } catch * { (util:log("error", + + {$file} + {$model?xslt} + {$err:code || ': ' || $err:description} + {$err:module || '@' || $err:line-number ||':'||$err:column-number} + {$err:additional} + ), + wdbErr:error(map{"code": "wdbErr:wdb1001", "model": $model, "error": map { + "code": $err:code, "desc": $err:description, "module": $err:module, "line": $err:line-number, + "col": $err:column-number, "add": $err:additional + }})) + } }; (:~ diff --git a/edoc/modules/wdb-process.xqm b/edoc/modules/wdb-process.xqm index b58d68cb..7065184e 100644 --- a/edoc/modules/wdb-process.xqm +++ b/edoc/modules/wdb-process.xqm @@ -25,21 +25,43 @@ declare function wdbProc:getContent($id as xs:string, $process as element(), $vi (: TODO: move this to a more generic location (e.g. common.xq) as it is also used in app.xqm :) declare function wdbProc:processXSL( $id as xs:string, $process as element(), $model as map(*), $view as xs:string ) as item()* { let $content := try { + + (: this is necessary to catch meta:struct with IDs (for a sub-corpus) :) + let $file := if ( ends-with($model?fileLoc, 'wdbmeta.xml') ) + then $model?fileLoc || '#' || $model?id + else $model?fileLoc + + (: do not stop transformation on ambiguous rule match and similar warnings :) let $attr := - , - $params := + + , $params := - + + + + + { + if ( $view != '' ) + then + else () + } + { + if ($model?p != '') + then + else () + } + + (: TODO: for multiple commands, we need recursion here :) - return transform:transform(doc($model?fileLoc), + return transform:transform(doc($file), doc(normalize-space($process/meta:command)), $params, $attr, - "expand-xincludes=no" + "" ) } catch * { ("error", From 19a16020f64146519c6a3090733298d26d4018b9 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 17:46:56 +0200 Subject: [PATCH 109/151] add struct[@xml:id] to file index allows wdbFiles to find a subcorpus --- edoc/admin/modelFunctions.xql | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/edoc/admin/modelFunctions.xql b/edoc/admin/modelFunctions.xql index f2888e16..d6f7ad9d 100644 --- a/edoc/admin/modelFunctions.xql +++ b/edoc/admin/modelFunctions.xql @@ -43,6 +43,18 @@ declare function trigger:after-update-document ( $uri as xs:anyURI ) as xs:strin then update replace $fileIndex/id($id) with $entry else update insert $entry into $fileIndex/index:index + (: enter or update subcorpora :) + let $subcorpora := for $subcorpus in $meta//meta:struct[@xml:id] + let $id := $subcorpus/@xml:id + , $entry := + + return if ( exists($fileIndex/id($id)) ) + then update replace $fileIndex/id($id) with $entry + else update insert $entry into $fileIndex/index:index + return $uri (: else if ( ends-with($uri, '.xml') ) then let $id := doc($uri)/*/@xml:id From fa7d5559c6058b35b8957b60b7df5f8c7f5cc491 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 17:47:13 +0200 Subject: [PATCH 110/151] when creating a project, add option to create a subproject --- edoc/admin/new.xqm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/edoc/admin/new.xqm b/edoc/admin/new.xqm index a3271df4..d78852e3 100644 --- a/edoc/admin/new.xqm +++ b/edoc/admin/new.xqm @@ -101,7 +101,12 @@ declare function wdbPN:body ( $node as node(), $model as map(*), $pName as xs:st
    wdbmeta.xml:
    {$metaFile}
    Admin
    -
    Upload
    +
    + +
    else $create }; From b93eb716a013401d0b00a41c29e836b6a6e6b03b Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 17 Jul 2025 18:20:07 +0200 Subject: [PATCH 111/151] remove unused wddb:getFilePath Closes #313 --- README.md | 11 +++++++++++ edoc/modules/app.xqm | 41 ---------------------------------------- edoc/modules/view.xqm | 2 +- edoc/rest/rest-anno.xql | 5 ++++- edoc/rest/rest-files.xql | 3 ++- 5 files changed, 18 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 71d2a90b..6a6515fe 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,21 @@ This framework still lacks a good name. If you have an idea, please let me know! ## Incompatible changes +### 25Q3 + +Release 25Q3 dropped support for more unsued functions: +- `wdb:getFilePath ( $id as xs:string )`: use the map from `wdbFiles:getFullPath` instead + +### 24Q4 + Release 24Q4 dropped another set of functions that were unused: - `wdb:getEdFromFileID( $id as xs:string )`: `(wdbFiles:getFullPath($id))?projectPath` returns the base path to `wdbmeta.xml` - `wdb:getMetaElementFromEd ( $ed as xs:string )`: use `doc( (doc("/db/apps/edoc/index/project-index.xml")/id($ed))/@path || '/wdbmeta.xml' )/id($ed)[self::meta:projectMD]` instead - `wdb:getMetaFile( $pathToEd )`: `(wdbFiles:getFullPath($ed))?projectPath` returns the base path to `wdbmeta.xml` - `wdb:getProjectPathFromId ( $ed )`: use `(wdbFiles:getFullPath($ed))?projectPath` instead +### 24Q2 + Release 24Q2 dropped functions `wdb:getEdPath( $ed as xs:string , $absolute as xs:boolean() )`, `wdb:getEdPath( $ed as xs:string )`, and `wdb:findProjectXQM( $project )`. These queries can be replaced by `(wdbFiles:getFullPath($id))` which returns a map with `projectPath` (the path to the project, i.e. the collection where @@ -19,6 +28,8 @@ Release 24Q2 dropped functions `wdb:getEdPath( $ed as xs:string , $absolute as x the path to the project containing `project.xqm`, and `fileName`. 1) (24Q4): this corrects a typo as previous versions incorrectly read `project.xqm`. +### 24Q1 + Release 24Q1 dropped support for METS-based projects. As METS files can have a number of very different ways of encoding information, especially when it comes to behaviours, native support is hard to achieve. At the same time, most installations use wdb+’s native wdbmeta system as this is what the admin functions work with. diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index ef0741e5..c9344586 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -96,47 +96,6 @@ declare function wdb:getAnnotationDialogue ( $node as node(), $model as map(*) ) (: END FUNCTIONS USED BY THE TEMPLATING SYSTEM :) (: FUNCTIONS DEALING WITH PROJECTS AND RESOURCES :) -(:~ - : Return the full URI to the (edition) XML file with the given ID - : The scope is the whole data collection; documentation states in several places that file IDs need to be unique - : - : This function raises errors that are to be caught by the caller - : - : @param $id as xs:string: the file ID - : @return xs:string the full URI to the file within the database - : @throws wdbErr:wdb0000 - : @throws wdbErr:wdb0001 - :) -declare function wdb:getFilePath ( $id as xs:string ) as xs:string { - let $files := wdbFiles:getFilePaths($config:data, $id) - - (: do not just return a random URI but add some checks for better error messages: - : no files found or more than one TEI file found or only wdbmeta entry but no other info :) - let $pathToFile := if ( count($files) = 0 ) then - error( - QName('https://github.com/dariok/wdbErr', 'wdb0000'), - "no file with ID " || $id || " in " || $config:data, - map { "id": $id, "request": request:get-url() } - ) - else if ( count($files) > 1 ) then - error( - QName('https://github.com/dariok/wdbErr', 'wdb0001'), - "multiple files with ID " || $id || " in " || $config:data, - map { "id": $id, "request": request:get-url() } - ) - else if ( local-name($files[1]) = 'id' ) then - base-uri($files[1]) || '#' || $id - else - xstring:substring-before-last(base-uri($files[1]), '/') || '/' || $files[1] - - return if ( starts-with($files[1], '$') ) - then - let $peer := $files[1] => substring(2) => substring-before('/') - , $id := $files[1] => substring-after('/') - return $config:configFile/id($peer) || '/' || $id - else $pathToFile -}; - (:~ : Tries to return an absolute path for a path within a project : diff --git a/edoc/modules/view.xqm b/edoc/modules/view.xqm index f6df7919..dd693930 100644 --- a/edoc/modules/view.xqm +++ b/edoc/modules/view.xqm @@ -200,7 +200,7 @@ declare function wdbv:getContent ( $node as node(), $model as map(*) ) { } catch * { (util:log("error", - {$file} + {$model?fileLoc} {$model?xslt} {$err:code || ': ' || $err:description} {$err:module || '@' || $err:line-number ||':'||$err:column-number} diff --git a/edoc/rest/rest-anno.xql b/edoc/rest/rest-anno.xql index 4dead3e7..9972dae7 100644 --- a/edoc/rest/rest-anno.xql +++ b/edoc/rest/rest-anno.xql @@ -28,7 +28,10 @@ declare function wdbRa:getFileAnno ($fileID as xs:string) { (: get the username; use sm:real to avoid setuid conflicts :) let $username := xs:string(sm:id()//sm:real/sm:username) - let $fileURI := xs:anyURI(wdb:getFilePath($fileID)) + , $fileInfo := wdbFiles:getFullPath($fileID) + let $fileURI := xs:anyURI($fileInfo?collectionPath || '/' || $fileInfo?fileName) + + (: check whether the file exists and is accessible :) let $public := wdbanno:getAnnoFile($fileURI, "")//anno:entry let $private := wdbanno:getAnnoFile($fileURI, $username)//anno:entry diff --git a/edoc/rest/rest-files.xql b/edoc/rest/rest-files.xql index 89d97481..eedb2681 100644 --- a/edoc/rest/rest-files.xql +++ b/edoc/rest/rest-files.xql @@ -67,7 +67,8 @@ declare %rest:HEAD %rest:path("/edoc/resource/{$id}") function wdbRf:fileHead ( $id as xs:string ) as element(rest:response) { - wdbRCo:head(wdb:getFilePath($id)) + let $fileInfo := wdbFiles:getFullPath($id) + return wdbRCo:head($fileInfo?collectionPath || '/' || $fileInfo?fileName) }; (: upload a single file with known ID (i.e. one that is already present) From 87bbbaa19dbeb127621be626f122b7b940efab1b Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 18 Jul 2025 13:15:00 +0200 Subject: [PATCH 112/151] wdbmeta for sub-projets uses process inheritance Cf. #571 --- edoc/admin/new.xqm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/edoc/admin/new.xqm b/edoc/admin/new.xqm index d78852e3..80cdfe10 100644 --- a/edoc/admin/new.xqm +++ b/edoc/admin/new.xqm @@ -42,10 +42,20 @@ declare function wdbPN:body ( $node as node(), $model as map(*), $pName as xs:st return if ( ($create)[1]//http:response/@status = '201') then + (: TODO: this should be done in wdbRc:createSubcollection #424 :) let $collection-uri := $create[2] + + (: TODO: subcollections must follow new structure, cf. #326 :) let $textCollection := xmldb:create-collection($collection-uri, "texts") let $resourcesCollection := xmldb:create-collection($collection-uri, "resources") + let $metaFile := $collection-uri || "/wdbmeta.xml" + , $MD := doc($metaFile) + (: $targetCollection != 'data': sub-project; here, we use process inheritance as standard behaviour :) + , $changeProcess := if ( $targetCollection != 'data' ) + then update replace $MD//meta:process[@target = 'html'] + with + else () let $copy := if (system:function-available(xs:QName("xmldb:copy-collection"), 2)) then util:eval("xmldb:copy-collection($source, $destination)", false(), ( @@ -75,7 +85,6 @@ declare function wdbPN:body ( $node as node(), $model as map(*), $pName as xs:st ) ) - let $MD := doc($metaFile) let $addMD := ( if ($pShort != "") then From dcf30497e8e276e0dd5adb288bb54db0271d363e Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 18 Jul 2025 14:18:58 +0200 Subject: [PATCH 113/151] Create new structure for all resources collections - prepare in data - create by code in new.xqm for peojects Cf. #326 --- edoc/admin/new.xqm | 36 ++++++++++--------- .../resources/xsl/tei-common.xsl | 4 +++ .../resources/xsl/tei-transcript.xsl | 5 +++ edoc/data/resources/xsl/tei-common.xsl | 4 +++ edoc/data/resources/xsl/tei-transcript.xsl | 5 +++ 5 files changed, 37 insertions(+), 17 deletions(-) create mode 100644 edoc/admin/project-template/resources/xsl/tei-common.xsl create mode 100644 edoc/admin/project-template/resources/xsl/tei-transcript.xsl create mode 100644 edoc/data/resources/xsl/tei-common.xsl create mode 100644 edoc/data/resources/xsl/tei-transcript.xsl diff --git a/edoc/admin/new.xqm b/edoc/admin/new.xqm index 80cdfe10..d2bdbf6b 100644 --- a/edoc/admin/new.xqm +++ b/edoc/admin/new.xqm @@ -48,6 +48,15 @@ declare function wdbPN:body ( $node as node(), $model as map(*), $pName as xs:st (: TODO: subcollections must follow new structure, cf. #326 :) let $textCollection := xmldb:create-collection($collection-uri, "texts") let $resourcesCollection := xmldb:create-collection($collection-uri, "resources") + , $resourcesSubCollections := ( + xmldb:create-collection($collection-uri || "/resources", "blobs"), + xmldb:create-collection($collection-uri || "/resources", "css"), + xmldb:create-collection($collection-uri || "/resources", "html"), + xmldb:create-collection($collection-uri || "/resources", "images"), + xmldb:create-collection($collection-uri || "/resources", "js"), + xmldb:create-collection($collection-uri || "/resources", "xq") + ) + , $copy := xmldb:copy-collection($config:edocBaseDB || "/admin/project-template/resources/xsl", $resourcesCollection) let $metaFile := $collection-uri || "/wdbmeta.xml" , $MD := doc($metaFile) @@ -57,31 +66,24 @@ declare function wdbPN:body ( $node as node(), $model as map(*), $pName as xs:st with else () - let $copy := if (system:function-available(xs:QName("xmldb:copy-collection"), 2)) - then util:eval("xmldb:copy-collection($source, $destination)", false(), ( - xs:QName("source"), $config:edocBaseDB || "/resources/xsl", - xs:QName("destination"), $collection-uri - )) - else util:eval("xmldb:copy($source, $destination)", false(), ( - xs:QName("source"), $config:edocBaseDB || "/resources/xsl", - xs:QName("destination"), $collection-uri - )) - let $chmod := ( sm:chmod(xs:anyURI($collection-uri), 'rwxrwxr-x'), sm:chmod(xs:anyURI($textCollection), 'rwxrwxr-x'), - sm:chmod(xs:anyURI($resourcesCollection), 'rwxrwxr-x'), sm:chmod(xs:anyURI($metaFile), 'rw-rw-r--'), - sm:chmod(xs:anyURI($collection-uri || "/xsl"), "rwxrwxr-x"), + sm:chmod(xs:anyURI($resourcesCollection), 'rwxrwxr-x'), sm:chown(xs:anyURI($collection-uri), "wdb:wdbusers"), sm:chown(xs:anyURI($textCollection), "wdb:wdbusers"), - sm:chown(xs:anyURI($resourcesCollection), "wdb:wdbusers"), sm:chown(xs:anyURI($metaFile), "wdb:wdbusers"), - sm:chown(xs:anyURI($collection-uri || "/xsl"), "wdb:wdbusers"), - for $f in xmldb:get-child-resources($collection-uri || "/xsl") + sm:chown(xs:anyURI($resourcesCollection), "wdb:wdbusers"), + for $c in xmldb:get-child-collections($resourcesCollection) + return ( + sm:chmod(xs:anyURI($resourcesCollection || '/' || $c), 'rwxrwxr-x'), + sm:chown(xs:anyURI($resourcesCollection || '/' || $c), "wdb:wdbusers") + ), + for $f in xmldb:get-child-resources($resourcesCollection || "/xsl") return ( - sm:chmod(xs:anyURI($collection-uri || "/xsl/" || $f), "rwxrwxr-x"), - sm:chown(xs:anyURI($collection-uri || "/xsl/" || $f), "wdb:wdbusers") + sm:chmod(xs:anyURI($resourcesCollection || "/xsl/" || $f), "rwxrwxr-x"), + sm:chown(xs:anyURI($resourcesCollection || "/xsl/" || $f), "wdb:wdbusers") ) ) diff --git a/edoc/admin/project-template/resources/xsl/tei-common.xsl b/edoc/admin/project-template/resources/xsl/tei-common.xsl new file mode 100644 index 00000000..37bbe354 --- /dev/null +++ b/edoc/admin/project-template/resources/xsl/tei-common.xsl @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/edoc/admin/project-template/resources/xsl/tei-transcript.xsl b/edoc/admin/project-template/resources/xsl/tei-transcript.xsl new file mode 100644 index 00000000..3c7883c4 --- /dev/null +++ b/edoc/admin/project-template/resources/xsl/tei-transcript.xsl @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/edoc/data/resources/xsl/tei-common.xsl b/edoc/data/resources/xsl/tei-common.xsl new file mode 100644 index 00000000..37bbe354 --- /dev/null +++ b/edoc/data/resources/xsl/tei-common.xsl @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/edoc/data/resources/xsl/tei-transcript.xsl b/edoc/data/resources/xsl/tei-transcript.xsl new file mode 100644 index 00000000..3c7883c4 --- /dev/null +++ b/edoc/data/resources/xsl/tei-transcript.xsl @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file From 14624900bbeb29ca9ba5bbf9130493f80d6a52d9 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 18 Jul 2025 14:24:10 +0200 Subject: [PATCH 114/151] create new collection structure in data/resources and edoc/resources Cf. #326 --- edoc/data/resources/blobs/.gitkeep | 0 edoc/data/resources/css/.gitkeep | 0 edoc/data/resources/html/.gitkeep | 0 edoc/data/resources/images/.gitkeep | 0 edoc/data/resources/js/.gitkeep | 0 edoc/data/resources/xq/.gitkeep | 0 edoc/resources/blobs/.gitkeep | 0 edoc/resources/html/.gitkeep | 0 edoc/resources/images/.gitkeep | 0 edoc/resources/{scripts => js}/admin.js | 0 edoc/resources/{scripts => js}/annotate.js | 0 edoc/resources/{scripts => js}/function.js | 0 edoc/resources/{scripts => js}/js.cookie.js | 0 edoc/resources/{scripts => js}/legal.js | 0 edoc/resources/{scripts => js}/search.js | 0 edoc/resources/xq/.gitkeep | 0 16 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 edoc/data/resources/blobs/.gitkeep create mode 100644 edoc/data/resources/css/.gitkeep create mode 100644 edoc/data/resources/html/.gitkeep create mode 100644 edoc/data/resources/images/.gitkeep create mode 100644 edoc/data/resources/js/.gitkeep create mode 100644 edoc/data/resources/xq/.gitkeep create mode 100644 edoc/resources/blobs/.gitkeep create mode 100644 edoc/resources/html/.gitkeep create mode 100644 edoc/resources/images/.gitkeep rename edoc/resources/{scripts => js}/admin.js (100%) rename edoc/resources/{scripts => js}/annotate.js (100%) rename edoc/resources/{scripts => js}/function.js (100%) rename edoc/resources/{scripts => js}/js.cookie.js (100%) rename edoc/resources/{scripts => js}/legal.js (100%) rename edoc/resources/{scripts => js}/search.js (100%) create mode 100644 edoc/resources/xq/.gitkeep diff --git a/edoc/data/resources/blobs/.gitkeep b/edoc/data/resources/blobs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/data/resources/css/.gitkeep b/edoc/data/resources/css/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/data/resources/html/.gitkeep b/edoc/data/resources/html/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/data/resources/images/.gitkeep b/edoc/data/resources/images/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/data/resources/js/.gitkeep b/edoc/data/resources/js/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/data/resources/xq/.gitkeep b/edoc/data/resources/xq/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/resources/blobs/.gitkeep b/edoc/resources/blobs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/resources/html/.gitkeep b/edoc/resources/html/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/resources/images/.gitkeep b/edoc/resources/images/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/edoc/resources/scripts/admin.js b/edoc/resources/js/admin.js similarity index 100% rename from edoc/resources/scripts/admin.js rename to edoc/resources/js/admin.js diff --git a/edoc/resources/scripts/annotate.js b/edoc/resources/js/annotate.js similarity index 100% rename from edoc/resources/scripts/annotate.js rename to edoc/resources/js/annotate.js diff --git a/edoc/resources/scripts/function.js b/edoc/resources/js/function.js similarity index 100% rename from edoc/resources/scripts/function.js rename to edoc/resources/js/function.js diff --git a/edoc/resources/scripts/js.cookie.js b/edoc/resources/js/js.cookie.js similarity index 100% rename from edoc/resources/scripts/js.cookie.js rename to edoc/resources/js/js.cookie.js diff --git a/edoc/resources/scripts/legal.js b/edoc/resources/js/legal.js similarity index 100% rename from edoc/resources/scripts/legal.js rename to edoc/resources/js/legal.js diff --git a/edoc/resources/scripts/search.js b/edoc/resources/js/search.js similarity index 100% rename from edoc/resources/scripts/search.js rename to edoc/resources/js/search.js diff --git a/edoc/resources/xq/.gitkeep b/edoc/resources/xq/.gitkeep new file mode 100644 index 00000000..e69de29b From 5afda5902ec260dfa9b96cd62688862ea5ed4de3 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 18 Jul 2025 15:21:05 +0200 Subject: [PATCH 115/151] new structure of resources: adjust loading CSS and JS for globals, instance specifics and project specifics Cf. #326 --- edoc/modules/app.xqm | 14 ++++++------- edoc/modules/error.xqm | 2 +- edoc/modules/function.xqm | 42 +++++++++++++++++++------------------- edoc/modules/view.xqm | 14 ++++++------- edoc/modules/wdb-files.xqm | 2 +- edoc/post-install.xql | 2 +- edoc/templates/admin.html | 12 +++++------ 7 files changed, 44 insertions(+), 44 deletions(-) diff --git a/edoc/modules/app.xqm b/edoc/modules/app.xqm index c9344586..a1ab62c2 100644 --- a/edoc/modules/app.xqm +++ b/edoc/modules/app.xqm @@ -144,8 +144,8 @@ declare function wdb:getProjectFiles ( $node as node(), $model as map(*), $type let $files := if ( wdb:findProjectFunction($model, 'wdbPF:getProjectFiles', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getProjectFiles", 1))($model) else - let $css := wdb:findProjectFile($model?pathToEd, "/scripts/project.css") - , $js := wdb:findProjectFile($model?pathToEd, "/scripts/project.js") + let $css := wdb:findProjectFile($model?projectResources, "/css/project.css") + , $js := wdb:findProjectFile($model?projectResources, "/js/project.js") return ( if ( $css != "" ) @@ -200,13 +200,13 @@ declare function wdb:getProjectFunction ( $model as map(*), $name as xs:string, : @param $fileName name of the file to search : @returns the full path to the file in the lowest position; if the file cannot be found, an empty URI is returned :) -declare function wdb:findProjectFile ( $pathToEd as xs:string, $fileName as xs:string ) as xs:anyURI { - if ( util:binary-doc-available($pathToEd || "/" || $fileName) ) then - xs:anyURI($pathToEd || "/" || $fileName) - else if ( substring-after($pathToEd, $config:data) = '' ) then +declare function wdb:findProjectFile ( $path as xs:string, $fileName as xs:string ) as xs:anyURI { + if ( util:binary-doc-available($path || "/" || $fileName) ) then + xs:anyURI($path || "/" || $fileName) + else if ( substring-after($path, $config:data) = '' ) then xs:anyURI("") else - wdb:findProjectFile(xstring:substring-before-last($pathToEd, '/'), $fileName) + wdb:findProjectFile(xstring:substring-before-last($path, '/'), $fileName) }; (: END FUNCTIONS DEALING WITH PROJECTS AND RESOURCES :) diff --git a/edoc/modules/error.xqm b/edoc/modules/error.xqm index 55d26fa0..36f2eb9c 100644 --- a/edoc/modules/error.xqm +++ b/edoc/modules/error.xqm @@ -61,7 +61,7 @@ declare function wdbErr:error ( $data as map (*) ) as item()+ { - , - , - , + , + , + , if ( util:binary-doc-available($config:data || "/resources/js/function.js") ) then else (), diff --git a/edoc/modules/wdb-files.xqm b/edoc/modules/wdb-files.xqm index 48c018b0..6f06fbde 100644 --- a/edoc/modules/wdb-files.xqm +++ b/edoc/modules/wdb-files.xqm @@ -126,7 +126,7 @@ declare function wdbFiles:findMainProject ( $projectPath as xs:string ) as xs:st if ( util:binary-doc-available($projectPath || "/project.xqm") ) then $projectPath else if ( substring-after($projectPath, "/db/apps/edoc/data") = '' ) then - "/db/apps/edoc/data/instance.xqm" + "/db/apps/edoc/data/" else wdbFiles:findMainProject(functx:substring-before-last($projectPath, '/')) }; diff --git a/edoc/post-install.xql b/edoc/post-install.xql index 4a98a91e..5d4dd10b 100644 --- a/edoc/post-install.xql +++ b/edoc/post-install.xql @@ -19,7 +19,7 @@ let $indexConfig := ( ) let $collsr := ( - "/modules", "/templates", "/resources/css", "/resources/scripts", "/resources/xsl" + "/modules", "/templates", "/resources/css", "/resources/js", "/resources/xsl" ) let $chmod := ( diff --git a/edoc/templates/admin.html b/edoc/templates/admin.html index 0f4fefab..a430bc00 100644 --- a/edoc/templates/admin.html +++ b/edoc/templates/admin.html @@ -7,14 +7,14 @@ - <link rel="stylesheet" type="text/css" href="../resources/css/wdb.css" /> - <link rel="stylesheet" type="text/css" href="../resources/css/function.css" /> - <link rel="stylesheet" type="text/css" href="../resources/css/admin.css" /> + <link rel="stylesheet" type="text/css" href="$shared/css/wdb.css" /> + <link rel="stylesheet" type="text/css" href="$shared/css/function.css" /> + <link rel="stylesheet" type="text/css" href="$shared/css/admin.css" /> <link data-template="wdbAdmin:css" /> <script data-template="wdb:getBlob" data-template-name="jquery"></script> - <script src="../resources/scripts/js.cookie.js"></script> - <script src="../resources/scripts/function.js"></script> - <script src="../resources/scripts/admin.js"></script> + <script src="$shared/js/js.cookie.js"></script> + <script src="$shared/js/function.js"></script> + <script src="$shared/js/admin.js"></script> </head> <body> <header> From f7b68c75f8d2b939e28243e7be54bfd2698dfd8a Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar <dario.kampkaspar@tu-darmstadt.de> Date: Fri, 18 Jul 2025 15:40:40 +0200 Subject: [PATCH 116/151] adjust to new resource structure for XSLTs --- edoc/doc/Dokumentation.xml | 2 +- edoc/modules/entity.xqm | 8 ++++---- edoc/modules/start.xqm | 10 +++++----- edoc/rest/common.xqm | 3 +++ edoc/rest/rest-coll.xql | 27 +++++++++++++++------------ edoc/rest/rest-entity.xql | 6 +++--- edoc/rest/rest-search.xql | 4 ++-- 7 files changed, 33 insertions(+), 27 deletions(-) diff --git a/edoc/doc/Dokumentation.xml b/edoc/doc/Dokumentation.xml index 7a34a861..761d374e 100644 --- a/edoc/doc/Dokumentation.xml +++ b/edoc/doc/Dokumentation.xml @@ -61,7 +61,7 @@ <head>Where to find the function</head> <p>the files can be found in <list> <item>/edoc/modules/start.xqm</item> - <item>/edoc/resources/start.xsl</item> + <item>/edoc/resources/xsl/start.xsl</item> </list> <div> <head>The start.xqm</head> diff --git a/edoc/modules/entity.xqm b/edoc/modules/entity.xqm index f25b0301..e93cd09c 100644 --- a/edoc/modules/entity.xqm +++ b/edoc/modules/entity.xqm @@ -31,10 +31,10 @@ declare function wdbe:getEntity ( $node as node(), $model as map(*), $ent as xs: }; declare function wdbe:getEntityBody( $node as node(), $model as map(*) ) as element() { - let $xsl := if ( doc-available($model?pathToEd || "/resources/tei-index.xsl") ) - then doc($model?pathToEd || "/resources/tei-index.xsl") - else if ( doc-available("/db/apps/edoc/data" || "/resources/tei-index.xsl") ) - then doc("/db/apps/edoc/data" || "/resources/tei-index.xsl") + let $xsl := if ( doc-available($model?pathToEd || "/resources/xsl/tei-index.xsl") ) + then doc($model?pathToEd || "/resources/xsl/tei-index.xsl") + else if ( doc-available("/db/apps/edoc/data/resources/xsl/tei-index.xsl") ) + then doc("/db/apps/edoc/data/resources/xsl/tei-index.xsl") else doc("/db/apps/edoc/resources/xsl/tei-index.xsl") , $result := transform:transform($model?entry, $xsl, ()) diff --git a/edoc/modules/start.xqm b/edoc/modules/start.xqm index f6a13b2b..51fd45f7 100644 --- a/edoc/modules/start.xqm +++ b/edoc/modules/start.xqm @@ -22,8 +22,8 @@ declare namespace wdbPF = "https://github.com/dariok/wdbplus/projectFiles"; (: get the left part of the start page from either projectSpec HTML, projectSpec function or a generic heading :) declare function wdbst:getStartLeft( $node as node(), $model as map(*) ) as node()* { - if ( doc-available($model("projectResources") || '/startLeft.html') ) then - templates:apply(doc($model("projectResources") || '/startLeft.html'), $wdbst:lookup, $model) + if ( doc-available($model("projectResources") || '/html/startLeft.html') ) then + templates:apply(doc($model("projectResources") || '/html/startLeft.html'), $wdbst:lookup, $model) else if ( wdb:findProjectFunction($model, "wdbPF:getStartLeft", 1) ) then (wdb:getProjectFunction($model, "wdbPF:getStartLeft", 1))($model) @@ -36,10 +36,10 @@ declare function wdbst:getStart ( $node as node(), $model as map(*) ) as node()* templates:apply(doc($model("projectResources") || '/startRight.html'), $wdbst:lookup, $model) else if ( wdb:findProjectFunction($model, "wdbPF:getStart", 1) ) then (wdb:getProjectFunction($model, "wdbPF:getStart", 1))($model) - else if ( doc-available($config:data || '/resources/start.xsl') ) then - transform:transform(doc($model?infoFileLoc), doc($config:data || '/resources/start.xsl'), ()) + else if ( doc-available($config:data || '/resources/xsl/start.xsl') ) then + transform:transform(doc($model?infoFileLoc), doc($config:data || '/resources/xsl/start.xsl'), ()) else - transform:transform(doc($model?infoFileLoc), doc($config:data || '/../resources/start.xsl'), ()) + transform:transform(doc($model?infoFileLoc), doc($config:data || '/../resources/xsl/start.xsl'), ()) }; (: header is generated by function.xqm :) diff --git a/edoc/rest/common.xqm b/edoc/rest/common.xqm index 44842d6f..4ea7182e 100644 --- a/edoc/rest/common.xqm +++ b/edoc/rest/common.xqm @@ -71,6 +71,9 @@ declare function wdbRCo:head ( $filePath as xs:string ) as element(rest:response </rest:response> }; +(: TODO: combine this with a lookup of a function: findProjectSpecific("getNavXSLT", "nav.xsl") + first, look fo a project or instance specific functin, then look for a file in project, data, global resources; + infer the path from the ending (because of #326) :) (:~ : Get a project specific / instance specific / global XSLT by name : diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index b2891915..90759ccd 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -24,7 +24,7 @@ declare %rest:POST("{$data}") %rest:path("/edoc/collection/{$collectionID}/subcollection") %rest:consumes("application/json") -function wdbRc:createSubcollectionJson ( $data as xs:string*, $collectionID as xs:string ) { +function wdbRc:createSubcollectionJson ( $data as xs:string*, $collectionID as xs:string ) as item()+{ let $map := parse-json(util:base64-decode($data)) return wdbRc:createSubcollection($map, $collectionID) }; @@ -33,15 +33,15 @@ declare %rest:POST("{$data}") %rest:path("/edoc/collection/{$collectionID}/subcollection") %rest:consumes("application/xml") -function wdbRc:createSubcollectionXml ( $data as element()*, $collectionID as xs:string ) { +function wdbRc:createSubcollectionXml ( $data as element()*, $collectionID as xs:string ) as item()+ { let $map := map:merge(for $e in $data/* return map { $e/local-name(): $e/string() }) return wdbRc:createSubcollection($map, $collectionID) }; declare %private -function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as xs:string ) { - if (map:size($collectionData) eq 0) then +function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as xs:string ) as item()+ { + if ( map:size($collectionData) eq 0 ) then ( <rest:response> <http:response status="400"> @@ -51,7 +51,7 @@ function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as </rest:response>, "no configuration data submitted" ) - else if (not(wdbRCo:sequenceEqual(("collectionName", "id", "name"), map:keys($collectionData)))) then + else if ( not(wdbRCo:sequenceEqual(("collectionName", "id", "name"), map:keys($collectionData))) ) then ( <rest:response> <http:response status="400"> @@ -61,7 +61,8 @@ function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as </rest:response>, "missing data; needed information: collectionName, id, name" ) - else if (not (collection($config:data)/id($collectionID)[self::meta:projectMD])) then + else if ( not (collection($config:data)/id($collectionID)[self::meta:projectMD]) ) then + (: rewrite to make use of project index :) ( <rest:response> <http:response status="404"> @@ -69,9 +70,10 @@ function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as <http:header name="Access-Control-Allow-Origin" value="*"/> </http:response> </rest:response>, - "no project with ID " || $collectionID || " or project not using wdbmeta.xml" + "no project with ID " || $collectionID ) else + (: TODO $collection can also be taken from project index :) let $collection := (wdbFiles:getFullPath($collectionID))?projectPath , $parentMeta := doc($collection || "/wdbmeta.xml") let $errUser := not(sm:has-access(base-uri($parentMeta), "w")) @@ -483,13 +485,14 @@ function wdbRc:getCollectionNavHTML ( $ed as xs:string, $externalModel as map(*) let $html := try { let $struct := wdbRc:getCollectionNavXML($ed) + (: TODO: move to findProjectSpecific("getNavXSLT", "nav.xsl") once implemented :) , $xsl := if ( wdb:findProjectFunction($model, "wdbPF:getNavXSLT", 0) ) then (wdb:getProjectFunction($model, "wdbPF:getNavXSLT", 0))($model) - else if ( doc-available($model?pathToEd || '/resources/nav.xsl') ) - then xs:anyURI($model?pathToEd || '/resources/nav.xsl') - else if ( doc-available($config:data || '/resources/nav.xsl') ) - then xs:anyURI($config:data || '/resources/nav.xsl') - else xs:anyURI($config:edocBaseDB || '/resources/nav.xsl') + else if ( doc-available($model?pathToEd || '/resources/xsl/nav.xsl') ) + then xs:anyURI($model?pathToEd || '/resources/xsl/nav.xsl') + else if ( doc-available($config:data || '/resources/xsl/nav.xsl') ) + then xs:anyURI($config:data || '/resources/xsl/nav.xsl') + else xs:anyURI($config:edocBaseDB || '/resources/xsl/nav.xsl') return transform:transform($struct, doc($xsl), $params, $attributes, ()) } catch * { diff --git a/edoc/rest/rest-entity.xql b/edoc/rest/rest-entity.xql index c3471394..e101be89 100644 --- a/edoc/rest/rest-entity.xql +++ b/edoc/rest/rest-entity.xql @@ -75,7 +75,7 @@ declare function wdbRe:scanHtml ( $collection as xs:string, $type as xs:string, $q as xs:string* ) as item()+ { let $coll := (wdbFiles:getFullPath($collection))?projectPath , $md := doc($coll || '/wdbmeta.xml')/*[self::meta:projectMD] - , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') + , $xsl := wdbRCo:getXSLT($coll, 'xsl/entity.xsl') let $params := <parameters> <param name="title" value="{$md//meta:title[1]}" /> @@ -129,7 +129,7 @@ declare function wdbRe:collectionEntityHtml ( $collection as xs:string*, $type as xs:string*, $ref as xs:string*, $start as xs:int* ) as item()+ { let $coll := (wdbFiles:getFullPath($collection))?projectPath , $md := doc($coll || '/wdbmeta.xml')/*[self::meta:projectMD] - , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') + , $xsl := wdbRCo:getXSLT($coll, 'xsl/entity.xsl') let $params := <parameters> <param name="title" value="{$md//meta:title[1]}" /> @@ -180,7 +180,7 @@ declare %output:method("html") function wdbRe:fileEntityHtml ( $id as xs:string*, $ref as xs:string*, $start as xs:int*, $type as xs:string* ) { let $coll := (wdbFiles:getFullPath($id))?collectionPath - , $xsl := wdbRCo:getXSLT($coll, 'entity.xsl') + , $xsl := wdbRCo:getXSLT($coll, 'xsl/entity.xsl') let $params := <parameters> <param name="rest" value="{$config:restURL}" /> diff --git a/edoc/rest/rest-search.xql b/edoc/rest/rest-search.xql index ef0a7db9..25abe17e 100644 --- a/edoc/rest/rest-search.xql +++ b/edoc/rest/rest-search.xql @@ -90,7 +90,7 @@ function wdbRs:collectionHtml ( $ed as xs:string*, $q as xs:string*, $start as x else let $coll := (wdbFiles:getFullPath($ed))?projectPath , $md := doc($coll || '/wdbmeta.xml')/*[self::meta:projectMD] - , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') + , $xsl := wdbRCo:getXSLT($coll, 'xsl/search.xsl') let $params := <parameters> @@ -193,7 +193,7 @@ function wdbRs:fileHtml ( $id as xs:string*, $q as xs:string*, $start as xs:int* else let $file := (collection($config:data)/id($id))[self::tei:TEI][1] , $coll := (wdbFiles:getFullPath($id))?projectPath - , $xsl := wdbRCo:getXSLT($coll, 'search.xsl') + , $xsl := wdbRCo:getXSLT($coll, 'xsl/search.xsl') let $params := <parameters> From c39390a04ab38277a4f41540399ed190fd9aca4c Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar <dario.kampkaspar@tu-darmstadt.de> Date: Fri, 18 Jul 2025 15:56:27 +0200 Subject: [PATCH 117/151] new structure of resources: adjust links to specific HTML Cf. #326 --- edoc/doc/Dokumentation.xml | 2 +- edoc/modules/function.xqm | 20 ++++++------- edoc/modules/start.xqm | 4 +-- edoc/modules/view.xqm | 59 +++++++++++++++++++------------------- 4 files changed, 43 insertions(+), 42 deletions(-) diff --git a/edoc/doc/Dokumentation.xml b/edoc/doc/Dokumentation.xml index 761d374e..e073932a 100644 --- a/edoc/doc/Dokumentation.xml +++ b/edoc/doc/Dokumentation.xml @@ -79,7 +79,7 @@ </div> <!-- muss nach oben :-) --> If you want to change it on a project-level: link to - project/resource/startLeft.html and startRight.html; if you want to change it + {$project}/resource/html/startLeft.html and {$project}/resource/html/startRight.html; if you want to change it globally, you can override the default behaviour by changing edoc/data/instance.xqm </p> </div> diff --git a/edoc/modules/function.xqm b/edoc/modules/function.xqm index 97d3aab5..ad3ef1d4 100644 --- a/edoc/modules/function.xqm +++ b/edoc/modules/function.xqm @@ -134,20 +134,20 @@ declare function wdbfp:getHeader ( $node as node(), $model as map(*) ) as elemen return (: 1a. :) - if ( doc-available($model("projectResources") || '/' || $name || 'Header.html') ) then - templates:apply(doc($model("projectResources") || '/' || $name || 'Header.html'), $wdbfp:lookup, $model) + if ( doc-available($model("projectResources") || '/html/' || $name || 'Header.html') ) then + templates:apply(doc($model("projectResources") || '/html/' || $name || 'Header.html'), $wdbfp:lookup, $model) (: 1b. :) else if ( wdb:findProjectFunction($model, 'wdbPF:get' || $unam || 'Header', 1) ) then (wdb:getProjectFunction($model, 'wdbPF:get' || $unam || 'Header', 1))($model) (: 2a. :) - else if ( doc-available($model?projectResources || "functionHeader.html") ) then - templates:apply(doc($model?projectResources || "functionHeader.html"), $wdbfp:lookup, $model) + else if ( doc-available($model?projectResources || "html/functionHeader.html") ) then + templates:apply(doc($model?projectResources || "html/functionHeader.html"), $wdbfp:lookup, $model) (: 2b. :) else if ( wdb:findProjectFunction($model, 'wdbPF:getFunctionHeader', 1) ) then (wdb:getProjectFunction($model, 'wdbPF:getFunctionHeader', 1))($model) (: 3a. :) - else if ( doc-available($config:data || '/resources/' || $name || 'Header.html') ) then - templates:apply(doc($config:data || '/resources/' || $name || 'Header.html'), $wdbfp:lookup, $model) + else if ( doc-available($config:data || '/resources/html/' || $name || 'Header.html') ) then + templates:apply(doc($config:data || '/resources/html/' || $name || 'Header.html'), $wdbfp:lookup, $model) (: 4a. :) else if ( doc-available($config:data || "/resources/functionHeader.html") ) then templates:apply(doc($config:data|| "/resources/functionHeader.html"), $wdbfp:lookup, $model) @@ -218,12 +218,12 @@ function wdbfp:get ( $type as xs:string, $edPath as xs:string, $model ) { (: get the footer for function pages from either projectSpec HTML, projectSpec function or an empty sequence :) declare function wdbfp:getFooter($node as node(), $model as map(*)) as node()* { - if (doc-available($model("projectResources") || 'functionFooter.html')) then - templates:apply(doc($model("projectResources") || 'functionFooter.html'), $wdbfp:lookup, $model) + if (doc-available($model("projectResources") || 'html/functionFooter.html')) then + templates:apply(doc($model("projectResources") || 'html/functionFooter.html'), $wdbfp:lookup, $model) else if (wdb:findProjectFunction($model, 'wdbPF:getFunctionFooter', 1)) then (wdb:getProjectFunction($model, 'wdbPF:getFunctionFooter', 1))($model) - else if ( doc-available($config:data || "/resources/mainFooter.html") ) then - doc($config:data || "/resources/mainFooter.html") + else if ( doc-available($config:data || "/resources/html/mainFooter.html") ) then + doc($config:data || "/resources/html/mainFooter.html") else if (wdb:findProjectFunction($model, 'wdbPF:getMainFooter', 1)) then (wdb:getProjectFunction($model, 'wdbPF:getMainFooter', 1))($model) else () diff --git a/edoc/modules/start.xqm b/edoc/modules/start.xqm index 51fd45f7..f6858656 100644 --- a/edoc/modules/start.xqm +++ b/edoc/modules/start.xqm @@ -32,8 +32,8 @@ declare function wdbst:getStartLeft( $node as node(), $model as map(*) ) as node (: get the main part of the start page from either projectSpec HTML, projectSpec function or return an empty seq :) declare function wdbst:getStart ( $node as node(), $model as map(*) ) as node()* { - if ( doc-available($model("projectResources") || '/startRight.html') ) then - templates:apply(doc($model("projectResources") || '/startRight.html'), $wdbst:lookup, $model) + if ( doc-available($model("projectResources") || '/html/startRight.html') ) then + templates:apply(doc($model("projectResources") || '/html/startRight.html'), $wdbst:lookup, $model) else if ( wdb:findProjectFunction($model, "wdbPF:getStart", 1) ) then (wdb:getProjectFunction($model, "wdbPF:getStart", 1))($model) else if ( doc-available($config:data || '/resources/xsl/start.xsl') ) then diff --git a/edoc/modules/view.xqm b/edoc/modules/view.xqm index 08ed4580..aff82971 100644 --- a/edoc/modules/view.xqm +++ b/edoc/modules/view.xqm @@ -138,49 +138,49 @@ declare function wdbv:getHead ( $node as node(), $model as map(*) ) as element(h : return the header - if there is a project specific function, use it : : order of evaluation: - : 1. {$projectResources}/header.html – this must contain one html:header, the + : 1. {$projectResources}/html/header.html – this must contain one html:header, the : contents of which will be sent through the templating system : 2. instance or project specific wdbPF:getHeader#1 : 3. evaluation of all 4 constituents of the header in a row - : a) wdbPF:getHeaderLeft#1 or {$config:data}/resources/headerLeft.html or empty html:p - : b) wdbPF:getHeaderCentre#1 or {$config:data}/resources/headerCentre.html or html:h1 - : c) wdbPF:getHeaderMenu#1 or {$config:data}/resources/headerMenu.html or html:button - : d) wdbPF:getHeaderRight#1 or {$config:data}/resources/headerRight.html or empty html:p + : a) wdbPF:getHeaderLeft#1 or {$config:data}/resources/html/headerLeft.html or empty html:p + : b) wdbPF:getHeaderCentre#1 or {$config:data}/resources/html/headerCentre.html or html:h1 + : c) wdbPF:getHeaderMenu#1 or {$config:data}/resources/html/headerMenu.html or html:button + : d) wdbPF:getHeaderRight#1 or {$config:data}/resources/html/headerRight.html or empty html:p :) declare function wdbv:getHeader ( $node as node(), $model as map(*) ) as element() { <header>{ - if ( doc-available($model?projectResources || '/header.html') ) - then templates:apply(doc($model?projectResources || '/header.html')/header/*, $wdbv:lookup, $model) + if ( doc-available($model?projectResources || '/html/header.html') ) + then templates:apply(doc($model?projectResources || '/html/header.html')/header/*, $wdbv:lookup, $model) else if ( wdb:findProjectFunction($model, 'wdbPF:getHeader', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeader", 1))($model) else ( <div class="headerSide" role="navigation">{ if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderLeft', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeaderLeft", 1))($model) - else if ( doc-available($config:data || "/resources/headerLeft.html") ) then - templates:apply(doc($config:data || "/resources/headerLeft.html"), $wdbv:lookup, $model)/* + else if ( doc-available($config:data || "/resources/html/headerLeft.html") ) then + templates:apply(doc($config:data || "/resources/html/headerLeft.html"), $wdbv:lookup, $model)/* else <p /> }</div>, <div class="headerCentre">{ if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderCentre', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeaderCentre", 1))($model) - else if ( doc-available($config:data || "/resources/headerCentre.html") ) then - templates:apply(doc($config:data || "/resources/headerCentre.html"), $wdbv:lookup, $model)/* + else if ( doc-available($config:data || "/resources/html/headerCentre.html") ) then + templates:apply(doc($config:data || "/resources/html/headerCentre.html"), $wdbv:lookup, $model)/* else <h1>{$model("title")}</h1> }</div>, <div class="headerMenu" role="navigation">{( if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderMenu', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeaderMenu", 1))($model) - else if ( doc-available($config:data || "/resources/headerMenu.html") ) then - templates:apply(doc($config:data || "/resources/headerMenu.html"), $wdbv:lookup, $model)/* + else if ( doc-available($config:data || "/resources/html/headerMenu.html") ) then + templates:apply(doc($config:data || "/resources/html/headerMenu.html"), $wdbv:lookup, $model)/* else <button type="button" class="dispOpts respNav" tabindex="0">≡</button> )}</div>, <div class="headerSide" role="navigation">{ if ( wdb:findProjectFunction($model, 'wdbPF:getHeaderRight', 1) ) then (wdb:getProjectFunction($model, "wdbPF:getHeaderRight", 1))($model) - else if ( doc-available($config:data || "/resources/headerRight.html") ) then - templates:apply(doc($config:data || "/resources/headerRight.html"), $wdbv:lookup, $model)/* + else if ( doc-available($config:data || "/resources/html/headerRight.html") ) then + templates:apply(doc($config:data || "/resources/html/headerRight.html"), $wdbv:lookup, $model)/* else <p /> }</div> ) @@ -213,38 +213,39 @@ declare function wdbv:getContent ( $node as node(), $model as map(*) ) { } }; +(: TODO: replace the repetitive if (doc-avilable(a) then a else if (doc-available(b) then b else c) with a function :) (:~ : return the global (i.e., full width) footer : : order of evaluation: - : 1. {$config:data}/resources/mainFooter.html - : 2. {$projectResources}/mainFooter.html + : 1. {$config:data}/resources/html/mainFooter.html + : 2. {$projectResources}/html/mainFooter.html : 3. wdbPF:getMainFooter#1 :) declare function wdbv:getGlobalFooter ( $node as node(), $model as map(*) ) as element(footer)? { - if ( doc-available($config:data || "/resources/mainFooter.html") ) - then templates:apply(doc($config:data || "/resources/mainFooter.html"), $wdbv:lookup, $model) - else if ( doc-available($model?projectResources || '/mainFooter.html') ) - then templates:apply(doc($model?projectResources || '/mainFooter.html'), $wdbv:lookup, $model) + if ( doc-available($config:data || "/resources/html/mainFooter.html") ) + then templates:apply(doc($config:data || "/resources/html/mainFooter.html"), $wdbv:lookup, $model) + else if ( doc-available($model?projectResources || '/html/mainFooter.html') ) + then templates:apply(doc($model?projectResources || '/html/mainFooter.html'), $wdbv:lookup, $model) else if ( wdb:findProjectFunction($model, "wdbPF:getMainFooter", 1) ) then (wdb:getProjectFunction($model, "wdbPF:getMainFooter", 1))($model) else () }; declare function wdbv:getLeftFooter ( $node as node(), $model as map(*) ) as element(footer)? { - if (doc-available($model?projectResources || "/footer.html")) then - templates:apply(doc($model?projectResources || "/footer.html"), $wdbv:lookup, $model) + if (doc-available($model?projectResources || "/html/footer.html")) then + templates:apply(doc($model?projectResources || "/html/footer.html"), $wdbv:lookup, $model) else if (wdb:findProjectFunction($model, "wdbPF:getProjectFooter", 1)) then (wdb:getProjectFunction($model, "wdbPF:getProjectFooter", 1))($model) - else if (doc-available($config:edocBaseDB || "/resources/footer.html")) then - templates:apply(doc($config:edocBaseDB || "/resources/footer.html"), $wdbv:lookup, $model) + else if (doc-available($config:edocBaseDB || "/resources/html/footer.html")) then + templates:apply(doc($config:edocBaseDB || "/resources/html/footer.html"), $wdbv:lookup, $model) else () }; declare function wdbv:getRightFooter ( $node as node(), $model as map(*) ) as element(footer)? { - if (doc-available($model?projectResources || "/projectRightFooter.html")) then - templates:apply(doc($model?projectResources || "/projectRightFooter.html"), $wdbv:lookup, $model) + if (doc-available($model?projectResources || "/html/projectRightFooter.html")) then + templates:apply(doc($model?projectResources || "/html/projectRightFooter.html"), $wdbv:lookup, $model) else if (wdb:findProjectFunction($model, "wdbPF:getProjectRightFooter", 1)) then (wdb:getProjectFunction($model, "wdbPF:getProjectRightFooter", 1))($model) - else if (doc-available($config:data || "/resources/rightFooter.html")) then - templates:apply(doc($config:data || "/resources/rightFooter.html"), $wdbv:lookup, $model) + else if (doc-available($config:data || "/resourceshtml//rightFooter.html")) then + templates:apply(doc($config:data || "/resources/html/rightFooter.html"), $wdbv:lookup, $model) else () }; From b28f837489167e2edf2fca0438e15022b65d2068 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar <dario.kampkaspar@tu-darmstadt.de> Date: Fri, 18 Jul 2025 16:23:11 +0200 Subject: [PATCH 118/151] forgot an instance of CSS in new structure --- edoc/admin/admin.xqm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/edoc/admin/admin.xqm b/edoc/admin/admin.xqm index 7c5af798..4c3e8538 100644 --- a/edoc/admin/admin.xqm +++ b/edoc/admin/admin.xqm @@ -69,10 +69,10 @@ declare function wdbAdmin:getAside ($node as node(), $model as map(*)) as elemen }; declare function wdbAdmin:css ( $node as node(), $model as map(*) ) as element()* { - if ( unparsed-text-available($config:data || "/resources/wdb.css") ) - then <link rel="stylesheet" type="text/css" href="../data/resources/wdb.css" /> + if ( unparsed-text-available($config:data || "/resources/css/wdb.css") ) + then <link rel="stylesheet" type="text/css" href="../data/resources/css/wdb.css" /> else (), - if ( unparsed-text-available($config:data || "/resources/admin.css") ) - then <link rel="stylesheet" type="text/css" href="../data/resources/admin.css" /> + if ( unparsed-text-available($config:data || "/resources/css/admin.css") ) + then <link rel="stylesheet" type="text/css" href="../data/resources/css/admin.css" /> else () }; From cc94318dd704860e16209b499e2d4cfb2fd5bb9a Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar <dario.kampkaspar@tu-darmstadt.de> Date: Fri, 18 Jul 2025 16:33:28 +0200 Subject: [PATCH 119/151] =?UTF-8?q?project=20XSLT=20templates=20only=20imp?= =?UTF-8?q?ort=20instance=E2=80=99s=20XSLTs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #598 --- edoc/admin/project-template/resources/xsl/tei-common.xsl | 5 ++++- edoc/data/resources/xsl/tei-common.xsl | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/edoc/admin/project-template/resources/xsl/tei-common.xsl b/edoc/admin/project-template/resources/xsl/tei-common.xsl index 37bbe354..c2ae9bdb 100644 --- a/edoc/admin/project-template/resources/xsl/tei-common.xsl +++ b/edoc/admin/project-template/resources/xsl/tei-common.xsl @@ -1,4 +1,7 @@ <xsl:stylesheet xmlns:exist="http://exist.sourceforge.net/NS/exist" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" exclude-result-prefixes="#all" version="3.0"> - <xsl:import href="../../../resources/xsl/tei-common.xsl"/> + <!-- tei-common.xsl is imported by other XSLTs alongside with their more generic ones. To avoid importing + edoc/resources/xsl/tei-common.xsl multiple times, this is commented out and should be used only if no other files + in a chain import it --> + <!-- <xsl:import href="../../../resources/xsl/tei-common.xsl"/>--> </xsl:stylesheet> \ No newline at end of file diff --git a/edoc/data/resources/xsl/tei-common.xsl b/edoc/data/resources/xsl/tei-common.xsl index 37bbe354..c2ae9bdb 100644 --- a/edoc/data/resources/xsl/tei-common.xsl +++ b/edoc/data/resources/xsl/tei-common.xsl @@ -1,4 +1,7 @@ <xsl:stylesheet xmlns:exist="http://exist.sourceforge.net/NS/exist" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" exclude-result-prefixes="#all" version="3.0"> - <xsl:import href="../../../resources/xsl/tei-common.xsl"/> + <!-- tei-common.xsl is imported by other XSLTs alongside with their more generic ones. To avoid importing + edoc/resources/xsl/tei-common.xsl multiple times, this is commented out and should be used only if no other files + in a chain import it --> + <!-- <xsl:import href="../../../resources/xsl/tei-common.xsl"/>--> </xsl:stylesheet> \ No newline at end of file From e6ba900fe4c431d8a70dd7d0c94dacc8512431b3 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar <dario.kampkaspar@tu-darmstadt.de> Date: Fri, 18 Jul 2025 16:34:58 +0200 Subject: [PATCH 120/151] porject.xqm is created of a main project but not sub-projects Closes #602 #600 --- edoc/admin/new.xqm | 55 ++++++++++++++----------- edoc/admin/project-template/project.xqm | 5 +++ 2 files changed, 37 insertions(+), 23 deletions(-) create mode 100644 edoc/admin/project-template/project.xqm diff --git a/edoc/admin/new.xqm b/edoc/admin/new.xqm index d2bdbf6b..8303da48 100644 --- a/edoc/admin/new.xqm +++ b/edoc/admin/new.xqm @@ -45,18 +45,39 @@ declare function wdbPN:body ( $node as node(), $model as map(*), $pName as xs:st (: TODO: this should be done in wdbRc:createSubcollection #424 :) let $collection-uri := $create[2] - (: TODO: subcollections must follow new structure, cf. #326 :) let $textCollection := xmldb:create-collection($collection-uri, "texts") - let $resourcesCollection := xmldb:create-collection($collection-uri, "resources") - , $resourcesSubCollections := ( - xmldb:create-collection($collection-uri || "/resources", "blobs"), - xmldb:create-collection($collection-uri || "/resources", "css"), - xmldb:create-collection($collection-uri || "/resources", "html"), - xmldb:create-collection($collection-uri || "/resources", "images"), - xmldb:create-collection($collection-uri || "/resources", "js"), - xmldb:create-collection($collection-uri || "/resources", "xq") + (: create collection resources and project.xqm only if this is a main project :) + let $resources := if ( $targetCollection = 'data' ) + then + let $resourcesCollection := xmldb:create-collection($collection-uri, "resources") + return ( + xmldb:create-collection($collection-uri || "/resources", "blobs"), + xmldb:create-collection($collection-uri || "/resources", "css"), + xmldb:create-collection($collection-uri || "/resources", "html"), + xmldb:create-collection($collection-uri || "/resources", "images"), + xmldb:create-collection($collection-uri || "/resources", "js"), + xmldb:create-collection($collection-uri || "/resources", "xq"), + + xmldb:copy-collection($config:edocBaseDB || "/admin/project-template/resources/xsl", $resourcesCollection), + + sm:chmod(xs:anyURI($resourcesCollection), 'rwxrwxr-x'), + sm:chown(xs:anyURI($resourcesCollection), "wdb:wdbusers"), + for $c in xmldb:get-child-collections($resourcesCollection) + return ( + sm:chmod(xs:anyURI($resourcesCollection || '/' || $c), 'rwxrwxr-x'), + sm:chown(xs:anyURI($resourcesCollection || '/' || $c), "wdb:wdbusers") + ), + for $f in xmldb:get-child-resources($resourcesCollection || "/xsl") + return ( + sm:chmod(xs:anyURI($resourcesCollection || "/xsl/" || $f), "rwxrwxr-x"), + sm:chown(xs:anyURI($resourcesCollection || "/xsl/" || $f), "wdb:wdbusers") + ), + + xmldb:copy-resource($config:edocBaseDB || "/admin/project-template", "project.xqm", $collection-uri, "project.xqm"), + sm:chown(xs:anyURI($collection-uri || "/project.xqm"), "wdb:wdbusers"), + sm:chmod(xs:anyURI($collection-uri || "/project.xqm"), "rwxrwxr-x") ) - , $copy := xmldb:copy-collection($config:edocBaseDB || "/admin/project-template/resources/xsl", $resourcesCollection) + else () let $metaFile := $collection-uri || "/wdbmeta.xml" , $MD := doc($metaFile) @@ -70,21 +91,9 @@ declare function wdbPN:body ( $node as node(), $model as map(*), $pName as xs:st sm:chmod(xs:anyURI($collection-uri), 'rwxrwxr-x'), sm:chmod(xs:anyURI($textCollection), 'rwxrwxr-x'), sm:chmod(xs:anyURI($metaFile), 'rw-rw-r--'), - sm:chmod(xs:anyURI($resourcesCollection), 'rwxrwxr-x'), sm:chown(xs:anyURI($collection-uri), "wdb:wdbusers"), sm:chown(xs:anyURI($textCollection), "wdb:wdbusers"), - sm:chown(xs:anyURI($metaFile), "wdb:wdbusers"), - sm:chown(xs:anyURI($resourcesCollection), "wdb:wdbusers"), - for $c in xmldb:get-child-collections($resourcesCollection) - return ( - sm:chmod(xs:anyURI($resourcesCollection || '/' || $c), 'rwxrwxr-x'), - sm:chown(xs:anyURI($resourcesCollection || '/' || $c), "wdb:wdbusers") - ), - for $f in xmldb:get-child-resources($resourcesCollection || "/xsl") - return ( - sm:chmod(xs:anyURI($resourcesCollection || "/xsl/" || $f), "rwxrwxr-x"), - sm:chown(xs:anyURI($resourcesCollection || "/xsl/" || $f), "wdb:wdbusers") - ) + sm:chown(xs:anyURI($metaFile), "wdb:wdbusers") ) let $addMD := ( diff --git a/edoc/admin/project-template/project.xqm b/edoc/admin/project-template/project.xqm new file mode 100644 index 00000000..4b869cb3 --- /dev/null +++ b/edoc/admin/project-template/project.xqm @@ -0,0 +1,5 @@ +xquery version "3.1"; + +module namespace wdbPF = "https://github.com/dariok/wdbplus/projectFiles"; + +declare namespace tei = "http://www.tei-c.org/ns/1.0"; \ No newline at end of file From 51e653f644cd5db82d768a5d8b67acb6fb549a5e Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar <dario.kampkaspar@tu-darmstadt.de> Date: Fri, 18 Jul 2025 17:04:38 +0200 Subject: [PATCH 121/151] prepared a list of main changes in README --- README.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6a6515fe..30fc5d4d 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,29 @@ This framework still lacks a good name. If you have an idea, please let me know! Release 25Q3 dropped support for more unsued functions: - `wdb:getFilePath ( $id as xs:string )`: use the map from `wdbFiles:getFullPath` instead +- the default layout of all `resources` collections has changed to group files by type. This also affects the main + project specific overrides, i.e. `project.js` and `project.css`. An XQuery is provided to move all files to their + appropriate new locations (TODO: add file name here). + This also affects `edoc/data/resources` and `edoc/resources` so you might have to change imports manually if you make + use of any file in these collections. + +Changes in standard behaviour +- sub-projects will now make use of process inheritance; i.e., they only define empty `processes` with no `command`. A + `command` is then picked by traversing up through parent `wdbmeta.xml` (i.e., one that is pointed to by a + `struct/import`; worst case: data). This way, you can still have different `command` defined for sub-projects (and + their children) but do not need to change the path for every sub-project. +- as part of this, no XSLTs are being copied to `{$subproject}/resources` as inheritance is now the standard. This way, + surplus XSLTs do not have to be deleted or kept up to date. As said above, it is still possible to create a `command` + for this sub-project tree and create specific XSLTs (usually by including the main XSLTs) +- standard XSLTs for a new project are now bare: they only include `/edoc/data/resources/xslt/{$currentFileName}`, and + `tei-common.xsl` (unless it’s common itself). ### 24Q4 Release 24Q4 dropped another set of functions that were unused: - `wdb:getEdFromFileID( $id as xs:string )`: `(wdbFiles:getFullPath($id))?projectPath` returns the base path to `wdbmeta.xml` -- `wdb:getMetaElementFromEd ( $ed as xs:string )`: use `doc( (doc("/db/apps/edoc/index/project-index.xml")/id($ed))/@path || '/wdbmeta.xml' )/id($ed)[self::meta:projectMD]` instead +- `wdb:getMetaElementFromEd ( $ed as xs:string )`: use + `doc( (doc("/db/apps/edoc/index/project-index.xml")/id($ed))/@path || '/wdbmeta.xml' )/id($ed)[self::meta:projectMD]` instead - `wdb:getMetaFile( $pathToEd )`: `(wdbFiles:getFullPath($ed))?projectPath` returns the base path to `wdbmeta.xml` - `wdb:getProjectPathFromId ( $ed )`: use `(wdbFiles:getFullPath($ed))?projectPath` instead @@ -88,9 +105,11 @@ into `/db/apps/edoc` and want to put your projects into `/db/apps/edoc/data/your <files> <file path="pathTo.xml" xml:id="xml-id" /> </files> - <process target="html"> - <command type="xsl">/db/apps/edoc/resources/xsl/tei-transcript.xsl</command> - </process> + <processes> + <process target="html"> + <command type="xsl">/db/apps/edoc/resources/xsl/tei-transcript.xsl</command> + </process> + </processes> <struct label="1722" order="1722"> <view file="xml-id" label="Title of File" /> </struct> From d2d4d04b98a521df78bcfe610d7f06a7e7e96a14 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar <dario.kampkaspar@tu-darmstadt.de> Date: Mon, 21 Jul 2025 16:57:37 +0200 Subject: [PATCH 122/151] Move wdbmeta to admin and include only necessary content Cf. #326 Closes #353 #594 --- edoc/admin/project-template/wdbmeta.xml | 44 +++++++++++++++++++++++++ edoc/resources/wdbmeta.xml | 31 ----------------- edoc/rest/rest-coll.xql | 5 ++- 3 files changed, 48 insertions(+), 32 deletions(-) create mode 100644 edoc/admin/project-template/wdbmeta.xml delete mode 100644 edoc/resources/wdbmeta.xml diff --git a/edoc/admin/project-template/wdbmeta.xml b/edoc/admin/project-template/wdbmeta.xml new file mode 100644 index 00000000..8b5974fe --- /dev/null +++ b/edoc/admin/project-template/wdbmeta.xml @@ -0,0 +1,44 @@ +<?xml-model href="https://raw.githubusercontent.com/dariok/wdbmeta/master/wdbmeta.rng" schematypens="http://relaxng.org/ns/structure/1.0"?> +<projectMD xmlns="https://github.com/dariok/wdbplus/wdbmeta"> + <projectID></projectID> + <titleData> + <title> + + + + + + + + + + + + + + + + + + + + + full text of transcribed sources + + + + + + + (no licence stated) + + + + + + resources/xsl/tei-transcript.xsl + + + + \ No newline at end of file diff --git a/edoc/resources/wdbmeta.xml b/edoc/resources/wdbmeta.xml deleted file mode 100644 index b927dac4..00000000 --- a/edoc/resources/wdbmeta.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - resources/xsl/tei-transcript.xsl - - - - \ No newline at end of file diff --git a/edoc/rest/rest-coll.xql b/edoc/rest/rest-coll.xql index 90759ccd..0ca7b4e7 100644 --- a/edoc/rest/rest-coll.xql +++ b/edoc/rest/rest-coll.xql @@ -103,7 +103,7 @@ function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as else let $subCollection := xmldb:create-collection($collection, $collectionData?collectionName) - let $co := xmldb:copy-resource($config:edocBaseDB || "/resources", "wdbmeta.xml", $subCollection, "wdbmeta.xml") + let $co := xmldb:copy-resource($config:edocBaseDB || "/admin/project-template", "wdbmeta.xml", $subCollection, "wdbmeta.xml") let $newMetaPath := $subCollection || "/wdbmeta.xml" let $collectionPermissions := sm:get-permissions(xs:anyURI($collection)) @@ -133,6 +133,9 @@ function wdbRc:createSubcollection ( $collectionData as map(*), $collectionID as file="{$collectionData?id}" label="{$collectionData?name}" /> into $parentMeta/meta:projectMD/meta:struct + (: TODO: insert date, involvement, place, language, type, etc. :) + (: TODO: insert $collectionData?name into projectMD/struct/@label :) + return ( From a326e141c48513742e75b40913cd25a2dae18c89 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Mon, 21 Jul 2025 17:01:34 +0200 Subject: [PATCH 123/151] move to Xuery 3.1 Closes #500 --- edoc/admin/global.xqm | 2 +- edoc/admin/new.xqm | 2 +- edoc/modules/stats.xqm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/edoc/admin/global.xqm b/edoc/admin/global.xqm index 5c81116e..30a91cec 100644 --- a/edoc/admin/global.xqm +++ b/edoc/admin/global.xqm @@ -1,4 +1,4 @@ -xquery version "3.0"; +xquery version "3.1"; module namespace wdbGS = "https://github.com/dariok/wdbplus/GlobalSettings"; diff --git a/edoc/admin/new.xqm b/edoc/admin/new.xqm index 8303da48..bf881504 100644 --- a/edoc/admin/new.xqm +++ b/edoc/admin/new.xqm @@ -1,4 +1,4 @@ -xquery version "3.0"; +xquery version "3.1"; module namespace wdbPN = "https://github.com/dariok/wdbplus/ProjectNew"; diff --git a/edoc/modules/stats.xqm b/edoc/modules/stats.xqm index 2f7cbafe..ddbb724b 100644 --- a/edoc/modules/stats.xqm +++ b/edoc/modules/stats.xqm @@ -1,4 +1,4 @@ -xquery version "3.0"; +xquery version "3.1"; module namespace wdbs = "https://github.com/dariok/wdbplus/stats"; From 93c21c9a02fd16b28b48579ee9e2d525e958156f Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Jul 2025 11:13:42 +0200 Subject: [PATCH 124/151] updated XString --- edoc/include/xstring | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/include/xstring b/edoc/include/xstring index 375c9791..161fa524 160000 --- a/edoc/include/xstring +++ b/edoc/include/xstring @@ -1 +1 @@ -Subproject commit 375c97910f230dd01ad0d65a7e25ff0bfa945dd3 +Subproject commit 161fa52464122bff89c45f2b467ebb9383d00431 From 979529adaae6fca1208d629ae1f859c816379cb1 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Jul 2025 11:26:45 +0200 Subject: [PATCH 125/151] Create data/logs with general errors.xml for logging Closes #608 --- edoc/logs/errors.xml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 edoc/logs/errors.xml diff --git a/edoc/logs/errors.xml b/edoc/logs/errors.xml new file mode 100644 index 00000000..ff5db007 --- /dev/null +++ b/edoc/logs/errors.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file From d3a312f16534d46b44b663e678045488cbe10526 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Jul 2025 13:47:10 +0200 Subject: [PATCH 126/151] wirte errors to logs/error.xqm in addition to log4j Closes #609 --- edoc/modules/error.xqm | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/edoc/modules/error.xqm b/edoc/modules/error.xqm index 36f2eb9c..6ef9108e 100644 --- a/edoc/modules/error.xqm +++ b/edoc/modules/error.xqm @@ -2,7 +2,8 @@ xquery version "3.1"; module namespace wdbErr = "https://github.com/dariok/wdbplus/errors"; -import module namespace functx = "http://www.functx.com"; +import module namespace config = "https://github.com/dariok/wdbplus/config" at "wdb-config.xqm"; +import module namespace functx = "http://www.functx.com"; declare namespace response = "http://exist-db.org/xquery/response"; declare namespace map = "http://www.w3.org/2005/xpath-functions/map"; @@ -53,6 +54,7 @@ declare function wdbErr:error ( $data as map (*) ) as item()+ { return ( util:log("error", $error), util:log("info", $data), + wdbErr:store("error", $error, $data), if ( response:exists() ) then response:set-status-code($statusCode) else (), @@ -97,3 +99,19 @@ declare function wdbErr:get ( $test as item()*, $prefix as xs:string* ) as eleme (
    {string-join(($prefix, "element(" || local-name($test) || ")"), ' → ')}
    ,
    {normalize-space($test)}
    ) default return (
    {$prefix}
    ,
    {$test}
    ) }; + +declare function wdbErr:store ( $type as xs:string, $description as xs:string, $content as map(*) ) as xs:string { + let $id := util:uuid() + + return ( + $id || " - " || $description || " – " || $type || " - " || serialize($content), + update insert + + { $description } + {$type} + { xs:dateTime(current-dateTime()) } + { wdbErr:get($content, '') } + + into doc($config:edocBaseDB || "/logs/errors.xml")//wdbErr:errors + ) +}; From 1e987c8e0b87bc876675b03fd0962fd140ae5187 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Jul 2025 15:01:58 +0200 Subject: [PATCH 127/151] fix model creation without ed or id (= for data) --- edoc/modules/model.xqm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/edoc/modules/model.xqm b/edoc/modules/model.xqm index 5cc51346..7d972c0d 100644 --- a/edoc/modules/model.xqm +++ b/edoc/modules/model.xqm @@ -32,12 +32,13 @@ declare namespace tei = "http://www.tei-c.org/ns/1.0"; declare function wdbm:populateModel ( $id as xs:string?, $ed as xs:string?, $view as xs:string, $p as xs:string, $q as xs:string ) as item()* { try { - let $filePathInfo := if ( $ed = "" and $id = "" ) + (: get the file path info :) + let $filePathInfo := if ( not($ed or $id) ) then map { "projectPath": $config:data, "collectionPath": $config:data, - "fileName": $config:data || "/wdbmeta.xml", + "fileName": "wdbmeta.xml", "mainProject": $config:data } else From ffa1d7cac36932d5d69fa99ca593bc07dca29161 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Wed, 23 Jul 2025 15:07:03 +0200 Subject: [PATCH 128/151] UUIDs are not always valid xs:id --- edoc/modules/error.xqm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edoc/modules/error.xqm b/edoc/modules/error.xqm index 6ef9108e..d13af72c 100644 --- a/edoc/modules/error.xqm +++ b/edoc/modules/error.xqm @@ -106,7 +106,7 @@ declare function wdbErr:store ( $type as xs:string, $description as xs:string, $ return ( $id || " - " || $description || " – " || $type || " - " || serialize($content), update insert - + { $description } {$type} { xs:dateTime(current-dateTime()) } From b581cced645cf9e46bd86b66cae357b36cedb317 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 4 Sep 2025 12:59:34 +0200 Subject: [PATCH 129/151] prepare basics to use Roaster for RESTv2 Closes #547 --- edoc/controller.xql | 57 +++++++++++++-------------------------------- edoc/expath-pkg.xml | 2 ++ edoc/rest2/api.xq | 23 ++++++++++++++++++ 3 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 edoc/rest2/api.xq diff --git a/edoc/controller.xql b/edoc/controller.xql index 08ddc788..ef7c2757 100644 --- a/edoc/controller.xql +++ b/edoc/controller.xql @@ -7,8 +7,8 @@ xquery version "3.1"; import module namespace login = "http://exist-db.org/xquery/login" at "resource:org/exist/xquery/modules/persistentlogin/login.xql"; import module namespace request = "http://exist-db.org/xquery/request" at "java:org.exist.xquery.functions.request.RequestModule"; -import module namespace sm = "http://exist-db.org/xquery/securitymanager" at "java:org.exist.xquery.functions.securitymanager.SecurityManagerModule"; -import module namespace wdba = "https://github.com/dariok/wdbplus/auth" at "modules/auth.xqm"; +(: import module namespace sm = "http://exist-db.org/xquery/securitymanager" at "java:org.exist.xquery.functions.securitymanager.SecurityManagerModule"; +import module namespace wdba = "https://github.com/dariok/wdbplus/auth" at "modules/auth.xqm"; :) declare namespace exist = "http://exist.sourceforge.net/NS/exist"; @@ -18,50 +18,25 @@ declare variable $exist:controller external; declare variable $exist:prefix external; declare variable $exist:root external; -(: von eXide geklaut :) -declare function local:user-allowed() as xs:boolean { - request:get-attribute("wd.user") - and request:get-attribute("wd.user") != "guest" -}; -declare function local:query-execution-allowed() as xs:boolean { - local:user-allowed() - or sm:is-dba( (request:get-attribute("wd.user"), request:get-attribute("xquery.user"), 'nobody')[1] ) -}; +declare variable $local:isget := request:get-method() = ("GET","get"); -let $cookiePath := substring-before(request:get-uri(), $exist:path) - , $duration := xs:dayTimeDuration("P2D") - -return -if ( $exist:resource eq '' or $exist:resource eq 'index.html' ) then - - - -(: login :) -else if ( $exist:resource = 'login' ) then - ( - login:set-user("wd", $cookiePath, $duration, false()), - try { - if (request:get-parameter('logout', '') = 'logout') then - wdba:getAuth(
    , map {'res': 'logout'}) - else if (local:user-allowed()) then - wdba:getAuth(
    , map {'auth': {request:get-attribute("wd.user")}}) - else ( - response:set-status-code(401), - fail - ) - } catch * { - response:set-status-code(403), - {$err:description} - } - ) +if ( contains($exist:path, 'api/v2') ) then + (: REST API :) + + + +else if ( $exist:resource eq '' or $exist:resource eq 'index.html' ) then + + + (: admin pages :) else if ( ends-with($exist:resource, ".html") and contains($exist:path, '/admin/') ) then - { login:set-user("wd", $cookiePath, $duration, false()) } + - { login:set-user("wd", $cookiePath, $duration, false()) } + @@ -74,7 +49,7 @@ else if ( ends-with($exist:resource, ".html") ) then - { login:set-user("wd", $cookiePath, $duration, false()) } + @@ -86,7 +61,7 @@ else if ( contains($exist:path, "/$shared/") ) then else if ( ends-with($exist:path, ".xql") ) then - { login:set-user("wd", $cookiePath, $duration, false()) } + diff --git a/edoc/expath-pkg.xml b/edoc/expath-pkg.xml index cff067bc..a643779e 100644 --- a/edoc/expath-pkg.xml +++ b/edoc/expath-pkg.xml @@ -1,4 +1,6 @@ W. Digitale Bibliothek + + diff --git a/edoc/rest2/api.xq b/edoc/rest2/api.xq new file mode 100644 index 00000000..dacb3206 --- /dev/null +++ b/edoc/rest2/api.xq @@ -0,0 +1,23 @@ +xquery version "3.1"; + +declare namespace api = "http://github.com/dariok/wdbplus/rest2"; +declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; + +import module namespace roaster = "http://e-editiones.org/roaster"; + +import module namespace r2p = "https://github.com/dariok/wdbplus/rest2/projects" at "projects.xqm"; + +(:~ + : list of definition files to use – relative to the controller path + :) +declare variable $api:definitions := ("rest2/v2.json"); + +(:~ + : Loopkup function to look up a function by name – this is necessary because functions are only known to importing modules + : The name is expected to be a QName, e.g. "rest:listProjects". + :) +declare function api:lookup ( $name as xs:string ) { + function-lookup(xs:QName($name), 1) +}; + +roaster:route($api:definitions, api:lookup#1) From 866732b785d6132b74f6c73a66bdf95e2422e273 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 4 Sep 2025 18:42:09 +0200 Subject: [PATCH 130/151] create project for documentation Cf #586 --- edoc/data/documentation/project.xqm | 5 ++ .../resources/xsl/tei-common.xsl | 7 +++ .../resources/xsl/tei-transcript.xsl | 5 ++ edoc/data/documentation/wdbmeta.xml | 47 +++++++++++++++++++ edoc/index/project-index.xml | 3 +- 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 edoc/data/documentation/project.xqm create mode 100644 edoc/data/documentation/resources/xsl/tei-common.xsl create mode 100644 edoc/data/documentation/resources/xsl/tei-transcript.xsl create mode 100644 edoc/data/documentation/wdbmeta.xml diff --git a/edoc/data/documentation/project.xqm b/edoc/data/documentation/project.xqm new file mode 100644 index 00000000..4b869cb3 --- /dev/null +++ b/edoc/data/documentation/project.xqm @@ -0,0 +1,5 @@ +xquery version "3.1"; + +module namespace wdbPF = "https://github.com/dariok/wdbplus/projectFiles"; + +declare namespace tei = "http://www.tei-c.org/ns/1.0"; \ No newline at end of file diff --git a/edoc/data/documentation/resources/xsl/tei-common.xsl b/edoc/data/documentation/resources/xsl/tei-common.xsl new file mode 100644 index 00000000..c2ae9bdb --- /dev/null +++ b/edoc/data/documentation/resources/xsl/tei-common.xsl @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/edoc/data/documentation/resources/xsl/tei-transcript.xsl b/edoc/data/documentation/resources/xsl/tei-transcript.xsl new file mode 100644 index 00000000..3c7883c4 --- /dev/null +++ b/edoc/data/documentation/resources/xsl/tei-transcript.xsl @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/edoc/data/documentation/wdbmeta.xml b/edoc/data/documentation/wdbmeta.xml new file mode 100644 index 00000000..e3f88a27 --- /dev/null +++ b/edoc/data/documentation/wdbmeta.xml @@ -0,0 +1,47 @@ + + + + + wdb+ Documentation + + + + + + + + + + + + + + + + docu + + + + + + full text of transcribed sources + + + + + + + (no licence stated) + + + + + + resources/xsl/tei-transcript.xsl + + + + + + \ No newline at end of file diff --git a/edoc/index/project-index.xml b/edoc/index/project-index.xml index 430b159a..40982b50 100644 --- a/edoc/index/project-index.xml +++ b/edoc/index/project-index.xml @@ -1,3 +1,4 @@ - + + \ No newline at end of file From 938a6ee4086aa89c11f01e38ee30e288812095aa Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 4 Sep 2025 18:55:01 +0200 Subject: [PATCH 131/151] (for now) do not index documentation Closes. #607 --- edoc/config/edoc/data/documentation/collection.xconf | 6 ++++++ edoc/post-install.xql | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 edoc/config/edoc/data/documentation/collection.xconf diff --git a/edoc/config/edoc/data/documentation/collection.xconf b/edoc/config/edoc/data/documentation/collection.xconf new file mode 100644 index 00000000..56fb2470 --- /dev/null +++ b/edoc/config/edoc/data/documentation/collection.xconf @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/edoc/post-install.xql b/edoc/post-install.xql index 5d4dd10b..e2a3060d 100644 --- a/edoc/post-install.xql +++ b/edoc/post-install.xql @@ -12,10 +12,12 @@ let $indexConfig := ( xmldb:create-collection("/db/system/config/db/apps/edoc", "annotations"), xmldb:create-collection("/db/system/config/db/apps/edoc", "data"), xmldb:create-collection("/db/system/config/db/apps/edoc", "rest"), + xmldb:create-collection("/db/system/config/db/apps/edoc/data", "documentation"), xmldb:store("/db/system/config/db/apps/edoc/addins", "collection.xconf", doc($targetCollection || "/config/edoc/addins/collection.xconf")), xmldb:store("/db/system/config/db/apps/edoc/annotations", "collection.xconf", doc($targetCollection || "/config/edoc/annotations/collection.xconf")), xmldb:store("/db/system/config/db/apps/edoc/data", "collection.xconf", doc($targetCollection || "/config/edoc/data/collection.xconf")), - xmldb:store("/db/system/config/db/apps/edoc/rest", "collection.xconf", doc($targetCollection || "/config/edoc/rest/collection.xconf")) + xmldb:store("/db/system/config/db/apps/edoc/rest", "collection.xconf", doc($targetCollection || "/config/edoc/rest/collection.xconf")), + xmldb:store("/db/system/config/db/apps/edoc/data7documentation", "collection.xconf", doc($targetCollection || "/config/edoc/data/documentation/collection.xconf")) ) let $collsr := ( From c78feecbc300c01291528cb9399982c0b61cc026 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 4 Sep 2025 19:50:36 +0200 Subject: [PATCH 132/151] REST2: list all projects Cf. #578 --- edoc/apiv2.html | 34 + edoc/controller.xql | 41 +- edoc/rest2/projects.xqm | 31 + edoc/rest2/rest-common.xqm | 25 + edoc/rest2/v2.yaml | 1924 ++++++++++++++++++------------------ test/r2projects.http | 7 + 6 files changed, 1100 insertions(+), 962 deletions(-) create mode 100644 edoc/apiv2.html create mode 100644 edoc/rest2/projects.xqm create mode 100644 edoc/rest2/rest-common.xqm create mode 100644 test/r2projects.http diff --git a/edoc/apiv2.html b/edoc/apiv2.html new file mode 100644 index 00000000..c424517f --- /dev/null +++ b/edoc/apiv2.html @@ -0,0 +1,34 @@ + + + + roasted - OpenAPI Router Testapplication + + + + + +
    +
    + + + \ No newline at end of file diff --git a/edoc/controller.xql b/edoc/controller.xql index ef7c2757..92c85b20 100644 --- a/edoc/controller.xql +++ b/edoc/controller.xql @@ -7,8 +7,8 @@ xquery version "3.1"; import module namespace login = "http://exist-db.org/xquery/login" at "resource:org/exist/xquery/modules/persistentlogin/login.xql"; import module namespace request = "http://exist-db.org/xquery/request" at "java:org.exist.xquery.functions.request.RequestModule"; -(: import module namespace sm = "http://exist-db.org/xquery/securitymanager" at "java:org.exist.xquery.functions.securitymanager.SecurityManagerModule"; -import module namespace wdba = "https://github.com/dariok/wdbplus/auth" at "modules/auth.xqm"; :) +(: import module namespace sm = "http://exist-db.org/xquery/securitymanager" at "java:org.exist.xquery.functions.securitymanager.SecurityManagerModule";:) +import module namespace wdba = "https://github.com/dariok/wdbplus/auth" at "modules/auth.xqm"; declare namespace exist = "http://exist.sourceforge.net/NS/exist"; @@ -16,11 +16,42 @@ declare variable $exist:path external; declare variable $exist:resource external; declare variable $exist:controller external; declare variable $exist:prefix external; -declare variable $exist:root external; +(: declare variable $exist:root external; :) declare variable $local:isget := request:get-method() = ("GET","get"); -if ( contains($exist:path, 'api/v2') ) then +declare function local:user-allowed() as xs:boolean { + request:get-attribute("wd.user") + and request:get-attribute("wd.user") != "guest" +}; + +util:log("info", "request:get-method(): " || request:get-method()), +util:log("info", "exist:path: " || $exist:path), + +(: static HTML page for API documentation should be served directly to make sure it is always accessible :) +if ( + ($local:isget and $exist:path eq "/apiv2.html") or + ($local:isget and matches($exist:path, "^/[^/]+\.json$", "s")) +) then + +else if ( $exist:resource = 'login' ) then + ( + login:set-user("wd", substring-before(request:get-uri(), $exist:path), xs:dayTimeDuration("P2D"), false()), + try { + if (request:get-parameter('logout', '') = 'logout') then + wdba:getAuth(
    , map {'res': 'logout'}) + else if (local:user-allowed()) then + wdba:getAuth(
    , map {'auth': {request:get-attribute("wd.user")}}) + else ( + response:set-status-code(401), + fail + ) + } catch * { + response:set-status-code(403), + {$err:description} + } + ) +else if ( contains($exist:path, 'api/v2') ) then (: REST API :) @@ -32,7 +63,7 @@ else if ( $exist:resource eq '' or $exist:resource eq 'index.html' ) then (: admin pages :) else if ( ends-with($exist:resource, ".html") and contains($exist:path, '/admin/') ) then - + { login:set-user("wd", substring-before(request:get-uri(), $exist:path), xs:dayTimeDuration("P2D"), false()) } diff --git a/edoc/rest2/projects.xqm b/edoc/rest2/projects.xqm new file mode 100644 index 00000000..e9d60187 --- /dev/null +++ b/edoc/rest2/projects.xqm @@ -0,0 +1,31 @@ +xquery version "3.1"; + +module namespace r2p = "https://github.com/dariok/wdbplus/rest2/projects"; + +import module namespace r2 = "https://github.com/dariok/wdbplus/rest2/common" at "rest-common.xqm"; + +declare namespace index = "https://github.com/dariok/wdbplus/index"; +declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; + +declare variable $r2p:base := doc('../config.xml')//*:rest; + +(:~ + : List all projects + : GET {base}/projects + :) + +declare function r2p:listProjects ( $request as map(*) ) as map(*) { + let $projects := doc("/db/apps/edoc/index/project-index.xml")//index:project + + let $result := + + { + for $project in $projects return + + } + + + return r2:returnXmlOrJson($result) +}; diff --git a/edoc/rest2/rest-common.xqm b/edoc/rest2/rest-common.xqm new file mode 100644 index 00000000..8cbebaeb --- /dev/null +++ b/edoc/rest2/rest-common.xqm @@ -0,0 +1,25 @@ +xquery version "3.1"; + +module namespace r2 = "https://github.com/dariok/wdbplus/rest2/common"; + +import module namespace router = "http://e-editiones.org/roaster/router"; + +declare variable $r2:acceptable := ("application/json", "application/xml"); + +declare variable $r2:allOrigins := map { + "Access-Control-Allow-Origin" : "*" +}; +(: , + "Access-Control-Allow-Methods" : "GET, POST, PUT, DELETE, OPTIONS", + "Access-Control-Allow-Headers" : "Content-Type, Authorization", + "Access-Control-Max-Age" : "86400" :) + +declare function r2:returnXmlOrJson ( $data as item() ) as item() { + let $mediaType := request:get-header("Accept") + return + if ( $mediaType = $r2:acceptable ) then ( + router:response(200, $mediaType, $data, $r2:allOrigins) + ) + else + router:response(406, "text/plain", "Not acceptable", $r2:allOrigins) +}; \ No newline at end of file diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index ed872cfb..e5949d58 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -10,1020 +10,1030 @@ info: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html servers: - - url: https://wdbplus.instance/exist/edoc/api/v2 + - url: /exist/apps/edoc tags: - - name: annotations - description: Concerning Hobbits + # - name: annotations + # description: Concerning Hobbits - name: projects description: Operations on wdb+ projects - - name: entities - description: Operations on entities - - name: resources - description: Operations on resources (usually texts) - - name: search - description: Full text search - - name: oai - description: OAI PMH endpoints - - name: dts - description: Endpoints for Distributed Text Services + # - name: entities + # description: Operations on entities + # - name: resources + # description: Operations on resources (usually texts) + # - name: search + # description: Full text search + # - name: oai + # description: OAI PMH endpoints + # - name: dts + # description: Endpoints for Distributed Text Services paths: # TODO – this should only contain functions that are not already covered by the other endpoint (if any): - # /admin + # /api/v2/admin - /annotations: - post: - tags: - - annotations - summary: Add a new full text annotation - description: "Create a new full text annotation; return its location when sucessful.
    **Note:** 1. no checks are performed and multiple requests will create multiple entries. 2. This creates full text annotations only. Changes to the file, including entity markup, must be made using → `PATCH /resources/{id}`" - operationId: #TODO - requestBody: - "$ref": "#/components/requestBodies/annotation" - responses: - "201": - "$ref": "#/components/responses/created" - "400": - "$ref": "#/components/responses/invalidBody" - /annotations/{annotation}: - parameters: - - name: "annotation" - in: path - description: The ID of the annotation - schema: - type: string - required: true - get: - tags: - - annotations - summary: Get annotation by ID - operationId: TODO getAnnotationById - responses: - "200": - description: Annotation has been found - content: - application/json: - schema: - "$ref": "#/components/schemas/annotation.json" - application/xml: - schema: - "$ref": "#/components/schemas/annotation.xml" - "404": - description: No annotation found by this ID - put: - tags: - - annotations - summary: Update an annotation - requestBody: - "$ref": "#/components/requestBodies/annotation" - responses: - "204": - description: Update sucessful. - "400": - "$ref": "#/components/responses/invalidBody" - "404": - description: No annotation found by this ID - delete: - tags: - - annotations - summary: Delete an annotation - operationId: #TODO deleteAnnotation - responses: - "204": - description: The annotation has been deleted - "404": - description: This annotation was not found - /annotations/forFile/{id}: - parameters: - - "$ref": "#/components/parameters/id" - get: - tags: - - annotations - summary: List of annotations related to a file - operationId: #TODO - responses: - "200": - description: Found annotations for this file - content: - application/json: - schema: - "$ref": "#/components/schemas/listAnnotations" - application/xml: - schema: - "$ref": "#/components/schemas/listAnnotations" - "204": - description: No annotations for this file - "404": - description: File $id not found + # /api/v2/annotations: + # post: + # tags: + # - annotations + # summary: Add a new full text annotation + # description: "Create a new full text annotation; return its location when sucessful.
    **Note:** 1. no checks are performed and multiple requests will create multiple entries. 2. This creates full text annotations only. Changes to the file, including entity markup, must be made using → `PATCH /resources/{id}`" + # operationId: #TODO + # requestBody: + # "$ref": "#/components/requestBodies/annotation" + # responses: + # "201": + # "$ref": "#/components/responses/created" + # "400": + # "$ref": "#/components/responses/invalidBody" + # /api/v2/annotations/{annotation}: + # parameters: + # - name: "annotation" + # in: path + # description: The ID of the annotation + # schema: + # type: string + # required: true + # get: + # tags: + # - annotations + # summary: Get annotation by ID + # operationId: TODO getAnnotationById + # responses: + # "200": + # description: Annotation has been found + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/annotation.json" + # application/xml: + # schema: + # "$ref": "#/components/schemas/annotation.xml" + # "404": + # description: No annotation found by this ID + # put: + # tags: + # - annotations + # summary: Update an annotation + # requestBody: + # "$ref": "#/components/requestBodies/annotation" + # responses: + # "204": + # description: Update sucessful. + # "400": + # "$ref": "#/components/responses/invalidBody" + # "404": + # description: No annotation found by this ID + # delete: + # tags: + # - annotations + # summary: Delete an annotation + # operationId: #TODO deleteAnnotation + # responses: + # "204": + # description: The annotation has been deleted + # "404": + # description: This annotation was not found + # /api/v2/annotations/forFile/{id}: + # parameters: + # - "$ref": "#/components/parameters/id" + # get: + # tags: + # - annotations + # summary: List of annotations related to a file + # operationId: #TODO + # responses: + # "200": + # description: Found annotations for this file + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/listAnnotations" + # application/xml: + # schema: + # "$ref": "#/components/schemas/listAnnotations" + # "204": + # description: No annotations for this file + # "404": + # description: File $id not found - /projects: + /api/v2/projects: get: tags: - projects + security: [] summary: List all projects - operationId: #TODO listProjects - responses: - "200": - "$ref": "#/components/responses/projects" - post: - tags: - - projects - summary: Create a project without specifying an ID - description: Create a project with the meta data provided while auto-generating the ID - operationId: #TODO - requestBody: - "$ref": "#/components/requestBodies/project" - responses: - "204": - "$ref": "#/components/responses/created" - "400": - "$ref": "#/components/responses/invalidBody" - "409": - description: A project already exists in this location - /projects/{ed}: - parameters: - - "$ref": "#/components/parameters/ed" - get: - tags: - - projects - summary: Get project contents by ID - operationId: #TODO - responses: - "200": - "$ref": "#/components/responses/projectContents" - "204": - description: The project was found but currently has neither subprojects nor registered resources - "404": - description: No project found by this ID - delete: - tags: - - projects - summary: Delete project - operationId: #TODO - responses: - "204": - description: The project has been deleted - "404": - description: This project was not found - put: - tags: - - projects - summary: Create project with given ID - description: This creates a new or updates an existing project with the ID given as ed and the necessary meta data in the request body - operationId: #TODO - requestBody: - "$ref": "#/components/requestBodies/project" - responses: - "204": - description: The project was created or updated - "400": - "$ref": "#/components/responses/invalidBody" - "404": - description: Project $ed not found - "409": - description: A project exists with this ID in a different location or the location requested contains a project with a different ID - /projects/{ed}/nav: - parameters: - - "$ref": "#/components/parameters/ed" - - "$ref": "#/components/parameters/modified" - get: - tags: - - projects - summary: Get project navigation - operationId: #TODO + operationId: r2p:listProjects responses: "200": - description: Returning navigation - content: - "application/xml": - example: - "text/html": - example: + "$ref": "#/components/responses/result" + # TODO: implement + # post: + # tags: + # - projects + # summary: Create a project without specifying an ID + # description: Create a project with the meta data provided while auto-generating the ID + # operationId: #TODO + # requestBody: + # "$ref": "#/components/requestBodies/project" + # responses: + # "204": + # "$ref": "#/components/responses/created" + # "400": + # "$ref": "#/components/responses/invalidBody" + # "409": + # description: A project already exists in this location + # TODO: implement + # /api/v2/projects/{ed}: + # parameters: + # - "$ref": "#/components/parameters/ed" + # get: + # tags: + # - projects + # summary: Get project contents by ID + # operationId: #TODO + # responses: + # "200": + # "$ref": "#/components/responses/projectContents" + # "204": + # description: The project was found but currently has neither subprojects nor registered resources + # "404": + # description: No project found by this ID + # delete: + # tags: + # - projects + # summary: Delete project + # operationId: #TODO + # responses: + # "204": + # description: The project has been deleted + # "404": + # description: This project was not found + # put: + # tags: + # - projects + # summary: Create project with given ID + # description: This creates a new or updates an existing project with the ID given as ed and the necessary meta data in the request body + # operationId: #TODO + # requestBody: + # "$ref": "#/components/requestBodies/project" + # responses: + # "204": + # description: The project was created or updated + # "400": + # "$ref": "#/components/responses/invalidBody" + # "404": + # description: Project $ed not found + # "409": + # description: A project exists with this ID in a different location or the location requested contains a project with a different ID + + # TODO: implement as a view on the project instead (with parameter ?view=nav or similar) + # /api/v2/projects/{ed}/nav: + # parameters: + # - "$ref": "#/components/parameters/ed" + # - "$ref": "#/components/parameters/modified" + # get: + # tags: + # - projects + # summary: Get project navigation + # operationId: #TODO + # responses: + # "200": + # description: Returning navigation + # content: + # "application/xml": + # example: + # "text/html": + # example: - /entities: - get: - tags: - - entities - summary: Query entities in global registry - operationId: #TODO - parameters: - - "$ref": "#/components/parameters/q" - - "$ref": "#/components/parameters/type" - - "$ref": "#/components/parameters/start" - responses: - "200": - "$ref": "#/components/responses/entities" - "204": - description: No entities were found for the combination of query parameters - post: - tags: - - entities - summary: Create a global entity without specifying an ID - operationId: #TODO - requestBody: - "$ref": "#/components/requestBodies/entity" - responses: - "201": - "$ref": "#/components/responses/created" - "400": - "$ref": "#/components/responses/invalidBody" - "409": - description: The body contains an ID for which an entity is already present - /entities/{entity}: - get: - tags: - - entities - summary: Get details of entity - operationId: #TODO - parameters: - - "$ref": "#/components/parameters/entity" - responses: - "200": - "$ref": "#/components/responses/entity" - "404": - description: Entity not found - put: - tags: - - entities - summary: Create a global entity specifying an ID - operationId: #TODO - requestBody: - "$ref": "#/components/requestBodies/entity" - responses: - "201": - "$ref": "#/components/responses/created" - "204": - description: The entity was updated - "400": - "$ref": "#/components/responses/invalidBody" - "404": - description: Entity $ed not found - "409": - description: The body contains an ID for which an entity is already present - delete: - tags: - - entities - summary: Delete global entity - operationId: #TODO - responses: - "204": - description: The entity has been deleted - "404": - description: This entity was not found - /entities/project/{ed}: - get: - tags: - - entities - summary: Query entities in a project’s registry - parameters: - - "$ref": "#/components/parameters/ed" - - "$ref": "#/components/parameters/q" - - "$ref": "#/components/parameters/type" - - "$ref": "#/components/parameters/start" - operationId: #TODO - responses: - "200": - "$ref": "#/components/responses/entities" - "204": - description: No entities were found for the combination of query parameters - "404": - description: No project by the given ID - post: - tags: - - entities - summary: Create an entity with a project without specifying an ID - operationId: #TODO - requestBody: - "$ref": "#/components/requestBodies/entity" - responses: - "201": - "$ref": "#/components/responses/created" - "400": - "$ref": "#/components/responses/invalidBody" - "409": - description: The body contains an ID for which an entity is already present - /entities/project/{ed}/{entity}: - get: - tags: - - entities - summary: Get details of project entity - operationId: #TODO - parameters: - - "$ref": "#/components/parameters/entity" - responses: - "200": - "$ref": "#/components/responses/entity" - "404": - description: Entity not foun - put: - tags: - - entities - summary: Create a project entity specifying an ID - operationId: #TODO - requestBody: - "$ref": "#/components/requestBodies/entity" - responses: - "201": - "$ref": "#/components/responses/created" - "204": - description: The entity was updated - "400": - "$ref": "#/components/responses/invalidBody" - "404": - description: Project $ed or entity $entity not found - "409": - description: The body contains an ID for which an entity is already present - delete: - tags: - - entities - summary: Delete project entity - operationId: #TODO - responses: - "204": - description: The entity has been deleted - "404": - description: This entity was not found - /entities/refs/{entity}: - parameters: - - "$ref": "#/components/parameters/entity" - get: - tags: - - entities - summary: List projects referring to an entity - operationId: #TODO - parameters: - - "$ref": "#/components/parameters/start" - responses: - "200": - "$ref": "#/components/responses/projects" - "204": - description: No references to the queried entity were found - /entities/refs/project/{ed}/{entity}: - parameters: - - "$ref": "#/components/parameters/ed" - - "$ref": "#/components/parameters/entity" - get: - tags: - - entities - summary: List texts in a project referring to an entity - operationId: #TODO - parameters: - - "$ref": "#/components/parameters/start" - responses: - "200": - "$ref": "#/components/responses/files" - "204": - description: No references to the queried entity were found - "404": - description: The project was not found - /entities/refs/resource/{id}/{entity}: - parameters: - - "$ref": "#/components/parameters/id" - - "$ref": "#/components/parameters/entity" - get: - tags: - - entities - summary: List all fragments in a text containing a reference to an entity - operationId: #TODO - parameters: - - "$ref": "#/components/parameters/start" - responses: - "200": - "$ref": "#/components/responses/fragments" - "204": - description: No references to the queried entity were found - "404": - description: The project was not found + # /api/v2/entities: + # get: + # tags: + # - entities + # summary: Query entities in global registry + # operationId: #TODO + # parameters: + # - "$ref": "#/components/parameters/q" + # - "$ref": "#/components/parameters/type" + # - "$ref": "#/components/parameters/start" + # responses: + # "200": + # "$ref": "#/components/responses/entities" + # "204": + # description: No entities were found for the combination of query parameters + # post: + # tags: + # - entities + # summary: Create a global entity without specifying an ID + # operationId: #TODO + # requestBody: + # "$ref": "#/components/requestBodies/entity" + # responses: + # "201": + # "$ref": "#/components/responses/created" + # "400": + # "$ref": "#/components/responses/invalidBody" + # "409": + # description: The body contains an ID for which an entity is already present + # /api/v2/entities/{entity}: + # get: + # tags: + # - entities + # summary: Get details of entity + # operationId: #TODO + # parameters: + # - "$ref": "#/components/parameters/entity" + # responses: + # "200": + # "$ref": "#/components/responses/entity" + # "404": + # description: Entity not found + # put: + # tags: + # - entities + # summary: Create a global entity specifying an ID + # operationId: #TODO + # requestBody: + # "$ref": "#/components/requestBodies/entity" + # responses: + # "201": + # "$ref": "#/components/responses/created" + # "204": + # description: The entity was updated + # "400": + # "$ref": "#/components/responses/invalidBody" + # "404": + # description: Entity $ed not found + # "409": + # description: The body contains an ID for which an entity is already present + # delete: + # tags: + # - entities + # summary: Delete global entity + # operationId: #TODO + # responses: + # "204": + # description: The entity has been deleted + # "404": + # description: This entity was not found + # /api/v2/entities/project/{ed}: + # get: + # tags: + # - entities + # summary: Query entities in a project’s registry + # parameters: + # - "$ref": "#/components/parameters/ed" + # - "$ref": "#/components/parameters/q" + # - "$ref": "#/components/parameters/type" + # - "$ref": "#/components/parameters/start" + # operationId: #TODO + # responses: + # "200": + # "$ref": "#/components/responses/entities" + # "204": + # description: No entities were found for the combination of query parameters + # "404": + # description: No project by the given ID + # post: + # tags: + # - entities + # summary: Create an entity with a project without specifying an ID + # operationId: #TODO + # requestBody: + # "$ref": "#/components/requestBodies/entity" + # responses: + # "201": + # "$ref": "#/components/responses/created" + # "400": + # "$ref": "#/components/responses/invalidBody" + # "409": + # description: The body contains an ID for which an entity is already present + # /api/v2/entities/project/{ed}/{entity}: + # get: + # tags: + # - entities + # summary: Get details of project entity + # operationId: #TODO + # parameters: + # - "$ref": "#/components/parameters/entity" + # responses: + # "200": + # "$ref": "#/components/responses/entity" + # "404": + # description: Entity not foun + # put: + # tags: + # - entities + # summary: Create a project entity specifying an ID + # operationId: #TODO + # requestBody: + # "$ref": "#/components/requestBodies/entity" + # responses: + # "201": + # "$ref": "#/components/responses/created" + # "204": + # description: The entity was updated + # "400": + # "$ref": "#/components/responses/invalidBody" + # "404": + # description: Project $ed or entity $entity not found + # "409": + # description: The body contains an ID for which an entity is already present + # delete: + # tags: + # - entities + # summary: Delete project entity + # operationId: #TODO + # responses: + # "204": + # description: The entity has been deleted + # "404": + # description: This entity was not found + # /api/v2/entities/refs/{entity}: + # parameters: + # - "$ref": "#/components/parameters/entity" + # get: + # tags: + # - entities + # summary: List projects referring to an entity + # operationId: #TODO + # parameters: + # - "$ref": "#/components/parameters/start" + # responses: + # "200": + # "$ref": "#/components/responses/projects" + # "204": + # description: No references to the queried entity were found + # /api/v2/entities/refs/project/{ed}/{entity}: + # parameters: + # - "$ref": "#/components/parameters/ed" + # - "$ref": "#/components/parameters/entity" + # get: + # tags: + # - entities + # summary: List texts in a project referring to an entity + # operationId: #TODO + # parameters: + # - "$ref": "#/components/parameters/start" + # responses: + # "200": + # "$ref": "#/components/responses/files" + # "204": + # description: No references to the queried entity were found + # "404": + # description: The project was not found + # /api/v2/entities/refs/resource/{id}/{entity}: + # parameters: + # - "$ref": "#/components/parameters/id" + # - "$ref": "#/components/parameters/entity" + # get: + # tags: + # - entities + # summary: List all fragments in a text containing a reference to an entity + # operationId: #TODO + # parameters: + # - "$ref": "#/components/parameters/start" + # responses: + # "200": + # "$ref": "#/components/responses/fragments" + # "204": + # description: No references to the queried entity were found + # "404": + # description: The project was not found - /resources/{id}: - parameters: - - "$ref": "#/components/parameters/id" - get: - tags: - - resources - summary: Get resource by ID - operationId: #TODO - responses: - "200": - description: Resource by ID - content: - "application/tei+xml": - schema: - "$ref": "#/components/schemas/TEI" - "404": - description: No resource found by this ID - put: - tags: - - resources - summary: Create or update a file - operationId: #TODO - requestBody: - description: Create or replace a file with the ID given in id and the content in the request body - required: true - content: - multipart/form-data: - schema: - type: object - properties: - path: - type: string - file: - type: string - format: binary - responses: - "201": - "$ref": "#/components/responses/created" - "204": - description: File has been updated - "400": - "$ref": "#/components/responses/invalidBody" - "404": - description: File $id not found - "409": - description: A file with this ID is present in a different location or a file in this location exists with a different ID - patch: - tags: - - resources - summary: Change a fragment from a file - operationId: #TODO - requestBody: - description: The replacement XML fragment - required: true - content: - application/xml: - schema: #TODO or use an example - responses: - "204": - description: File has been updated - "400": - "$ref": "#/components/responses/invalidBody" - "404": - description: File $id not found - head: - tags: - - resources - summary: Preflight request - operationId: #TODO - responses: - "204": - description: File was found - "404": - description: File $id not found - "409": - description: A file with this ID is present in a different location or a file in this location exists with a different ID - options: - tags: - - resources - summary: Preflight request - operationId: #TODO - responses: - "204": - description: File was found - "404": - description: File $id not found - delete: - tags: - - resources - summary: delete a file - operationId: #TODO - responses: - "204": - description: File was deleted - "404": - description: File $id not found - /resources/{id}/views: - parameters: - - "$ref": "#/components/parameters/id" - get: - tags: - - resources - summary: List views for a file - operationId: #TODO - responses: - "200": - description: Returns a list of available views - content: - application/json: - schema: - "$ref": "#/components/schemas/listViews" - application/xml: - schema: - "$ref": "#/components/schemas/listViews" - /resources/{id}/views/{view}: - parameters: - - "$ref": "#/components/parameters/id" - - "$ref": "#/components/parameters/modified" - - name: view - in: path - description: The ID of the view to be invoked - schema: - type: string - required: true - get: - tags: - - resources - summary: Get resource as represented by view - operationId: #TODO - responses: - 200: - description: The resource in the selected representation - 404: - description: The resource or view was not found - /resources/byPid/{pid}: - parameters: - - name: "pid" - in: path - description: The externally defined persistend ID of a file - schema: - type: string - required: true - get: - tags: - - resources - summary: Return our ID for a external PID - operationId: #TODO - responses: - 200: - description: The internal ID for this PID - content: - text/plain: - schema: - type: string - 404: - description: This external PID was not found + # /api/v2/resources/{id}: + # parameters: + # - "$ref": "#/components/parameters/id" + # get: + # tags: + # - resources + # summary: Get resource by ID + # operationId: #TODO + # responses: + # "200": + # description: Resource by ID + # content: + # "application/tei+xml": + # schema: + # "$ref": "#/components/schemas/TEI" + # "404": + # description: No resource found by this ID + # put: + # tags: + # - resources + # summary: Create or update a file + # operationId: #TODO + # requestBody: + # description: Create or replace a file with the ID given in id and the content in the request body + # required: true + # content: + # multipart/form-data: + # schema: + # type: object + # properties: + # path: + # type: string + # file: + # type: string + # format: binary + # responses: + # "201": + # "$ref": "#/components/responses/created" + # "204": + # description: File has been updated + # "400": + # "$ref": "#/components/responses/invalidBody" + # "404": + # description: File $id not found + # "409": + # description: A file with this ID is present in a different location or a file in this location exists with a different ID + # patch: + # tags: + # - resources + # summary: Change a fragment from a file + # operationId: #TODO + # requestBody: + # description: The replacement XML fragment + # required: true + # content: + # application/xml: + # #schema: #TODO or use an example + # responses: + # "204": + # description: File has been updated + # "400": + # "$ref": "#/components/responses/invalidBody" + # "404": + # description: File $id not found + # head: + # tags: + # - resources + # summary: Preflight request + # operationId: #TODO + # responses: + # "204": + # description: File was found + # "404": + # description: File $id not found + # "409": + # description: A file with this ID is present in a different location or a file in this location exists with a different ID + # options: + # tags: + # - resources + # summary: Preflight request + # operationId: #TODO + # responses: + # "204": + # description: File was found + # "404": + # description: File $id not found + # delete: + # tags: + # - resources + # summary: delete a file + # operationId: #TODO + # responses: + # "204": + # description: File was deleted + # "404": + # description: File $id not found + # /api/v2/resources/{id}/views: + # parameters: + # - "$ref": "#/components/parameters/id" + # get: + # tags: + # - resources + # summary: List views for a file + # operationId: #TODO + # responses: + # "200": + # description: Returns a list of available views + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/listViews" + # application/xml: + # schema: + # "$ref": "#/components/schemas/listViews" + # /api/v2/resources/{id}/views/{view}: + # parameters: + # - "$ref": "#/components/parameters/id" + # - "$ref": "#/components/parameters/modified" + # - name: view + # in: path + # description: The ID of the view to be invoked + # schema: + # type: string + # required: true + # get: + # tags: + # - resources + # summary: Get resource as represented by view + # operationId: #TODO + # responses: + # 200: + # description: The resource in the selected representation + # 404: + # description: The resource or view was not found + # /api/v2/resources/byPid/{pid}: + # parameters: + # - name: "pid" + # in: path + # description: The externally defined persistend ID of a file + # schema: + # type: string + # required: true + # get: + # tags: + # - resources + # summary: Return our ID for a external PID + # operationId: #TODO + # responses: + # 200: + # description: The internal ID for this PID + # content: + # text/plain: + # schema: + # type: string + # 404: + # description: This external PID was not found - /search/ft/project/{ed}: - parameters: - - "$ref": "#/components/parameters/ed" - - "$ref": "#/components/parameters/q" - - "$ref": "#/components/parameters/start" - get: - tags: - - search - summary: List files in project containing text - operationId: #TODO - responses: - 200: - "$ref": "#/components/responses/files" - 204: - description: Search result list is empty - 400: - description: An error was found in the query - 404: - description: project not found - /search/ft/resource/{id}: - parameters: - - "$ref": "#/components/parameters/id" - - "$ref": "#/components/parameters/q" - - "$ref": "#/components/parameters/start" - get: - tags: - - search - summary: List fragments in file containing text - operationId: #TODO - responses: - 200: - "$ref": "#/components/responses/fragments" - 204: - description: Search result list is empty - 400: - description: An error was found in the query - 404: - description: File not found + # /api/v2/search/ft/project/{ed}: + # parameters: + # - "$ref": "#/components/parameters/ed" + # - "$ref": "#/components/parameters/q" + # - "$ref": "#/components/parameters/start" + # get: + # tags: + # - search + # summary: List files in project containing text + # operationId: #TODO + # responses: + # 200: + # "$ref": "#/components/responses/files" + # 204: + # description: Search result list is empty + # 400: + # description: An error was found in the query + # 404: + # description: project not found + # /api/v2/search/ft/resource/{id}: + # parameters: + # - "$ref": "#/components/parameters/id" + # - "$ref": "#/components/parameters/q" + # - "$ref": "#/components/parameters/start" + # get: + # tags: + # - search + # summary: List fragments in file containing text + # operationId: #TODO + # responses: + # 200: + # "$ref": "#/components/responses/fragments" + # 204: + # description: Search result list is empty + # 400: + # description: An error was found in the query + # 404: + # description: File not found # TODO - # /oai + # /api/v2/oai # TODO - # /dts + # /api/v2/dts components: - parameters: - id: - name: "id" - in: path - description: The ID of the - schema: - type: string - required: true - ed: - name: "ed" - in: path - description: The ID of the project - schema: - type: string - required: true - entity: - name: "entity" - in: path - description: The ID of the entity - schema: - type: string - required: true - q: - name: q - in: query - required: true - schema: - type: string - description: query or filter by name / title - type: - name: type - in: query - description: The type of entity - schema: - enum: - - per - - pla - - org - - bib - - evt - required: true - start: - name: start - in: query - description: from which position in a list to start (1-based) - schema: - type: integer - default: 1 - modified: - name: "If-Modified-Since" - in: header - schema: - type: string - format: date-time + # parameters: + # id: + # name: "id" + # in: path + # description: The ID of the + # schema: + # type: string + # required: true + # ed: + # name: "ed" + # in: path + # description: The ID of the project + # schema: + # type: string + # required: true + # entity: + # name: "entity" + # in: path + # description: The ID of the entity + # schema: + # type: string + # required: true + # q: + # name: q + # in: query + # required: true + # schema: + # type: string + # description: query or filter by name / title + # type: + # name: type + # in: query + # description: The type of entity + # schema: + # enum: + # - per + # - pla + # - org + # - bib + # - evt + # required: true + # start: + # name: start + # in: query + # description: from which position in a list to start (1-based) + # schema: + # type: integer + # default: 1 + # modified: + # name: "If-Modified-Since" + # in: header + # schema: + # type: string + # format: date-time responses: - created: - description: Annotation, file, etc. has been created - headers: - Location: - description: Location of the annotation, file etc. - schema: - type: string - format: uri - invalidBody: - description: Request body is invalid or not wellformed - authenticate: - description: Authentication necessary - headers: - WWW-Authenticate: - description: Challenge for authentication - schema: - type: string + # created: + # description: Annotation, file, etc. has been created + # headers: + # Location: + # description: Location of the annotation, file etc. + # schema: + # type: string + # format: uri + # invalidBody: + # description: Request body is invalid or not wellformed + # authenticate: + # description: Authentication necessary + # headers: + # WWW-Authenticate: + # description: Challenge for authentication + # schema: + # type: string - annotations: - description: A list of annotations matching the query - content: - application/json: - schema: - "$ref": "#/components/schemas/listAnnotations" - application/xml: - schema: - "$ref": "#/components/schemas/listAnnotations" - fragments: - description: A list of fragments within a file matching the query - content: - application/json: - schema: - "$ref": "#/components/schemas/listFragments" - application/xml: - schema: - "$ref": "#/components/schemas/listFragments" - files: - description: A list of fragments within a file matching the query - content: - application/json: - schema: - "$ref": "#/components/schemas/listFiles" - application/xml: - schema: - "$ref": "#/components/schemas/listFiles" - projects: - description: A list of projects matching the query - content: - application/json: - schema: - "$ref": "#/components/schemas/listProjects" - application/xml: - schema: - "$ref": "#/components/schemas/listProjects" - entities: - description: A list of entities matching the query - content: - application/json: - schema: - "$ref": "#/components/schemas/listEntities" - application/xml: - schema: - "$ref": "#/components/schemas/listEntities" - entity: - description: A (TEI) description of one entity - content: - application/xml: - schema: - xml: - name: entity - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - oneOf: - - "$ref": "#/components/schemas/entity-person" - - "$ref": "#/components/schemas/entity-place" - - "$ref": "#/components/schemas/entity-org" - - "$ref": "#/components/schemas/entity-bibl" - - "$ref": "#/components/schemas/entity-event" - projectContents: - description: Lists the registered contents of a project + # annotations: + # description: A list of annotations matching the query + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/listAnnotations" + # application/xml: + # schema: + # "$ref": "#/components/schemas/listAnnotations" + # fragments: + # description: A list of fragments within a file matching the query + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/listFragments" + # application/xml: + # schema: + # "$ref": "#/components/schemas/listFragments" + # files: + # description: A list of fragments within a file matching the query + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/listFiles" + # application/xml: + # schema: + # "$ref": "#/components/schemas/listFiles" + + result: + description: A result set content: application/json: schema: - xml: - name: contents - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - anyOf: - - "$ref": "#/components/schemas/files" - - "$ref": "#/components/schemas/projects" + "$ref": "#/components/schemas/result" application/xml: schema: - xml: - name: contents - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - anyOf: - - "$ref": "#/components/schemas/files" - - "$ref": "#/components/schemas/projects" + "$ref": "#/components/schemas/result" + # entities: + # description: A list of entities matching the query + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/listEntities" + # application/xml: + # schema: + # "$ref": "#/components/schemas/listEntities" + # entity: + # description: A (TEI) description of one entity + # content: + # application/xml: + # schema: + # xml: + # name: entity + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # oneOf: + # - "$ref": "#/components/schemas/entity-person" + # - "$ref": "#/components/schemas/entity-place" + # - "$ref": "#/components/schemas/entity-org" + # - "$ref": "#/components/schemas/entity-bibl" + # - "$ref": "#/components/schemas/entity-event" + # projectContents: + # description: Lists the registered contents of a project + # content: + # application/json: + # schema: + # xml: + # name: contents + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # anyOf: + # - "$ref": "#/components/schemas/files" + # - "$ref": "#/components/schemas/projects" + # application/xml: + # schema: + # xml: + # name: contents + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # anyOf: + # - "$ref": "#/components/schemas/files" + # - "$ref": "#/components/schemas/projects" - requestBodies: - annotation: - description: the full text annotation to be added - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/annotation.json" - application/xml: - schema: - "$ref": "#/components/schemas/annotation.xml" - project: - description: The necessary data for the project to be created or updated - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/projectMetadata" - application/xml: - schema: - "$ref": "#/components/schemas/projectMetadata" - entity: - description: A (TEI) description of one entity - required: true - content: - application/xml: - schema: - xml: - name: entity - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - oneOf: - - "$ref": "#/components/schemas/entity-person" - - "$ref": "#/components/schemas/entity-place" - - "$ref": "#/components/schemas/entity-org" - - "$ref": "#/components/schemas/entity-bibl" - - "$ref": "#/components/schemas/entity-event" - file: - description: A full TEI file - required: true - content: - application/xml: - schema: - "$ref": "#/components/schemas/TEI" + # requestBodies: + # annotation: + # description: the full text annotation to be added + # required: true + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/annotation.json" + # application/xml: + # schema: + # "$ref": "#/components/schemas/annotation.xml" + # project: + # description: The necessary data for the project to be created or updated + # required: true + # content: + # application/json: + # schema: + # "$ref": "#/components/schemas/projectMetadata" + # application/xml: + # schema: + # "$ref": "#/components/schemas/projectMetadata" + # entity: + # description: A (TEI) description of one entity + # required: true + # content: + # application/xml: + # schema: + # xml: + # name: entity + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # oneOf: + # - "$ref": "#/components/schemas/entity-person" + # - "$ref": "#/components/schemas/entity-place" + # - "$ref": "#/components/schemas/entity-org" + # - "$ref": "#/components/schemas/entity-bibl" + # - "$ref": "#/components/schemas/entity-event" + # file: + # description: A full TEI file + # required: true + # content: + # application/xml: + # schema: + # "$ref": "#/components/schemas/TEI" schemas: - TEI: - description: A full TEI file - type: object - xml: - namespace: "http://www.tei-c.org/ns/1.0" - name: "TEI" + # TEI: + # description: A full TEI file + # type: object + # xml: + # namespace: "http://www.tei-c.org/ns/1.0" + # name: "TEI" - listAnnotations: - description: A result set, containing a list of pointers to annotations - type: object - xml: - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - name: "result" - properties: - start: - "$ref": "#/components/schemas/start" - total: - "$ref": "#/components/schemas/total" - annotations: - type: array - items: - xml: - name: annotation - properties: - id: - "$ref": "#/components/schemas/id" - listEntities: - description: A result set, containing a list of entities - type: object - xml: - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - name: "result" - properties: - start: - "$ref": "#/components/schemas/start" - total: - "$ref": "#/components/schemas/total" - entities: - type: array - items: - xml: - name: entity - properties: - id: - "$ref": "#/components/schemas/id" - label: - "$ref": "#/components/schemas/label" - listViews: - description: A result set, containing a list of views for a file - type: object - xml: - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - name: "result" - properties: - start: - "$ref": "#/components/schemas/start" - total: - "$ref": "#/components/schemas/total" - views: - type: array - items: - xml: - name: view - properties: - id: - "$ref": "#/components/schemas/id" - listProjects: - description: A result set, containing a list of projects - type: object - xml: - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - name: "result" - properties: - start: - "$ref": "#/components/schemas/start" - total: - "$ref": "#/components/schemas/total" - projects: - "$ref": "#/components/schemas/projects" - listFiles: - description: A result set, containing a list of files - type: object - xml: - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - name: "result" - properties: - start: - "$ref": "#/components/schemas/start" - total: - "$ref": "#/components/schemas/total" - files: - "$ref": "#/components/schemas/files" - listFragments: - description: A result set, containing a list of fragments within a file - type: object + # listAnnotations: + # description: A result set, containing a list of pointers to annotations + # type: object + # xml: + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # name: "result" + # properties: + # start: + # "$ref": "#/components/schemas/start" + # total: + # "$ref": "#/components/schemas/total" + # annotations: + # type: array + # items: + # xml: + # name: annotation + # properties: + # id: + # "$ref": "#/components/schemas/id" + # listEntities: + # description: A result set, containing a list of entities + # type: object + # xml: + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # name: "result" + # properties: + # start: + # "$ref": "#/components/schemas/start" + # total: + # "$ref": "#/components/schemas/total" + # entities: + # type: array + # items: + # xml: + # name: entity + # properties: + # id: + # "$ref": "#/components/schemas/id" + # label: + # "$ref": "#/components/schemas/label" + # listViews: + # description: A result set, containing a list of views for a file + # type: object + # xml: + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # name: "result" + # properties: + # start: + # "$ref": "#/components/schemas/start" + # total: + # "$ref": "#/components/schemas/total" + # views: + # type: array + # items: + # xml: + # name: view + # properties: + # id: + # "$ref": "#/components/schemas/id" + + result: + description: A result set, containing a list of 0+ project(s), file(s) etc. + type: array xml: namespace: "https://github.com/dariok/wdbplus/api/schema/v1" name: "result" + items: + oneOf: + - "$ref": "#/components/schemas/project" properties: start: "$ref": "#/components/schemas/start" total: "$ref": "#/components/schemas/total" - fragments: - "$ref": "#/components/schemas/fragments" + + # listFiles: + # description: A result set, containing a list of files + # type: object + # xml: + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # name: "result" + # properties: + # start: + # "$ref": "#/components/schemas/start" + # total: + # "$ref": "#/components/schemas/total" + # files: + # "$ref": "#/components/schemas/files" + # listFragments: + # description: A result set, containing a list of fragments within a file + # type: object + # xml: + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # name: "result" + # properties: + # start: + # "$ref": "#/components/schemas/start" + # total: + # "$ref": "#/components/schemas/total" + # fragments: + # "$ref": "#/components/schemas/fragments" - files: - type: array - description: describes one file - items: - xml: - name: file - properties: - id: - "$ref": "#/components/schemas/id" - label: - "$ref": "#/components/schemas/label" - fragments: - type: array - description: describes a fragment within a file - items: - xml: - name: fragment - properties: - id: - "$ref": "#/components/schemas/id" - projects: - type: array - description: describes one file + # files: + # type: array + # description: describes one file + # items: + # xml: + # name: file + # properties: + # id: + # "$ref": "#/components/schemas/id" + # label: + # "$ref": "#/components/schemas/label" + # fragments: + # type: array + # description: describes a fragment within a file + # items: + # xml: + # name: fragment + # properties: + # id: + # "$ref": "#/components/schemas/id" + + project: + description: a single project items: xml: - name: project + namespace: "https://github.com/dariok/wdbplus/api/schema/v1" properties: id: "$ref": "#/components/schemas/id" label: "$ref": "#/components/schemas/label" - projectMetadata: - description: project meta data - type: object - xml: - name: projectMD - namespace: "https://github.com/dariok/wdbmeta" + # projectMetadata: + # description: project meta data + # type: object + # xml: + # name: projectMD + # namespace: "https://github.com/dariok/wdbmeta" - entity-person: - type: object - description: describes one person - properties: - person: - xml: - namespace: "http://www.tei-c.org/ns/1.0" - entity-place: - type: object - description: describes one place - properties: - place: - xml: - namespace: "http://www.tei-c.org/ns/1.0" - entity-org: - type: object - description: describes one organization - properties: - org: - xml: - namespace: "http://www.tei-c.org/ns/1.0" - entity-bibl: - type: object - description: describes one bibliographical entity - properties: - bibl: - xml: - namespace: "http://www.tei-c.org/ns/1.0" - entity-event: - type: object - description: describes one event - properties: - event: - xml: - namespace: "http://www.tei-c.org/ns/1.0" + # entity-person: + # type: object + # description: describes one person + # properties: + # person: + # xml: + # namespace: "http://www.tei-c.org/ns/1.0" + # entity-place: + # type: object + # description: describes one place + # properties: + # place: + # xml: + # namespace: "http://www.tei-c.org/ns/1.0" + # entity-org: + # type: object + # description: describes one organization + # properties: + # org: + # xml: + # namespace: "http://www.tei-c.org/ns/1.0" + # entity-bibl: + # type: object + # description: describes one bibliographical entity + # properties: + # bibl: + # xml: + # namespace: "http://www.tei-c.org/ns/1.0" + # entity-event: + # type: object + # description: describes one event + # properties: + # event: + # xml: + # namespace: "http://www.tei-c.org/ns/1.0" - annotation.xml: - type: object - xml: - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - # example: - # Text - properties: - id: - "$ref": "#/components/schemas/id" - file: - "$ref": "#/components/schemas/file" - createdBy: - type: string - xml: - attribute: true - createdOn: - type: string - format: date-time - xml: - attribute: true - text: - type: string - xml: - text: true - annotation.json: - type: object - properties: - id: - "$ref": "#/components/schemas/id" - file: - "$ref": "#/components/schemas/file" - createdBy: - type: string - createdOn: - type: string - format: date-time - text: - type: string + # annotation.xml: + # type: object + # xml: + # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" + # # example: + # # Text + # properties: + # id: + # "$ref": "#/components/schemas/id" + # file: + # "$ref": "#/components/schemas/file" + # createdBy: + # type: string + # xml: + # attribute: true + # createdOn: + # type: string + # format: date-time + # xml: + # attribute: true + # # text: + # # type: string + # # xml: + # # text: true + # annotation.json: + # type: object + # properties: + # id: + # "$ref": "#/components/schemas/id" + # file: + # "$ref": "#/components/schemas/file" + # createdBy: + # type: string + # createdOn: + # type: string + # format: date-time + # text: + # type: string - file: - description: Link to a file - type: string - format: URI - xml: - attribute: true + # file: + # description: Link to a file + # type: string + # format: URI + # xml: + # attribute: true + id: description: ID of this entry type: string diff --git a/test/r2projects.http b/test/r2projects.http new file mode 100644 index 00000000..ed862d90 --- /dev/null +++ b/test/r2projects.http @@ -0,0 +1,7 @@ +GET http://localhost:8080/exist/apps/edoc/api/v2/projects +Accept: application/xml + +### + +GET http://localhost:8080/exist/apps/edoc/api/v2/projects +Accept: application/json From 10dfb4e9c2c4ae6dbcff5500529aa474c8949648 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 5 Sep 2025 14:21:07 +0200 Subject: [PATCH 133/151] =?UTF-8?q?return=20JSON=20as=20useful=20JSON=20?= =?UTF-8?q?=E2=80=93=20no=20double=20serialization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cf #580 #578 --- edoc/rest2/api.xsl | 31 +++++++++++++++++++++++++++++++ edoc/rest2/rest-common.xqm | 8 +++++--- 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 edoc/rest2/api.xsl diff --git a/edoc/rest2/api.xsl b/edoc/rest2/api.xsl new file mode 100644 index 00000000..1f303333 --- /dev/null +++ b/edoc/rest2/api.xsl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/edoc/rest2/rest-common.xqm b/edoc/rest2/rest-common.xqm index 8cbebaeb..adb78b14 100644 --- a/edoc/rest2/rest-common.xqm +++ b/edoc/rest2/rest-common.xqm @@ -17,9 +17,11 @@ declare variable $r2:allOrigins := map { declare function r2:returnXmlOrJson ( $data as item() ) as item() { let $mediaType := request:get-header("Accept") return - if ( $mediaType = $r2:acceptable ) then ( - router:response(200, $mediaType, $data, $r2:allOrigins) + if ( $mediaType = "application/json" ) then + router:response(200, "application/json", parse-json(xml-to-json(transform:transform($data, doc('api.xsl'), ()))), $r2:allOrigins) + else if ( $mediaType = $r2:acceptable ) then ( + router:response(200, $mediaType, $data, $r2:allOrigins) ) else router:response(406, "text/plain", "Not acceptable", $r2:allOrigins) -}; \ No newline at end of file +}; From 3d1160ddcca4a9e9263141f578587d3d38641345 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Thu, 23 Oct 2025 19:49:57 +0200 Subject: [PATCH 134/151] [RESTv2] GET projects Update .gitignore, fix title in apiv2.html, enhance api.xsl and projects.xqm, and refine v2.yaml for improved API structure and output Cf. #577 --- .gitignore | 1 + edoc/admin/modelFunctions.xql | 2 + edoc/apiv2.html | 2 +- edoc/rest2/api.xsl | 23 ++- edoc/rest2/projects.xqm | 17 +- edoc/rest2/rest-common.xqm | 17 +- edoc/rest2/v2.yaml | 316 ++++++++++++++++++---------------- 7 files changed, 214 insertions(+), 164 deletions(-) diff --git a/.gitignore b/.gitignore index 16c31aef..ec6ca00a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ __pycache__/ # internal edoc/resources/xsl/xspec/ .existdb.json +edoc/rest2/v2.json # node-reladted stuff node_modules/ diff --git a/edoc/admin/modelFunctions.xql b/edoc/admin/modelFunctions.xql index d6f7ad9d..75d05bd2 100644 --- a/edoc/admin/modelFunctions.xql +++ b/edoc/admin/modelFunctions.xql @@ -19,11 +19,13 @@ declare function trigger:after-update-document ( $uri as xs:anyURI ) as xs:strin let $meta := doc($uri) , $projectId := $meta/meta:projectMD/@xml:id , $files := $meta//meta:file + , $title := $meta//meta:title[@type='main'] , $projectIndex := doc("/db/apps/edoc/index/project-index.xml") , $fileIndex := doc("/db/apps/edoc/index/file-index.xml") , $projectEntry := (: enter or update project :) diff --git a/edoc/apiv2.html b/edoc/apiv2.html index c424517f..b12bb7c4 100644 --- a/edoc/apiv2.html +++ b/edoc/apiv2.html @@ -1,7 +1,7 @@ - roasted - OpenAPI Router Testapplication + wdb+ - OpenAPI diff --git a/edoc/rest2/api.xsl b/edoc/rest2/api.xsl index 1f303333..6d618db0 100644 --- a/edoc/rest2/api.xsl +++ b/edoc/rest2/api.xsl @@ -4,16 +4,21 @@ expand-text="yes" exclude-result-prefixes="#all"> - + - - - - - + + + + + + + + + + @@ -23,6 +28,12 @@ + + + + + + diff --git a/edoc/rest2/projects.xqm b/edoc/rest2/projects.xqm index e9d60187..cdbb41b7 100644 --- a/edoc/rest2/projects.xqm +++ b/edoc/rest2/projects.xqm @@ -2,13 +2,11 @@ xquery version "3.1"; module namespace r2p = "https://github.com/dariok/wdbplus/rest2/projects"; -import module namespace r2 = "https://github.com/dariok/wdbplus/rest2/common" at "rest-common.xqm"; +import module namespace r2 = "https://github.com/dariok/wdbplus/rest2/common" at "rest-common.xqm"; declare namespace index = "https://github.com/dariok/wdbplus/index"; declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta"; -declare variable $r2p:base := doc('../config.xml')//*:rest; - (:~ : List all projects : GET {base}/projects @@ -16,13 +14,18 @@ declare variable $r2p:base := doc('../config.xml')//*:rest; declare function r2p:listProjects ( $request as map(*) ) as map(*) { let $projects := doc("/db/apps/edoc/index/project-index.xml")//index:project - + let $result := - + { for $project in $projects return - } diff --git a/edoc/rest2/rest-common.xqm b/edoc/rest2/rest-common.xqm index adb78b14..cc364e3a 100644 --- a/edoc/rest2/rest-common.xqm +++ b/edoc/rest2/rest-common.xqm @@ -6,9 +6,20 @@ import module namespace router = "http://e-editiones.org/roaster/router"; declare variable $r2:acceptable := ("application/json", "application/xml"); -declare variable $r2:allOrigins := map { - "Access-Control-Allow-Origin" : "*" -}; +(:~ + : Base URL for the REST API + : TODO: use config:rest and add an optional attribute version; usage of this parameter must be aware of versioning and use only [1] + :) +declare variable $r2:base := doc('../config.xml')//*:rest2; + +declare variable $r2:allOrigins := if ( request:get-header('origin') != '' ) + then map { + "Access-Control-Allow-Origin" : request:get-header('origin'), + "Access-Control-Allow-Credentials" : "true" + } + else map { + "Access-Control-Allow-Origin" : "*" + }; (: , "Access-Control-Allow-Methods" : "GET, POST, PUT, DELETE, OPTIONS", "Access-Control-Allow-Headers" : "Content-Type, Authorization", diff --git a/edoc/rest2/v2.yaml b/edoc/rest2/v2.yaml index e5949d58..cfc611bb 100644 --- a/edoc/rest2/v2.yaml +++ b/edoc/rest2/v2.yaml @@ -39,12 +39,12 @@ paths: # description: "Create a new full text annotation; return its location when sucessful.
    **Note:** 1. no checks are performed and multiple requests will create multiple entries. 2. This creates full text annotations only. Changes to the file, including entity markup, must be made using → `PATCH /resources/{id}`" # operationId: #TODO # requestBody: - # "$ref": "#/components/requestBodies/annotation" + # $ref: "#/components/requestBodies/annotation" # responses: # "201": - # "$ref": "#/components/responses/created" + # $ref: "#/components/responses/created" # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # /api/v2/annotations/{annotation}: # parameters: # - name: "annotation" @@ -64,10 +64,10 @@ paths: # content: # application/json: # schema: - # "$ref": "#/components/schemas/annotation.json" + # $ref: "#/components/schemas/annotation.json" # application/xml: # schema: - # "$ref": "#/components/schemas/annotation.xml" + # $ref: "#/components/schemas/annotation.xml" # "404": # description: No annotation found by this ID # put: @@ -75,12 +75,12 @@ paths: # - annotations # summary: Update an annotation # requestBody: - # "$ref": "#/components/requestBodies/annotation" + # $ref: "#/components/requestBodies/annotation" # responses: # "204": # description: Update sucessful. # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "404": # description: No annotation found by this ID # delete: @@ -95,7 +95,7 @@ paths: # description: This annotation was not found # /api/v2/annotations/forFile/{id}: # parameters: - # - "$ref": "#/components/parameters/id" + # - $ref: "#/components/parameters/id" # get: # tags: # - annotations @@ -107,10 +107,10 @@ paths: # content: # application/json: # schema: - # "$ref": "#/components/schemas/listAnnotations" + # $ref: "#/components/schemas/listAnnotations" # application/xml: # schema: - # "$ref": "#/components/schemas/listAnnotations" + # $ref: "#/components/schemas/listAnnotations" # "204": # description: No annotations for this file # "404": @@ -125,7 +125,7 @@ paths: operationId: r2p:listProjects responses: "200": - "$ref": "#/components/responses/result" + $ref: '#/components/responses/result' # TODO: implement # post: # tags: @@ -134,18 +134,18 @@ paths: # description: Create a project with the meta data provided while auto-generating the ID # operationId: #TODO # requestBody: - # "$ref": "#/components/requestBodies/project" + # $ref: "#/components/requestBodies/project" # responses: # "204": - # "$ref": "#/components/responses/created" + # $ref: "#/components/responses/created" # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "409": # description: A project already exists in this location # TODO: implement # /api/v2/projects/{ed}: # parameters: - # - "$ref": "#/components/parameters/ed" + # - $ref: "#/components/parameters/ed" # get: # tags: # - projects @@ -153,7 +153,7 @@ paths: # operationId: #TODO # responses: # "200": - # "$ref": "#/components/responses/projectContents" + # $ref: "#/components/responses/projectContents" # "204": # description: The project was found but currently has neither subprojects nor registered resources # "404": @@ -175,12 +175,12 @@ paths: # description: This creates a new or updates an existing project with the ID given as ed and the necessary meta data in the request body # operationId: #TODO # requestBody: - # "$ref": "#/components/requestBodies/project" + # $ref: "#/components/requestBodies/project" # responses: # "204": # description: The project was created or updated # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "404": # description: Project $ed not found # "409": @@ -189,8 +189,8 @@ paths: # TODO: implement as a view on the project instead (with parameter ?view=nav or similar) # /api/v2/projects/{ed}/nav: # parameters: - # - "$ref": "#/components/parameters/ed" - # - "$ref": "#/components/parameters/modified" + # - $ref: "#/components/parameters/ed" + # - $ref: "#/components/parameters/modified" # get: # tags: # - projects @@ -212,12 +212,12 @@ paths: # summary: Query entities in global registry # operationId: #TODO # parameters: - # - "$ref": "#/components/parameters/q" - # - "$ref": "#/components/parameters/type" - # - "$ref": "#/components/parameters/start" + # - $ref: "#/components/parameters/q" + # - $ref: "#/components/parameters/type" + # - $ref: "#/components/parameters/start" # responses: # "200": - # "$ref": "#/components/responses/entities" + # $ref: "#/components/responses/entities" # "204": # description: No entities were found for the combination of query parameters # post: @@ -226,12 +226,12 @@ paths: # summary: Create a global entity without specifying an ID # operationId: #TODO # requestBody: - # "$ref": "#/components/requestBodies/entity" + # $ref: "#/components/requestBodies/entity" # responses: # "201": - # "$ref": "#/components/responses/created" + # $ref: "#/components/responses/created" # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "409": # description: The body contains an ID for which an entity is already present # /api/v2/entities/{entity}: @@ -241,10 +241,10 @@ paths: # summary: Get details of entity # operationId: #TODO # parameters: - # - "$ref": "#/components/parameters/entity" + # - $ref: "#/components/parameters/entity" # responses: # "200": - # "$ref": "#/components/responses/entity" + # $ref: "#/components/responses/entity" # "404": # description: Entity not found # put: @@ -253,14 +253,14 @@ paths: # summary: Create a global entity specifying an ID # operationId: #TODO # requestBody: - # "$ref": "#/components/requestBodies/entity" + # $ref: "#/components/requestBodies/entity" # responses: # "201": - # "$ref": "#/components/responses/created" + # $ref: "#/components/responses/created" # "204": # description: The entity was updated # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "404": # description: Entity $ed not found # "409": @@ -281,14 +281,14 @@ paths: # - entities # summary: Query entities in a project’s registry # parameters: - # - "$ref": "#/components/parameters/ed" - # - "$ref": "#/components/parameters/q" - # - "$ref": "#/components/parameters/type" - # - "$ref": "#/components/parameters/start" + # - $ref: "#/components/parameters/ed" + # - $ref: "#/components/parameters/q" + # - $ref: "#/components/parameters/type" + # - $ref: "#/components/parameters/start" # operationId: #TODO # responses: # "200": - # "$ref": "#/components/responses/entities" + # $ref: "#/components/responses/entities" # "204": # description: No entities were found for the combination of query parameters # "404": @@ -299,12 +299,12 @@ paths: # summary: Create an entity with a project without specifying an ID # operationId: #TODO # requestBody: - # "$ref": "#/components/requestBodies/entity" + # $ref: "#/components/requestBodies/entity" # responses: # "201": - # "$ref": "#/components/responses/created" + # $ref: "#/components/responses/created" # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "409": # description: The body contains an ID for which an entity is already present # /api/v2/entities/project/{ed}/{entity}: @@ -314,10 +314,10 @@ paths: # summary: Get details of project entity # operationId: #TODO # parameters: - # - "$ref": "#/components/parameters/entity" + # - $ref: "#/components/parameters/entity" # responses: # "200": - # "$ref": "#/components/responses/entity" + # $ref: "#/components/responses/entity" # "404": # description: Entity not foun # put: @@ -326,14 +326,14 @@ paths: # summary: Create a project entity specifying an ID # operationId: #TODO # requestBody: - # "$ref": "#/components/requestBodies/entity" + # $ref: "#/components/requestBodies/entity" # responses: # "201": - # "$ref": "#/components/responses/created" + # $ref: "#/components/responses/created" # "204": # description: The entity was updated # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "404": # description: Project $ed or entity $entity not found # "409": @@ -350,51 +350,51 @@ paths: # description: This entity was not found # /api/v2/entities/refs/{entity}: # parameters: - # - "$ref": "#/components/parameters/entity" + # - $ref: "#/components/parameters/entity" # get: # tags: # - entities # summary: List projects referring to an entity # operationId: #TODO # parameters: - # - "$ref": "#/components/parameters/start" + # - $ref: "#/components/parameters/start" # responses: # "200": - # "$ref": "#/components/responses/projects" + # $ref: "#/components/responses/projects" # "204": # description: No references to the queried entity were found # /api/v2/entities/refs/project/{ed}/{entity}: # parameters: - # - "$ref": "#/components/parameters/ed" - # - "$ref": "#/components/parameters/entity" + # - $ref: "#/components/parameters/ed" + # - $ref: "#/components/parameters/entity" # get: # tags: # - entities # summary: List texts in a project referring to an entity # operationId: #TODO # parameters: - # - "$ref": "#/components/parameters/start" + # - $ref: "#/components/parameters/start" # responses: # "200": - # "$ref": "#/components/responses/files" + # $ref: "#/components/responses/files" # "204": # description: No references to the queried entity were found # "404": # description: The project was not found # /api/v2/entities/refs/resource/{id}/{entity}: # parameters: - # - "$ref": "#/components/parameters/id" - # - "$ref": "#/components/parameters/entity" + # - $ref: "#/components/parameters/id" + # - $ref: "#/components/parameters/entity" # get: # tags: # - entities # summary: List all fragments in a text containing a reference to an entity # operationId: #TODO # parameters: - # - "$ref": "#/components/parameters/start" + # - $ref: "#/components/parameters/start" # responses: # "200": - # "$ref": "#/components/responses/fragments" + # $ref: "#/components/responses/fragments" # "204": # description: No references to the queried entity were found # "404": @@ -402,7 +402,7 @@ paths: # /api/v2/resources/{id}: # parameters: - # - "$ref": "#/components/parameters/id" + # - $ref: "#/components/parameters/id" # get: # tags: # - resources @@ -414,7 +414,7 @@ paths: # content: # "application/tei+xml": # schema: - # "$ref": "#/components/schemas/TEI" + # $ref: "#/components/schemas/TEI" # "404": # description: No resource found by this ID # put: @@ -437,11 +437,11 @@ paths: # format: binary # responses: # "201": - # "$ref": "#/components/responses/created" + # $ref: "#/components/responses/created" # "204": # description: File has been updated # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "404": # description: File $id not found # "409": @@ -461,7 +461,7 @@ paths: # "204": # description: File has been updated # "400": - # "$ref": "#/components/responses/invalidBody" + # $ref: "#/components/responses/invalidBody" # "404": # description: File $id not found # head: @@ -498,7 +498,7 @@ paths: # description: File $id not found # /api/v2/resources/{id}/views: # parameters: - # - "$ref": "#/components/parameters/id" + # - $ref: "#/components/parameters/id" # get: # tags: # - resources @@ -510,14 +510,14 @@ paths: # content: # application/json: # schema: - # "$ref": "#/components/schemas/listViews" + # $ref: "#/components/schemas/listViews" # application/xml: # schema: - # "$ref": "#/components/schemas/listViews" + # $ref: "#/components/schemas/listViews" # /api/v2/resources/{id}/views/{view}: # parameters: - # - "$ref": "#/components/parameters/id" - # - "$ref": "#/components/parameters/modified" + # - $ref: "#/components/parameters/id" + # - $ref: "#/components/parameters/modified" # - name: view # in: path # description: The ID of the view to be invoked @@ -559,9 +559,9 @@ paths: # /api/v2/search/ft/project/{ed}: # parameters: - # - "$ref": "#/components/parameters/ed" - # - "$ref": "#/components/parameters/q" - # - "$ref": "#/components/parameters/start" + # - $ref: "#/components/parameters/ed" + # - $ref: "#/components/parameters/q" + # - $ref: "#/components/parameters/start" # get: # tags: # - search @@ -569,7 +569,7 @@ paths: # operationId: #TODO # responses: # 200: - # "$ref": "#/components/responses/files" + # $ref: "#/components/responses/files" # 204: # description: Search result list is empty # 400: @@ -578,9 +578,9 @@ paths: # description: project not found # /api/v2/search/ft/resource/{id}: # parameters: - # - "$ref": "#/components/parameters/id" - # - "$ref": "#/components/parameters/q" - # - "$ref": "#/components/parameters/start" + # - $ref: "#/components/parameters/id" + # - $ref: "#/components/parameters/q" + # - $ref: "#/components/parameters/start" # get: # tags: # - search @@ -588,7 +588,7 @@ paths: # operationId: #TODO # responses: # 200: - # "$ref": "#/components/responses/fragments" + # $ref: "#/components/responses/fragments" # 204: # description: Search result list is empty # 400: @@ -682,47 +682,47 @@ components: # content: # application/json: # schema: - # "$ref": "#/components/schemas/listAnnotations" + # $ref: "#/components/schemas/listAnnotations" # application/xml: # schema: - # "$ref": "#/components/schemas/listAnnotations" + # $ref: "#/components/schemas/listAnnotations" # fragments: # description: A list of fragments within a file matching the query # content: # application/json: # schema: - # "$ref": "#/components/schemas/listFragments" + # $ref: "#/components/schemas/listFragments" # application/xml: # schema: - # "$ref": "#/components/schemas/listFragments" + # $ref: "#/components/schemas/listFragments" # files: # description: A list of fragments within a file matching the query # content: # application/json: # schema: - # "$ref": "#/components/schemas/listFiles" + # $ref: "#/components/schemas/listFiles" # application/xml: # schema: - # "$ref": "#/components/schemas/listFiles" + # $ref: "#/components/schemas/listFiles" result: description: A result set content: application/json: schema: - "$ref": "#/components/schemas/result" + $ref: '#/components/schemas/Result' application/xml: schema: - "$ref": "#/components/schemas/result" + $ref: '#/components/schemas/Result' # entities: # description: A list of entities matching the query # content: # application/json: # schema: - # "$ref": "#/components/schemas/listEntities" + # $ref: "#/components/schemas/listEntities" # application/xml: # schema: - # "$ref": "#/components/schemas/listEntities" + # $ref: "#/components/schemas/listEntities" # entity: # description: A (TEI) description of one entity # content: @@ -732,11 +732,11 @@ components: # name: entity # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" # oneOf: - # - "$ref": "#/components/schemas/entity-person" - # - "$ref": "#/components/schemas/entity-place" - # - "$ref": "#/components/schemas/entity-org" - # - "$ref": "#/components/schemas/entity-bibl" - # - "$ref": "#/components/schemas/entity-event" + # - $ref: "#/components/schemas/entity-person" + # - $ref: "#/components/schemas/entity-place" + # - $ref: "#/components/schemas/entity-org" + # - $ref: "#/components/schemas/entity-bibl" + # - $ref: "#/components/schemas/entity-event" # projectContents: # description: Lists the registered contents of a project # content: @@ -746,16 +746,16 @@ components: # name: contents # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" # anyOf: - # - "$ref": "#/components/schemas/files" - # - "$ref": "#/components/schemas/projects" + # - $ref: "#/components/schemas/files" + # - $ref: "#/components/schemas/projects" # application/xml: # schema: # xml: # name: contents # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" # anyOf: - # - "$ref": "#/components/schemas/files" - # - "$ref": "#/components/schemas/projects" + # - $ref: "#/components/schemas/files" + # - $ref: "#/components/schemas/projects" # requestBodies: # annotation: @@ -764,20 +764,20 @@ components: # content: # application/json: # schema: - # "$ref": "#/components/schemas/annotation.json" + # $ref: "#/components/schemas/annotation.json" # application/xml: # schema: - # "$ref": "#/components/schemas/annotation.xml" + # $ref: "#/components/schemas/annotation.xml" # project: # description: The necessary data for the project to be created or updated # required: true # content: # application/json: # schema: - # "$ref": "#/components/schemas/projectMetadata" + # $ref: "#/components/schemas/projectMetadata" # application/xml: # schema: - # "$ref": "#/components/schemas/projectMetadata" + # $ref: "#/components/schemas/projectMetadata" # entity: # description: A (TEI) description of one entity # required: true @@ -788,18 +788,18 @@ components: # name: entity # namespace: "https://github.com/dariok/wdbplus/api/schema/v1" # oneOf: - # - "$ref": "#/components/schemas/entity-person" - # - "$ref": "#/components/schemas/entity-place" - # - "$ref": "#/components/schemas/entity-org" - # - "$ref": "#/components/schemas/entity-bibl" - # - "$ref": "#/components/schemas/entity-event" + # - $ref: "#/components/schemas/entity-person" + # - $ref: "#/components/schemas/entity-place" + # - $ref: "#/components/schemas/entity-org" + # - $ref: "#/components/schemas/entity-bibl" + # - $ref: "#/components/schemas/entity-event" # file: # description: A full TEI file # required: true # content: # application/xml: # schema: - # "$ref": "#/components/schemas/TEI" + # $ref: "#/components/schemas/TEI" schemas: @@ -818,9 +818,9 @@ components: # name: "result" # properties: # start: - # "$ref": "#/components/schemas/start" + # $ref: "#/components/schemas/start" # total: - # "$ref": "#/components/schemas/total" + # $ref: "#/components/schemas/total" # annotations: # type: array # items: @@ -828,7 +828,7 @@ components: # name: annotation # properties: # id: - # "$ref": "#/components/schemas/id" + # $ref: "#/components/schemas/id" # listEntities: # description: A result set, containing a list of entities # type: object @@ -837,9 +837,9 @@ components: # name: "result" # properties: # start: - # "$ref": "#/components/schemas/start" + # $ref: "#/components/schemas/start" # total: - # "$ref": "#/components/schemas/total" + # $ref: "#/components/schemas/total" # entities: # type: array # items: @@ -847,9 +847,9 @@ components: # name: entity # properties: # id: - # "$ref": "#/components/schemas/id" + # $ref: "#/components/schemas/id" # label: - # "$ref": "#/components/schemas/label" + # $ref: "#/components/schemas/label" # listViews: # description: A result set, containing a list of views for a file # type: object @@ -858,9 +858,9 @@ components: # name: "result" # properties: # start: - # "$ref": "#/components/schemas/start" + # $ref: "#/components/schemas/start" # total: - # "$ref": "#/components/schemas/total" + # $ref: "#/components/schemas/total" # views: # type: array # items: @@ -868,23 +868,29 @@ components: # name: view # properties: # id: - # "$ref": "#/components/schemas/id" - - result: + # $ref: "#/components/schemas/id" + + Result: description: A result set, containing a list of 0+ project(s), file(s) etc. - type: array + type: object xml: - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - name: "result" - items: - oneOf: - - "$ref": "#/components/schemas/project" + name: result + namespace: https://github.com/dariok/wdbplus/api/schema/v1 + oneOf: + - $ref: '#/components/schemas/ProjectResult' + ResultBase: + type: object + xml: + name: result + namespace: https://github.com/dariok/wdbplus/api/schema/v1 properties: start: - "$ref": "#/components/schemas/start" + $ref: '#/components/schemas/start' total: - "$ref": "#/components/schemas/total" - + $ref: '#/components/schemas/total' + required: + - start + - total # listFiles: # description: A result set, containing a list of files # type: object @@ -893,11 +899,11 @@ components: # name: "result" # properties: # start: - # "$ref": "#/components/schemas/start" + # $ref: "#/components/schemas/start" # total: - # "$ref": "#/components/schemas/total" + # $ref: "#/components/schemas/total" # files: - # "$ref": "#/components/schemas/files" + # $ref: "#/components/schemas/files" # listFragments: # description: A result set, containing a list of fragments within a file # type: object @@ -906,11 +912,11 @@ components: # name: "result" # properties: # start: - # "$ref": "#/components/schemas/start" + # $ref: "#/components/schemas/start" # total: - # "$ref": "#/components/schemas/total" + # $ref: "#/components/schemas/total" # fragments: - # "$ref": "#/components/schemas/fragments" + # $ref: "#/components/schemas/fragments" # files: # type: array @@ -920,9 +926,9 @@ components: # name: file # properties: # id: - # "$ref": "#/components/schemas/id" + # $ref: "#/components/schemas/id" # label: - # "$ref": "#/components/schemas/label" + # $ref: "#/components/schemas/label" # fragments: # type: array # description: describes a fragment within a file @@ -931,18 +937,31 @@ components: # name: fragment # properties: # id: - # "$ref": "#/components/schemas/id" + # $ref: "#/components/schemas/id" - project: - description: a single project - items: - xml: - namespace: "https://github.com/dariok/wdbplus/api/schema/v1" - properties: - id: - "$ref": "#/components/schemas/id" - label: - "$ref": "#/components/schemas/label" + ProjectResult: + allOf: + - $ref: '#/components/schemas/ResultBase' + - type: object + properties: + project: + type: array + xml: + wrapped: false + items: + $ref: '#/components/schemas/Project' + Project: + type: object + xml: + name: project + properties: + id: + $ref: '#/components/schemas/id' + label: + $ref: '#/components/schemas/label' + required: + - id + - label # projectMetadata: # description: project meta data @@ -996,9 +1015,9 @@ components: # # Text # properties: # id: - # "$ref": "#/components/schemas/id" + # $ref: "#/components/schemas/id" # file: - # "$ref": "#/components/schemas/file" + # $ref: "#/components/schemas/file" # createdBy: # type: string # xml: @@ -1016,9 +1035,9 @@ components: # type: object # properties: # id: - # "$ref": "#/components/schemas/id" + # $ref: "#/components/schemas/id" # file: - # "$ref": "#/components/schemas/file" + # $ref: "#/components/schemas/file" # createdBy: # type: string # createdOn: @@ -1037,6 +1056,7 @@ components: id: description: ID of this entry type: string + format: uri xml: attribute: true label: @@ -1045,11 +1065,13 @@ components: xml: attribute: true start: + description: from which position in a list the result set starts (1-based) type: integer default: 1 xml: attribute: true total: + description: total number of entries in the result set type: integer xml: attribute: true From 4932e2c19fc0a76638f3a55420e8f7bb94393c58 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 24 Oct 2025 09:52:39 +0200 Subject: [PATCH 135/151] global wdbmeta.xml must containt processes necessary for process inheritance --- edoc/data/wdbmeta.xml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/edoc/data/wdbmeta.xml b/edoc/data/wdbmeta.xml index e6f1825c..ca2cd1d0 100644 --- a/edoc/data/wdbmeta.xml +++ b/edoc/data/wdbmeta.xml @@ -2,7 +2,7 @@ - + wdb+ main project collection @@ -22,8 +22,10 @@ - - - + + + + + - \ No newline at end of file + From 7ddb26c37b34b84b272dbd5484cf7205b4d5c65a Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Fri, 24 Oct 2025 09:53:53 +0200 Subject: [PATCH 136/151] [nav] empty struct must not throw errors --- edoc/resources/nav.xsl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/edoc/resources/nav.xsl b/edoc/resources/nav.xsl index b2fbda25..a8a5e5b6 100644 --- a/edoc/resources/nav.xsl +++ b/edoc/resources/nav.xsl @@ -64,6 +64,16 @@
  • + + + + + +
  • + +
  • +
    + From d23513820afc6c7dcf5da9056c2fe0987c4aab52 Mon Sep 17 00:00:00 2001 From: Dario Kampkaspar Date: Sat, 25 Oct 2025 15:48:35 +0200 Subject: [PATCH 137/151] host SwaggerUI files locally avoid CORS problems --- edoc/apiv2.html | 4 ++-- edoc/resources/css/swagger-ui.css | 3 +++ edoc/resources/js/swagger-ui-bundle.js | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 edoc/resources/css/swagger-ui.css create mode 100644 edoc/resources/js/swagger-ui-bundle.js diff --git a/edoc/apiv2.html b/edoc/apiv2.html index b12bb7c4..c25addc1 100644 --- a/edoc/apiv2.html +++ b/edoc/apiv2.html @@ -3,8 +3,8 @@ wdb+ - OpenAPI - - + +
    diff --git a/edoc/resources/css/swagger-ui.css b/edoc/resources/css/swagger-ui.css new file mode 100644 index 00000000..d2ea0226 --- /dev/null +++ b/edoc/resources/css/swagger-ui.css @@ -0,0 +1,3 @@ +.swagger-ui{color:#3b4151;font-family:sans-serif/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */}.swagger-ui html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.15}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure{margin:1em 40px}.swagger-ui hr{box-sizing:content-box;height:0;overflow:visible}.swagger-ui pre{font-family:monospace,monospace;font-size:1em}.swagger-ui a{-webkit-text-decoration-skip:objects;background-color:transparent}.swagger-ui abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.swagger-ui b,.swagger-ui strong{font-weight:inherit;font-weight:bolder}.swagger-ui code,.swagger-ui kbd,.swagger-ui samp{font-family:monospace,monospace;font-size:1em}.swagger-ui dfn{font-style:italic}.swagger-ui mark{background-color:#ff0;color:#000}.swagger-ui small{font-size:80%}.swagger-ui sub,.swagger-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.swagger-ui sub{bottom:-.25em}.swagger-ui sup{top:-.5em}.swagger-ui audio,.swagger-ui video{display:inline-block}.swagger-ui audio:not([controls]){display:none;height:0}.swagger-ui img{border-style:none}.swagger-ui svg:not(:root){overflow:hidden}.swagger-ui button,.swagger-ui input,.swagger-ui optgroup,.swagger-ui select,.swagger-ui textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}.swagger-ui button,.swagger-ui input{overflow:visible}.swagger-ui button,.swagger-ui select{text-transform:none}.swagger-ui [type=reset],.swagger-ui [type=submit],.swagger-ui button,.swagger-ui html [type=button]{-webkit-appearance:button}.swagger-ui [type=button]::-moz-focus-inner,.swagger-ui [type=reset]::-moz-focus-inner,.swagger-ui [type=submit]::-moz-focus-inner,.swagger-ui button::-moz-focus-inner{border-style:none;padding:0}.swagger-ui [type=button]:-moz-focusring,.swagger-ui [type=reset]:-moz-focusring,.swagger-ui [type=submit]:-moz-focusring,.swagger-ui button:-moz-focusring{outline:1px dotted ButtonText}.swagger-ui fieldset{padding:.35em .75em .625em}.swagger-ui legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.swagger-ui progress{display:inline-block;vertical-align:baseline}.swagger-ui textarea{overflow:auto}.swagger-ui [type=checkbox],.swagger-ui [type=radio]{box-sizing:border-box;padding:0}.swagger-ui [type=number]::-webkit-inner-spin-button,.swagger-ui [type=number]::-webkit-outer-spin-button{height:auto}.swagger-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.swagger-ui [type=search]::-webkit-search-cancel-button,.swagger-ui [type=search]::-webkit-search-decoration{-webkit-appearance:none}.swagger-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.swagger-ui details,.swagger-ui menu{display:block}.swagger-ui summary{display:list-item}.swagger-ui canvas{display:inline-block}.swagger-ui [hidden],.swagger-ui template{display:none}.swagger-ui .debug *{outline:1px solid gold}.swagger-ui .debug-white *{outline:1px solid #fff}.swagger-ui .debug-black *{outline:1px solid #000}.swagger-ui .debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.swagger-ui .debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.swagger-ui .debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.swagger-ui .debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}.swagger-ui .border-box,.swagger-ui a,.swagger-ui article,.swagger-ui body,.swagger-ui code,.swagger-ui dd,.swagger-ui div,.swagger-ui dl,.swagger-ui dt,.swagger-ui fieldset,.swagger-ui footer,.swagger-ui form,.swagger-ui h1,.swagger-ui h2,.swagger-ui h3,.swagger-ui h4,.swagger-ui h5,.swagger-ui h6,.swagger-ui header,.swagger-ui html,.swagger-ui input[type=email],.swagger-ui input[type=number],.swagger-ui input[type=password],.swagger-ui input[type=tel],.swagger-ui input[type=text],.swagger-ui input[type=url],.swagger-ui legend,.swagger-ui li,.swagger-ui main,.swagger-ui ol,.swagger-ui p,.swagger-ui pre,.swagger-ui section,.swagger-ui table,.swagger-ui td,.swagger-ui textarea,.swagger-ui th,.swagger-ui tr,.swagger-ui ul{box-sizing:border-box}.swagger-ui .aspect-ratio{height:0;position:relative}.swagger-ui .aspect-ratio--16x9{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1{padding-bottom:100%}.swagger-ui .aspect-ratio--object{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}@media screen and (min-width:30em){.swagger-ui .aspect-ratio-ns{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-ns{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-ns{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-ns{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-ns{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-ns{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-ns{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-ns{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-ns{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-ns{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-ns{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-ns{padding-bottom:100%}.swagger-ui .aspect-ratio--object-ns{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .aspect-ratio-m{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-m{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-m{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-m{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-m{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-m{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-m{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-m{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-m{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-m{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-m{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-m{padding-bottom:100%}.swagger-ui .aspect-ratio--object-m{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:60em){.swagger-ui .aspect-ratio-l{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-l{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-l{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-l{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-l{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-l{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-l{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-l{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-l{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-l{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-l{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-l{padding-bottom:100%}.swagger-ui .aspect-ratio--object-l{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}.swagger-ui img{max-width:100%}.swagger-ui .cover{background-size:cover!important}.swagger-ui .contain{background-size:contain!important}@media screen and (min-width:30em){.swagger-ui .cover-ns{background-size:cover!important}.swagger-ui .contain-ns{background-size:contain!important}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .cover-m{background-size:cover!important}.swagger-ui .contain-m{background-size:contain!important}}@media screen and (min-width:60em){.swagger-ui .cover-l{background-size:cover!important}.swagger-ui .contain-l{background-size:contain!important}}.swagger-ui .bg-center{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left{background-position:0;background-repeat:no-repeat}@media screen and (min-width:30em){.swagger-ui .bg-center-ns{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-ns{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-ns{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-ns{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-ns{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .bg-center-m{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-m{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-m{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-m{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-m{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:60em){.swagger-ui .bg-center-l{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-l{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-l{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-l{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-l{background-position:0;background-repeat:no-repeat}}.swagger-ui .outline{outline:1px solid}.swagger-ui .outline-transparent{outline:1px solid transparent}.swagger-ui .outline-0{outline:0}@media screen and (min-width:30em){.swagger-ui .outline-ns{outline:1px solid}.swagger-ui .outline-transparent-ns{outline:1px solid transparent}.swagger-ui .outline-0-ns{outline:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .outline-m{outline:1px solid}.swagger-ui .outline-transparent-m{outline:1px solid transparent}.swagger-ui .outline-0-m{outline:0}}@media screen and (min-width:60em){.swagger-ui .outline-l{outline:1px solid}.swagger-ui .outline-transparent-l{outline:1px solid transparent}.swagger-ui .outline-0-l{outline:0}}.swagger-ui .ba{border-style:solid;border-width:1px}.swagger-ui .bt{border-top-style:solid;border-top-width:1px}.swagger-ui .br{border-right-style:solid;border-right-width:1px}.swagger-ui .bb{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl{border-left-style:solid;border-left-width:1px}.swagger-ui .bn{border-style:none;border-width:0}@media screen and (min-width:30em){.swagger-ui .ba-ns{border-style:solid;border-width:1px}.swagger-ui .bt-ns{border-top-style:solid;border-top-width:1px}.swagger-ui .br-ns{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-ns{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-ns{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ba-m{border-style:solid;border-width:1px}.swagger-ui .bt-m{border-top-style:solid;border-top-width:1px}.swagger-ui .br-m{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-m{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-m{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.swagger-ui .ba-l{border-style:solid;border-width:1px}.swagger-ui .bt-l{border-top-style:solid;border-top-width:1px}.swagger-ui .br-l{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-l{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-l{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-l{border-style:none;border-width:0}}.swagger-ui .b--black{border-color:#000}.swagger-ui .b--near-black{border-color:#111}.swagger-ui .b--dark-gray{border-color:#333}.swagger-ui .b--mid-gray{border-color:#555}.swagger-ui .b--gray{border-color:#777}.swagger-ui .b--silver{border-color:#999}.swagger-ui .b--light-silver{border-color:#aaa}.swagger-ui .b--moon-gray{border-color:#ccc}.swagger-ui .b--light-gray{border-color:#eee}.swagger-ui .b--near-white{border-color:#f4f4f4}.swagger-ui .b--white{border-color:#fff}.swagger-ui .b--white-90{border-color:hsla(0,0%,100%,.9)}.swagger-ui .b--white-80{border-color:hsla(0,0%,100%,.8)}.swagger-ui .b--white-70{border-color:hsla(0,0%,100%,.7)}.swagger-ui .b--white-60{border-color:hsla(0,0%,100%,.6)}.swagger-ui .b--white-50{border-color:hsla(0,0%,100%,.5)}.swagger-ui .b--white-40{border-color:hsla(0,0%,100%,.4)}.swagger-ui .b--white-30{border-color:hsla(0,0%,100%,.3)}.swagger-ui .b--white-20{border-color:hsla(0,0%,100%,.2)}.swagger-ui .b--white-10{border-color:hsla(0,0%,100%,.1)}.swagger-ui .b--white-05{border-color:hsla(0,0%,100%,.05)}.swagger-ui .b--white-025{border-color:hsla(0,0%,100%,.025)}.swagger-ui .b--white-0125{border-color:hsla(0,0%,100%,.013)}.swagger-ui .b--black-90{border-color:rgba(0,0,0,.9)}.swagger-ui .b--black-80{border-color:rgba(0,0,0,.8)}.swagger-ui .b--black-70{border-color:rgba(0,0,0,.7)}.swagger-ui .b--black-60{border-color:rgba(0,0,0,.6)}.swagger-ui .b--black-50{border-color:rgba(0,0,0,.5)}.swagger-ui .b--black-40{border-color:rgba(0,0,0,.4)}.swagger-ui .b--black-30{border-color:rgba(0,0,0,.3)}.swagger-ui .b--black-20{border-color:rgba(0,0,0,.2)}.swagger-ui .b--black-10{border-color:rgba(0,0,0,.1)}.swagger-ui .b--black-05{border-color:rgba(0,0,0,.05)}.swagger-ui .b--black-025{border-color:rgba(0,0,0,.025)}.swagger-ui .b--black-0125{border-color:rgba(0,0,0,.013)}.swagger-ui .b--dark-red{border-color:#e7040f}.swagger-ui .b--red{border-color:#ff4136}.swagger-ui .b--light-red{border-color:#ff725c}.swagger-ui .b--orange{border-color:#ff6300}.swagger-ui .b--gold{border-color:#ffb700}.swagger-ui .b--yellow{border-color:gold}.swagger-ui .b--light-yellow{border-color:#fbf1a9}.swagger-ui .b--purple{border-color:#5e2ca5}.swagger-ui .b--light-purple{border-color:#a463f2}.swagger-ui .b--dark-pink{border-color:#d5008f}.swagger-ui .b--hot-pink{border-color:#ff41b4}.swagger-ui .b--pink{border-color:#ff80cc}.swagger-ui .b--light-pink{border-color:#ffa3d7}.swagger-ui .b--dark-green{border-color:#137752}.swagger-ui .b--green{border-color:#19a974}.swagger-ui .b--light-green{border-color:#9eebcf}.swagger-ui .b--navy{border-color:#001b44}.swagger-ui .b--dark-blue{border-color:#00449e}.swagger-ui .b--blue{border-color:#357edd}.swagger-ui .b--light-blue{border-color:#96ccff}.swagger-ui .b--lightest-blue{border-color:#cdecff}.swagger-ui .b--washed-blue{border-color:#f6fffe}.swagger-ui .b--washed-green{border-color:#e8fdf5}.swagger-ui .b--washed-yellow{border-color:#fffceb}.swagger-ui .b--washed-red{border-color:#ffdfdf}.swagger-ui .b--transparent{border-color:transparent}.swagger-ui .b--inherit{border-color:inherit}.swagger-ui .br0{border-radius:0}.swagger-ui .br1{border-radius:.125rem}.swagger-ui .br2{border-radius:.25rem}.swagger-ui .br3{border-radius:.5rem}.swagger-ui .br4{border-radius:1rem}.swagger-ui .br-100{border-radius:100%}.swagger-ui .br-pill{border-radius:9999px}.swagger-ui .br--bottom{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left{border-bottom-right-radius:0;border-top-right-radius:0}@media screen and (min-width:30em){.swagger-ui .br0-ns{border-radius:0}.swagger-ui .br1-ns{border-radius:.125rem}.swagger-ui .br2-ns{border-radius:.25rem}.swagger-ui .br3-ns{border-radius:.5rem}.swagger-ui .br4-ns{border-radius:1rem}.swagger-ui .br-100-ns{border-radius:100%}.swagger-ui .br-pill-ns{border-radius:9999px}.swagger-ui .br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-ns{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-ns{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .br0-m{border-radius:0}.swagger-ui .br1-m{border-radius:.125rem}.swagger-ui .br2-m{border-radius:.25rem}.swagger-ui .br3-m{border-radius:.5rem}.swagger-ui .br4-m{border-radius:1rem}.swagger-ui .br-100-m{border-radius:100%}.swagger-ui .br-pill-m{border-radius:9999px}.swagger-ui .br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-m{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-m{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:60em){.swagger-ui .br0-l{border-radius:0}.swagger-ui .br1-l{border-radius:.125rem}.swagger-ui .br2-l{border-radius:.25rem}.swagger-ui .br3-l{border-radius:.5rem}.swagger-ui .br4-l{border-radius:1rem}.swagger-ui .br-100-l{border-radius:100%}.swagger-ui .br-pill-l{border-radius:9999px}.swagger-ui .br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-l{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-l{border-bottom-right-radius:0;border-top-right-radius:0}}.swagger-ui .b--dotted{border-style:dotted}.swagger-ui .b--dashed{border-style:dashed}.swagger-ui .b--solid{border-style:solid}.swagger-ui .b--none{border-style:none}@media screen and (min-width:30em){.swagger-ui .b--dotted-ns{border-style:dotted}.swagger-ui .b--dashed-ns{border-style:dashed}.swagger-ui .b--solid-ns{border-style:solid}.swagger-ui .b--none-ns{border-style:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .b--dotted-m{border-style:dotted}.swagger-ui .b--dashed-m{border-style:dashed}.swagger-ui .b--solid-m{border-style:solid}.swagger-ui .b--none-m{border-style:none}}@media screen and (min-width:60em){.swagger-ui .b--dotted-l{border-style:dotted}.swagger-ui .b--dashed-l{border-style:dashed}.swagger-ui .b--solid-l{border-style:solid}.swagger-ui .b--none-l{border-style:none}}.swagger-ui .bw0{border-width:0}.swagger-ui .bw1{border-width:.125rem}.swagger-ui .bw2{border-width:.25rem}.swagger-ui .bw3{border-width:.5rem}.swagger-ui .bw4{border-width:1rem}.swagger-ui .bw5{border-width:2rem}.swagger-ui .bt-0{border-top-width:0}.swagger-ui .br-0{border-right-width:0}.swagger-ui .bb-0{border-bottom-width:0}.swagger-ui .bl-0{border-left-width:0}@media screen and (min-width:30em){.swagger-ui .bw0-ns{border-width:0}.swagger-ui .bw1-ns{border-width:.125rem}.swagger-ui .bw2-ns{border-width:.25rem}.swagger-ui .bw3-ns{border-width:.5rem}.swagger-ui .bw4-ns{border-width:1rem}.swagger-ui .bw5-ns{border-width:2rem}.swagger-ui .bt-0-ns{border-top-width:0}.swagger-ui .br-0-ns{border-right-width:0}.swagger-ui .bb-0-ns{border-bottom-width:0}.swagger-ui .bl-0-ns{border-left-width:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .bw0-m{border-width:0}.swagger-ui .bw1-m{border-width:.125rem}.swagger-ui .bw2-m{border-width:.25rem}.swagger-ui .bw3-m{border-width:.5rem}.swagger-ui .bw4-m{border-width:1rem}.swagger-ui .bw5-m{border-width:2rem}.swagger-ui .bt-0-m{border-top-width:0}.swagger-ui .br-0-m{border-right-width:0}.swagger-ui .bb-0-m{border-bottom-width:0}.swagger-ui .bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.swagger-ui .bw0-l{border-width:0}.swagger-ui .bw1-l{border-width:.125rem}.swagger-ui .bw2-l{border-width:.25rem}.swagger-ui .bw3-l{border-width:.5rem}.swagger-ui .bw4-l{border-width:1rem}.swagger-ui .bw5-l{border-width:2rem}.swagger-ui .bt-0-l{border-top-width:0}.swagger-ui .br-0-l{border-right-width:0}.swagger-ui .bb-0-l{border-bottom-width:0}.swagger-ui .bl-0-l{border-left-width:0}}.swagger-ui .shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}@media screen and (min-width:30em){.swagger-ui .shadow-1-ns{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-ns{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-ns{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-ns{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-ns{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:60em){.swagger-ui .shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}.swagger-ui .pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.swagger-ui .top-0{top:0}.swagger-ui .right-0{right:0}.swagger-ui .bottom-0{bottom:0}.swagger-ui .left-0{left:0}.swagger-ui .top-1{top:1rem}.swagger-ui .right-1{right:1rem}.swagger-ui .bottom-1{bottom:1rem}.swagger-ui .left-1{left:1rem}.swagger-ui .top-2{top:2rem}.swagger-ui .right-2{right:2rem}.swagger-ui .bottom-2{bottom:2rem}.swagger-ui .left-2{left:2rem}.swagger-ui .top--1{top:-1rem}.swagger-ui .right--1{right:-1rem}.swagger-ui .bottom--1{bottom:-1rem}.swagger-ui .left--1{left:-1rem}.swagger-ui .top--2{top:-2rem}.swagger-ui .right--2{right:-2rem}.swagger-ui .bottom--2{bottom:-2rem}.swagger-ui .left--2{left:-2rem}.swagger-ui .absolute--fill{bottom:0;left:0;right:0;top:0}@media screen and (min-width:30em){.swagger-ui .top-0-ns{top:0}.swagger-ui .left-0-ns{left:0}.swagger-ui .right-0-ns{right:0}.swagger-ui .bottom-0-ns{bottom:0}.swagger-ui .top-1-ns{top:1rem}.swagger-ui .left-1-ns{left:1rem}.swagger-ui .right-1-ns{right:1rem}.swagger-ui .bottom-1-ns{bottom:1rem}.swagger-ui .top-2-ns{top:2rem}.swagger-ui .left-2-ns{left:2rem}.swagger-ui .right-2-ns{right:2rem}.swagger-ui .bottom-2-ns{bottom:2rem}.swagger-ui .top--1-ns{top:-1rem}.swagger-ui .right--1-ns{right:-1rem}.swagger-ui .bottom--1-ns{bottom:-1rem}.swagger-ui .left--1-ns{left:-1rem}.swagger-ui .top--2-ns{top:-2rem}.swagger-ui .right--2-ns{right:-2rem}.swagger-ui .bottom--2-ns{bottom:-2rem}.swagger-ui .left--2-ns{left:-2rem}.swagger-ui .absolute--fill-ns{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .top-0-m{top:0}.swagger-ui .left-0-m{left:0}.swagger-ui .right-0-m{right:0}.swagger-ui .bottom-0-m{bottom:0}.swagger-ui .top-1-m{top:1rem}.swagger-ui .left-1-m{left:1rem}.swagger-ui .right-1-m{right:1rem}.swagger-ui .bottom-1-m{bottom:1rem}.swagger-ui .top-2-m{top:2rem}.swagger-ui .left-2-m{left:2rem}.swagger-ui .right-2-m{right:2rem}.swagger-ui .bottom-2-m{bottom:2rem}.swagger-ui .top--1-m{top:-1rem}.swagger-ui .right--1-m{right:-1rem}.swagger-ui .bottom--1-m{bottom:-1rem}.swagger-ui .left--1-m{left:-1rem}.swagger-ui .top--2-m{top:-2rem}.swagger-ui .right--2-m{right:-2rem}.swagger-ui .bottom--2-m{bottom:-2rem}.swagger-ui .left--2-m{left:-2rem}.swagger-ui .absolute--fill-m{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:60em){.swagger-ui .top-0-l{top:0}.swagger-ui .left-0-l{left:0}.swagger-ui .right-0-l{right:0}.swagger-ui .bottom-0-l{bottom:0}.swagger-ui .top-1-l{top:1rem}.swagger-ui .left-1-l{left:1rem}.swagger-ui .right-1-l{right:1rem}.swagger-ui .bottom-1-l{bottom:1rem}.swagger-ui .top-2-l{top:2rem}.swagger-ui .left-2-l{left:2rem}.swagger-ui .right-2-l{right:2rem}.swagger-ui .bottom-2-l{bottom:2rem}.swagger-ui .top--1-l{top:-1rem}.swagger-ui .right--1-l{right:-1rem}.swagger-ui .bottom--1-l{bottom:-1rem}.swagger-ui .left--1-l{left:-1rem}.swagger-ui .top--2-l{top:-2rem}.swagger-ui .right--2-l{right:-2rem}.swagger-ui .bottom--2-l{bottom:-2rem}.swagger-ui .left--2-l{left:-2rem}.swagger-ui .absolute--fill-l{bottom:0;left:0;right:0;top:0}}.swagger-ui .cf:after,.swagger-ui .cf:before{content:" ";display:table}.swagger-ui .cf:after{clear:both}.swagger-ui .cf{zoom:1}.swagger-ui .cl{clear:left}.swagger-ui .cr{clear:right}.swagger-ui .cb{clear:both}.swagger-ui .cn{clear:none}@media screen and (min-width:30em){.swagger-ui .cl-ns{clear:left}.swagger-ui .cr-ns{clear:right}.swagger-ui .cb-ns{clear:both}.swagger-ui .cn-ns{clear:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .cl-m{clear:left}.swagger-ui .cr-m{clear:right}.swagger-ui .cb-m{clear:both}.swagger-ui .cn-m{clear:none}}@media screen and (min-width:60em){.swagger-ui .cl-l{clear:left}.swagger-ui .cr-l{clear:right}.swagger-ui .cb-l{clear:both}.swagger-ui .cn-l{clear:none}}.swagger-ui .flex{display:flex}.swagger-ui .inline-flex{display:inline-flex}.swagger-ui .flex-auto{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none{flex:none}.swagger-ui .flex-column{flex-direction:column}.swagger-ui .flex-row{flex-direction:row}.swagger-ui .flex-wrap{flex-wrap:wrap}.swagger-ui .flex-nowrap{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse{flex-direction:column-reverse}.swagger-ui .flex-row-reverse{flex-direction:row-reverse}.swagger-ui .items-start{align-items:flex-start}.swagger-ui .items-end{align-items:flex-end}.swagger-ui .items-center{align-items:center}.swagger-ui .items-baseline{align-items:baseline}.swagger-ui .items-stretch{align-items:stretch}.swagger-ui .self-start{align-self:flex-start}.swagger-ui .self-end{align-self:flex-end}.swagger-ui .self-center{align-self:center}.swagger-ui .self-baseline{align-self:baseline}.swagger-ui .self-stretch{align-self:stretch}.swagger-ui .justify-start{justify-content:flex-start}.swagger-ui .justify-end{justify-content:flex-end}.swagger-ui .justify-center{justify-content:center}.swagger-ui .justify-between{justify-content:space-between}.swagger-ui .justify-around{justify-content:space-around}.swagger-ui .content-start{align-content:flex-start}.swagger-ui .content-end{align-content:flex-end}.swagger-ui .content-center{align-content:center}.swagger-ui .content-between{align-content:space-between}.swagger-ui .content-around{align-content:space-around}.swagger-ui .content-stretch{align-content:stretch}.swagger-ui .order-0{order:0}.swagger-ui .order-1{order:1}.swagger-ui .order-2{order:2}.swagger-ui .order-3{order:3}.swagger-ui .order-4{order:4}.swagger-ui .order-5{order:5}.swagger-ui .order-6{order:6}.swagger-ui .order-7{order:7}.swagger-ui .order-8{order:8}.swagger-ui .order-last{order:99999}.swagger-ui .flex-grow-0{flex-grow:0}.swagger-ui .flex-grow-1{flex-grow:1}.swagger-ui .flex-shrink-0{flex-shrink:0}.swagger-ui .flex-shrink-1{flex-shrink:1}@media screen and (min-width:30em){.swagger-ui .flex-ns{display:flex}.swagger-ui .inline-flex-ns{display:inline-flex}.swagger-ui .flex-auto-ns{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-ns{flex:none}.swagger-ui .flex-column-ns{flex-direction:column}.swagger-ui .flex-row-ns{flex-direction:row}.swagger-ui .flex-wrap-ns{flex-wrap:wrap}.swagger-ui .flex-nowrap-ns{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-ns{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-ns{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-ns{flex-direction:row-reverse}.swagger-ui .items-start-ns{align-items:flex-start}.swagger-ui .items-end-ns{align-items:flex-end}.swagger-ui .items-center-ns{align-items:center}.swagger-ui .items-baseline-ns{align-items:baseline}.swagger-ui .items-stretch-ns{align-items:stretch}.swagger-ui .self-start-ns{align-self:flex-start}.swagger-ui .self-end-ns{align-self:flex-end}.swagger-ui .self-center-ns{align-self:center}.swagger-ui .self-baseline-ns{align-self:baseline}.swagger-ui .self-stretch-ns{align-self:stretch}.swagger-ui .justify-start-ns{justify-content:flex-start}.swagger-ui .justify-end-ns{justify-content:flex-end}.swagger-ui .justify-center-ns{justify-content:center}.swagger-ui .justify-between-ns{justify-content:space-between}.swagger-ui .justify-around-ns{justify-content:space-around}.swagger-ui .content-start-ns{align-content:flex-start}.swagger-ui .content-end-ns{align-content:flex-end}.swagger-ui .content-center-ns{align-content:center}.swagger-ui .content-between-ns{align-content:space-between}.swagger-ui .content-around-ns{align-content:space-around}.swagger-ui .content-stretch-ns{align-content:stretch}.swagger-ui .order-0-ns{order:0}.swagger-ui .order-1-ns{order:1}.swagger-ui .order-2-ns{order:2}.swagger-ui .order-3-ns{order:3}.swagger-ui .order-4-ns{order:4}.swagger-ui .order-5-ns{order:5}.swagger-ui .order-6-ns{order:6}.swagger-ui .order-7-ns{order:7}.swagger-ui .order-8-ns{order:8}.swagger-ui .order-last-ns{order:99999}.swagger-ui .flex-grow-0-ns{flex-grow:0}.swagger-ui .flex-grow-1-ns{flex-grow:1}.swagger-ui .flex-shrink-0-ns{flex-shrink:0}.swagger-ui .flex-shrink-1-ns{flex-shrink:1}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .flex-m{display:flex}.swagger-ui .inline-flex-m{display:inline-flex}.swagger-ui .flex-auto-m{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-m{flex:none}.swagger-ui .flex-column-m{flex-direction:column}.swagger-ui .flex-row-m{flex-direction:row}.swagger-ui .flex-wrap-m{flex-wrap:wrap}.swagger-ui .flex-nowrap-m{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-m{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-m{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-m{flex-direction:row-reverse}.swagger-ui .items-start-m{align-items:flex-start}.swagger-ui .items-end-m{align-items:flex-end}.swagger-ui .items-center-m{align-items:center}.swagger-ui .items-baseline-m{align-items:baseline}.swagger-ui .items-stretch-m{align-items:stretch}.swagger-ui .self-start-m{align-self:flex-start}.swagger-ui .self-end-m{align-self:flex-end}.swagger-ui .self-center-m{align-self:center}.swagger-ui .self-baseline-m{align-self:baseline}.swagger-ui .self-stretch-m{align-self:stretch}.swagger-ui .justify-start-m{justify-content:flex-start}.swagger-ui .justify-end-m{justify-content:flex-end}.swagger-ui .justify-center-m{justify-content:center}.swagger-ui .justify-between-m{justify-content:space-between}.swagger-ui .justify-around-m{justify-content:space-around}.swagger-ui .content-start-m{align-content:flex-start}.swagger-ui .content-end-m{align-content:flex-end}.swagger-ui .content-center-m{align-content:center}.swagger-ui .content-between-m{align-content:space-between}.swagger-ui .content-around-m{align-content:space-around}.swagger-ui .content-stretch-m{align-content:stretch}.swagger-ui .order-0-m{order:0}.swagger-ui .order-1-m{order:1}.swagger-ui .order-2-m{order:2}.swagger-ui .order-3-m{order:3}.swagger-ui .order-4-m{order:4}.swagger-ui .order-5-m{order:5}.swagger-ui .order-6-m{order:6}.swagger-ui .order-7-m{order:7}.swagger-ui .order-8-m{order:8}.swagger-ui .order-last-m{order:99999}.swagger-ui .flex-grow-0-m{flex-grow:0}.swagger-ui .flex-grow-1-m{flex-grow:1}.swagger-ui .flex-shrink-0-m{flex-shrink:0}.swagger-ui .flex-shrink-1-m{flex-shrink:1}}@media screen and (min-width:60em){.swagger-ui .flex-l{display:flex}.swagger-ui .inline-flex-l{display:inline-flex}.swagger-ui .flex-auto-l{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-l{flex:none}.swagger-ui .flex-column-l{flex-direction:column}.swagger-ui .flex-row-l{flex-direction:row}.swagger-ui .flex-wrap-l{flex-wrap:wrap}.swagger-ui .flex-nowrap-l{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-l{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-l{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-l{flex-direction:row-reverse}.swagger-ui .items-start-l{align-items:flex-start}.swagger-ui .items-end-l{align-items:flex-end}.swagger-ui .items-center-l{align-items:center}.swagger-ui .items-baseline-l{align-items:baseline}.swagger-ui .items-stretch-l{align-items:stretch}.swagger-ui .self-start-l{align-self:flex-start}.swagger-ui .self-end-l{align-self:flex-end}.swagger-ui .self-center-l{align-self:center}.swagger-ui .self-baseline-l{align-self:baseline}.swagger-ui .self-stretch-l{align-self:stretch}.swagger-ui .justify-start-l{justify-content:flex-start}.swagger-ui .justify-end-l{justify-content:flex-end}.swagger-ui .justify-center-l{justify-content:center}.swagger-ui .justify-between-l{justify-content:space-between}.swagger-ui .justify-around-l{justify-content:space-around}.swagger-ui .content-start-l{align-content:flex-start}.swagger-ui .content-end-l{align-content:flex-end}.swagger-ui .content-center-l{align-content:center}.swagger-ui .content-between-l{align-content:space-between}.swagger-ui .content-around-l{align-content:space-around}.swagger-ui .content-stretch-l{align-content:stretch}.swagger-ui .order-0-l{order:0}.swagger-ui .order-1-l{order:1}.swagger-ui .order-2-l{order:2}.swagger-ui .order-3-l{order:3}.swagger-ui .order-4-l{order:4}.swagger-ui .order-5-l{order:5}.swagger-ui .order-6-l{order:6}.swagger-ui .order-7-l{order:7}.swagger-ui .order-8-l{order:8}.swagger-ui .order-last-l{order:99999}.swagger-ui .flex-grow-0-l{flex-grow:0}.swagger-ui .flex-grow-1-l{flex-grow:1}.swagger-ui .flex-shrink-0-l{flex-shrink:0}.swagger-ui .flex-shrink-1-l{flex-shrink:1}}.swagger-ui .dn{display:none}.swagger-ui .di{display:inline}.swagger-ui .db{display:block}.swagger-ui .dib{display:inline-block}.swagger-ui .dit{display:inline-table}.swagger-ui .dt{display:table}.swagger-ui .dtc{display:table-cell}.swagger-ui .dt-row{display:table-row}.swagger-ui .dt-row-group{display:table-row-group}.swagger-ui .dt-column{display:table-column}.swagger-ui .dt-column-group{display:table-column-group}.swagger-ui .dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.swagger-ui .dn-ns{display:none}.swagger-ui .di-ns{display:inline}.swagger-ui .db-ns{display:block}.swagger-ui .dib-ns{display:inline-block}.swagger-ui .dit-ns{display:inline-table}.swagger-ui .dt-ns{display:table}.swagger-ui .dtc-ns{display:table-cell}.swagger-ui .dt-row-ns{display:table-row}.swagger-ui .dt-row-group-ns{display:table-row-group}.swagger-ui .dt-column-ns{display:table-column}.swagger-ui .dt-column-group-ns{display:table-column-group}.swagger-ui .dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .dn-m{display:none}.swagger-ui .di-m{display:inline}.swagger-ui .db-m{display:block}.swagger-ui .dib-m{display:inline-block}.swagger-ui .dit-m{display:inline-table}.swagger-ui .dt-m{display:table}.swagger-ui .dtc-m{display:table-cell}.swagger-ui .dt-row-m{display:table-row}.swagger-ui .dt-row-group-m{display:table-row-group}.swagger-ui .dt-column-m{display:table-column}.swagger-ui .dt-column-group-m{display:table-column-group}.swagger-ui .dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.swagger-ui .dn-l{display:none}.swagger-ui .di-l{display:inline}.swagger-ui .db-l{display:block}.swagger-ui .dib-l{display:inline-block}.swagger-ui .dit-l{display:inline-table}.swagger-ui .dt-l{display:table}.swagger-ui .dtc-l{display:table-cell}.swagger-ui .dt-row-l{display:table-row}.swagger-ui .dt-row-group-l{display:table-row-group}.swagger-ui .dt-column-l{display:table-column}.swagger-ui .dt-column-group-l{display:table-column-group}.swagger-ui .dt--fixed-l{table-layout:fixed;width:100%}}.swagger-ui .fl{_display:inline;float:left}.swagger-ui .fr{_display:inline;float:right}.swagger-ui .fn{float:none}@media screen and (min-width:30em){.swagger-ui .fl-ns{_display:inline;float:left}.swagger-ui .fr-ns{_display:inline;float:right}.swagger-ui .fn-ns{float:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .fl-m{_display:inline;float:left}.swagger-ui .fr-m{_display:inline;float:right}.swagger-ui .fn-m{float:none}}@media screen and (min-width:60em){.swagger-ui .fl-l{_display:inline;float:left}.swagger-ui .fr-l{_display:inline;float:right}.swagger-ui .fn-l{float:none}}.swagger-ui .sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.swagger-ui .serif{font-family:georgia,serif}.swagger-ui .system-sans-serif{font-family:sans-serif}.swagger-ui .system-serif{font-family:serif}.swagger-ui .code,.swagger-ui code{font-family:Consolas,monaco,monospace}.swagger-ui .courier{font-family:Courier Next,courier,monospace}.swagger-ui .helvetica{font-family:helvetica neue,helvetica,sans-serif}.swagger-ui .avenir{font-family:avenir next,avenir,sans-serif}.swagger-ui .athelas{font-family:athelas,georgia,serif}.swagger-ui .georgia{font-family:georgia,serif}.swagger-ui .times{font-family:times,serif}.swagger-ui .bodoni{font-family:Bodoni MT,serif}.swagger-ui .calisto{font-family:Calisto MT,serif}.swagger-ui .garamond{font-family:garamond,serif}.swagger-ui .baskerville{font-family:baskerville,serif}.swagger-ui .i{font-style:italic}.swagger-ui .fs-normal{font-style:normal}@media screen and (min-width:30em){.swagger-ui .i-ns{font-style:italic}.swagger-ui .fs-normal-ns{font-style:normal}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .i-m{font-style:italic}.swagger-ui .fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.swagger-ui .i-l{font-style:italic}.swagger-ui .fs-normal-l{font-style:normal}}.swagger-ui .normal{font-weight:400}.swagger-ui .b{font-weight:700}.swagger-ui .fw1{font-weight:100}.swagger-ui .fw2{font-weight:200}.swagger-ui .fw3{font-weight:300}.swagger-ui .fw4{font-weight:400}.swagger-ui .fw5{font-weight:500}.swagger-ui .fw6{font-weight:600}.swagger-ui .fw7{font-weight:700}.swagger-ui .fw8{font-weight:800}.swagger-ui .fw9{font-weight:900}@media screen and (min-width:30em){.swagger-ui .normal-ns{font-weight:400}.swagger-ui .b-ns{font-weight:700}.swagger-ui .fw1-ns{font-weight:100}.swagger-ui .fw2-ns{font-weight:200}.swagger-ui .fw3-ns{font-weight:300}.swagger-ui .fw4-ns{font-weight:400}.swagger-ui .fw5-ns{font-weight:500}.swagger-ui .fw6-ns{font-weight:600}.swagger-ui .fw7-ns{font-weight:700}.swagger-ui .fw8-ns{font-weight:800}.swagger-ui .fw9-ns{font-weight:900}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .normal-m{font-weight:400}.swagger-ui .b-m{font-weight:700}.swagger-ui .fw1-m{font-weight:100}.swagger-ui .fw2-m{font-weight:200}.swagger-ui .fw3-m{font-weight:300}.swagger-ui .fw4-m{font-weight:400}.swagger-ui .fw5-m{font-weight:500}.swagger-ui .fw6-m{font-weight:600}.swagger-ui .fw7-m{font-weight:700}.swagger-ui .fw8-m{font-weight:800}.swagger-ui .fw9-m{font-weight:900}}@media screen and (min-width:60em){.swagger-ui .normal-l{font-weight:400}.swagger-ui .b-l{font-weight:700}.swagger-ui .fw1-l{font-weight:100}.swagger-ui .fw2-l{font-weight:200}.swagger-ui .fw3-l{font-weight:300}.swagger-ui .fw4-l{font-weight:400}.swagger-ui .fw5-l{font-weight:500}.swagger-ui .fw6-l{font-weight:600}.swagger-ui .fw7-l{font-weight:700}.swagger-ui .fw8-l{font-weight:800}.swagger-ui .fw9-l{font-weight:900}}.swagger-ui .input-reset{-webkit-appearance:none;-moz-appearance:none}.swagger-ui .button-reset::-moz-focus-inner,.swagger-ui .input-reset::-moz-focus-inner{border:0;padding:0}.swagger-ui .h1{height:1rem}.swagger-ui .h2{height:2rem}.swagger-ui .h3{height:4rem}.swagger-ui .h4{height:8rem}.swagger-ui .h5{height:16rem}.swagger-ui .h-25{height:25%}.swagger-ui .h-50{height:50%}.swagger-ui .h-75{height:75%}.swagger-ui .h-100{height:100%}.swagger-ui .min-h-100{min-height:100%}.swagger-ui .vh-25{height:25vh}.swagger-ui .vh-50{height:50vh}.swagger-ui .vh-75{height:75vh}.swagger-ui .vh-100{height:100vh}.swagger-ui .min-vh-100{min-height:100vh}.swagger-ui .h-auto{height:auto}.swagger-ui .h-inherit{height:inherit}@media screen and (min-width:30em){.swagger-ui .h1-ns{height:1rem}.swagger-ui .h2-ns{height:2rem}.swagger-ui .h3-ns{height:4rem}.swagger-ui .h4-ns{height:8rem}.swagger-ui .h5-ns{height:16rem}.swagger-ui .h-25-ns{height:25%}.swagger-ui .h-50-ns{height:50%}.swagger-ui .h-75-ns{height:75%}.swagger-ui .h-100-ns{height:100%}.swagger-ui .min-h-100-ns{min-height:100%}.swagger-ui .vh-25-ns{height:25vh}.swagger-ui .vh-50-ns{height:50vh}.swagger-ui .vh-75-ns{height:75vh}.swagger-ui .vh-100-ns{height:100vh}.swagger-ui .min-vh-100-ns{min-height:100vh}.swagger-ui .h-auto-ns{height:auto}.swagger-ui .h-inherit-ns{height:inherit}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .h1-m{height:1rem}.swagger-ui .h2-m{height:2rem}.swagger-ui .h3-m{height:4rem}.swagger-ui .h4-m{height:8rem}.swagger-ui .h5-m{height:16rem}.swagger-ui .h-25-m{height:25%}.swagger-ui .h-50-m{height:50%}.swagger-ui .h-75-m{height:75%}.swagger-ui .h-100-m{height:100%}.swagger-ui .min-h-100-m{min-height:100%}.swagger-ui .vh-25-m{height:25vh}.swagger-ui .vh-50-m{height:50vh}.swagger-ui .vh-75-m{height:75vh}.swagger-ui .vh-100-m{height:100vh}.swagger-ui .min-vh-100-m{min-height:100vh}.swagger-ui .h-auto-m{height:auto}.swagger-ui .h-inherit-m{height:inherit}}@media screen and (min-width:60em){.swagger-ui .h1-l{height:1rem}.swagger-ui .h2-l{height:2rem}.swagger-ui .h3-l{height:4rem}.swagger-ui .h4-l{height:8rem}.swagger-ui .h5-l{height:16rem}.swagger-ui .h-25-l{height:25%}.swagger-ui .h-50-l{height:50%}.swagger-ui .h-75-l{height:75%}.swagger-ui .h-100-l{height:100%}.swagger-ui .min-h-100-l{min-height:100%}.swagger-ui .vh-25-l{height:25vh}.swagger-ui .vh-50-l{height:50vh}.swagger-ui .vh-75-l{height:75vh}.swagger-ui .vh-100-l{height:100vh}.swagger-ui .min-vh-100-l{min-height:100vh}.swagger-ui .h-auto-l{height:auto}.swagger-ui .h-inherit-l{height:inherit}}.swagger-ui .tracked{letter-spacing:.1em}.swagger-ui .tracked-tight{letter-spacing:-.05em}.swagger-ui .tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.swagger-ui .tracked-ns{letter-spacing:.1em}.swagger-ui .tracked-tight-ns{letter-spacing:-.05em}.swagger-ui .tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .tracked-m{letter-spacing:.1em}.swagger-ui .tracked-tight-m{letter-spacing:-.05em}.swagger-ui .tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.swagger-ui .tracked-l{letter-spacing:.1em}.swagger-ui .tracked-tight-l{letter-spacing:-.05em}.swagger-ui .tracked-mega-l{letter-spacing:.25em}}.swagger-ui .lh-solid{line-height:1}.swagger-ui .lh-title{line-height:1.25}.swagger-ui .lh-copy{line-height:1.5}@media screen and (min-width:30em){.swagger-ui .lh-solid-ns{line-height:1}.swagger-ui .lh-title-ns{line-height:1.25}.swagger-ui .lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .lh-solid-m{line-height:1}.swagger-ui .lh-title-m{line-height:1.25}.swagger-ui .lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.swagger-ui .lh-solid-l{line-height:1}.swagger-ui .lh-title-l{line-height:1.25}.swagger-ui .lh-copy-l{line-height:1.5}}.swagger-ui .link{-webkit-text-decoration:none;text-decoration:none}.swagger-ui .link,.swagger-ui .link:active,.swagger-ui .link:focus,.swagger-ui .link:hover,.swagger-ui .link:link,.swagger-ui .link:visited{transition:color .15s ease-in}.swagger-ui .link:focus{outline:1px dotted currentColor}.swagger-ui .list{list-style-type:none}.swagger-ui .mw-100{max-width:100%}.swagger-ui .mw1{max-width:1rem}.swagger-ui .mw2{max-width:2rem}.swagger-ui .mw3{max-width:4rem}.swagger-ui .mw4{max-width:8rem}.swagger-ui .mw5{max-width:16rem}.swagger-ui .mw6{max-width:32rem}.swagger-ui .mw7{max-width:48rem}.swagger-ui .mw8{max-width:64rem}.swagger-ui .mw9{max-width:96rem}.swagger-ui .mw-none{max-width:none}@media screen and (min-width:30em){.swagger-ui .mw-100-ns{max-width:100%}.swagger-ui .mw1-ns{max-width:1rem}.swagger-ui .mw2-ns{max-width:2rem}.swagger-ui .mw3-ns{max-width:4rem}.swagger-ui .mw4-ns{max-width:8rem}.swagger-ui .mw5-ns{max-width:16rem}.swagger-ui .mw6-ns{max-width:32rem}.swagger-ui .mw7-ns{max-width:48rem}.swagger-ui .mw8-ns{max-width:64rem}.swagger-ui .mw9-ns{max-width:96rem}.swagger-ui .mw-none-ns{max-width:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .mw-100-m{max-width:100%}.swagger-ui .mw1-m{max-width:1rem}.swagger-ui .mw2-m{max-width:2rem}.swagger-ui .mw3-m{max-width:4rem}.swagger-ui .mw4-m{max-width:8rem}.swagger-ui .mw5-m{max-width:16rem}.swagger-ui .mw6-m{max-width:32rem}.swagger-ui .mw7-m{max-width:48rem}.swagger-ui .mw8-m{max-width:64rem}.swagger-ui .mw9-m{max-width:96rem}.swagger-ui .mw-none-m{max-width:none}}@media screen and (min-width:60em){.swagger-ui .mw-100-l{max-width:100%}.swagger-ui .mw1-l{max-width:1rem}.swagger-ui .mw2-l{max-width:2rem}.swagger-ui .mw3-l{max-width:4rem}.swagger-ui .mw4-l{max-width:8rem}.swagger-ui .mw5-l{max-width:16rem}.swagger-ui .mw6-l{max-width:32rem}.swagger-ui .mw7-l{max-width:48rem}.swagger-ui .mw8-l{max-width:64rem}.swagger-ui .mw9-l{max-width:96rem}.swagger-ui .mw-none-l{max-width:none}}.swagger-ui .w1{width:1rem}.swagger-ui .w2{width:2rem}.swagger-ui .w3{width:4rem}.swagger-ui .w4{width:8rem}.swagger-ui .w5{width:16rem}.swagger-ui .w-10{width:10%}.swagger-ui .w-20{width:20%}.swagger-ui .w-25{width:25%}.swagger-ui .w-30{width:30%}.swagger-ui .w-33{width:33%}.swagger-ui .w-34{width:34%}.swagger-ui .w-40{width:40%}.swagger-ui .w-50{width:50%}.swagger-ui .w-60{width:60%}.swagger-ui .w-70{width:70%}.swagger-ui .w-75{width:75%}.swagger-ui .w-80{width:80%}.swagger-ui .w-90{width:90%}.swagger-ui .w-100{width:100%}.swagger-ui .w-third{width:33.3333333333%}.swagger-ui .w-two-thirds{width:66.6666666667%}.swagger-ui .w-auto{width:auto}@media screen and (min-width:30em){.swagger-ui .w1-ns{width:1rem}.swagger-ui .w2-ns{width:2rem}.swagger-ui .w3-ns{width:4rem}.swagger-ui .w4-ns{width:8rem}.swagger-ui .w5-ns{width:16rem}.swagger-ui .w-10-ns{width:10%}.swagger-ui .w-20-ns{width:20%}.swagger-ui .w-25-ns{width:25%}.swagger-ui .w-30-ns{width:30%}.swagger-ui .w-33-ns{width:33%}.swagger-ui .w-34-ns{width:34%}.swagger-ui .w-40-ns{width:40%}.swagger-ui .w-50-ns{width:50%}.swagger-ui .w-60-ns{width:60%}.swagger-ui .w-70-ns{width:70%}.swagger-ui .w-75-ns{width:75%}.swagger-ui .w-80-ns{width:80%}.swagger-ui .w-90-ns{width:90%}.swagger-ui .w-100-ns{width:100%}.swagger-ui .w-third-ns{width:33.3333333333%}.swagger-ui .w-two-thirds-ns{width:66.6666666667%}.swagger-ui .w-auto-ns{width:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .w1-m{width:1rem}.swagger-ui .w2-m{width:2rem}.swagger-ui .w3-m{width:4rem}.swagger-ui .w4-m{width:8rem}.swagger-ui .w5-m{width:16rem}.swagger-ui .w-10-m{width:10%}.swagger-ui .w-20-m{width:20%}.swagger-ui .w-25-m{width:25%}.swagger-ui .w-30-m{width:30%}.swagger-ui .w-33-m{width:33%}.swagger-ui .w-34-m{width:34%}.swagger-ui .w-40-m{width:40%}.swagger-ui .w-50-m{width:50%}.swagger-ui .w-60-m{width:60%}.swagger-ui .w-70-m{width:70%}.swagger-ui .w-75-m{width:75%}.swagger-ui .w-80-m{width:80%}.swagger-ui .w-90-m{width:90%}.swagger-ui .w-100-m{width:100%}.swagger-ui .w-third-m{width:33.3333333333%}.swagger-ui .w-two-thirds-m{width:66.6666666667%}.swagger-ui .w-auto-m{width:auto}}@media screen and (min-width:60em){.swagger-ui .w1-l{width:1rem}.swagger-ui .w2-l{width:2rem}.swagger-ui .w3-l{width:4rem}.swagger-ui .w4-l{width:8rem}.swagger-ui .w5-l{width:16rem}.swagger-ui .w-10-l{width:10%}.swagger-ui .w-20-l{width:20%}.swagger-ui .w-25-l{width:25%}.swagger-ui .w-30-l{width:30%}.swagger-ui .w-33-l{width:33%}.swagger-ui .w-34-l{width:34%}.swagger-ui .w-40-l{width:40%}.swagger-ui .w-50-l{width:50%}.swagger-ui .w-60-l{width:60%}.swagger-ui .w-70-l{width:70%}.swagger-ui .w-75-l{width:75%}.swagger-ui .w-80-l{width:80%}.swagger-ui .w-90-l{width:90%}.swagger-ui .w-100-l{width:100%}.swagger-ui .w-third-l{width:33.3333333333%}.swagger-ui .w-two-thirds-l{width:66.6666666667%}.swagger-ui .w-auto-l{width:auto}}.swagger-ui .overflow-visible{overflow:visible}.swagger-ui .overflow-hidden{overflow:hidden}.swagger-ui .overflow-scroll{overflow:scroll}.swagger-ui .overflow-auto{overflow:auto}.swagger-ui .overflow-x-visible{overflow-x:visible}.swagger-ui .overflow-x-hidden{overflow-x:hidden}.swagger-ui .overflow-x-scroll{overflow-x:scroll}.swagger-ui .overflow-x-auto{overflow-x:auto}.swagger-ui .overflow-y-visible{overflow-y:visible}.swagger-ui .overflow-y-hidden{overflow-y:hidden}.swagger-ui .overflow-y-scroll{overflow-y:scroll}.swagger-ui .overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.swagger-ui .overflow-visible-ns{overflow:visible}.swagger-ui .overflow-hidden-ns{overflow:hidden}.swagger-ui .overflow-scroll-ns{overflow:scroll}.swagger-ui .overflow-auto-ns{overflow:auto}.swagger-ui .overflow-x-visible-ns{overflow-x:visible}.swagger-ui .overflow-x-hidden-ns{overflow-x:hidden}.swagger-ui .overflow-x-scroll-ns{overflow-x:scroll}.swagger-ui .overflow-x-auto-ns{overflow-x:auto}.swagger-ui .overflow-y-visible-ns{overflow-y:visible}.swagger-ui .overflow-y-hidden-ns{overflow-y:hidden}.swagger-ui .overflow-y-scroll-ns{overflow-y:scroll}.swagger-ui .overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .overflow-visible-m{overflow:visible}.swagger-ui .overflow-hidden-m{overflow:hidden}.swagger-ui .overflow-scroll-m{overflow:scroll}.swagger-ui .overflow-auto-m{overflow:auto}.swagger-ui .overflow-x-visible-m{overflow-x:visible}.swagger-ui .overflow-x-hidden-m{overflow-x:hidden}.swagger-ui .overflow-x-scroll-m{overflow-x:scroll}.swagger-ui .overflow-x-auto-m{overflow-x:auto}.swagger-ui .overflow-y-visible-m{overflow-y:visible}.swagger-ui .overflow-y-hidden-m{overflow-y:hidden}.swagger-ui .overflow-y-scroll-m{overflow-y:scroll}.swagger-ui .overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.swagger-ui .overflow-visible-l{overflow:visible}.swagger-ui .overflow-hidden-l{overflow:hidden}.swagger-ui .overflow-scroll-l{overflow:scroll}.swagger-ui .overflow-auto-l{overflow:auto}.swagger-ui .overflow-x-visible-l{overflow-x:visible}.swagger-ui .overflow-x-hidden-l{overflow-x:hidden}.swagger-ui .overflow-x-scroll-l{overflow-x:scroll}.swagger-ui .overflow-x-auto-l{overflow-x:auto}.swagger-ui .overflow-y-visible-l{overflow-y:visible}.swagger-ui .overflow-y-hidden-l{overflow-y:hidden}.swagger-ui .overflow-y-scroll-l{overflow-y:scroll}.swagger-ui .overflow-y-auto-l{overflow-y:auto}}.swagger-ui .static{position:static}.swagger-ui .relative{position:relative}.swagger-ui .absolute{position:absolute}.swagger-ui .fixed{position:fixed}@media screen and (min-width:30em){.swagger-ui .static-ns{position:static}.swagger-ui .relative-ns{position:relative}.swagger-ui .absolute-ns{position:absolute}.swagger-ui .fixed-ns{position:fixed}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .static-m{position:static}.swagger-ui .relative-m{position:relative}.swagger-ui .absolute-m{position:absolute}.swagger-ui .fixed-m{position:fixed}}@media screen and (min-width:60em){.swagger-ui .static-l{position:static}.swagger-ui .relative-l{position:relative}.swagger-ui .absolute-l{position:absolute}.swagger-ui .fixed-l{position:fixed}}.swagger-ui .o-100{opacity:1}.swagger-ui .o-90{opacity:.9}.swagger-ui .o-80{opacity:.8}.swagger-ui .o-70{opacity:.7}.swagger-ui .o-60{opacity:.6}.swagger-ui .o-50{opacity:.5}.swagger-ui .o-40{opacity:.4}.swagger-ui .o-30{opacity:.3}.swagger-ui .o-20{opacity:.2}.swagger-ui .o-10{opacity:.1}.swagger-ui .o-05{opacity:.05}.swagger-ui .o-025{opacity:.025}.swagger-ui .o-0{opacity:0}.swagger-ui .rotate-45{transform:rotate(45deg)}.swagger-ui .rotate-90{transform:rotate(90deg)}.swagger-ui .rotate-135{transform:rotate(135deg)}.swagger-ui .rotate-180{transform:rotate(180deg)}.swagger-ui .rotate-225{transform:rotate(225deg)}.swagger-ui .rotate-270{transform:rotate(270deg)}.swagger-ui .rotate-315{transform:rotate(315deg)}@media screen and (min-width:30em){.swagger-ui .rotate-45-ns{transform:rotate(45deg)}.swagger-ui .rotate-90-ns{transform:rotate(90deg)}.swagger-ui .rotate-135-ns{transform:rotate(135deg)}.swagger-ui .rotate-180-ns{transform:rotate(180deg)}.swagger-ui .rotate-225-ns{transform:rotate(225deg)}.swagger-ui .rotate-270-ns{transform:rotate(270deg)}.swagger-ui .rotate-315-ns{transform:rotate(315deg)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .rotate-45-m{transform:rotate(45deg)}.swagger-ui .rotate-90-m{transform:rotate(90deg)}.swagger-ui .rotate-135-m{transform:rotate(135deg)}.swagger-ui .rotate-180-m{transform:rotate(180deg)}.swagger-ui .rotate-225-m{transform:rotate(225deg)}.swagger-ui .rotate-270-m{transform:rotate(270deg)}.swagger-ui .rotate-315-m{transform:rotate(315deg)}}@media screen and (min-width:60em){.swagger-ui .rotate-45-l{transform:rotate(45deg)}.swagger-ui .rotate-90-l{transform:rotate(90deg)}.swagger-ui .rotate-135-l{transform:rotate(135deg)}.swagger-ui .rotate-180-l{transform:rotate(180deg)}.swagger-ui .rotate-225-l{transform:rotate(225deg)}.swagger-ui .rotate-270-l{transform:rotate(270deg)}.swagger-ui .rotate-315-l{transform:rotate(315deg)}}.swagger-ui .black-90{color:rgba(0,0,0,.9)}.swagger-ui .black-80{color:rgba(0,0,0,.8)}.swagger-ui .black-70{color:rgba(0,0,0,.7)}.swagger-ui .black-60{color:rgba(0,0,0,.6)}.swagger-ui .black-50{color:rgba(0,0,0,.5)}.swagger-ui .black-40{color:rgba(0,0,0,.4)}.swagger-ui .black-30{color:rgba(0,0,0,.3)}.swagger-ui .black-20{color:rgba(0,0,0,.2)}.swagger-ui .black-10{color:rgba(0,0,0,.1)}.swagger-ui .black-05{color:rgba(0,0,0,.05)}.swagger-ui .white-90{color:hsla(0,0%,100%,.9)}.swagger-ui .white-80{color:hsla(0,0%,100%,.8)}.swagger-ui .white-70{color:hsla(0,0%,100%,.7)}.swagger-ui .white-60{color:hsla(0,0%,100%,.6)}.swagger-ui .white-50{color:hsla(0,0%,100%,.5)}.swagger-ui .white-40{color:hsla(0,0%,100%,.4)}.swagger-ui .white-30{color:hsla(0,0%,100%,.3)}.swagger-ui .white-20{color:hsla(0,0%,100%,.2)}.swagger-ui .white-10{color:hsla(0,0%,100%,.1)}.swagger-ui .black{color:#000}.swagger-ui .near-black{color:#111}.swagger-ui .dark-gray{color:#333}.swagger-ui .mid-gray{color:#555}.swagger-ui .gray{color:#777}.swagger-ui .silver{color:#999}.swagger-ui .light-silver{color:#aaa}.swagger-ui .moon-gray{color:#ccc}.swagger-ui .light-gray{color:#eee}.swagger-ui .near-white{color:#f4f4f4}.swagger-ui .white{color:#fff}.swagger-ui .dark-red{color:#e7040f}.swagger-ui .red{color:#ff4136}.swagger-ui .light-red{color:#ff725c}.swagger-ui .orange{color:#ff6300}.swagger-ui .gold{color:#ffb700}.swagger-ui .yellow{color:gold}.swagger-ui .light-yellow{color:#fbf1a9}.swagger-ui .purple{color:#5e2ca5}.swagger-ui .light-purple{color:#a463f2}.swagger-ui .dark-pink{color:#d5008f}.swagger-ui .hot-pink{color:#ff41b4}.swagger-ui .pink{color:#ff80cc}.swagger-ui .light-pink{color:#ffa3d7}.swagger-ui .dark-green{color:#137752}.swagger-ui .green{color:#19a974}.swagger-ui .light-green{color:#9eebcf}.swagger-ui .navy{color:#001b44}.swagger-ui .dark-blue{color:#00449e}.swagger-ui .blue{color:#357edd}.swagger-ui .light-blue{color:#96ccff}.swagger-ui .lightest-blue{color:#cdecff}.swagger-ui .washed-blue{color:#f6fffe}.swagger-ui .washed-green{color:#e8fdf5}.swagger-ui .washed-yellow{color:#fffceb}.swagger-ui .washed-red{color:#ffdfdf}.swagger-ui .color-inherit{color:inherit}.swagger-ui .bg-black-90{background-color:rgba(0,0,0,.9)}.swagger-ui .bg-black-80{background-color:rgba(0,0,0,.8)}.swagger-ui .bg-black-70{background-color:rgba(0,0,0,.7)}.swagger-ui .bg-black-60{background-color:rgba(0,0,0,.6)}.swagger-ui .bg-black-50{background-color:rgba(0,0,0,.5)}.swagger-ui .bg-black-40{background-color:rgba(0,0,0,.4)}.swagger-ui .bg-black-30{background-color:rgba(0,0,0,.3)}.swagger-ui .bg-black-20{background-color:rgba(0,0,0,.2)}.swagger-ui .bg-black-10{background-color:rgba(0,0,0,.1)}.swagger-ui .bg-black-05{background-color:rgba(0,0,0,.05)}.swagger-ui .bg-white-90{background-color:hsla(0,0%,100%,.9)}.swagger-ui .bg-white-80{background-color:hsla(0,0%,100%,.8)}.swagger-ui .bg-white-70{background-color:hsla(0,0%,100%,.7)}.swagger-ui .bg-white-60{background-color:hsla(0,0%,100%,.6)}.swagger-ui .bg-white-50{background-color:hsla(0,0%,100%,.5)}.swagger-ui .bg-white-40{background-color:hsla(0,0%,100%,.4)}.swagger-ui .bg-white-30{background-color:hsla(0,0%,100%,.3)}.swagger-ui .bg-white-20{background-color:hsla(0,0%,100%,.2)}.swagger-ui .bg-white-10{background-color:hsla(0,0%,100%,.1)}.swagger-ui .bg-black{background-color:#000}.swagger-ui .bg-near-black{background-color:#111}.swagger-ui .bg-dark-gray{background-color:#333}.swagger-ui .bg-mid-gray{background-color:#555}.swagger-ui .bg-gray{background-color:#777}.swagger-ui .bg-silver{background-color:#999}.swagger-ui .bg-light-silver{background-color:#aaa}.swagger-ui .bg-moon-gray{background-color:#ccc}.swagger-ui .bg-light-gray{background-color:#eee}.swagger-ui .bg-near-white{background-color:#f4f4f4}.swagger-ui .bg-white{background-color:#fff}.swagger-ui .bg-transparent{background-color:transparent}.swagger-ui .bg-dark-red{background-color:#e7040f}.swagger-ui .bg-red{background-color:#ff4136}.swagger-ui .bg-light-red{background-color:#ff725c}.swagger-ui .bg-orange{background-color:#ff6300}.swagger-ui .bg-gold{background-color:#ffb700}.swagger-ui .bg-yellow{background-color:gold}.swagger-ui .bg-light-yellow{background-color:#fbf1a9}.swagger-ui .bg-purple{background-color:#5e2ca5}.swagger-ui .bg-light-purple{background-color:#a463f2}.swagger-ui .bg-dark-pink{background-color:#d5008f}.swagger-ui .bg-hot-pink{background-color:#ff41b4}.swagger-ui .bg-pink{background-color:#ff80cc}.swagger-ui .bg-light-pink{background-color:#ffa3d7}.swagger-ui .bg-dark-green{background-color:#137752}.swagger-ui .bg-green{background-color:#19a974}.swagger-ui .bg-light-green{background-color:#9eebcf}.swagger-ui .bg-navy{background-color:#001b44}.swagger-ui .bg-dark-blue{background-color:#00449e}.swagger-ui .bg-blue{background-color:#357edd}.swagger-ui .bg-light-blue{background-color:#96ccff}.swagger-ui .bg-lightest-blue{background-color:#cdecff}.swagger-ui .bg-washed-blue{background-color:#f6fffe}.swagger-ui .bg-washed-green{background-color:#e8fdf5}.swagger-ui .bg-washed-yellow{background-color:#fffceb}.swagger-ui .bg-washed-red{background-color:#ffdfdf}.swagger-ui .bg-inherit{background-color:inherit}.swagger-ui .hover-black:focus,.swagger-ui .hover-black:hover{color:#000}.swagger-ui .hover-near-black:focus,.swagger-ui .hover-near-black:hover{color:#111}.swagger-ui .hover-dark-gray:focus,.swagger-ui .hover-dark-gray:hover{color:#333}.swagger-ui .hover-mid-gray:focus,.swagger-ui .hover-mid-gray:hover{color:#555}.swagger-ui .hover-gray:focus,.swagger-ui .hover-gray:hover{color:#777}.swagger-ui .hover-silver:focus,.swagger-ui .hover-silver:hover{color:#999}.swagger-ui .hover-light-silver:focus,.swagger-ui .hover-light-silver:hover{color:#aaa}.swagger-ui .hover-moon-gray:focus,.swagger-ui .hover-moon-gray:hover{color:#ccc}.swagger-ui .hover-light-gray:focus,.swagger-ui .hover-light-gray:hover{color:#eee}.swagger-ui .hover-near-white:focus,.swagger-ui .hover-near-white:hover{color:#f4f4f4}.swagger-ui .hover-white:focus,.swagger-ui .hover-white:hover{color:#fff}.swagger-ui .hover-black-90:focus,.swagger-ui .hover-black-90:hover{color:rgba(0,0,0,.9)}.swagger-ui .hover-black-80:focus,.swagger-ui .hover-black-80:hover{color:rgba(0,0,0,.8)}.swagger-ui .hover-black-70:focus,.swagger-ui .hover-black-70:hover{color:rgba(0,0,0,.7)}.swagger-ui .hover-black-60:focus,.swagger-ui .hover-black-60:hover{color:rgba(0,0,0,.6)}.swagger-ui .hover-black-50:focus,.swagger-ui .hover-black-50:hover{color:rgba(0,0,0,.5)}.swagger-ui .hover-black-40:focus,.swagger-ui .hover-black-40:hover{color:rgba(0,0,0,.4)}.swagger-ui .hover-black-30:focus,.swagger-ui .hover-black-30:hover{color:rgba(0,0,0,.3)}.swagger-ui .hover-black-20:focus,.swagger-ui .hover-black-20:hover{color:rgba(0,0,0,.2)}.swagger-ui .hover-black-10:focus,.swagger-ui .hover-black-10:hover{color:rgba(0,0,0,.1)}.swagger-ui .hover-white-90:focus,.swagger-ui .hover-white-90:hover{color:hsla(0,0%,100%,.9)}.swagger-ui .hover-white-80:focus,.swagger-ui .hover-white-80:hover{color:hsla(0,0%,100%,.8)}.swagger-ui .hover-white-70:focus,.swagger-ui .hover-white-70:hover{color:hsla(0,0%,100%,.7)}.swagger-ui .hover-white-60:focus,.swagger-ui .hover-white-60:hover{color:hsla(0,0%,100%,.6)}.swagger-ui .hover-white-50:focus,.swagger-ui .hover-white-50:hover{color:hsla(0,0%,100%,.5)}.swagger-ui .hover-white-40:focus,.swagger-ui .hover-white-40:hover{color:hsla(0,0%,100%,.4)}.swagger-ui .hover-white-30:focus,.swagger-ui .hover-white-30:hover{color:hsla(0,0%,100%,.3)}.swagger-ui .hover-white-20:focus,.swagger-ui .hover-white-20:hover{color:hsla(0,0%,100%,.2)}.swagger-ui .hover-white-10:focus,.swagger-ui .hover-white-10:hover{color:hsla(0,0%,100%,.1)}.swagger-ui .hover-inherit:focus,.swagger-ui .hover-inherit:hover{color:inherit}.swagger-ui .hover-bg-black:focus,.swagger-ui .hover-bg-black:hover{background-color:#000}.swagger-ui .hover-bg-near-black:focus,.swagger-ui .hover-bg-near-black:hover{background-color:#111}.swagger-ui .hover-bg-dark-gray:focus,.swagger-ui .hover-bg-dark-gray:hover{background-color:#333}.swagger-ui .hover-bg-mid-gray:focus,.swagger-ui .hover-bg-mid-gray:hover{background-color:#555}.swagger-ui .hover-bg-gray:focus,.swagger-ui .hover-bg-gray:hover{background-color:#777}.swagger-ui .hover-bg-silver:focus,.swagger-ui .hover-bg-silver:hover{background-color:#999}.swagger-ui .hover-bg-light-silver:focus,.swagger-ui .hover-bg-light-silver:hover{background-color:#aaa}.swagger-ui .hover-bg-moon-gray:focus,.swagger-ui .hover-bg-moon-gray:hover{background-color:#ccc}.swagger-ui .hover-bg-light-gray:focus,.swagger-ui .hover-bg-light-gray:hover{background-color:#eee}.swagger-ui .hover-bg-near-white:focus,.swagger-ui .hover-bg-near-white:hover{background-color:#f4f4f4}.swagger-ui .hover-bg-white:focus,.swagger-ui .hover-bg-white:hover{background-color:#fff}.swagger-ui .hover-bg-transparent:focus,.swagger-ui .hover-bg-transparent:hover{background-color:transparent}.swagger-ui .hover-bg-black-90:focus,.swagger-ui .hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.swagger-ui .hover-bg-black-80:focus,.swagger-ui .hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.swagger-ui .hover-bg-black-70:focus,.swagger-ui .hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.swagger-ui .hover-bg-black-60:focus,.swagger-ui .hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.swagger-ui .hover-bg-black-50:focus,.swagger-ui .hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.swagger-ui .hover-bg-black-40:focus,.swagger-ui .hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.swagger-ui .hover-bg-black-30:focus,.swagger-ui .hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.swagger-ui .hover-bg-black-20:focus,.swagger-ui .hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.swagger-ui .hover-bg-black-10:focus,.swagger-ui .hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.swagger-ui .hover-bg-white-90:focus,.swagger-ui .hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.swagger-ui .hover-bg-white-80:focus,.swagger-ui .hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.swagger-ui .hover-bg-white-70:focus,.swagger-ui .hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.swagger-ui .hover-bg-white-60:focus,.swagger-ui .hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.swagger-ui .hover-bg-white-50:focus,.swagger-ui .hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.swagger-ui .hover-bg-white-40:focus,.swagger-ui .hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.swagger-ui .hover-bg-white-30:focus,.swagger-ui .hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.swagger-ui .hover-bg-white-20:focus,.swagger-ui .hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.swagger-ui .hover-bg-white-10:focus,.swagger-ui .hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.swagger-ui .hover-dark-red:focus,.swagger-ui .hover-dark-red:hover{color:#e7040f}.swagger-ui .hover-red:focus,.swagger-ui .hover-red:hover{color:#ff4136}.swagger-ui .hover-light-red:focus,.swagger-ui .hover-light-red:hover{color:#ff725c}.swagger-ui .hover-orange:focus,.swagger-ui .hover-orange:hover{color:#ff6300}.swagger-ui .hover-gold:focus,.swagger-ui .hover-gold:hover{color:#ffb700}.swagger-ui .hover-yellow:focus,.swagger-ui .hover-yellow:hover{color:gold}.swagger-ui .hover-light-yellow:focus,.swagger-ui .hover-light-yellow:hover{color:#fbf1a9}.swagger-ui .hover-purple:focus,.swagger-ui .hover-purple:hover{color:#5e2ca5}.swagger-ui .hover-light-purple:focus,.swagger-ui .hover-light-purple:hover{color:#a463f2}.swagger-ui .hover-dark-pink:focus,.swagger-ui .hover-dark-pink:hover{color:#d5008f}.swagger-ui .hover-hot-pink:focus,.swagger-ui .hover-hot-pink:hover{color:#ff41b4}.swagger-ui .hover-pink:focus,.swagger-ui .hover-pink:hover{color:#ff80cc}.swagger-ui .hover-light-pink:focus,.swagger-ui .hover-light-pink:hover{color:#ffa3d7}.swagger-ui .hover-dark-green:focus,.swagger-ui .hover-dark-green:hover{color:#137752}.swagger-ui .hover-green:focus,.swagger-ui .hover-green:hover{color:#19a974}.swagger-ui .hover-light-green:focus,.swagger-ui .hover-light-green:hover{color:#9eebcf}.swagger-ui .hover-navy:focus,.swagger-ui .hover-navy:hover{color:#001b44}.swagger-ui .hover-dark-blue:focus,.swagger-ui .hover-dark-blue:hover{color:#00449e}.swagger-ui .hover-blue:focus,.swagger-ui .hover-blue:hover{color:#357edd}.swagger-ui .hover-light-blue:focus,.swagger-ui .hover-light-blue:hover{color:#96ccff}.swagger-ui .hover-lightest-blue:focus,.swagger-ui .hover-lightest-blue:hover{color:#cdecff}.swagger-ui .hover-washed-blue:focus,.swagger-ui .hover-washed-blue:hover{color:#f6fffe}.swagger-ui .hover-washed-green:focus,.swagger-ui .hover-washed-green:hover{color:#e8fdf5}.swagger-ui .hover-washed-yellow:focus,.swagger-ui .hover-washed-yellow:hover{color:#fffceb}.swagger-ui .hover-washed-red:focus,.swagger-ui .hover-washed-red:hover{color:#ffdfdf}.swagger-ui .hover-bg-dark-red:focus,.swagger-ui .hover-bg-dark-red:hover{background-color:#e7040f}.swagger-ui .hover-bg-red:focus,.swagger-ui .hover-bg-red:hover{background-color:#ff4136}.swagger-ui .hover-bg-light-red:focus,.swagger-ui .hover-bg-light-red:hover{background-color:#ff725c}.swagger-ui .hover-bg-orange:focus,.swagger-ui .hover-bg-orange:hover{background-color:#ff6300}.swagger-ui .hover-bg-gold:focus,.swagger-ui .hover-bg-gold:hover{background-color:#ffb700}.swagger-ui .hover-bg-yellow:focus,.swagger-ui .hover-bg-yellow:hover{background-color:gold}.swagger-ui .hover-bg-light-yellow:focus,.swagger-ui .hover-bg-light-yellow:hover{background-color:#fbf1a9}.swagger-ui .hover-bg-purple:focus,.swagger-ui .hover-bg-purple:hover{background-color:#5e2ca5}.swagger-ui .hover-bg-light-purple:focus,.swagger-ui .hover-bg-light-purple:hover{background-color:#a463f2}.swagger-ui .hover-bg-dark-pink:focus,.swagger-ui .hover-bg-dark-pink:hover{background-color:#d5008f}.swagger-ui .hover-bg-hot-pink:focus,.swagger-ui .hover-bg-hot-pink:hover{background-color:#ff41b4}.swagger-ui .hover-bg-pink:focus,.swagger-ui .hover-bg-pink:hover{background-color:#ff80cc}.swagger-ui .hover-bg-light-pink:focus,.swagger-ui .hover-bg-light-pink:hover{background-color:#ffa3d7}.swagger-ui .hover-bg-dark-green:focus,.swagger-ui .hover-bg-dark-green:hover{background-color:#137752}.swagger-ui .hover-bg-green:focus,.swagger-ui .hover-bg-green:hover{background-color:#19a974}.swagger-ui .hover-bg-light-green:focus,.swagger-ui .hover-bg-light-green:hover{background-color:#9eebcf}.swagger-ui .hover-bg-navy:focus,.swagger-ui .hover-bg-navy:hover{background-color:#001b44}.swagger-ui .hover-bg-dark-blue:focus,.swagger-ui .hover-bg-dark-blue:hover{background-color:#00449e}.swagger-ui .hover-bg-blue:focus,.swagger-ui .hover-bg-blue:hover{background-color:#357edd}.swagger-ui .hover-bg-light-blue:focus,.swagger-ui .hover-bg-light-blue:hover{background-color:#96ccff}.swagger-ui .hover-bg-lightest-blue:focus,.swagger-ui .hover-bg-lightest-blue:hover{background-color:#cdecff}.swagger-ui .hover-bg-washed-blue:focus,.swagger-ui .hover-bg-washed-blue:hover{background-color:#f6fffe}.swagger-ui .hover-bg-washed-green:focus,.swagger-ui .hover-bg-washed-green:hover{background-color:#e8fdf5}.swagger-ui .hover-bg-washed-yellow:focus,.swagger-ui .hover-bg-washed-yellow:hover{background-color:#fffceb}.swagger-ui .hover-bg-washed-red:focus,.swagger-ui .hover-bg-washed-red:hover{background-color:#ffdfdf}.swagger-ui .hover-bg-inherit:focus,.swagger-ui .hover-bg-inherit:hover{background-color:inherit}.swagger-ui .pa0{padding:0}.swagger-ui .pa1{padding:.25rem}.swagger-ui .pa2{padding:.5rem}.swagger-ui .pa3{padding:1rem}.swagger-ui .pa4{padding:2rem}.swagger-ui .pa5{padding:4rem}.swagger-ui .pa6{padding:8rem}.swagger-ui .pa7{padding:16rem}.swagger-ui .pl0{padding-left:0}.swagger-ui .pl1{padding-left:.25rem}.swagger-ui .pl2{padding-left:.5rem}.swagger-ui .pl3{padding-left:1rem}.swagger-ui .pl4{padding-left:2rem}.swagger-ui .pl5{padding-left:4rem}.swagger-ui .pl6{padding-left:8rem}.swagger-ui .pl7{padding-left:16rem}.swagger-ui .pr0{padding-right:0}.swagger-ui .pr1{padding-right:.25rem}.swagger-ui .pr2{padding-right:.5rem}.swagger-ui .pr3{padding-right:1rem}.swagger-ui .pr4{padding-right:2rem}.swagger-ui .pr5{padding-right:4rem}.swagger-ui .pr6{padding-right:8rem}.swagger-ui .pr7{padding-right:16rem}.swagger-ui .pb0{padding-bottom:0}.swagger-ui .pb1{padding-bottom:.25rem}.swagger-ui .pb2{padding-bottom:.5rem}.swagger-ui .pb3{padding-bottom:1rem}.swagger-ui .pb4{padding-bottom:2rem}.swagger-ui .pb5{padding-bottom:4rem}.swagger-ui .pb6{padding-bottom:8rem}.swagger-ui .pb7{padding-bottom:16rem}.swagger-ui .pt0{padding-top:0}.swagger-ui .pt1{padding-top:.25rem}.swagger-ui .pt2{padding-top:.5rem}.swagger-ui .pt3{padding-top:1rem}.swagger-ui .pt4{padding-top:2rem}.swagger-ui .pt5{padding-top:4rem}.swagger-ui .pt6{padding-top:8rem}.swagger-ui .pt7{padding-top:16rem}.swagger-ui .pv0{padding-bottom:0;padding-top:0}.swagger-ui .pv1{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0{padding-left:0;padding-right:0}.swagger-ui .ph1{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0{margin:0}.swagger-ui .ma1{margin:.25rem}.swagger-ui .ma2{margin:.5rem}.swagger-ui .ma3{margin:1rem}.swagger-ui .ma4{margin:2rem}.swagger-ui .ma5{margin:4rem}.swagger-ui .ma6{margin:8rem}.swagger-ui .ma7{margin:16rem}.swagger-ui .ml0{margin-left:0}.swagger-ui .ml1{margin-left:.25rem}.swagger-ui .ml2{margin-left:.5rem}.swagger-ui .ml3{margin-left:1rem}.swagger-ui .ml4{margin-left:2rem}.swagger-ui .ml5{margin-left:4rem}.swagger-ui .ml6{margin-left:8rem}.swagger-ui .ml7{margin-left:16rem}.swagger-ui .mr0{margin-right:0}.swagger-ui .mr1{margin-right:.25rem}.swagger-ui .mr2{margin-right:.5rem}.swagger-ui .mr3{margin-right:1rem}.swagger-ui .mr4{margin-right:2rem}.swagger-ui .mr5{margin-right:4rem}.swagger-ui .mr6{margin-right:8rem}.swagger-ui .mr7{margin-right:16rem}.swagger-ui .mb0{margin-bottom:0}.swagger-ui .mb1{margin-bottom:.25rem}.swagger-ui .mb2{margin-bottom:.5rem}.swagger-ui .mb3{margin-bottom:1rem}.swagger-ui .mb4{margin-bottom:2rem}.swagger-ui .mb5{margin-bottom:4rem}.swagger-ui .mb6{margin-bottom:8rem}.swagger-ui .mb7{margin-bottom:16rem}.swagger-ui .mt0{margin-top:0}.swagger-ui .mt1{margin-top:.25rem}.swagger-ui .mt2{margin-top:.5rem}.swagger-ui .mt3{margin-top:1rem}.swagger-ui .mt4{margin-top:2rem}.swagger-ui .mt5{margin-top:4rem}.swagger-ui .mt6{margin-top:8rem}.swagger-ui .mt7{margin-top:16rem}.swagger-ui .mv0{margin-bottom:0;margin-top:0}.swagger-ui .mv1{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0{margin-left:0;margin-right:0}.swagger-ui .mh1{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.swagger-ui .pa0-ns{padding:0}.swagger-ui .pa1-ns{padding:.25rem}.swagger-ui .pa2-ns{padding:.5rem}.swagger-ui .pa3-ns{padding:1rem}.swagger-ui .pa4-ns{padding:2rem}.swagger-ui .pa5-ns{padding:4rem}.swagger-ui .pa6-ns{padding:8rem}.swagger-ui .pa7-ns{padding:16rem}.swagger-ui .pl0-ns{padding-left:0}.swagger-ui .pl1-ns{padding-left:.25rem}.swagger-ui .pl2-ns{padding-left:.5rem}.swagger-ui .pl3-ns{padding-left:1rem}.swagger-ui .pl4-ns{padding-left:2rem}.swagger-ui .pl5-ns{padding-left:4rem}.swagger-ui .pl6-ns{padding-left:8rem}.swagger-ui .pl7-ns{padding-left:16rem}.swagger-ui .pr0-ns{padding-right:0}.swagger-ui .pr1-ns{padding-right:.25rem}.swagger-ui .pr2-ns{padding-right:.5rem}.swagger-ui .pr3-ns{padding-right:1rem}.swagger-ui .pr4-ns{padding-right:2rem}.swagger-ui .pr5-ns{padding-right:4rem}.swagger-ui .pr6-ns{padding-right:8rem}.swagger-ui .pr7-ns{padding-right:16rem}.swagger-ui .pb0-ns{padding-bottom:0}.swagger-ui .pb1-ns{padding-bottom:.25rem}.swagger-ui .pb2-ns{padding-bottom:.5rem}.swagger-ui .pb3-ns{padding-bottom:1rem}.swagger-ui .pb4-ns{padding-bottom:2rem}.swagger-ui .pb5-ns{padding-bottom:4rem}.swagger-ui .pb6-ns{padding-bottom:8rem}.swagger-ui .pb7-ns{padding-bottom:16rem}.swagger-ui .pt0-ns{padding-top:0}.swagger-ui .pt1-ns{padding-top:.25rem}.swagger-ui .pt2-ns{padding-top:.5rem}.swagger-ui .pt3-ns{padding-top:1rem}.swagger-ui .pt4-ns{padding-top:2rem}.swagger-ui .pt5-ns{padding-top:4rem}.swagger-ui .pt6-ns{padding-top:8rem}.swagger-ui .pt7-ns{padding-top:16rem}.swagger-ui .pv0-ns{padding-bottom:0;padding-top:0}.swagger-ui .pv1-ns{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-ns{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-ns{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-ns{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-ns{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-ns{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-ns{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-ns{padding-left:0;padding-right:0}.swagger-ui .ph1-ns{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-ns{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-ns{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-ns{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-ns{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-ns{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-ns{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-ns{margin:0}.swagger-ui .ma1-ns{margin:.25rem}.swagger-ui .ma2-ns{margin:.5rem}.swagger-ui .ma3-ns{margin:1rem}.swagger-ui .ma4-ns{margin:2rem}.swagger-ui .ma5-ns{margin:4rem}.swagger-ui .ma6-ns{margin:8rem}.swagger-ui .ma7-ns{margin:16rem}.swagger-ui .ml0-ns{margin-left:0}.swagger-ui .ml1-ns{margin-left:.25rem}.swagger-ui .ml2-ns{margin-left:.5rem}.swagger-ui .ml3-ns{margin-left:1rem}.swagger-ui .ml4-ns{margin-left:2rem}.swagger-ui .ml5-ns{margin-left:4rem}.swagger-ui .ml6-ns{margin-left:8rem}.swagger-ui .ml7-ns{margin-left:16rem}.swagger-ui .mr0-ns{margin-right:0}.swagger-ui .mr1-ns{margin-right:.25rem}.swagger-ui .mr2-ns{margin-right:.5rem}.swagger-ui .mr3-ns{margin-right:1rem}.swagger-ui .mr4-ns{margin-right:2rem}.swagger-ui .mr5-ns{margin-right:4rem}.swagger-ui .mr6-ns{margin-right:8rem}.swagger-ui .mr7-ns{margin-right:16rem}.swagger-ui .mb0-ns{margin-bottom:0}.swagger-ui .mb1-ns{margin-bottom:.25rem}.swagger-ui .mb2-ns{margin-bottom:.5rem}.swagger-ui .mb3-ns{margin-bottom:1rem}.swagger-ui .mb4-ns{margin-bottom:2rem}.swagger-ui .mb5-ns{margin-bottom:4rem}.swagger-ui .mb6-ns{margin-bottom:8rem}.swagger-ui .mb7-ns{margin-bottom:16rem}.swagger-ui .mt0-ns{margin-top:0}.swagger-ui .mt1-ns{margin-top:.25rem}.swagger-ui .mt2-ns{margin-top:.5rem}.swagger-ui .mt3-ns{margin-top:1rem}.swagger-ui .mt4-ns{margin-top:2rem}.swagger-ui .mt5-ns{margin-top:4rem}.swagger-ui .mt6-ns{margin-top:8rem}.swagger-ui .mt7-ns{margin-top:16rem}.swagger-ui .mv0-ns{margin-bottom:0;margin-top:0}.swagger-ui .mv1-ns{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-ns{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-ns{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-ns{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-ns{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-ns{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-ns{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-ns{margin-left:0;margin-right:0}.swagger-ui .mh1-ns{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-ns{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-ns{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-ns{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-ns{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-ns{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .pa0-m{padding:0}.swagger-ui .pa1-m{padding:.25rem}.swagger-ui .pa2-m{padding:.5rem}.swagger-ui .pa3-m{padding:1rem}.swagger-ui .pa4-m{padding:2rem}.swagger-ui .pa5-m{padding:4rem}.swagger-ui .pa6-m{padding:8rem}.swagger-ui .pa7-m{padding:16rem}.swagger-ui .pl0-m{padding-left:0}.swagger-ui .pl1-m{padding-left:.25rem}.swagger-ui .pl2-m{padding-left:.5rem}.swagger-ui .pl3-m{padding-left:1rem}.swagger-ui .pl4-m{padding-left:2rem}.swagger-ui .pl5-m{padding-left:4rem}.swagger-ui .pl6-m{padding-left:8rem}.swagger-ui .pl7-m{padding-left:16rem}.swagger-ui .pr0-m{padding-right:0}.swagger-ui .pr1-m{padding-right:.25rem}.swagger-ui .pr2-m{padding-right:.5rem}.swagger-ui .pr3-m{padding-right:1rem}.swagger-ui .pr4-m{padding-right:2rem}.swagger-ui .pr5-m{padding-right:4rem}.swagger-ui .pr6-m{padding-right:8rem}.swagger-ui .pr7-m{padding-right:16rem}.swagger-ui .pb0-m{padding-bottom:0}.swagger-ui .pb1-m{padding-bottom:.25rem}.swagger-ui .pb2-m{padding-bottom:.5rem}.swagger-ui .pb3-m{padding-bottom:1rem}.swagger-ui .pb4-m{padding-bottom:2rem}.swagger-ui .pb5-m{padding-bottom:4rem}.swagger-ui .pb6-m{padding-bottom:8rem}.swagger-ui .pb7-m{padding-bottom:16rem}.swagger-ui .pt0-m{padding-top:0}.swagger-ui .pt1-m{padding-top:.25rem}.swagger-ui .pt2-m{padding-top:.5rem}.swagger-ui .pt3-m{padding-top:1rem}.swagger-ui .pt4-m{padding-top:2rem}.swagger-ui .pt5-m{padding-top:4rem}.swagger-ui .pt6-m{padding-top:8rem}.swagger-ui .pt7-m{padding-top:16rem}.swagger-ui .pv0-m{padding-bottom:0;padding-top:0}.swagger-ui .pv1-m{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-m{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-m{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-m{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-m{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-m{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-m{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-m{padding-left:0;padding-right:0}.swagger-ui .ph1-m{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-m{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-m{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-m{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-m{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-m{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-m{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-m{margin:0}.swagger-ui .ma1-m{margin:.25rem}.swagger-ui .ma2-m{margin:.5rem}.swagger-ui .ma3-m{margin:1rem}.swagger-ui .ma4-m{margin:2rem}.swagger-ui .ma5-m{margin:4rem}.swagger-ui .ma6-m{margin:8rem}.swagger-ui .ma7-m{margin:16rem}.swagger-ui .ml0-m{margin-left:0}.swagger-ui .ml1-m{margin-left:.25rem}.swagger-ui .ml2-m{margin-left:.5rem}.swagger-ui .ml3-m{margin-left:1rem}.swagger-ui .ml4-m{margin-left:2rem}.swagger-ui .ml5-m{margin-left:4rem}.swagger-ui .ml6-m{margin-left:8rem}.swagger-ui .ml7-m{margin-left:16rem}.swagger-ui .mr0-m{margin-right:0}.swagger-ui .mr1-m{margin-right:.25rem}.swagger-ui .mr2-m{margin-right:.5rem}.swagger-ui .mr3-m{margin-right:1rem}.swagger-ui .mr4-m{margin-right:2rem}.swagger-ui .mr5-m{margin-right:4rem}.swagger-ui .mr6-m{margin-right:8rem}.swagger-ui .mr7-m{margin-right:16rem}.swagger-ui .mb0-m{margin-bottom:0}.swagger-ui .mb1-m{margin-bottom:.25rem}.swagger-ui .mb2-m{margin-bottom:.5rem}.swagger-ui .mb3-m{margin-bottom:1rem}.swagger-ui .mb4-m{margin-bottom:2rem}.swagger-ui .mb5-m{margin-bottom:4rem}.swagger-ui .mb6-m{margin-bottom:8rem}.swagger-ui .mb7-m{margin-bottom:16rem}.swagger-ui .mt0-m{margin-top:0}.swagger-ui .mt1-m{margin-top:.25rem}.swagger-ui .mt2-m{margin-top:.5rem}.swagger-ui .mt3-m{margin-top:1rem}.swagger-ui .mt4-m{margin-top:2rem}.swagger-ui .mt5-m{margin-top:4rem}.swagger-ui .mt6-m{margin-top:8rem}.swagger-ui .mt7-m{margin-top:16rem}.swagger-ui .mv0-m{margin-bottom:0;margin-top:0}.swagger-ui .mv1-m{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-m{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-m{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-m{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-m{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-m{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-m{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-m{margin-left:0;margin-right:0}.swagger-ui .mh1-m{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-m{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-m{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-m{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-m{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-m{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.swagger-ui .pa0-l{padding:0}.swagger-ui .pa1-l{padding:.25rem}.swagger-ui .pa2-l{padding:.5rem}.swagger-ui .pa3-l{padding:1rem}.swagger-ui .pa4-l{padding:2rem}.swagger-ui .pa5-l{padding:4rem}.swagger-ui .pa6-l{padding:8rem}.swagger-ui .pa7-l{padding:16rem}.swagger-ui .pl0-l{padding-left:0}.swagger-ui .pl1-l{padding-left:.25rem}.swagger-ui .pl2-l{padding-left:.5rem}.swagger-ui .pl3-l{padding-left:1rem}.swagger-ui .pl4-l{padding-left:2rem}.swagger-ui .pl5-l{padding-left:4rem}.swagger-ui .pl6-l{padding-left:8rem}.swagger-ui .pl7-l{padding-left:16rem}.swagger-ui .pr0-l{padding-right:0}.swagger-ui .pr1-l{padding-right:.25rem}.swagger-ui .pr2-l{padding-right:.5rem}.swagger-ui .pr3-l{padding-right:1rem}.swagger-ui .pr4-l{padding-right:2rem}.swagger-ui .pr5-l{padding-right:4rem}.swagger-ui .pr6-l{padding-right:8rem}.swagger-ui .pr7-l{padding-right:16rem}.swagger-ui .pb0-l{padding-bottom:0}.swagger-ui .pb1-l{padding-bottom:.25rem}.swagger-ui .pb2-l{padding-bottom:.5rem}.swagger-ui .pb3-l{padding-bottom:1rem}.swagger-ui .pb4-l{padding-bottom:2rem}.swagger-ui .pb5-l{padding-bottom:4rem}.swagger-ui .pb6-l{padding-bottom:8rem}.swagger-ui .pb7-l{padding-bottom:16rem}.swagger-ui .pt0-l{padding-top:0}.swagger-ui .pt1-l{padding-top:.25rem}.swagger-ui .pt2-l{padding-top:.5rem}.swagger-ui .pt3-l{padding-top:1rem}.swagger-ui .pt4-l{padding-top:2rem}.swagger-ui .pt5-l{padding-top:4rem}.swagger-ui .pt6-l{padding-top:8rem}.swagger-ui .pt7-l{padding-top:16rem}.swagger-ui .pv0-l{padding-bottom:0;padding-top:0}.swagger-ui .pv1-l{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-l{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-l{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-l{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-l{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-l{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-l{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-l{padding-left:0;padding-right:0}.swagger-ui .ph1-l{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-l{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-l{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-l{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-l{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-l{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-l{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-l{margin:0}.swagger-ui .ma1-l{margin:.25rem}.swagger-ui .ma2-l{margin:.5rem}.swagger-ui .ma3-l{margin:1rem}.swagger-ui .ma4-l{margin:2rem}.swagger-ui .ma5-l{margin:4rem}.swagger-ui .ma6-l{margin:8rem}.swagger-ui .ma7-l{margin:16rem}.swagger-ui .ml0-l{margin-left:0}.swagger-ui .ml1-l{margin-left:.25rem}.swagger-ui .ml2-l{margin-left:.5rem}.swagger-ui .ml3-l{margin-left:1rem}.swagger-ui .ml4-l{margin-left:2rem}.swagger-ui .ml5-l{margin-left:4rem}.swagger-ui .ml6-l{margin-left:8rem}.swagger-ui .ml7-l{margin-left:16rem}.swagger-ui .mr0-l{margin-right:0}.swagger-ui .mr1-l{margin-right:.25rem}.swagger-ui .mr2-l{margin-right:.5rem}.swagger-ui .mr3-l{margin-right:1rem}.swagger-ui .mr4-l{margin-right:2rem}.swagger-ui .mr5-l{margin-right:4rem}.swagger-ui .mr6-l{margin-right:8rem}.swagger-ui .mr7-l{margin-right:16rem}.swagger-ui .mb0-l{margin-bottom:0}.swagger-ui .mb1-l{margin-bottom:.25rem}.swagger-ui .mb2-l{margin-bottom:.5rem}.swagger-ui .mb3-l{margin-bottom:1rem}.swagger-ui .mb4-l{margin-bottom:2rem}.swagger-ui .mb5-l{margin-bottom:4rem}.swagger-ui .mb6-l{margin-bottom:8rem}.swagger-ui .mb7-l{margin-bottom:16rem}.swagger-ui .mt0-l{margin-top:0}.swagger-ui .mt1-l{margin-top:.25rem}.swagger-ui .mt2-l{margin-top:.5rem}.swagger-ui .mt3-l{margin-top:1rem}.swagger-ui .mt4-l{margin-top:2rem}.swagger-ui .mt5-l{margin-top:4rem}.swagger-ui .mt6-l{margin-top:8rem}.swagger-ui .mt7-l{margin-top:16rem}.swagger-ui .mv0-l{margin-bottom:0;margin-top:0}.swagger-ui .mv1-l{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-l{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-l{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-l{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-l{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-l{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-l{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-l{margin-left:0;margin-right:0}.swagger-ui .mh1-l{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-l{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-l{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-l{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-l{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-l{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-l{margin-left:16rem;margin-right:16rem}}.swagger-ui .na1{margin:-.25rem}.swagger-ui .na2{margin:-.5rem}.swagger-ui .na3{margin:-1rem}.swagger-ui .na4{margin:-2rem}.swagger-ui .na5{margin:-4rem}.swagger-ui .na6{margin:-8rem}.swagger-ui .na7{margin:-16rem}.swagger-ui .nl1{margin-left:-.25rem}.swagger-ui .nl2{margin-left:-.5rem}.swagger-ui .nl3{margin-left:-1rem}.swagger-ui .nl4{margin-left:-2rem}.swagger-ui .nl5{margin-left:-4rem}.swagger-ui .nl6{margin-left:-8rem}.swagger-ui .nl7{margin-left:-16rem}.swagger-ui .nr1{margin-right:-.25rem}.swagger-ui .nr2{margin-right:-.5rem}.swagger-ui .nr3{margin-right:-1rem}.swagger-ui .nr4{margin-right:-2rem}.swagger-ui .nr5{margin-right:-4rem}.swagger-ui .nr6{margin-right:-8rem}.swagger-ui .nr7{margin-right:-16rem}.swagger-ui .nb1{margin-bottom:-.25rem}.swagger-ui .nb2{margin-bottom:-.5rem}.swagger-ui .nb3{margin-bottom:-1rem}.swagger-ui .nb4{margin-bottom:-2rem}.swagger-ui .nb5{margin-bottom:-4rem}.swagger-ui .nb6{margin-bottom:-8rem}.swagger-ui .nb7{margin-bottom:-16rem}.swagger-ui .nt1{margin-top:-.25rem}.swagger-ui .nt2{margin-top:-.5rem}.swagger-ui .nt3{margin-top:-1rem}.swagger-ui .nt4{margin-top:-2rem}.swagger-ui .nt5{margin-top:-4rem}.swagger-ui .nt6{margin-top:-8rem}.swagger-ui .nt7{margin-top:-16rem}@media screen and (min-width:30em){.swagger-ui .na1-ns{margin:-.25rem}.swagger-ui .na2-ns{margin:-.5rem}.swagger-ui .na3-ns{margin:-1rem}.swagger-ui .na4-ns{margin:-2rem}.swagger-ui .na5-ns{margin:-4rem}.swagger-ui .na6-ns{margin:-8rem}.swagger-ui .na7-ns{margin:-16rem}.swagger-ui .nl1-ns{margin-left:-.25rem}.swagger-ui .nl2-ns{margin-left:-.5rem}.swagger-ui .nl3-ns{margin-left:-1rem}.swagger-ui .nl4-ns{margin-left:-2rem}.swagger-ui .nl5-ns{margin-left:-4rem}.swagger-ui .nl6-ns{margin-left:-8rem}.swagger-ui .nl7-ns{margin-left:-16rem}.swagger-ui .nr1-ns{margin-right:-.25rem}.swagger-ui .nr2-ns{margin-right:-.5rem}.swagger-ui .nr3-ns{margin-right:-1rem}.swagger-ui .nr4-ns{margin-right:-2rem}.swagger-ui .nr5-ns{margin-right:-4rem}.swagger-ui .nr6-ns{margin-right:-8rem}.swagger-ui .nr7-ns{margin-right:-16rem}.swagger-ui .nb1-ns{margin-bottom:-.25rem}.swagger-ui .nb2-ns{margin-bottom:-.5rem}.swagger-ui .nb3-ns{margin-bottom:-1rem}.swagger-ui .nb4-ns{margin-bottom:-2rem}.swagger-ui .nb5-ns{margin-bottom:-4rem}.swagger-ui .nb6-ns{margin-bottom:-8rem}.swagger-ui .nb7-ns{margin-bottom:-16rem}.swagger-ui .nt1-ns{margin-top:-.25rem}.swagger-ui .nt2-ns{margin-top:-.5rem}.swagger-ui .nt3-ns{margin-top:-1rem}.swagger-ui .nt4-ns{margin-top:-2rem}.swagger-ui .nt5-ns{margin-top:-4rem}.swagger-ui .nt6-ns{margin-top:-8rem}.swagger-ui .nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .na1-m{margin:-.25rem}.swagger-ui .na2-m{margin:-.5rem}.swagger-ui .na3-m{margin:-1rem}.swagger-ui .na4-m{margin:-2rem}.swagger-ui .na5-m{margin:-4rem}.swagger-ui .na6-m{margin:-8rem}.swagger-ui .na7-m{margin:-16rem}.swagger-ui .nl1-m{margin-left:-.25rem}.swagger-ui .nl2-m{margin-left:-.5rem}.swagger-ui .nl3-m{margin-left:-1rem}.swagger-ui .nl4-m{margin-left:-2rem}.swagger-ui .nl5-m{margin-left:-4rem}.swagger-ui .nl6-m{margin-left:-8rem}.swagger-ui .nl7-m{margin-left:-16rem}.swagger-ui .nr1-m{margin-right:-.25rem}.swagger-ui .nr2-m{margin-right:-.5rem}.swagger-ui .nr3-m{margin-right:-1rem}.swagger-ui .nr4-m{margin-right:-2rem}.swagger-ui .nr5-m{margin-right:-4rem}.swagger-ui .nr6-m{margin-right:-8rem}.swagger-ui .nr7-m{margin-right:-16rem}.swagger-ui .nb1-m{margin-bottom:-.25rem}.swagger-ui .nb2-m{margin-bottom:-.5rem}.swagger-ui .nb3-m{margin-bottom:-1rem}.swagger-ui .nb4-m{margin-bottom:-2rem}.swagger-ui .nb5-m{margin-bottom:-4rem}.swagger-ui .nb6-m{margin-bottom:-8rem}.swagger-ui .nb7-m{margin-bottom:-16rem}.swagger-ui .nt1-m{margin-top:-.25rem}.swagger-ui .nt2-m{margin-top:-.5rem}.swagger-ui .nt3-m{margin-top:-1rem}.swagger-ui .nt4-m{margin-top:-2rem}.swagger-ui .nt5-m{margin-top:-4rem}.swagger-ui .nt6-m{margin-top:-8rem}.swagger-ui .nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.swagger-ui .na1-l{margin:-.25rem}.swagger-ui .na2-l{margin:-.5rem}.swagger-ui .na3-l{margin:-1rem}.swagger-ui .na4-l{margin:-2rem}.swagger-ui .na5-l{margin:-4rem}.swagger-ui .na6-l{margin:-8rem}.swagger-ui .na7-l{margin:-16rem}.swagger-ui .nl1-l{margin-left:-.25rem}.swagger-ui .nl2-l{margin-left:-.5rem}.swagger-ui .nl3-l{margin-left:-1rem}.swagger-ui .nl4-l{margin-left:-2rem}.swagger-ui .nl5-l{margin-left:-4rem}.swagger-ui .nl6-l{margin-left:-8rem}.swagger-ui .nl7-l{margin-left:-16rem}.swagger-ui .nr1-l{margin-right:-.25rem}.swagger-ui .nr2-l{margin-right:-.5rem}.swagger-ui .nr3-l{margin-right:-1rem}.swagger-ui .nr4-l{margin-right:-2rem}.swagger-ui .nr5-l{margin-right:-4rem}.swagger-ui .nr6-l{margin-right:-8rem}.swagger-ui .nr7-l{margin-right:-16rem}.swagger-ui .nb1-l{margin-bottom:-.25rem}.swagger-ui .nb2-l{margin-bottom:-.5rem}.swagger-ui .nb3-l{margin-bottom:-1rem}.swagger-ui .nb4-l{margin-bottom:-2rem}.swagger-ui .nb5-l{margin-bottom:-4rem}.swagger-ui .nb6-l{margin-bottom:-8rem}.swagger-ui .nb7-l{margin-bottom:-16rem}.swagger-ui .nt1-l{margin-top:-.25rem}.swagger-ui .nt2-l{margin-top:-.5rem}.swagger-ui .nt3-l{margin-top:-1rem}.swagger-ui .nt4-l{margin-top:-2rem}.swagger-ui .nt5-l{margin-top:-4rem}.swagger-ui .nt6-l{margin-top:-8rem}.swagger-ui .nt7-l{margin-top:-16rem}}.swagger-ui .collapse{border-collapse:collapse;border-spacing:0}.swagger-ui .striped--light-silver:nth-child(odd){background-color:#aaa}.swagger-ui .striped--moon-gray:nth-child(odd){background-color:#ccc}.swagger-ui .striped--light-gray:nth-child(odd){background-color:#eee}.swagger-ui .striped--near-white:nth-child(odd){background-color:#f4f4f4}.swagger-ui .stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.swagger-ui .stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.swagger-ui .strike{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline{-webkit-text-decoration:none;text-decoration:none}@media screen and (min-width:30em){.swagger-ui .strike-ns{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-ns{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-ns{-webkit-text-decoration:none;text-decoration:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .strike-m{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-m{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-m{-webkit-text-decoration:none;text-decoration:none}}@media screen and (min-width:60em){.swagger-ui .strike-l{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-l{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-l{-webkit-text-decoration:none;text-decoration:none}}.swagger-ui .tl{text-align:left}.swagger-ui .tr{text-align:right}.swagger-ui .tc{text-align:center}.swagger-ui .tj{text-align:justify}@media screen and (min-width:30em){.swagger-ui .tl-ns{text-align:left}.swagger-ui .tr-ns{text-align:right}.swagger-ui .tc-ns{text-align:center}.swagger-ui .tj-ns{text-align:justify}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .tl-m{text-align:left}.swagger-ui .tr-m{text-align:right}.swagger-ui .tc-m{text-align:center}.swagger-ui .tj-m{text-align:justify}}@media screen and (min-width:60em){.swagger-ui .tl-l{text-align:left}.swagger-ui .tr-l{text-align:right}.swagger-ui .tc-l{text-align:center}.swagger-ui .tj-l{text-align:justify}}.swagger-ui .ttc{text-transform:capitalize}.swagger-ui .ttl{text-transform:lowercase}.swagger-ui .ttu{text-transform:uppercase}.swagger-ui .ttn{text-transform:none}@media screen and (min-width:30em){.swagger-ui .ttc-ns{text-transform:capitalize}.swagger-ui .ttl-ns{text-transform:lowercase}.swagger-ui .ttu-ns{text-transform:uppercase}.swagger-ui .ttn-ns{text-transform:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ttc-m{text-transform:capitalize}.swagger-ui .ttl-m{text-transform:lowercase}.swagger-ui .ttu-m{text-transform:uppercase}.swagger-ui .ttn-m{text-transform:none}}@media screen and (min-width:60em){.swagger-ui .ttc-l{text-transform:capitalize}.swagger-ui .ttl-l{text-transform:lowercase}.swagger-ui .ttu-l{text-transform:uppercase}.swagger-ui .ttn-l{text-transform:none}}.swagger-ui .f-6,.swagger-ui .f-headline{font-size:6rem}.swagger-ui .f-5,.swagger-ui .f-subheadline{font-size:5rem}.swagger-ui .f1{font-size:3rem}.swagger-ui .f2{font-size:2.25rem}.swagger-ui .f3{font-size:1.5rem}.swagger-ui .f4{font-size:1.25rem}.swagger-ui .f5{font-size:1rem}.swagger-ui .f6{font-size:.875rem}.swagger-ui .f7{font-size:.75rem}@media screen and (min-width:30em){.swagger-ui .f-6-ns,.swagger-ui .f-headline-ns{font-size:6rem}.swagger-ui .f-5-ns,.swagger-ui .f-subheadline-ns{font-size:5rem}.swagger-ui .f1-ns{font-size:3rem}.swagger-ui .f2-ns{font-size:2.25rem}.swagger-ui .f3-ns{font-size:1.5rem}.swagger-ui .f4-ns{font-size:1.25rem}.swagger-ui .f5-ns{font-size:1rem}.swagger-ui .f6-ns{font-size:.875rem}.swagger-ui .f7-ns{font-size:.75rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .f-6-m,.swagger-ui .f-headline-m{font-size:6rem}.swagger-ui .f-5-m,.swagger-ui .f-subheadline-m{font-size:5rem}.swagger-ui .f1-m{font-size:3rem}.swagger-ui .f2-m{font-size:2.25rem}.swagger-ui .f3-m{font-size:1.5rem}.swagger-ui .f4-m{font-size:1.25rem}.swagger-ui .f5-m{font-size:1rem}.swagger-ui .f6-m{font-size:.875rem}.swagger-ui .f7-m{font-size:.75rem}}@media screen and (min-width:60em){.swagger-ui .f-6-l,.swagger-ui .f-headline-l{font-size:6rem}.swagger-ui .f-5-l,.swagger-ui .f-subheadline-l{font-size:5rem}.swagger-ui .f1-l{font-size:3rem}.swagger-ui .f2-l{font-size:2.25rem}.swagger-ui .f3-l{font-size:1.5rem}.swagger-ui .f4-l{font-size:1.25rem}.swagger-ui .f5-l{font-size:1rem}.swagger-ui .f6-l{font-size:.875rem}.swagger-ui .f7-l{font-size:.75rem}}.swagger-ui .measure{max-width:30em}.swagger-ui .measure-wide{max-width:34em}.swagger-ui .measure-narrow{max-width:20em}.swagger-ui .indent{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (min-width:30em){.swagger-ui .measure-ns{max-width:30em}.swagger-ui .measure-wide-ns{max-width:34em}.swagger-ui .measure-narrow-ns{max-width:20em}.swagger-ui .indent-ns{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-ns{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-ns{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .measure-m{max-width:30em}.swagger-ui .measure-wide-m{max-width:34em}.swagger-ui .measure-narrow-m{max-width:20em}.swagger-ui .indent-m{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-m{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-m{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:60em){.swagger-ui .measure-l{max-width:30em}.swagger-ui .measure-wide-l{max-width:34em}.swagger-ui .measure-narrow-l{max-width:20em}.swagger-ui .indent-l{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-l{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.swagger-ui .overflow-container{overflow-y:scroll}.swagger-ui .center{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto{margin-right:auto}.swagger-ui .ml-auto{margin-left:auto}@media screen and (min-width:30em){.swagger-ui .center-ns{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-ns{margin-right:auto}.swagger-ui .ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .center-m{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-m{margin-right:auto}.swagger-ui .ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.swagger-ui .center-l{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-l{margin-right:auto}.swagger-ui .ml-auto-l{margin-left:auto}}.swagger-ui .clip{position:fixed!important;_position:absolute!important}.swagger-ui .clip{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}@media screen and (min-width:30em){.swagger-ui .clip-ns{position:fixed!important;_position:absolute!important}.swagger-ui .clip-ns{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .clip-m{position:fixed!important;_position:absolute!important}.swagger-ui .clip-m{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}@media screen and (min-width:60em){.swagger-ui .clip-l{position:fixed!important;_position:absolute!important}.swagger-ui .clip-l{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}.swagger-ui .ws-normal{white-space:normal}.swagger-ui .nowrap{white-space:nowrap}.swagger-ui .pre{white-space:pre}@media screen and (min-width:30em){.swagger-ui .ws-normal-ns{white-space:normal}.swagger-ui .nowrap-ns{white-space:nowrap}.swagger-ui .pre-ns{white-space:pre}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ws-normal-m{white-space:normal}.swagger-ui .nowrap-m{white-space:nowrap}.swagger-ui .pre-m{white-space:pre}}@media screen and (min-width:60em){.swagger-ui .ws-normal-l{white-space:normal}.swagger-ui .nowrap-l{white-space:nowrap}.swagger-ui .pre-l{white-space:pre}}.swagger-ui .v-base{vertical-align:baseline}.swagger-ui .v-mid{vertical-align:middle}.swagger-ui .v-top{vertical-align:top}.swagger-ui .v-btm{vertical-align:bottom}@media screen and (min-width:30em){.swagger-ui .v-base-ns{vertical-align:baseline}.swagger-ui .v-mid-ns{vertical-align:middle}.swagger-ui .v-top-ns{vertical-align:top}.swagger-ui .v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .v-base-m{vertical-align:baseline}.swagger-ui .v-mid-m{vertical-align:middle}.swagger-ui .v-top-m{vertical-align:top}.swagger-ui .v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.swagger-ui .v-base-l{vertical-align:baseline}.swagger-ui .v-mid-l{vertical-align:middle}.swagger-ui .v-top-l{vertical-align:top}.swagger-ui .v-btm-l{vertical-align:bottom}}.swagger-ui .dim{opacity:1;transition:opacity .15s ease-in}.swagger-ui .dim:focus,.swagger-ui .dim:hover{opacity:.5;transition:opacity .15s ease-in}.swagger-ui .dim:active{opacity:.8;transition:opacity .15s ease-out}.swagger-ui .glow{transition:opacity .15s ease-in}.swagger-ui .glow:focus,.swagger-ui .glow:hover{opacity:1;transition:opacity .15s ease-in}.swagger-ui .hide-child .child{opacity:0;transition:opacity .15s ease-in}.swagger-ui .hide-child:active .child,.swagger-ui .hide-child:focus .child,.swagger-ui .hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.swagger-ui .underline-hover:focus,.swagger-ui .underline-hover:hover{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-out}.swagger-ui .grow:focus,.swagger-ui .grow:hover{transform:scale(1.05)}.swagger-ui .grow:active{transform:scale(.9)}.swagger-ui .grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-in-out}.swagger-ui .grow-large:focus,.swagger-ui .grow-large:hover{transform:scale(1.2)}.swagger-ui .grow-large:active{transform:scale(.95)}.swagger-ui .pointer:hover{cursor:pointer}.swagger-ui .shadow-hover{cursor:pointer;position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.swagger-ui .shadow-hover:after{border-radius:inherit;box-shadow:0 0 16px 2px rgba(0,0,0,.2);content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .5s cubic-bezier(.165,.84,.44,1);width:100%;z-index:-1}.swagger-ui .shadow-hover:focus:after,.swagger-ui .shadow-hover:hover:after{opacity:1}.swagger-ui .bg-animate,.swagger-ui .bg-animate:focus,.swagger-ui .bg-animate:hover{transition:background-color .15s ease-in-out}.swagger-ui .z-0{z-index:0}.swagger-ui .z-1{z-index:1}.swagger-ui .z-2{z-index:2}.swagger-ui .z-3{z-index:3}.swagger-ui .z-4{z-index:4}.swagger-ui .z-5{z-index:5}.swagger-ui .z-999{z-index:999}.swagger-ui .z-9999{z-index:9999}.swagger-ui .z-max{z-index:2147483647}.swagger-ui .z-inherit{z-index:inherit}.swagger-ui .z-initial,.swagger-ui .z-unset{z-index:auto}.swagger-ui .nested-copy-line-height ol,.swagger-ui .nested-copy-line-height p,.swagger-ui .nested-copy-line-height ul{line-height:1.5}.swagger-ui .nested-headline-line-height h1,.swagger-ui .nested-headline-line-height h2,.swagger-ui .nested-headline-line-height h3,.swagger-ui .nested-headline-line-height h4,.swagger-ui .nested-headline-line-height h5,.swagger-ui .nested-headline-line-height h6{line-height:1.25}.swagger-ui .nested-list-reset ol,.swagger-ui .nested-list-reset ul{list-style-type:none;margin-left:0;padding-left:0}.swagger-ui .nested-copy-indent p+p{margin-bottom:0;margin-top:0;text-indent:.1em}.swagger-ui .nested-copy-seperator p+p{margin-top:1.5em}.swagger-ui .nested-img img{display:block;max-width:100%;width:100%}.swagger-ui .nested-links a{color:#357edd;transition:color .15s ease-in}.swagger-ui .nested-links a:focus,.swagger-ui .nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.swagger-ui .wrapper{box-sizing:border-box;margin:0 auto;max-width:1460px;padding:0 20px;width:100%}.swagger-ui .opblock-tag-section{display:flex;flex-direction:column}.swagger-ui .try-out.btn-group{display:flex;flex:.1 2 auto;padding:0}.swagger-ui .try-out__btn{margin-left:1.25rem}.swagger-ui .opblock-tag{align-items:center;border-bottom:1px solid rgba(59,65,81,.3);cursor:pointer;display:flex;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui .opblock-tag:hover{background:rgba(0,0,0,.02)}.swagger-ui .opblock-tag{color:#3b4151;font-family:sans-serif;font-size:24px;margin:0 0 5px}.swagger-ui .opblock-tag.no-desc span{flex:1}.swagger-ui .opblock-tag svg{transition:all .4s}.swagger-ui .opblock-tag small{color:#3b4151;flex:2;font-family:sans-serif;font-size:14px;font-weight:400;padding:0 10px}.swagger-ui .opblock-tag>div{flex:1 1 150px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.swagger-ui .opblock-tag small,.swagger-ui .opblock-tag>div{flex:1}}.swagger-ui .opblock-tag .info__externaldocs{text-align:right}.swagger-ui .parameter__type{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;padding:5px 0}.swagger-ui .parameter-controls{margin-top:.75em}.swagger-ui .examples__title{display:block;font-size:1.1em;font-weight:700;margin-bottom:.75em}.swagger-ui .examples__section{margin-top:1.5em}.swagger-ui .examples__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .examples-select{display:inline-block;margin-bottom:.75em}.swagger-ui .examples-select .examples-select-element{width:100%}.swagger-ui .examples-select__section-label{font-size:.9rem;font-weight:700;margin-right:.5rem}.swagger-ui .example__section{margin-top:1.5em}.swagger-ui .example__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .view-line-link{cursor:pointer;margin:0 5px;position:relative;top:3px;transition:all .5s;width:20px}.swagger-ui .opblock{border:1px solid #000;border-radius:4px;box-shadow:0 0 3px rgba(0,0,0,.19);margin:0 0 15px}.swagger-ui .opblock .tab-header{display:flex;flex:1}.swagger-ui .opblock .tab-header .tab-item{cursor:pointer;padding:0 40px}.swagger-ui .opblock .tab-header .tab-item:first-of-type{padding:0 40px 0 0}.swagger-ui .opblock .tab-header .tab-item.active h4 span{position:relative}.swagger-ui .opblock .tab-header .tab-item.active h4 span:after{background:gray;bottom:-15px;content:"";height:4px;left:50%;position:absolute;transform:translateX(-50%);width:120%}.swagger-ui .opblock.is-open .opblock-summary{border-bottom:1px solid #000}.swagger-ui .opblock .opblock-section-header{align-items:center;background:hsla(0,0%,100%,.8);box-shadow:0 1px 2px rgba(0,0,0,.1);display:flex;min-height:50px;padding:8px 20px}.swagger-ui .opblock .opblock-section-header>label{align-items:center;color:#3b4151;display:flex;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 0 auto}.swagger-ui .opblock .opblock-section-header>label>span{padding:0 10px 0 0}.swagger-ui .opblock .opblock-section-header h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock .opblock-summary-method{background:#000;border-radius:3px;color:#fff;font-family:sans-serif;font-size:14px;font-weight:700;min-width:80px;padding:6px 0;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1)}.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{align-items:center;color:#3b4151;display:flex;font-family:monospace;font-size:16px;font-weight:600;padding:0 10px;word-break:break-word}@media(max-width:768px){.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{font-size:12px}}.swagger-ui .opblock .opblock-summary-path{flex-shrink:0;max-width:calc(100% - 110px - 15rem)}@media(max-width:640px){.swagger-ui .opblock .opblock-summary-path{flex-shrink:1;max-width:100%}}.swagger-ui .opblock .opblock-summary-path__deprecated{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .opblock .opblock-summary-operation-id{font-size:14px}.swagger-ui .opblock .opblock-summary-description{color:#3b4151;flex:1 1 auto;font-family:sans-serif;font-size:13px;word-break:break-word}.swagger-ui .opblock .opblock-summary{align-items:center;cursor:pointer;display:flex;padding:5px}.swagger-ui .opblock .opblock-summary .view-line-link{cursor:pointer;margin:0;position:relative;top:2px;transition:all .5s;width:0}.swagger-ui .opblock .opblock-summary:hover .view-line-link{margin:0 5px;width:18px}.swagger-ui .opblock .opblock-summary:hover .view-line-link.copy-to-clipboard{width:24px}.swagger-ui .opblock.opblock-post{background:rgba(73,204,144,.1);border-color:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary-method{background:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary{border-color:#49cc90}.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span:after{background:#49cc90}.swagger-ui .opblock.opblock-put{background:rgba(252,161,48,.1);border-color:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary-method{background:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary{border-color:#fca130}.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span:after{background:#fca130}.swagger-ui .opblock.opblock-delete{background:rgba(249,62,62,.1);border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary{border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span:after{background:#f93e3e}.swagger-ui .opblock.opblock-get{background:rgba(97,175,254,.1);border-color:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary-method{background:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary{border-color:#61affe}.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span:after{background:#61affe}.swagger-ui .opblock.opblock-patch{background:rgba(80,227,194,.1);border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary{border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span:after{background:#50e3c2}.swagger-ui .opblock.opblock-head{background:rgba(144,18,254,.1);border-color:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary-method{background:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary{border-color:#9012fe}.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span:after{background:#9012fe}.swagger-ui .opblock.opblock-options{background:rgba(13,90,167,.1);border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary-method{background:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary{border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span:after{background:#0d5aa7}.swagger-ui .opblock.opblock-deprecated{background:hsla(0,0%,92%,.1);border-color:#ebebeb;opacity:.6}.swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#ebebeb}.swagger-ui .opblock.opblock-deprecated .opblock-summary{border-color:#ebebeb}.swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span:after{background:#ebebeb}.swagger-ui .opblock .opblock-schemes{padding:8px 20px}.swagger-ui .opblock .opblock-schemes .schemes-title{padding:0 10px 0 0}.swagger-ui .filter .operation-filter-input{border:2px solid #d8dde7;margin:20px 0;padding:10px;width:100%}.swagger-ui .download-url-wrapper .failed,.swagger-ui .filter .failed{color:red}.swagger-ui .download-url-wrapper .loading,.swagger-ui .filter .loading{color:#aaa}.swagger-ui .model-example{margin-top:1em}.swagger-ui .tab{display:flex;list-style:none;padding:0}.swagger-ui .tab li{color:#3b4151;cursor:pointer;font-family:sans-serif;font-size:12px;min-width:60px;padding:0}.swagger-ui .tab li:first-of-type{padding-left:0;padding-right:12px;position:relative}.swagger-ui .tab li:first-of-type:after{background:rgba(0,0,0,.2);content:"";height:100%;position:absolute;right:6px;top:0;width:1px}.swagger-ui .tab li.active{font-weight:700}.swagger-ui .tab li button.tablinks{background:none;border:0;color:inherit;font-family:inherit;font-weight:inherit;padding:0}.swagger-ui .opblock-description-wrapper,.swagger-ui .opblock-external-docs-wrapper,.swagger-ui .opblock-title_normal{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px;padding:15px 20px}.swagger-ui .opblock-description-wrapper h4,.swagger-ui .opblock-external-docs-wrapper h4,.swagger-ui .opblock-title_normal h4{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .opblock-description-wrapper p,.swagger-ui .opblock-external-docs-wrapper p,.swagger-ui .opblock-title_normal p{color:#3b4151;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock-external-docs-wrapper h4{padding-left:0}.swagger-ui .execute-wrapper{padding:20px;text-align:right}.swagger-ui .execute-wrapper .btn{padding:8px 40px;width:100%}.swagger-ui .body-param-options{display:flex;flex-direction:column}.swagger-ui .body-param-options .body-param-edit{padding:10px 0}.swagger-ui .body-param-options label{padding:8px 0}.swagger-ui .body-param-options label select{margin:3px 0 0}.swagger-ui .responses-inner{padding:20px}.swagger-ui .responses-inner h4,.swagger-ui .responses-inner h5{color:#3b4151;font-family:sans-serif;font-size:12px;margin:10px 0 5px}.swagger-ui .responses-inner .curl{white-space:normal}.swagger-ui .response-col_status{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .response-col_status .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links{color:#3b4151;font-family:sans-serif;font-size:14px;max-width:40em;padding-left:2em}.swagger-ui .response-col_links .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links .operation-link{margin-bottom:1.5em}.swagger-ui .response-col_links .operation-link .description{margin-bottom:.5em}.swagger-ui .opblock-body .opblock-loading-animation{display:block;margin:3em auto}.swagger-ui .opblock-body pre.microlight{word-wrap:break-word;background:#333;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;-webkit-hyphens:auto;hyphens:auto;margin:0;padding:10px;white-space:pre-wrap;word-break:break-all;word-break:break-word}.swagger-ui .opblock-body pre.microlight .headerline{display:block}.swagger-ui .highlight-code{position:relative}.swagger-ui .highlight-code>.microlight{max-height:400px;min-height:6em;overflow-y:auto}.swagger-ui .highlight-code>.microlight code{white-space:pre-wrap!important}.swagger-ui .highlight-code>.microlight code{word-break:break-all}.swagger-ui .curl-command{position:relative}.swagger-ui .download-contents{align-items:center;background:#7d8293;border-radius:4px;bottom:10px;color:#fff;cursor:pointer;display:flex;font-family:sans-serif;font-size:14px;font-weight:600;height:30px;justify-content:center;padding:5px;position:absolute;right:10px;text-align:center}.swagger-ui .scheme-container{background:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.15);margin:0 0 20px;padding:30px 0}.swagger-ui .scheme-container .schemes{align-items:flex-end;display:flex}.swagger-ui .scheme-container .schemes>label{color:#3b4151;display:flex;flex-direction:column;font-family:sans-serif;font-size:12px;font-weight:700;margin:-20px 15px 0 0}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{align-items:center;display:flex;flex-direction:column;justify-content:center;margin-top:1em;min-height:1px;padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading:after{color:#3b4151;content:"loading";font-family:sans-serif;font-size:10px;font-weight:700;left:50%;position:absolute;text-transform:uppercase;top:50%;transform:translate(-50%,-50%)}.swagger-ui .loading-container .loading:before{animation:rotation 1s linear infinite,opacity .5s;-webkit-backface-visibility:hidden;backface-visibility:hidden;border:2px solid rgba(85,85,85,.1);border-radius:100%;border-top-color:rgba(0,0,0,.6);content:"";display:block;height:60px;left:50%;margin:-30px;opacity:1;position:absolute;top:50%;width:60px}@keyframes rotation{to{transform:rotate(1turn)}}.swagger-ui .response-controls{display:flex;padding-top:1em}.swagger-ui .response-control-media-type{margin-right:1em}.swagger-ui .response-control-media-type--accept-controller select{border-color:green}.swagger-ui .response-control-media-type__accept-message{color:green;font-size:.7em}.swagger-ui .response-control-examples__title,.swagger-ui .response-control-media-type__title{display:block;font-size:.7em;margin-bottom:.2em}@keyframes blinker{50%{opacity:0}}.swagger-ui .hidden{display:none}.swagger-ui .no-margin{border:none;height:auto;margin:0;padding:0}.swagger-ui .float-right{float:right}.swagger-ui .svg-assets{height:0;position:absolute;width:0}.swagger-ui section h3{color:#3b4151;font-family:sans-serif}.swagger-ui a.nostyle{display:inline}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:inherit;cursor:pointer;text-decoration:inherit}.swagger-ui .fallback{color:#aaa;padding:1em}.swagger-ui .version-pragma{height:100%;padding:5em 0}.swagger-ui .version-pragma__message{display:flex;font-size:1.2em;height:100%;justify-content:center;line-height:1.5em;padding:0 .6em;text-align:center}.swagger-ui .version-pragma__message>div{flex:1;max-width:55ch}.swagger-ui .version-pragma__message code{background-color:#dedede;padding:4px 4px 2px;white-space:pre}.swagger-ui .opblock-link{font-weight:400}.swagger-ui .opblock-link.shown{font-weight:700}.swagger-ui span.token-string{color:#555}.swagger-ui span.token-not-formatted{color:#555;font-weight:700}.swagger-ui .btn{background:transparent;border:2px solid gray;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.1);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 23px;transition:all .3s}.swagger-ui .btn.btn-sm{font-size:12px;padding:4px 23px}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{box-shadow:0 0 5px rgba(0,0,0,.3)}.swagger-ui .btn.cancel{background-color:transparent;border-color:#ff6060;color:#ff6060;font-family:sans-serif}.swagger-ui .btn.authorize{background-color:transparent;border-color:#49cc90;color:#49cc90;display:inline;line-height:1}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{background-color:#4990e2;border-color:#4990e2;color:#fff}.swagger-ui .btn-group{display:flex;padding:30px}.swagger-ui .btn-group .btn{flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{background:none;border:none;padding:0 0 0 10px}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .model-box-control,.swagger-ui .models-control,.swagger-ui .opblock-summary-control{all:inherit;border-bottom:0;cursor:pointer;flex:1;padding:0}.swagger-ui .model-box-control:focus,.swagger-ui .models-control:focus,.swagger-ui .opblock-summary-control:focus{outline:auto}.swagger-ui .expand-methods,.swagger-ui .expand-operation{background:none;border:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{height:20px;width:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#404040}.swagger-ui .expand-methods svg{fill:#707070;transition:all .3s}.swagger-ui button{cursor:pointer}.swagger-ui button.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .copy-to-clipboard{align-items:center;background:#7d8293;border:none;border-radius:4px;bottom:10px;display:flex;height:30px;justify-content:center;position:absolute;right:100px;width:30px}.swagger-ui .copy-to-clipboard button{background:url("data:image/svg+xml;charset=utf-8,") 50% no-repeat;border:none;flex-grow:1;flex-shrink:1;height:25px}.swagger-ui .curl-command .copy-to-clipboard{bottom:5px;height:20px;right:10px;width:20px}.swagger-ui .curl-command .copy-to-clipboard button{height:18px}.swagger-ui .opblock .opblock-summary .view-line-link.copy-to-clipboard{height:26px;position:static}.swagger-ui select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f7f7f7 url("data:image/svg+xml;charset=utf-8,") right 10px center no-repeat;background-size:20px;border:2px solid #41444e;border-radius:4px;box-shadow:0 1px 2px 0 rgba(0,0,0,.25);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 40px 5px 10px}.swagger-ui select[multiple]{background:#f7f7f7;margin:5px 0;padding:5px}.swagger-ui select.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .opblock-body select{min-width:230px}@media(max-width:768px){.swagger-ui .opblock-body select{min-width:180px}}@media(max-width:640px){.swagger-ui .opblock-body select{min-width:100%;width:100%}}.swagger-ui label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 5px}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{line-height:1}@media(max-width:768px){.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{max-width:175px}}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text],.swagger-ui textarea{background:#fff;border:1px solid #d9d9d9;border-radius:4px;margin:5px 0;min-width:100px;padding:8px 10px}.swagger-ui input[type=email].invalid,.swagger-ui input[type=file].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;transition:opacity .5s}.swagger-ui .checkbox label{display:flex}.swagger-ui .checkbox p{font-weight:400!important;margin:0!important}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:600}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url("data:image/svg+xml;charset=utf-8,") 50% no-repeat}.swagger-ui .dialog-ux{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;box-shadow:0 10px 30px 0 rgba(0,0,0,.2);left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{align-items:center;border-bottom:1px solid #ebebeb;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;transform:rotate(90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .model-toggle.collapsed{transform:rotate(0deg)}.swagger-ui .model-toggle:after{background:url("data:image/svg+xml;charset=utf-8,") 50% no-repeat;background-size:100%;content:"";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;padding:.1em .5em;position:absolute;top:-1.8em;visibility:hidden;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui .model .external-docs,.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui table.model tr.external-docs td:first-child{font-weight:700}.swagger-ui table.model tr .renderedMarkdown p:first-child{margin-top:0}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{align-items:center;color:#606060;cursor:pointer;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px;width:100%}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameters-col_description .markdown p{margin:0}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required:after{color:rgba(255,0,0,.6);content:"required";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_description .markdown p{margin:0}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{align-items:center;display:flex}.swagger-ui .topbar a{color:#fff;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;-webkit-text-decoration:none;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:flex;flex:3;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{align-items:center;color:#f0f0f0;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;box-shadow:none;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info pre{font-size:14px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{font-weight:300!important}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:flex;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:flex;flex:1;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-left:10px;margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{align-items:center;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;margin:0}@keyframes scaleUp{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block} + +/*# sourceMappingURL=swagger-ui.css.map*/ \ No newline at end of file diff --git a/edoc/resources/js/swagger-ui-bundle.js b/edoc/resources/js/swagger-ui-bundle.js new file mode 100644 index 00000000..8b071688 --- /dev/null +++ b/edoc/resources/js/swagger-ui-bundle.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,(()=>(()=>{var e={17967:(e,t)=>{"use strict";t.N=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,o=/&(newline|tab);/gi,a=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,i=/^.+(:|:)/gim,s=[".","/"];t.N=function(e){var t,l=(t=e||"",t.replace(r,(function(e,t){return String.fromCharCode(t)}))).replace(o,"").replace(a,"").trim();if(!l)return"about:blank";if(function(e){return s.indexOf(e[0])>-1}(l))return l;var u=l.match(i);if(!u)return l;var c=u[0];return n.test(c)?"about:blank":l}},53795:(e,t,n)=>{"use strict";n.d(t,{Z:()=>T});var r=n(23101),o=n.n(r),a=n(61125),i=n.n(a),s=n(11882),l=n.n(s),u=n(97606),c=n.n(u),p=n(67294),f=n(43393);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=function(e,t){return function(n){if("string"==typeof n)return(0,f.is)(t[n],e[n]);if(Array.isArray(n))return(0,f.is)(x(t,n),x(e,n));throw new TypeError("Invalid key: expected Array or string: "+n)}}(t,n),o=e||Object.keys(function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return!_(this.updateOnProps,this.props,e,"updateOnProps")||!_(this.updateOnStates,this.state,t,"updateOnStates")}}],r&&d(n.prototype,r),o&&d(n,o),t}(p.Component);var A=n(23930),C=n.n(A),k=n(45697),O=n.n(k);const j=e=>{const t=e.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(t)}catch{return t}};class T extends S{constructor(){super(...arguments),i()(this,"getModelName",(e=>-1!==l()(e).call(e,"#/definitions/")?j(e.replace(/^.*#\/definitions\//,"")):-1!==l()(e).call(e,"#/components/schemas/")?j(e.replace(/^.*#\/components\/schemas\//,"")):void 0)),i()(this,"getRefSchema",(e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)}))}render(){let{getComponent:e,getConfigs:t,specSelectors:r,schema:a,required:i,name:s,isRef:l,specPath:u,displayName:c,includeReadOnly:f,includeWriteOnly:h}=this.props;const d=e("ObjectModel"),m=e("ArrayModel"),g=e("PrimitiveModel");let y="object",v=a&&a.get("$$ref");if(!s&&v&&(s=this.getModelName(v)),!a&&v&&(a=this.getRefSchema(s)),!a)return p.createElement("span",{className:"model model-title"},p.createElement("span",{className:"model-title__text"},c||s),p.createElement("img",{src:n(2517),height:"20px",width:"20px"}));const b=r.isOAS3()&&a.get("deprecated");switch(l=void 0!==l?l:!!v,y=a&&a.get("type")||y,y){case"object":return p.createElement(d,o()({className:"object"},this.props,{specPath:u,getConfigs:t,schema:a,name:s,deprecated:b,isRef:l,includeReadOnly:f,includeWriteOnly:h}));case"array":return p.createElement(m,o()({className:"array"},this.props,{getConfigs:t,schema:a,name:s,deprecated:b,required:i,includeReadOnly:f,includeWriteOnly:h}));default:return p.createElement(g,o()({},this.props,{getComponent:e,getConfigs:t,schema:a,name:s,deprecated:b,required:i}))}}}i()(T,"propTypes",{schema:c()(C()).isRequired,getComponent:O().func.isRequired,getConfigs:O().func.isRequired,specSelectors:O().object.isRequired,name:O().string,displayName:O().string,isRef:O().bool,required:O().bool,expandDepth:O().number,depth:O().number,specPath:C().list.isRequired,includeReadOnly:O().bool,includeWriteOnly:O().bool})},5623:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(61125),o=n.n(r),a=n(28222),i=n.n(a),s=n(67294),l=n(84564),u=n.n(l),c=n(90242),p=n(27504);class f extends s.Component{constructor(e,t){super(e,t),o()(this,"getDefinitionUrl",(()=>{let{specSelectors:e}=this.props;return new(u())(e.url(),p.Z.location).toString()}));let{getConfigs:n}=e,{validatorUrl:r}=n();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===r?"https://validator.swagger.io/validator":r}}UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:n}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===n?"https://validator.swagger.io/validator":n})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),n=(0,c.Nm)(this.state.validatorUrl);return"object"==typeof t&&i()(t).length?null:this.state.url&&(0,c.hW)(this.state.validatorUrl)&&(0,c.hW)(this.state.url)?s.createElement("span",{className:"float-right"},s.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:`${n}/debug?url=${encodeURIComponent(this.state.url)}`},s.createElement(h,{src:`${n}?url=${encodeURIComponent(this.state.url)}`,alt:"Online validator badge"}))):null}}class h extends s.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?s.createElement("img",{alt:"Error"}):this.state.loaded?s.createElement("img",{src:this.props.src,alt:this.props.alt}):null}}},94994:(e,t,n)=>{"use strict";n.d(t,{Z:()=>ye,s:()=>ve});var r=n(67294),o=n(89927);function a(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n=0;n--)!0===t(e[n])&&e.splice(n,1)}function s(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var l=function(){function e(e){void 0===e&&(e={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=e.tagName||"",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||""}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr("class",e)},e.prototype.addClass=function(e){for(var t,n=this.getClass(),r=this.whitespaceRegex,o=n?n.split(r):[],i=e.split(r);t=i.shift();)-1===a(o,t)&&o.push(t);return this.getAttrs().class=o.join(" "),this},e.prototype.removeClass=function(e){for(var t,n=this.getClass(),r=this.whitespaceRegex,o=n?n.split(r):[],i=e.split(r);o.length&&(t=i.shift());){var s=a(o,t);-1!==s&&o.splice(s,1)}return this.getAttrs().class=o.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(e){return-1!==(" "+this.getClass()+" ").indexOf(" "+e+" ")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return["<",e,t=t?" "+t:"",">",this.getInnerHtml(),""].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+'="'+e[n]+'"');return t.join(" ")},e}();var u=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return e.prototype.build=function(e){return new l({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},n=this.createCssClass(e);return n&&(t.class=n),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length=s)return l.host.length==t?(l.host.substr(0,t-o)+n).substr(0,s+r):i(c,s).substr(0,s+r);var p="";if(l.path&&(p+="/"+l.path),l.query&&(p+="?"+l.query),p){if((c+p).length>=s)return(c+p).length==t?(c+p).substr(0,t):(c+i(p,s-c.length)).substr(0,s+r);c+=p}if(l.fragment){var f="#"+l.fragment;if((c+f).length>=s)return(c+f).length==t?(c+f).substr(0,t):(c+i(f,s-c.length)).substr(0,s+r);c+=f}if(l.scheme&&l.host){var h=l.scheme+"://";if((c+h).length0&&(d=c.substr(-1*Math.floor(s/2))),(c.substr(0,Math.ceil(s/2))+n+d).substr(0,s+r)}(e,n):"middle"===r?function(e,t,n){if(e.length<=t)return e;var r,o;null==n?(n="…",r=8,o=3):(r=n.length,o=n.length);var a=t-o,i="";return a>0&&(i=e.substr(-1*Math.floor(a/2))),(e.substr(0,Math.ceil(a/2))+n+i).substr(0,a+r)}(e,n):function(e,t,n){return function(e,t,n){var r;return e.length>t&&(null==n?(n="…",r=3):r=n.length,e=e.substring(0,t-r)+n),e}(e,t,n)}(e,n)},e}(),c=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),p=function(e,t){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},p(e,t)};function f(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var h=function(){return h=Object.assign||function(e){for(var t,n=1,r=arguments.length;n-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),n=t&&t[0].toLowerCase();return"javascript:"!==n&&"vbscript:"!==n},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf("."))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&(!this.hasFullProtocolRegex.test(t)&&!this.hasWordCharAfterProtocolRegex.test(e))},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+k+"]"),e.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,e}(),V=(d=new RegExp("[/?#](?:["+I+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+I+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,D(2),")","|","(","(//)?",/(?:www\.)/.source,D(6),")","|","(","(//)?",D(10)+"\\.",B.source,"(?![-"+T+"])",")",")","(?::[0-9]+)?","(?:"+d.source+")?"].join(""),"gi")),W=new RegExp("["+I+"]"),H=function(e){function t(t){var n=e.call(this,t)||this;return n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.matcherRegex=V,n.wordCharRegExp=W,n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return f(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,r=this.stripPrefix,o=this.stripTrailingSlash,a=this.decodePercentEncoding,i=this.tagBuilder,s=[],l=function(){var n=t[0],l=t[1],c=t[4],p=t[5],f=t[9],h=t.index,d=p||f,m=e.charAt(h-1);if(!$.isValid(n,l))return"continue";if(h>0&&"@"===m)return"continue";if(h>0&&d&&u.wordCharRegExp.test(m))return"continue";if(/\?$/.test(n)&&(n=n.substr(0,n.length-1)),u.matchHasUnbalancedClosingParen(n))n=n.substr(0,n.length-1);else{var g=u.matchHasInvalidCharAfterTld(n,l);g>-1&&(n=n.substr(0,g))}var y=["http://","https://"].find((function(e){return!!l&&-1!==l.indexOf(e)}));if(y){var v=n.indexOf(y);n=n.substr(v),l=l.substr(v),h+=v}var w=l?"scheme":c?"www":"tld",E=!!l;s.push(new b({tagBuilder:i,matchedText:n,offset:h,urlMatchType:w,url:n,protocolUrlMatch:E,protocolRelativeMatch:!!d,stripPrefix:r,stripTrailingSlash:o,decodePercentEncoding:a}))},u=this;null!==(t=n.exec(e));)l();return s},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,n=e.charAt(e.length-1);if(")"===n)t="(";else if("]"===n)t="[";else{if("}"!==n)return!1;t="{"}for(var r=0,o=0,a=e.length-1;o-1&&a-i<=140){var o=e.slice(i,a),s=new g({tagBuilder:t,matchedText:o,offset:i,serviceName:n,hashtag:o.slice(1)});r.push(s)}}},t}(w),G=["twitter","facebook","instagram","tiktok"],Z=new RegExp("".concat(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source,"|").concat(/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source),"g"),Y=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=Z,t}return f(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,r=this.tagBuilder,o=[];null!==(t=n.exec(e));){var a=t[0],i=a.replace(/[^0-9,;#]/g,""),s=!(!t[1]&&!t[2]),l=0==t.index?"":e.substr(t.index-1,1),u=e.substr(t.index+a.length,1),c=!l.match(/\d/)&&!u.match(/\d/);this.testMatch(t[3])&&this.testMatch(a)&&c&&o.push(new v({tagBuilder:r,matchedText:a,offset:t.index,number:i,plusSign:s}))}return o},t.prototype.testMatch=function(e){return _.test(e)},t}(w),Q=new RegExp("@[_".concat(I,"]{1,50}(?![_").concat(I,"])"),"g"),X=new RegExp("@[_.".concat(I,"]{1,30}(?![_").concat(I,"])"),"g"),ee=new RegExp("@[-_.".concat(I,"]{1,50}(?![-_").concat(I,"])"),"g"),te=new RegExp("@[_.".concat(I,"]{1,23}[_").concat(I,"](?![_").concat(I,"])"),"g"),ne=new RegExp("[^"+I+"]"),re=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName="twitter",n.matcherRegexes={twitter:Q,instagram:X,soundcloud:ee,tiktok:te},n.nonWordCharRegex=ne,n.serviceName=t.serviceName,n}return f(t,e),t.prototype.parseMatches=function(e){var t,n=this.serviceName,r=this.matcherRegexes[this.serviceName],o=this.nonWordCharRegex,a=this.tagBuilder,i=[];if(!r)return i;for(;null!==(t=r.exec(e));){var s=t.index,l=e.charAt(s-1);if(0===s||o.test(l)){var u=t[0].replace(/\.+$/g,""),c=u.slice(1);i.push(new y({tagBuilder:a,matchedText:u,offset:s,serviceName:n,mention:c}))}}return i},t}(w);function oe(e,t){for(var n,r=t.onOpenTag,o=t.onCloseTag,a=t.onText,i=t.onComment,l=t.onDoctype,u=new ae,c=0,p=e.length,f=0,d=0,m=u;c"===e?(m=new ae(h(h({},m),{name:H()})),W()):E.test(e)||x.test(e)||":"===e||$()}function w(e){">"===e?$():E.test(e)?f=3:$()}function _(e){S.test(e)||("/"===e?f=12:">"===e?W():"<"===e?V():"="===e||A.test(e)||C.test(e)?$():f=5)}function k(e){S.test(e)?f=6:"/"===e?f=12:"="===e?f=7:">"===e?W():"<"===e?V():A.test(e)&&$()}function O(e){S.test(e)||("/"===e?f=12:"="===e?f=7:">"===e?W():"<"===e?V():A.test(e)?$():f=5)}function j(e){S.test(e)||('"'===e?f=8:"'"===e?f=9:/[>=`]/.test(e)?$():"<"===e?V():f=10)}function T(e){'"'===e&&(f=11)}function I(e){"'"===e&&(f=11)}function N(e){S.test(e)?f=4:">"===e?W():"<"===e&&V()}function P(e){S.test(e)?f=4:"/"===e?f=12:">"===e?W():"<"===e?V():(f=4,c--)}function R(e){">"===e?(m=new ae(h(h({},m),{isClosing:!0})),W()):f=4}function M(t){"--"===e.substr(c,2)?(c+=2,m=new ae(h(h({},m),{type:"comment"})),f=14):"DOCTYPE"===e.substr(c,7).toUpperCase()?(c+=7,m=new ae(h(h({},m),{type:"doctype"})),f=20):$()}function D(e){"-"===e?f=15:">"===e?$():f=16}function L(e){"-"===e?f=18:">"===e?$():f=16}function B(e){"-"===e&&(f=17)}function F(e){f="-"===e?18:16}function z(e){">"===e?W():"!"===e?f=19:"-"===e||(f=16)}function U(e){"-"===e?f=17:">"===e?W():f=16}function q(e){">"===e?W():"<"===e&&V()}function $(){f=0,m=u}function V(){f=1,m=new ae({idx:c})}function W(){var t=e.slice(d,m.idx);t&&a(t,d),"comment"===m.type?i(m.idx):"doctype"===m.type?l(m.idx):(m.isOpening&&r(m.name,m.idx),m.isClosing&&o(m.name,m.idx)),$(),d=c+1}function H(){var t=m.idx+(m.isClosing?2:1);return e.slice(t,c).toLowerCase()}d=0&&r++},onText:function(e,n){if(0===r){var a=function(e,t){if(!t.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var n,r=[],o=0;n=t.exec(e);)r.push(e.substring(o,n.index)),r.push(n[0]),o=n.index+n[0].length;return r.push(e.substring(o)),r}(e,/( | |<|<|>|>|"|"|')/gi),i=n;a.forEach((function(e,n){if(n%2==0){var r=t.parseText(e,i);o.push.apply(o,r)}i+=e.length}))}},onCloseTag:function(e){n.indexOf(e)>=0&&(r=Math.max(r-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;to?t:t+1;e.splice(i,1);continue}if(e[t+1].getOffset()/g,">"));for(var t=this.parse(e),n=[],r=0,o=0,a=t.length;o/i.test(e)}function ue(){var e=[],t=new ie({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case"url":e.push({text:t.matchedText,url:t.getUrl()});break;case"email":e.push({text:t.matchedText,url:"mailto:"+t.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:e,autolinker:t}}function ce(e){var t,n,r,o,a,i,s,l,u,c,p,f,h,d,m=e.tokens,g=null;for(n=0,r=m.length;n=0;t--)if("link_close"!==(a=o[t]).type){if("htmltag"===a.type&&(d=a.content,/^\s]/i.test(d)&&p>0&&p--,le(a.content)&&p++),!(p>0)&&"text"===a.type&&se.test(a.content)){if(g||(f=(g=ue()).links,h=g.autolinker),i=a.content,f.length=0,h.link(i),!f.length)continue;for(s=[],c=a.level,l=0;l({useUnsafeMarkdown:!1})};const ye=ge;function ve(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t,r=t?[]:["style","class"];return t&&!ve.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),ve.hasWarnedAboutDeprecation=!0),he().sanitize(e,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:n,FORBID_ATTR:r})}ve.hasWarnedAboutDeprecation=!1},45308:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var r,o=n(86),a=n.n(o),i=n(8712),s=n.n(i),l=n(90242),u=n(27621);const c=n(95102),p={},f=p;a()(r=s()(c).call(c)).call(r,(function(e){if("./index.js"===e)return;let t=c(e);p[(0,l.Zl)(e)]=t.default?t.default:t})),p.SafeRender=u.default},55812:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AUTHORIZE:()=>f,AUTHORIZE_OAUTH2:()=>m,CONFIGURE_AUTH:()=>y,LOGOUT:()=>h,PRE_AUTHORIZE_OAUTH2:()=>d,RESTORE_AUTHORIZATION:()=>v,SHOW_AUTH_POPUP:()=>p,VALIDATE:()=>g,authPopup:()=>M,authorize:()=>w,authorizeAccessCodeWithBasicAuthentication:()=>T,authorizeAccessCodeWithFormParams:()=>j,authorizeApplication:()=>O,authorizeOauth2:()=>A,authorizeOauth2WithPersistOption:()=>C,authorizePassword:()=>k,authorizeRequest:()=>I,authorizeWithPersistOption:()=>E,configureAuth:()=>N,logout:()=>x,logoutWithPersistOption:()=>_,persistAuthorizationIfNeeded:()=>R,preAuthorizeImplicit:()=>S,restoreAuthorization:()=>P,showDefinitions:()=>b});var r=n(35627),o=n.n(r),a=n(76986),i=n.n(a),s=n(84564),l=n.n(s),u=n(27504),c=n(90242);const p="show_popup",f="authorize",h="logout",d="pre_authorize_oauth2",m="authorize_oauth2",g="validate",y="configure_auth",v="restore_authorization";function b(e){return{type:p,payload:e}}function w(e){return{type:f,payload:e}}const E=e=>t=>{let{authActions:n}=t;n.authorize(e),n.persistAuthorizationIfNeeded()};function x(e){return{type:h,payload:e}}const _=e=>t=>{let{authActions:n}=t;n.logout(e),n.persistAuthorizationIfNeeded()},S=e=>t=>{let{authActions:n,errActions:r}=t,{auth:a,token:i,isValid:s}=e,{schema:l,name:c}=a,p=l.get("flow");delete u.Z.swaggerUIRedirectOauth2,"accessCode"===p||s||r.newAuthErr({authId:c,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),i.error?r.newAuthErr({authId:c,source:"auth",level:"error",message:o()(i)}):n.authorizeOauth2WithPersistOption({auth:a,token:i})};function A(e){return{type:m,payload:e}}const C=e=>t=>{let{authActions:n}=t;n.authorizeOauth2(e),n.persistAuthorizationIfNeeded()},k=e=>t=>{let{authActions:n}=t,{schema:r,name:o,username:a,password:s,passwordType:l,clientId:u,clientSecret:p}=e,f={grant_type:"password",scope:e.scopes.join(" "),username:a,password:s},h={};switch(l){case"request-body":!function(e,t,n){t&&i()(e,{client_id:t});n&&i()(e,{client_secret:n})}(f,u,p);break;case"basic":h.Authorization="Basic "+(0,c.r3)(u+":"+p);break;default:console.warn(`Warning: invalid passwordType ${l} was passed, not including client id and secret`)}return n.authorizeRequest({body:(0,c.GZ)(f),url:r.get("tokenUrl"),name:o,headers:h,query:{},auth:e})};const O=e=>t=>{let{authActions:n}=t,{schema:r,scopes:o,name:a,clientId:i,clientSecret:s}=e,l={Authorization:"Basic "+(0,c.r3)(i+":"+s)},u={grant_type:"client_credentials",scope:o.join(" ")};return n.authorizeRequest({body:(0,c.GZ)(u),name:a,url:r.get("tokenUrl"),auth:e,headers:l})},j=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:r}=e,{schema:o,name:a,clientId:i,clientSecret:s,codeVerifier:l}=t,u={grant_type:"authorization_code",code:t.code,client_id:i,client_secret:s,redirect_uri:n,code_verifier:l};return r.authorizeRequest({body:(0,c.GZ)(u),name:a,url:o.get("tokenUrl"),auth:t})}},T=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:r}=e,{schema:o,name:a,clientId:i,clientSecret:s,codeVerifier:l}=t,u={Authorization:"Basic "+(0,c.r3)(i+":"+s)},p={grant_type:"authorization_code",code:t.code,client_id:i,redirect_uri:n,code_verifier:l};return r.authorizeRequest({body:(0,c.GZ)(p),name:a,url:o.get("tokenUrl"),auth:t,headers:u})}},I=e=>t=>{let n,{fn:r,getConfigs:a,authActions:s,errActions:u,oas3Selectors:c,specSelectors:p,authSelectors:f}=t,{body:h,query:d={},headers:m={},name:g,url:y,auth:v}=e,{additionalQueryStringParams:b}=f.getConfigs()||{};if(p.isOAS3()){let e=c.serverEffectiveValue(c.selectedServer());n=l()(y,e,!0)}else n=l()(y,p.url(),!0);"object"==typeof b&&(n.query=i()({},n.query,b));const w=n.toString();let E=i()({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},m);r.fetch({url:w,method:"post",headers:E,query:d,body:h,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),n=t&&(t.error||""),r=t&&(t.parseError||"");e.ok?n||r?u.newAuthErr({authId:g,level:"error",source:"auth",message:o()(t)}):s.authorizeOauth2WithPersistOption({auth:v,token:t}):u.newAuthErr({authId:g,level:"error",source:"auth",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const n=e.response.data;try{const e="string"==typeof n?JSON.parse(n):n;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}u.newAuthErr({authId:g,level:"error",source:"auth",message:t})}))};function N(e){return{type:y,payload:e}}function P(e){return{type:v,payload:e}}const R=()=>e=>{let{authSelectors:t,getConfigs:n}=e;if(!n().persistAuthorization)return;const r=t.authorized().toJS();localStorage.setItem("authorized",o()(r))},M=(e,t)=>()=>{u.Z.swaggerUIRedirectOauth2=t,u.Z.open(e)}},53779:(e,t,n)=>{"use strict";n.r(t),n.d(t,{loaded:()=>r});const r=(e,t)=>n=>{const{getConfigs:r,authActions:o}=t,a=r();if(e(n),a.persistAuthorization){const e=localStorage.getItem("authorized");e&&o.restoreAuthorization({authorized:JSON.parse(e)})}}},93705:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p,preauthorizeApiKey:()=>h,preauthorizeBasic:()=>f});var r=n(11189),o=n.n(r),a=n(43962),i=n(55812),s=n(60035),l=n(60489),u=n(53779),c=n(22849);function p(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=o()(h).call(h,null,e),this.rootInjects.preauthorizeBasic=o()(f).call(f,null,e)},statePlugins:{auth:{reducers:a.default,actions:i,selectors:s,wrapActions:{authorize:c.authorize,logout:c.logout}},configs:{wrapActions:{loaded:u.loaded}},spec:{wrapActions:{execute:l.execute}}}}}function f(e,t,n,r){const{authActions:{authorize:o},specSelectors:{specJson:a,isOAS3:i}}=e,s=i()?["components","securitySchemes"]:["securityDefinitions"],l=a().getIn([...s,t]);return l?o({[t]:{value:{username:n,password:r},schema:l.toJS()}}):null}function h(e,t,n){const{authActions:{authorize:r},specSelectors:{specJson:o,isOAS3:a}}=e,i=a()?["components","securitySchemes"]:["securityDefinitions"],s=o().getIn([...i,t]);return s?r({[t]:{value:n,schema:s.toJS()}}):null}},43962:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(86),o=n.n(r),a=n(76986),i=n.n(a),s=n(43393),l=n(90242),u=n(55812);const c={[u.SHOW_AUTH_POPUP]:(e,t)=>{let{payload:n}=t;return e.set("showDefinitions",n)},[u.AUTHORIZE]:(e,t)=>{var n;let{payload:r}=t,a=(0,s.fromJS)(r),i=e.get("authorized")||(0,s.Map)();return o()(n=a.entrySeq()).call(n,(t=>{let[n,r]=t;if(!(0,l.Wl)(r.getIn))return e.set("authorized",i);let o=r.getIn(["schema","type"]);if("apiKey"===o||"http"===o)i=i.set(n,r);else if("basic"===o){let e=r.getIn(["value","username"]),t=r.getIn(["value","password"]);i=i.setIn([n,"value"],{username:e,header:"Basic "+(0,l.r3)(e+":"+t)}),i=i.setIn([n,"schema"],r.get("schema"))}})),e.set("authorized",i)},[u.AUTHORIZE_OAUTH2]:(e,t)=>{let n,{payload:r}=t,{auth:o,token:a}=r;o.token=i()({},a),n=(0,s.fromJS)(o);let l=e.get("authorized")||(0,s.Map)();return l=l.set(n.get("name"),n),e.set("authorized",l)},[u.LOGOUT]:(e,t)=>{let{payload:n}=t,r=e.get("authorized").withMutations((e=>{o()(n).call(n,(t=>{e.delete(t)}))}));return e.set("authorized",r)},[u.CONFIGURE_AUTH]:(e,t)=>{let{payload:n}=t;return e.set("configs",n)},[u.RESTORE_AUTHORIZATION]:(e,t)=>{let{payload:n}=t;return e.set("authorized",(0,s.fromJS)(n.authorized))}}},60035:(e,t,n)=>{"use strict";n.r(t),n.d(t,{authorized:()=>x,definitionsForRequirements:()=>E,definitionsToAuthorize:()=>b,getConfigs:()=>S,getDefinitionsByNames:()=>w,isAuthorized:()=>_,shownDefinitions:()=>v});var r=n(86),o=n.n(r),a=n(51679),i=n.n(a),s=n(14418),l=n.n(s),u=n(11882),c=n.n(u),p=n(97606),f=n.n(p),h=n(28222),d=n.n(h),m=n(20573),g=n(43393);const y=e=>e,v=(0,m.P1)(y,(e=>e.get("showDefinitions"))),b=(0,m.P1)(y,(()=>e=>{var t;let{specSelectors:n}=e,r=n.securityDefinitions()||(0,g.Map)({}),a=(0,g.List)();return o()(t=r.entrySeq()).call(t,(e=>{let[t,n]=e,r=(0,g.Map)();r=r.set(t,n),a=a.push(r)})),a})),w=(e,t)=>e=>{var n;let{specSelectors:r}=e;console.warn("WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.");let a=r.securityDefinitions(),i=(0,g.List)();return o()(n=t.valueSeq()).call(n,(e=>{var t;let n=(0,g.Map)();o()(t=e.entrySeq()).call(t,(e=>{let t,[r,i]=e,s=a.get(r);var l;"oauth2"===s.get("type")&&i.size&&(t=s.get("scopes"),o()(l=t.keySeq()).call(l,(e=>{i.contains(e)||(t=t.delete(e))})),s=s.set("allowedScopes",t));n=n.set(r,s)})),i=i.push(n)})),i},E=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,g.List)();return e=>{let{authSelectors:n}=e;const r=n.definitionsToAuthorize()||(0,g.List)();let a=(0,g.List)();return o()(r).call(r,(e=>{let n=i()(t).call(t,(t=>t.get(e.keySeq().first())));n&&(o()(e).call(e,((t,r)=>{if("oauth2"===t.get("type")){const i=n.get(r);let s=t.get("scopes");var a;if(g.List.isList(i)&&g.Map.isMap(s))o()(a=s.keySeq()).call(a,(e=>{i.contains(e)||(s=s.delete(e))})),e=e.set(r,t.set("scopes",s))}})),a=a.push(e))})),a}},x=(0,m.P1)(y,(e=>e.get("authorized")||(0,g.Map)())),_=(e,t)=>e=>{var n;let{authSelectors:r}=e,o=r.authorized();return g.List.isList(t)?!!l()(n=t.toJS()).call(n,(e=>{var t,n;return-1===c()(t=f()(n=d()(e)).call(n,(e=>!!o.get(e)))).call(t,!1)})).length:null},S=(0,m.P1)(y,(e=>e.get("configs")))},60489:(e,t,n)=>{"use strict";n.r(t),n.d(t,{execute:()=>r});const r=(e,t)=>{let{authSelectors:n,specSelectors:r}=t;return t=>{let{path:o,method:a,operation:i,extras:s}=t,l={authorized:n.authorized()&&n.authorized().toJS(),definitions:r.securityDefinitions()&&r.securityDefinitions().toJS(),specSecurity:r.security()&&r.security().toJS()};return e({path:o,method:a,operation:i,securities:l,...s})}}},22849:(e,t,n)=>{"use strict";n.r(t),n.d(t,{authorize:()=>u,logout:()=>c});var r=n(3665),o=n.n(r),a=n(58309),i=n.n(a),s=n(86),l=n.n(s);const u=(e,t)=>n=>{e(n);if(t.getConfigs().persistAuthorization)try{const[{schema:e,value:t}]=o()(n),r="apiKey"===e.get("type"),a="cookie"===e.get("in");r&&a&&(document.cookie=`${e.get("name")}=${t}; SameSite=None; Secure`)}catch(e){console.error("Error persisting cookie based apiKey in document.cookie.",e)}},c=(e,t)=>n=>{const r=t.getConfigs(),o=t.authSelectors.authorized();try{r.persistAuthorization&&i()(n)&&l()(n).call(n,(e=>{const t=o.get(e,{}),n="apiKey"===t.getIn(["schema","type"]),r="cookie"===t.getIn(["schema","in"]);if(n&&r){const e=t.getIn(["schema","name"]);document.cookie=`${e}=; Max-Age=-99999999`}}))}catch(e){console.error("Error deleting cookie based apiKey from document.cookie.",e)}e(n)}},70714:(e,t,n)=>{"use strict";n.r(t),n.d(t,{TOGGLE_CONFIGS:()=>o,UPDATE_CONFIGS:()=>r,loaded:()=>s,toggle:()=>i,update:()=>a});const r="configs_update",o="configs_toggle";function a(e,t){return{type:r,payload:{[e]:t}}}function i(e){return{type:o,payload:e}}const s=()=>()=>{}},92256:(e,t,n)=>{"use strict";n.r(t),n.d(t,{parseYamlConfig:()=>o});var r=n(1272);const o=(e,t)=>{try{return r.ZP.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},46709:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(92256),o=n(70714),a=n(22698),i=n(69018),s=n(37743);const l={getLocalConfig:()=>(0,r.parseYamlConfig)('---\nurl: "https://petstore.swagger.io/v2/swagger.json"\ndom_id: "#swagger-ui"\nvalidatorUrl: "https://validator.swagger.io/validator"\n')};function u(){return{statePlugins:{spec:{actions:a,selectors:l},configs:{reducers:s.default,actions:o,selectors:i}}}}},37743:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(43393),o=n(70714);const a={[o.UPDATE_CONFIGS]:(e,t)=>e.merge((0,r.fromJS)(t.payload)),[o.TOGGLE_CONFIGS]:(e,t)=>{const n=t.payload,r=e.get(n);return e.set(n,!r)}}},69018:(e,t,n)=>{"use strict";n.r(t),n.d(t,{get:()=>a});var r=n(58309),o=n.n(r);const a=(e,t)=>e.getIn(o()(t)?t:[t])},22698:(e,t,n)=>{"use strict";n.r(t),n.d(t,{downloadConfig:()=>o,getConfigByUrl:()=>a});var r=n(92256);const o=e=>t=>{const{fn:{fetch:n}}=t;return n(e)},a=(e,t)=>n=>{let{specActions:o}=n;if(e)return o.downloadConfig(e).then(a,a);function a(n){n instanceof Error||n.status>=400?(o.updateLoadingStatus("failedConfig"),o.updateLoadingStatus("failedConfig"),o.updateUrl(""),console.error(n.statusText+" "+e.url),t(null)):t((0,r.parseYamlConfig)(n.text))}}},31970:(e,t,n)=>{"use strict";n.r(t),n.d(t,{setHash:()=>r});const r=e=>e?history.pushState(null,null,`#${e}`):window.location.hash=""},34980:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(41599),o=n(60877),a=n(34584);function i(){return[r.default,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const n=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(n)}}}},wrapComponents:{operation:o.default,OperationTag:a.default}}]}},41599:(e,t,n)=>{"use strict";n.r(t),n.d(t,{clearScrollTo:()=>S,default:()=>A,parseDeepLinkHash:()=>E,readyToScroll:()=>x,scrollTo:()=>w,scrollToElement:()=>_,show:()=>b});var r=n(58309),o=n.n(r),a=n(24278),i=n.n(a),s=n(97606),l=n.n(s),u=n(11882),c=n.n(u),p=n(31970),f=n(45172),h=n.n(f),d=n(90242),m=n(43393),g=n.n(m);const y="layout_scroll_to",v="layout_clear_scroll",b=(e,t)=>{let{getConfigs:n,layoutSelectors:r}=t;return function(){for(var t=arguments.length,a=new Array(t),i=0;i({type:y,payload:o()(e)?e:[e]}),E=e=>t=>{let{layoutActions:n,layoutSelectors:r,getConfigs:o}=t;if(o().deepLinking&&e){var a;let t=i()(e).call(e,1);"!"===t[0]&&(t=i()(t).call(t,1)),"/"===t[0]&&(t=i()(t).call(t,1));const o=l()(a=t.split("/")).call(a,(e=>e||"")),s=r.isShownKeyFromUrlHashArray(o),[u,p="",f=""]=s;if("operations"===u){const e=r.isShownKeyFromUrlHashArray([p]);c()(p).call(p,"_")>-1&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),n.show(l()(e).call(e,(e=>e.replace(/_/g," "))),!0)),n.show(e,!0)}(c()(p).call(p,"_")>-1||c()(f).call(f,"_")>-1)&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),n.show(l()(s).call(s,(e=>e.replace(/_/g," "))),!0)),n.show(s,!0),n.scrollTo(s)}},x=(e,t)=>n=>{const r=n.layoutSelectors.getScrollToKey();g().is(r,(0,m.fromJS)(e))&&(n.layoutActions.scrollToElement(t),n.layoutActions.clearScrollTo())},_=(e,t)=>n=>{try{t=t||n.fn.getScrollParent(e),h().createScroller(t).to(e)}catch(e){console.error(e)}},S=()=>({type:v});const A={fn:{getScrollParent:function(e,t){const n=document.documentElement;let r=getComputedStyle(e);const o="absolute"===r.position,a=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if("fixed"===r.position)return n;for(let t=e;t=t.parentElement;)if(r=getComputedStyle(t),(!o||"static"!==r.position)&&a.test(r.overflow+r.overflowY+r.overflowX))return t;return n}},statePlugins:{layout:{actions:{scrollToElement:_,scrollTo:w,clearScrollTo:S,readyToScroll:x,parseDeepLinkHash:E},selectors:{getScrollToKey:e=>e.get("scrollToKey"),isShownKeyFromUrlHashArray(e,t){const[n,r]=t;return r?["operations",n,r]:n?["operations-tag",n]:[]},urlHashArrayFromIsShownKey(e,t){let[n,r,o]=t;return"operations"==n?[r,o]:"operations-tag"==n?[r]:[]}},reducers:{[y]:(e,t)=>e.set("scrollToKey",g().fromJS(t.payload)),[v]:e=>e.delete("scrollToKey")},wrapActions:{show:b}}}}},34584:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),a=n(67294);const i=(e,t)=>class extends a.Component{constructor(){super(...arguments),o()(this,"onLoad",(e=>{const{tag:n}=this.props,r=["operations-tag",n];t.layoutActions.readyToScroll(r,e)}))}render(){return a.createElement("span",{ref:this.onLoad},a.createElement(e,this.props))}}},60877:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),a=n(67294);n(23930);const i=(e,t)=>class extends a.Component{constructor(){super(...arguments),o()(this,"onLoad",(e=>{const{operation:n}=this.props,{tag:r,operationId:o}=n.toObject();let{isShownKey:a}=n.toObject();a=a||["operations",r,o],t.layoutActions.readyToScroll(a,e)}))}render(){return a.createElement("span",{ref:this.onLoad},a.createElement(e,this.props))}}},48011:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>d});var r=n(76986),o=n.n(r),a=n(63460),i=n.n(a),s=n(11882),l=n.n(s),u=n(35627),c=n.n(u),p=n(20573),f=n(43393),h=n(27504);function d(e){let{fn:t}=e;return{statePlugins:{spec:{actions:{download:e=>n=>{let{errActions:r,specSelectors:a,specActions:s,getConfigs:l}=n,{fetch:u}=t;const c=l();function p(t){if(t instanceof Error||t.status>=400)return s.updateLoadingStatus("failed"),r.newThrownErr(o()(new Error((t.message||t.statusText)+" "+e),{source:"fetch"})),void(!t.status&&t instanceof Error&&function(){try{let t;if("URL"in h.Z?t=new(i())(e):(t=document.createElement("a"),t.href=e),"https:"!==t.protocol&&"https:"===h.Z.location.protocol){const e=o()(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:"fetch"});return void r.newThrownErr(e)}if(t.origin!==h.Z.location.origin){const e=o()(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${h.Z.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:"fetch"});r.newThrownErr(e)}}catch(e){return}}());s.updateLoadingStatus("success"),s.updateSpec(t.text),a.url()!==e&&s.updateUrl(e)}e=e||a.url(),s.updateLoadingStatus("loading"),r.clear({source:"fetch"}),u({url:e,loadSpec:!0,requestInterceptor:c.requestInterceptor||(e=>e),responseInterceptor:c.responseInterceptor||(e=>e),credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(p,p)},updateLoadingStatus:e=>{let t=[null,"loading","failed","success","failedConfig"];return-1===l()(t).call(t,e)&&console.error(`Error: ${e} is not one of ${c()(t)}`),{type:"spec_update_loading_status",payload:e}}},reducers:{spec_update_loading_status:(e,t)=>"string"==typeof t.payload?e.set("loadingStatus",t.payload):e},selectors:{loadingStatus:(0,p.P1)((e=>e||(0,f.Map)()),(e=>e.get("loadingStatus")||null))}}}}}},34966:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CLEAR:()=>u,CLEAR_BY:()=>c,NEW_AUTH_ERR:()=>l,NEW_SPEC_ERR:()=>i,NEW_SPEC_ERR_BATCH:()=>s,NEW_THROWN_ERR:()=>o,NEW_THROWN_ERR_BATCH:()=>a,clear:()=>g,clearBy:()=>y,newAuthErr:()=>m,newSpecErr:()=>h,newSpecErrBatch:()=>d,newThrownErr:()=>p,newThrownErrBatch:()=>f});var r=n(7710);const o="err_new_thrown_err",a="err_new_thrown_err_batch",i="err_new_spec_err",s="err_new_spec_err_batch",l="err_new_auth_err",u="err_clear",c="err_clear_by";function p(e){return{type:o,payload:(0,r.serializeError)(e)}}function f(e){return{type:a,payload:e}}function h(e){return{type:i,payload:e}}function d(e){return{type:s,payload:e}}function m(e){return{type:l,payload:e}}function g(){return{type:u,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function y(){return{type:c,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0}}},56982:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(14418),o=n.n(r),a=n(97606),i=n.n(a),s=n(54061),l=n.n(s);const u=[n(2392),n(21835)];function c(e){var t;let n={jsSpec:{}},r=l()(u,((e,t)=>{try{let r=t.transform(e,n);return o()(r).call(r,(e=>!!e))}catch(t){return console.error("Transformer error:",t),e}}),e);return i()(t=o()(r).call(r,(e=>!!e))).call(t,(e=>(!e.get("line")&&e.get("path"),e)))}},2392:(e,t,n)=>{"use strict";n.r(t),n.d(t,{transform:()=>p});var r=n(97606),o=n.n(r),a=n(11882),i=n.n(a),s=n(24278),l=n.n(s),u=n(24282),c=n.n(u);function p(e){return o()(e).call(e,(e=>{var t;let n="is not of a type(s)",r=i()(t=e.get("message")).call(t,n);if(r>-1){var o,a;let t=l()(o=e.get("message")).call(o,r+19).split(",");return e.set("message",l()(a=e.get("message")).call(a,0,r)+function(e){return c()(e).call(e,((e,t,n,r)=>n===r.length-1&&r.length>1?e+"or "+t:r[n+1]&&r.length>2?e+t+", ":r[n+1]?e+t+" ":e+t),"should be a")}(t))}return e}))}},21835:(e,t,n)=>{"use strict";n.r(t),n.d(t,{transform:()=>r});n(97606),n(11882),n(27361),n(43393);function r(e,t){let{jsSpec:n}=t;return e}},77793:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(93527),o=n(34966),a=n(87667);function i(e){return{statePlugins:{err:{reducers:(0,r.default)(e),actions:o,selectors:a}}}}},93527:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>y});var r=n(76986),o=n.n(r),a=n(97606),i=n.n(a),s=n(39022),l=n.n(s),u=n(14418),c=n.n(u),p=n(2250),f=n.n(p),h=n(34966),d=n(43393),m=n(56982);let g={line:0,level:"error",message:"Unknown error"};function y(){return{[h.NEW_THROWN_ERR]:(e,t)=>{let{payload:n}=t,r=o()(g,n,{type:"thrown"});return e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)))).update("errors",(e=>(0,m.default)(e)))},[h.NEW_THROWN_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=i()(n).call(n,(e=>(0,d.fromJS)(o()(g,e,{type:"thrown"})))),e.update("errors",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(n))})).update("errors",(e=>(0,m.default)(e)))},[h.NEW_SPEC_ERR]:(e,t)=>{let{payload:n}=t,r=(0,d.fromJS)(n);return r=r.set("type","spec"),e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)).sortBy((e=>e.get("line"))))).update("errors",(e=>(0,m.default)(e)))},[h.NEW_SPEC_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=i()(n).call(n,(e=>(0,d.fromJS)(o()(g,e,{type:"spec"})))),e.update("errors",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(n))})).update("errors",(e=>(0,m.default)(e)))},[h.NEW_AUTH_ERR]:(e,t)=>{let{payload:n}=t,r=(0,d.fromJS)(o()({},n));return r=r.set("type","auth"),e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)))).update("errors",(e=>(0,m.default)(e)))},[h.CLEAR]:(e,t)=>{var n;let{payload:r}=t;if(!r||!e.get("errors"))return e;let o=c()(n=e.get("errors")).call(n,(e=>{var t;return f()(t=e.keySeq()).call(t,(t=>{const n=e.get(t),o=r[t];return!o||n!==o}))}));return e.merge({errors:o})},[h.CLEAR_BY]:(e,t)=>{var n;let{payload:r}=t;if(!r||"function"!=typeof r)return e;let o=c()(n=e.get("errors")).call(n,(e=>r(e)));return e.merge({errors:o})}}}},87667:(e,t,n)=>{"use strict";n.r(t),n.d(t,{allErrors:()=>a,lastError:()=>i});var r=n(43393),o=n(20573);const a=(0,o.P1)((e=>e),(e=>e.get("errors",(0,r.List)()))),i=(0,o.P1)(a,(e=>e.last()))},49978:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4309);function o(){return{fn:{opsFilter:r.default}}}},4309:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(14418),o=n.n(r),a=n(11882),i=n.n(a);function s(e,t){return o()(e).call(e,((e,n)=>-1!==i()(n).call(n,t)))}},25474:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SHOW:()=>s,UPDATE_FILTER:()=>a,UPDATE_LAYOUT:()=>o,UPDATE_MODE:()=>i,changeMode:()=>p,show:()=>c,updateFilter:()=>u,updateLayout:()=>l});var r=n(90242);const o="layout_update_layout",a="layout_update_filter",i="layout_update_mode",s="layout_show";function l(e){return{type:o,payload:e}}function u(e){return{type:a,payload:e}}function c(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=(0,r.AF)(e),{type:s,payload:{thing:e,shown:t}}}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e=(0,r.AF)(e),{type:i,payload:{thing:e,mode:t}}}},26821:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(5672),o=n(25474),a=n(4400),i=n(28989);function s(){return{statePlugins:{layout:{reducers:r.default,actions:o,selectors:a},spec:{wrapSelectors:i}}}}},5672:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(39022),o=n.n(r),a=n(43393),i=n(25474);const s={[i.UPDATE_LAYOUT]:(e,t)=>e.set("layout",t.payload),[i.UPDATE_FILTER]:(e,t)=>e.set("filter",t.payload),[i.SHOW]:(e,t)=>{const n=t.payload.shown,r=(0,a.fromJS)(t.payload.thing);return e.update("shown",(0,a.fromJS)({}),(e=>e.set(r,n)))},[i.UPDATE_MODE]:(e,t)=>{var n;let r=t.payload.thing,a=t.payload.mode;return e.setIn(o()(n=["modes"]).call(n,r),(a||"")+"")}}},4400:(e,t,n)=>{"use strict";n.r(t),n.d(t,{current:()=>i,currentFilter:()=>s,isShown:()=>l,showSummary:()=>c,whatMode:()=>u});var r=n(20573),o=n(90242),a=n(43393);const i=e=>e.get("layout"),s=e=>e.get("filter"),l=(e,t,n)=>(t=(0,o.AF)(t),e.get("shown",(0,a.fromJS)({})).get((0,a.fromJS)(t),n)),u=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return t=(0,o.AF)(t),e.getIn(["modes",...t],n)},c=(0,r.P1)((e=>e),(e=>!l(e,"editor")))},28989:(e,t,n)=>{"use strict";n.r(t),n.d(t,{taggedOperations:()=>a});var r=n(24278),o=n.n(r);const a=(e,t)=>function(n){for(var r=arguments.length,a=new Array(r>1?r-1:0),i=1;i=0&&(s=o()(s).call(s,0,f)),s}},9150:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(11189),o=n.n(r);function a(e){let{configs:t}=e;const n={debug:0,info:1,log:2,warn:3,error:4},r=e=>n[e]||-1;let{logLevel:a}=t,i=r(a);function s(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=i&&console[e](...n)}return s.warn=o()(s).call(s,null,"warn"),s.error=o()(s).call(s,null,"error"),s.info=o()(s).call(s,null,"info"),s.debug=o()(s).call(s,null,"debug"),{rootInjects:{log:s}}}},67002:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>f,CLEAR_REQUEST_BODY_VALUE:()=>h,SET_REQUEST_BODY_VALIDATE_ERROR:()=>p,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>s,UPDATE_REQUEST_BODY_INCLUSION:()=>i,UPDATE_REQUEST_BODY_VALUE:()=>o,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>a,UPDATE_REQUEST_CONTENT_TYPE:()=>l,UPDATE_RESPONSE_CONTENT_TYPE:()=>u,UPDATE_SELECTED_SERVER:()=>r,UPDATE_SERVER_VARIABLE_VALUE:()=>c,clearRequestBodyValidateError:()=>_,clearRequestBodyValue:()=>A,initRequestBodyValidateError:()=>S,setActiveExamplesMember:()=>v,setRequestBodyInclusion:()=>y,setRequestBodyValidateError:()=>x,setRequestBodyValue:()=>m,setRequestContentType:()=>b,setResponseContentType:()=>w,setRetainRequestBodyValueFlag:()=>g,setSelectedServer:()=>d,setServerVariableValue:()=>E});const r="oas3_set_servers",o="oas3_set_request_body_value",a="oas3_set_request_body_retain_flag",i="oas3_set_request_body_inclusion",s="oas3_set_active_examples_member",l="oas3_set_request_content_type",u="oas3_set_response_content_type",c="oas3_set_server_variable_value",p="oas3_set_request_body_validate_error",f="oas3_clear_request_body_validate_error",h="oas3_clear_request_body_value";function d(e,t){return{type:r,payload:{selectedServerUrl:e,namespace:t}}}function m(e){let{value:t,pathMethod:n}=e;return{type:o,payload:{value:t,pathMethod:n}}}const g=e=>{let{value:t,pathMethod:n}=e;return{type:a,payload:{value:t,pathMethod:n}}};function y(e){let{value:t,pathMethod:n,name:r}=e;return{type:i,payload:{value:t,pathMethod:n,name:r}}}function v(e){let{name:t,pathMethod:n,contextType:r,contextName:o}=e;return{type:s,payload:{name:t,pathMethod:n,contextType:r,contextName:o}}}function b(e){let{value:t,pathMethod:n}=e;return{type:l,payload:{value:t,pathMethod:n}}}function w(e){let{value:t,path:n,method:r}=e;return{type:u,payload:{value:t,path:n,method:r}}}function E(e){let{server:t,namespace:n,key:r,val:o}=e;return{type:c,payload:{server:t,namespace:n,key:r,val:o}}}const x=e=>{let{path:t,method:n,validationErrors:r}=e;return{type:p,payload:{path:t,method:n,validationErrors:r}}},_=e=>{let{path:t,method:n}=e;return{type:f,payload:{path:t,method:n}}},S=e=>{let{pathMethod:t}=e;return{type:f,payload:{path:t[0],method:t[1]}}},A=e=>{let{pathMethod:t}=e;return{type:h,payload:{pathMethod:t}}}},73723:(e,t,n)=>{"use strict";n.r(t),n.d(t,{definitionsToAuthorize:()=>f});var r=n(86),o=n.n(r),a=n(14418),i=n.n(a),s=n(24282),l=n.n(s),u=n(20573),c=n(43393),p=n(7779);const f=(h=(0,u.P1)((e=>e),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{var n;let r=(0,c.List)();return t?(o()(n=t.entrySeq()).call(n,(e=>{let[t,n]=e;const a=n.get("type");var s;if("oauth2"===a&&o()(s=n.get("flows").entrySeq()).call(s,(e=>{let[o,a]=e,s=(0,c.fromJS)({flow:o,authorizationUrl:a.get("authorizationUrl"),tokenUrl:a.get("tokenUrl"),scopes:a.get("scopes"),type:n.get("type"),description:n.get("description")});r=r.push(new c.Map({[t]:i()(s).call(s,(e=>void 0!==e))}))})),"http"!==a&&"apiKey"!==a||(r=r.push(new c.Map({[t]:n}))),"openIdConnect"===a&&n.get("openIdConnectData")){let e=n.get("openIdConnectData"),a=e.get("grant_types_supported")||["authorization_code","implicit"];o()(a).call(a,(o=>{var a;let s=e.get("scopes_supported")&&l()(a=e.get("scopes_supported")).call(a,((e,t)=>e.set(t,"")),new c.Map),u=(0,c.fromJS)({flow:o,authorizationUrl:e.get("authorization_endpoint"),tokenUrl:e.get("token_endpoint"),scopes:s,type:"oauth2",openIdConnectUrl:n.get("openIdConnectUrl")});r=r.push(new c.Map({[t]:i()(u).call(u,(e=>void 0!==e))}))}))}})),r):r})),(e,t)=>function(){const n=t.getSystem().specSelectors.specJson();for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(23101),o=n.n(r),a=n(97606),i=n.n(a),s=n(67294),l=(n(23930),n(43393));const u=e=>{var t;let{callbacks:n,getComponent:r,specPath:a}=e;const u=r("OperationContainer",!0);if(!n)return s.createElement("span",null,"No callbacks");let c=i()(t=n.entrySeq()).call(t,(t=>{var n;let[r,c]=t;return s.createElement("div",{key:r},s.createElement("h2",null,r),i()(n=c.entrySeq()).call(n,(t=>{var n;let[c,p]=t;return"$$ref"===c?null:s.createElement("div",{key:c},i()(n=p.entrySeq()).call(n,(t=>{let[n,i]=t;if("$$ref"===n)return null;let p=(0,l.fromJS)({operation:i});return s.createElement(u,o()({},e,{op:p,key:n,tag:"callbacks",method:n,path:c,specPath:a.push(r,c,n),allowTryItOut:!1}))})))})))}));return s.createElement("div",null,c)}},86775:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var r=n(61125),o=n.n(r),a=n(76986),i=n.n(a),s=n(14418),l=n.n(s),u=n(97606),c=n.n(u),p=n(67294);class f extends p.Component{constructor(e,t){super(e,t),o()(this,"onChange",(e=>{let{onChange:t}=this.props,{value:n,name:r}=e.target,o=i()({},this.state.value);r?o[r]=n:o=n,this.setState({value:o},(()=>t(this.state)))}));let{name:n,schema:r}=this.props,a=this.getValue();this.state={name:n,schema:r,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,"value"])}render(){var e;let{schema:t,getComponent:n,errSelectors:r,name:o}=this.props;const a=n("Input"),i=n("Row"),s=n("Col"),u=n("authError"),f=n("Markdown",!0),h=n("JumpToPath",!0),d=(t.get("scheme")||"").toLowerCase();let m=this.getValue(),g=l()(e=r.allErrors()).call(e,(e=>e.get("authId")===o));if("basic"===d){var y;let e=m?m.get("username"):null;return p.createElement("div",null,p.createElement("h4",null,p.createElement("code",null,o||t.get("name")),"  (http, Basic)",p.createElement(h,{path:["securityDefinitions",o]})),e&&p.createElement("h6",null,"Authorized"),p.createElement(i,null,p.createElement(f,{source:t.get("description")})),p.createElement(i,null,p.createElement("label",null,"Username:"),e?p.createElement("code",null," ",e," "):p.createElement(s,null,p.createElement(a,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),p.createElement(i,null,p.createElement("label",null,"Password:"),e?p.createElement("code",null," ****** "):p.createElement(s,null,p.createElement(a,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),c()(y=g.valueSeq()).call(y,((e,t)=>p.createElement(u,{error:e,key:t}))))}var v;return"bearer"===d?p.createElement("div",null,p.createElement("h4",null,p.createElement("code",null,o||t.get("name")),"  (http, Bearer)",p.createElement(h,{path:["securityDefinitions",o]})),m&&p.createElement("h6",null,"Authorized"),p.createElement(i,null,p.createElement(f,{source:t.get("description")})),p.createElement(i,null,p.createElement("label",null,"Value:"),m?p.createElement("code",null," ****** "):p.createElement(s,null,p.createElement(a,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),c()(v=g.valueSeq()).call(v,((e,t)=>p.createElement(u,{error:e,key:t})))):p.createElement("div",null,p.createElement("em",null,p.createElement("b",null,o)," HTTP authentication: unsupported scheme ",`'${d}'`))}}},76467:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(33427),o=n(42458),a=n(15757),i=n(56617),s=n(9928),l=n(45327),u=n(86775),c=n(96796);const p={Callbacks:r.default,HttpAuth:u.default,RequestBody:o.default,Servers:i.default,ServersContainer:s.default,RequestBodyEditor:l.default,OperationServers:c.default,operationLink:a.default}},15757:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(35627),o=n.n(r),a=n(97606),i=n.n(a),s=n(67294);n(23930);class l extends s.Component{render(){const{link:e,name:t,getComponent:n}=this.props,r=n("Markdown",!0);let a=e.get("operationId")||e.get("operationRef"),l=e.get("parameters")&&e.get("parameters").toJS(),u=e.get("description");return s.createElement("div",{className:"operation-link"},s.createElement("div",{className:"description"},s.createElement("b",null,s.createElement("code",null,t)),u?s.createElement(r,{source:u}):null),s.createElement("pre",null,"Operation `",a,"`",s.createElement("br",null),s.createElement("br",null),"Parameters ",function(e,t){var n;if("string"!=typeof t)return"";return i()(n=t.split("\n")).call(n,((t,n)=>n>0?Array(e+1).join(" ")+t:t)).join("\n")}(0,o()(l,null,2))||"{}",s.createElement("br",null)))}}const u=l},96796:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),a=n(67294);n(23930);class i extends a.Component{constructor(){super(...arguments),o()(this,"setSelectedServer",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${n}`)})),o()(this,"setServerVariableValue",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${n}`})})),o()(this,"getSelectedServer",(()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)})),o()(this,"getServerVariable",((e,t)=>{const{path:n,method:r}=this.props;return this.props.getServerVariable({namespace:`${n}:${r}`,server:e},t)})),o()(this,"getEffectiveServerValue",(e=>{const{path:t,method:n}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${n}`})}))}render(){const{operationServers:e,pathServers:t,getComponent:n}=this.props;if(!e&&!t)return null;const r=n("Servers"),o=e||t,i=e?"operation":"path";return a.createElement("div",{className:"opblock-section operation-servers"},a.createElement("div",{className:"opblock-section-header"},a.createElement("div",{className:"tab-header"},a.createElement("h4",{className:"opblock-title"},"Servers"))),a.createElement("div",{className:"opblock-description-wrapper"},a.createElement("h4",{className:"message"},"These ",i,"-level options override the global server options."),a.createElement(r,{servers:o,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}},45327:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(61125),o=n.n(r),a=n(67294),i=n(94184),s=n.n(i),l=n(90242);const u=Function.prototype;class c extends a.PureComponent{constructor(e,t){super(e,t),o()(this,"applyDefaultValue",(e=>{const{onChange:t,defaultValue:n}=e||this.props;return this.setState({value:n}),t(n)})),o()(this,"onChange",(e=>{this.props.onChange((0,l.Pz)(e))})),o()(this,"onDomChange",(e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))})),this.state={value:(0,l.Pz)(e.value)||e.defaultValue},e.onChange(e.value)}UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:(0,l.Pz)(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:n}=this.state,r=t.size>0;const o=e("TextArea");return a.createElement("div",{className:"body-param"},a.createElement(o,{className:s()("body-param__text",{invalid:r}),title:t.size?t.join(", "):"",value:n,onChange:this.onDomChange}))}}o()(c,"defaultProps",{onChange:u,userHasEditedBody:!1})},42458:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>g,getDefaultRequestBodyValue:()=>m});var r=n(97606),o=n.n(r),a=n(11882),i=n.n(a),s=n(58118),l=n.n(s),u=n(58309),c=n.n(u),p=n(67294),f=(n(23930),n(43393)),h=n(90242),d=n(2518);const m=(e,t,n)=>{const r=e.getIn(["content",t]),o=r.get("schema").toJS(),a=void 0!==r.get("examples"),i=r.get("example"),s=a?r.getIn(["examples",n,"value"]):i,l=(0,h.xi)(o,t,{includeWriteOnly:!0},s);return(0,h.Pz)(l)},g=e=>{let{userHasEditedBody:t,requestBody:n,requestBodyValue:r,requestBodyInclusionSetting:a,requestBodyErrors:s,getComponent:u,getConfigs:g,specSelectors:y,fn:v,contentType:b,isExecute:w,specPath:E,onChange:x,onChangeIncludeEmpty:_,activeExamplesKey:S,updateActiveExamplesKey:A,setRetainRequestBodyValueFlag:C}=e;const k=e=>{x(e.target.files[0])},O=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return"no value"===a.get(e,"no value")&&(t.shouldDispatchInit=!0),t},j=u("Markdown",!0),T=u("modelExample"),I=u("RequestBodyEditor"),N=u("highlightCode"),P=u("ExamplesSelectValueRetainer"),R=u("Example"),M=u("ParameterIncludeEmpty"),{showCommonExtensions:D}=g(),L=n&&n.get("description")||null,B=n&&n.get("content")||new f.OrderedMap;b=b||B.keySeq().first()||"";const F=B.get(b,(0,f.OrderedMap)()),z=F.get("schema",(0,f.OrderedMap)()),U=F.get("examples",null),q=null==U?void 0:o()(U).call(U,((e,t)=>{var r;const o=null===(r=e)||void 0===r?void 0:r.get("value",null);return o&&(e=e.set("value",m(n,b,t),o)),e}));if(s=f.List.isList(s)?s:(0,f.List)(),!F.size)return null;const $="object"===F.getIn(["schema","type"]),V="binary"===F.getIn(["schema","format"]),W="base64"===F.getIn(["schema","format"]);if("application/octet-stream"===b||0===i()(b).call(b,"image/")||0===i()(b).call(b,"audio/")||0===i()(b).call(b,"video/")||V||W){const e=u("Input");return w?p.createElement(e,{type:"file",onChange:k}):p.createElement("i",null,"Example values are not available for ",p.createElement("code",null,b)," media types.")}if($&&("application/x-www-form-urlencoded"===b||0===i()(b).call(b,"multipart/"))&&z.get("properties",(0,f.OrderedMap)()).size>0){var H;const e=u("JsonSchemaForm"),t=u("ParameterExt"),n=z.get("properties",(0,f.OrderedMap)());return r=f.Map.isMap(r)?r:(0,f.OrderedMap)(),p.createElement("div",{className:"table-container"},L&&p.createElement(j,{source:L}),p.createElement("table",null,p.createElement("tbody",null,f.Map.isMap(n)&&o()(H=n.entrySeq()).call(H,(n=>{var i,d;let[m,g]=n;if(g.get("readOnly"))return;let y=D?(0,h.po)(g):null;const b=l()(i=z.get("required",(0,f.List)())).call(i,m),E=g.get("type"),S=g.get("format"),A=g.get("description"),C=r.getIn([m,"value"]),k=r.getIn([m,"errors"])||s,T=a.get(m)||!1,I=g.has("default")||g.has("example")||g.hasIn(["items","example"])||g.hasIn(["items","default"]),N=g.has("enum")&&(1===g.get("enum").size||b),P=I||N;let R="";"array"!==E||P||(R=[]),("object"===E||P)&&(R=(0,h.xi)(g,!1,{includeWriteOnly:!0})),"string"!=typeof R&&"object"===E&&(R=(0,h.Pz)(R)),"string"==typeof R&&"array"===E&&(R=JSON.parse(R));const L="string"===E&&("binary"===S||"base64"===S);return p.createElement("tr",{key:m,className:"parameters","data-property-name":m},p.createElement("td",{className:"parameters-col_name"},p.createElement("div",{className:b?"parameter__name required":"parameter__name"},m,b?p.createElement("span",null," *"):null),p.createElement("div",{className:"parameter__type"},E,S&&p.createElement("span",{className:"prop-format"},"($",S,")"),D&&y.size?o()(d=y.entrySeq()).call(d,(e=>{let[n,r]=e;return p.createElement(t,{key:`${n}-${r}`,xKey:n,xVal:r})})):null),p.createElement("div",{className:"parameter__deprecated"},g.get("deprecated")?"deprecated":null)),p.createElement("td",{className:"parameters-col_description"},p.createElement(j,{source:A}),w?p.createElement("div",null,p.createElement(e,{fn:v,dispatchInitialValue:!L,schema:g,description:m,getComponent:u,value:void 0===C?R:C,required:b,errors:k,onChange:e=>{x(e,[m])}}),b?null:p.createElement(M,{onChange:e=>_(m,e),isIncluded:T,isIncludedOptions:O(m),isDisabled:c()(C)?0!==C.length:!(0,h.O2)(C)})):null))})))))}const J=m(n,b,S);let K=null;return(0,d.O)(J)&&(K="json"),p.createElement("div",null,L&&p.createElement(j,{source:L}),q?p.createElement(P,{userHasEditedBody:t,examples:q,currentKey:S,currentUserInputValue:r,onSelect:e=>{A(e)},updateValue:x,defaultToFirstExample:!0,getComponent:u,setRetainRequestBodyValueFlag:C}):null,w?p.createElement("div",null,p.createElement(I,{value:r,errors:s,defaultValue:J,onChange:x,getComponent:u})):p.createElement(T,{getComponent:u,getConfigs:g,specSelectors:y,expandDepth:1,isExecute:w,schema:F.get("schema"),specPath:E.push("content",b),example:p.createElement(N,{className:"body-param__example",getConfigs:g,language:K,value:(0,h.Pz)(r)||J}),includeWriteOnly:!0}),q?p.createElement(R,{example:q.get(S),getComponent:u,getConfigs:g}):null)}},9928:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);class o extends r.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:n,getComponent:o}=this.props,a=e.servers(),i=o("Servers");return a&&a.size?r.createElement("div",null,r.createElement("span",{className:"servers-title"},"Servers"),r.createElement(i,{servers:a,currentServer:t.selectedServer(),setSelectedServer:n.setSelectedServer,setServerVariableValue:n.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}},56617:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(61125),o=n.n(r),a=n(51679),i=n.n(a),s=n(97606),l=n.n(s),u=n(67294),c=n(43393);n(23930);class p extends u.Component{constructor(){super(...arguments),o()(this,"onServerChange",(e=>{this.setServer(e.target.value)})),o()(this,"onServerVariableValueChange",(e=>{let{setServerVariableValue:t,currentServer:n}=this.props,r=e.target.getAttribute("data-variable"),o=e.target.value;"function"==typeof t&&t({server:n,key:r,val:o})})),o()(this,"setServer",(e=>{let{setSelectedServer:t}=this.props;t(e)}))}componentDidMount(){var e;let{servers:t,currentServer:n}=this.props;n||this.setServer(null===(e=t.first())||void 0===e?void 0:e.get("url"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:n,getServerVariable:r}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){var o;let a=i()(t).call(t,(t=>t.get("url")===e.currentServer)),s=i()(o=this.props.servers).call(o,(e=>e.get("url")===this.props.currentServer))||(0,c.OrderedMap)();if(!a)return this.setServer(t.first().get("url"));let u=s.get("variables")||(0,c.OrderedMap)(),p=(i()(u).call(u,(e=>e.get("default")))||(0,c.OrderedMap)()).get("default"),f=a.get("variables")||(0,c.OrderedMap)(),h=(i()(f).call(f,(e=>e.get("default")))||(0,c.OrderedMap)()).get("default");l()(f).call(f,((t,o)=>{r(e.currentServer,o)&&p===h||n({server:e.currentServer,key:o,val:t.get("default")||""})}))}}render(){var e,t;let{servers:n,currentServer:r,getServerVariable:o,getEffectiveServerValue:a}=this.props,s=(i()(n).call(n,(e=>e.get("url")===r))||(0,c.OrderedMap)()).get("variables")||(0,c.OrderedMap)(),p=0!==s.size;return u.createElement("div",{className:"servers"},u.createElement("label",{htmlFor:"servers"},u.createElement("select",{onChange:this.onServerChange,value:r},l()(e=n.valueSeq()).call(e,(e=>u.createElement("option",{value:e.get("url"),key:e.get("url")},e.get("url"),e.get("description")&&` - ${e.get("description")}`))).toArray())),p?u.createElement("div",null,u.createElement("div",{className:"computed-url"},"Computed URL:",u.createElement("code",null,a(r))),u.createElement("h4",null,"Server variables"),u.createElement("table",null,u.createElement("tbody",null,l()(t=s.entrySeq()).call(t,(e=>{var t;let[n,a]=e;return u.createElement("tr",{key:n},u.createElement("td",null,n),u.createElement("td",null,a.get("enum")?u.createElement("select",{"data-variable":n,onChange:this.onServerVariableValueChange},l()(t=a.get("enum")).call(t,(e=>u.createElement("option",{selected:e===o(r,n),key:e,value:e},e)))):u.createElement("input",{type:"text",value:o(r,n)||"",onChange:this.onServerVariableValueChange,"data-variable":n})))}))))):null)}}},7779:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OAS3ComponentWrapFactory:()=>c,isOAS3:()=>l,isSwagger2:()=>u});var r=n(23101),o=n.n(r),a=n(27043),i=n.n(a),s=n(67294);function l(e){const t=e.get("openapi");return"string"==typeof t&&(i()(t).call(t,"3.0.")&&t.length>4)}function u(e){const t=e.get("swagger");return"string"==typeof t&&i()(t).call(t,"2.0")}function c(e){return(t,n)=>r=>{if(n&&n.specSelectors&&n.specSelectors.specJson){return l(n.specSelectors.specJson())?s.createElement(e,o()({},r,n,{Ori:t})):s.createElement(t,r)}return console.warn("OAS3 wrapper: couldn't get spec"),null}}},97451:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(92044),o=n(73723),a=n(91741),i=n(76467),s=n(37761),l=n(67002),u=n(5065),c=n(62109);function p(){return{components:i.default,wrapComponents:s.default,statePlugins:{spec:{wrapSelectors:r,selectors:a},auth:{wrapSelectors:o},oas3:{actions:l,reducers:c.default,selectors:u}}}}},62109:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(8712),o=n.n(r),a=n(86),i=n.n(a),s=n(24282),l=n.n(s),u=n(43393),c=n(67002);const p={[c.UPDATE_SELECTED_SERVER]:(e,t)=>{let{payload:{selectedServerUrl:n,namespace:r}}=t;const o=r?[r,"selectedServer"]:["selectedServer"];return e.setIn(o,n)},[c.UPDATE_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[a,s]=r;if(!u.Map.isMap(n))return e.setIn(["requestData",a,s,"bodyValue"],n);let l,c=e.getIn(["requestData",a,s,"bodyValue"])||(0,u.Map)();u.Map.isMap(c)||(c=(0,u.Map)());const[...p]=o()(n).call(n);return i()(p).call(p,(e=>{let t=n.getIn([e]);c.has(e)&&u.Map.isMap(t)||(l=c.setIn([e,"value"],t))})),e.setIn(["requestData",a,s,"bodyValue"],l)},[c.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[o,a]=r;return e.setIn(["requestData",o,a,"retainBodyValue"],n)},[c.UPDATE_REQUEST_BODY_INCLUSION]:(e,t)=>{let{payload:{value:n,pathMethod:r,name:o}}=t,[a,i]=r;return e.setIn(["requestData",a,i,"bodyInclusion",o],n)},[c.UPDATE_ACTIVE_EXAMPLES_MEMBER]:(e,t)=>{let{payload:{name:n,pathMethod:r,contextType:o,contextName:a}}=t,[i,s]=r;return e.setIn(["examples",i,s,o,a,"activeExample"],n)},[c.UPDATE_REQUEST_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[o,a]=r;return e.setIn(["requestData",o,a,"requestContentType"],n)},[c.UPDATE_RESPONSE_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,path:r,method:o}}=t;return e.setIn(["requestData",r,o,"responseContentType"],n)},[c.UPDATE_SERVER_VARIABLE_VALUE]:(e,t)=>{let{payload:{server:n,namespace:r,key:o,val:a}}=t;const i=r?[r,"serverVariableValues",n,o]:["serverVariableValues",n,o];return e.setIn(i,a)},[c.SET_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:r,validationErrors:o}}=t,a=[];if(a.push("Required field is not provided"),o.missingBodyValue)return e.setIn(["requestData",n,r,"errors"],(0,u.fromJS)(a));if(o.missingRequiredKeys&&o.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=o;return e.updateIn(["requestData",n,r,"bodyValue"],(0,u.fromJS)({}),(e=>l()(t).call(t,((e,t)=>e.setIn([t,"errors"],(0,u.fromJS)(a))),e)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),e},[c.CLEAR_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:r}}=t;const a=e.getIn(["requestData",n,r,"bodyValue"]);if(!u.Map.isMap(a))return e.setIn(["requestData",n,r,"errors"],(0,u.fromJS)([]));const[...i]=o()(a).call(a);return i?e.updateIn(["requestData",n,r,"bodyValue"],(0,u.fromJS)({}),(e=>l()(i).call(i,((e,t)=>e.setIn([t,"errors"],(0,u.fromJS)([]))),e))):e},[c.CLEAR_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{pathMethod:n}}=t,[r,o]=n;const a=e.getIn(["requestData",r,o,"bodyValue"]);return a?u.Map.isMap(a)?e.setIn(["requestData",r,o,"bodyValue"],(0,u.Map)()):e.setIn(["requestData",r,o,"bodyValue"],""):e}}},5065:(e,t,n)=>{"use strict";n.r(t),n.d(t,{activeExamplesMember:()=>_,hasUserEditedBody:()=>w,requestBodyErrors:()=>x,requestBodyInclusionSetting:()=>E,requestBodyValue:()=>y,requestContentType:()=>S,responseContentType:()=>A,selectDefaultRequestBodyValue:()=>b,selectedServer:()=>g,serverEffectiveValue:()=>O,serverVariableValue:()=>C,serverVariables:()=>k,shouldRetainRequestBodyValue:()=>v,validateBeforeExecute:()=>j,validateShallowRequired:()=>I});var r=n(97606),o=n.n(r),a=n(86),i=n.n(a),s=n(28222),l=n.n(s),u=n(11882),c=n.n(u),p=n(43393),f=n(7779),h=n(42458),d=n(90242);const m=e=>function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o{const o=n.getSystem().specSelectors.specJson();if((0,f.isOAS3)(o)){const o=e(t,...r);return"function"==typeof o?o(n):o}return null}};const g=m(((e,t)=>{const n=t?[t,"selectedServer"]:["selectedServer"];return e.getIn(n)||""})),y=m(((e,t,n)=>e.getIn(["requestData",t,n,"bodyValue"])||null)),v=m(((e,t,n)=>e.getIn(["requestData",t,n,"retainBodyValue"])||!1)),b=(e,t,n)=>e=>{const{oas3Selectors:r,specSelectors:o}=e.getSystem(),a=o.specJson();if((0,f.isOAS3)(a)){const e=r.requestContentType(t,n);if(e)return(0,h.getDefaultRequestBodyValue)(o.specResolvedSubtree(["paths",t,n,"requestBody"]),e,r.activeExamplesMember(t,n,"requestBody","requestBody"))}return null},w=m(((e,t,n)=>e=>{const{oas3Selectors:r,specSelectors:o}=e.getSystem();let a=!1;const i=r.requestContentType(t,n);let s=r.requestBodyValue(t,n);const l=o.specResolvedSubtree(["paths",t,n,"requestBody"]);if(!l)return!1;if(p.Map.isMap(s)&&(s=(0,d.Pz)(s.mapEntries((e=>p.Map.isMap(e[1])?[e[0],e[1].get("value")]:e)).toJS())),p.List.isList(s)&&(s=(0,d.Pz)(s)),i){const e=(0,h.getDefaultRequestBodyValue)(l,i,r.activeExamplesMember(t,n,"requestBody","requestBody"));a=!!s&&s!==e}return a})),E=m(((e,t,n)=>e.getIn(["requestData",t,n,"bodyInclusion"])||(0,p.Map)())),x=m(((e,t,n)=>e.getIn(["requestData",t,n,"errors"])||null)),_=m(((e,t,n,r,o)=>e.getIn(["examples",t,n,r,o,"activeExample"])||null)),S=m(((e,t,n)=>e.getIn(["requestData",t,n,"requestContentType"])||null)),A=m(((e,t,n)=>e.getIn(["requestData",t,n,"responseContentType"])||null)),C=m(((e,t,n)=>{let r;if("string"!=typeof t){const{server:e,namespace:o}=t;r=o?[o,"serverVariableValues",e,n]:["serverVariableValues",e,n]}else{r=["serverVariableValues",t,n]}return e.getIn(r)||null})),k=m(((e,t)=>{let n;if("string"!=typeof t){const{server:e,namespace:r}=t;n=r?[r,"serverVariableValues",e]:["serverVariableValues",e]}else{n=["serverVariableValues",t]}return e.getIn(n)||(0,p.OrderedMap)()})),O=m(((e,t)=>{var n,r;if("string"!=typeof t){const{server:o,namespace:a}=t;r=o,n=a?e.getIn([a,"serverVariableValues",r]):e.getIn(["serverVariableValues",r])}else r=t,n=e.getIn(["serverVariableValues",r]);n=n||(0,p.OrderedMap)();let a=r;return o()(n).call(n,((e,t)=>{a=a.replace(new RegExp(`{${t}}`,"g"),e)})),a})),j=(T=(e,t)=>((e,t)=>(t=t||[],!!e.getIn(["requestData",...t,"bodyValue"])))(e,t),function(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.getSystem().specSelectors.specJson();let r=[...t][1]||[];return!n.getIn(["paths",...r,"requestBody","required"])||T(...t)}});var T;const I=(e,t)=>{var n;let{oas3RequiredRequestBodyContentType:r,oas3RequestContentType:o,oas3RequestBodyValue:a}=t,s=[];if(!p.Map.isMap(a))return s;let u=[];return i()(n=l()(r.requestContentType)).call(n,(e=>{if(e===o){let t=r.requestContentType[e];i()(t).call(t,(e=>{c()(u).call(u,e)<0&&u.push(e)}))}})),i()(u).call(u,(e=>{a.getIn([e,"value"])||s.push(e)})),s}},91741:(e,t,n)=>{"use strict";n.r(t),n.d(t,{isSwagger2:()=>p,servers:()=>u});var r=n(20573),o=n(43393),a=n(7779);const i=e=>e||(0,o.Map)(),s=(0,r.P1)(i,(e=>e.get("json",(0,o.Map)()))),l=(0,r.P1)(i,(e=>e.get("resolved",(0,o.Map)()))),u=(c=(0,r.P1)((e=>{let t=l(e);return t.count()<1&&(t=s(e)),t}),(e=>e.getIn(["servers"])||(0,o.Map)())),()=>function(e){const t=e.getSystem().specSelectors.specJson();if((0,a.isOAS3)(t)){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o()=>{const e=t.getSystem().specSelectors.specJson();return(0,a.isSwagger2)(e)}},92044:(e,t,n)=>{"use strict";n.r(t),n.d(t,{basePath:()=>y,consumes:()=>v,definitions:()=>h,hasHost:()=>d,host:()=>g,isOAS3:()=>x,isSwagger2:()=>_,produces:()=>b,schemes:()=>w,securityDefinitions:()=>m,servers:()=>E});var r=n(20573),o=n(33881),a=n(43393),i=n(7779);function s(e){return(t,n)=>function(){const r=n.getSystem().specSelectors.specJson();return(0,i.isOAS3)(r)?e(...arguments):t(...arguments)}}const l=e=>e||(0,a.Map)(),u=s((0,r.P1)((()=>null))),c=(0,r.P1)(l,(e=>e.get("json",(0,a.Map)()))),p=(0,r.P1)(l,(e=>e.get("resolved",(0,a.Map)()))),f=e=>{let t=p(e);return t.count()<1&&(t=c(e)),t},h=s((0,r.P1)(f,(e=>{const t=e.getIn(["components","schemas"]);return a.Map.isMap(t)?t:(0,a.Map)()}))),d=s((e=>f(e).hasIn(["servers",0]))),m=s((0,r.P1)(o.specJsonWithResolvedSubtrees,(e=>e.getIn(["components","securitySchemes"])||null))),g=u,y=u,v=u,b=u,w=u,E=s((0,r.P1)(f,(e=>e.getIn(["servers"])||(0,a.Map)()))),x=(e,t)=>()=>{const e=t.getSystem().specSelectors.specJson();return(0,i.isOAS3)(a.Map.isMap(e)?e:(0,a.Map)())},_=(e,t)=>()=>{const e=t.getSystem().specSelectors.specJson();return(0,i.isSwagger2)(a.Map.isMap(e)?e:(0,a.Map)())}},70356:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:o,getComponent:a,errSelectors:i,authorized:s,onAuthChange:l,name:u}=n,c=a("HttpAuth");return"http"===o.get("type")?r.createElement(c,{key:u,schema:o,name:u,errSelectors:i,authorized:s,getComponent:a,onChange:l}):r.createElement(t,n)}))},37761:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(22460),o=n(70356),a=n(69487),i=n(50058),s=n(53499),l=n(90287);const u={Markdown:r.default,AuthItem:o.default,JsonSchema_string:l.default,VersionStamp:a.default,model:s.default,onlineValidatorBadge:i.default}},90287:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:o,getComponent:a,errors:i,onChange:s}=n,l=o&&o.get?o.get("format"):null,u=o&&o.get?o.get("type"):null,c=a("Input");return u&&"string"===u&&l&&("binary"===l||"base64"===l)?r.createElement(c,{type:"file",className:i.length?"invalid":"",title:i.length?i:"",onChange:e=>{s(e.target.files[0])},disabled:t.isDisabled}):r.createElement(t,n)}))},22460:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Markdown:()=>f,default:()=>h});var r=n(81607),o=n.n(r),a=n(67294),i=n(94184),s=n.n(i),l=n(89927),u=n(7779),c=n(94994);const p=new l._("commonmark");p.block.ruler.enable(["table"]),p.set({linkTarget:"_blank"});const f=e=>{let{source:t,className:n="",getConfigs:r}=e;if("string"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=r(),i=p.render(t),l=(0,c.s)(i,{useUnsafeMarkdown:e});let u;return"string"==typeof l&&(u=o()(l).call(l)),a.createElement("div",{dangerouslySetInnerHTML:{__html:u},className:s()(n,"renderedMarkdown")})}return null};f.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const h=(0,u.OAS3ComponentWrapFactory)(f)},53499:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(23101),o=n.n(r),a=n(67294),i=n(7779),s=n(53795);class l extends a.Component{render(){let{getConfigs:e,schema:t}=this.props,n=["model-box"],r=null;return!0===t.get("deprecated")&&(n.push("deprecated"),r=a.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),a.createElement("div",{className:n.join(" ")},r,a.createElement(s.Z,o()({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}const u=(0,i.OAS3ComponentWrapFactory)(l)},50058:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(7779),o=n(5623);const a=(0,r.OAS3ComponentWrapFactory)(o.Z)},69487:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{const{Ori:t}=e;return r.createElement("span",null,r.createElement(t,e),r.createElement("small",{className:"version-stamp"},r.createElement("pre",{className:"version"},"OAS3")))}))},28560:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(87198),o=n.n(r);let a=!1;function i(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return a=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const n=t.getConfigs().onComplete;return a&&"function"==typeof n&&(o()(n,0),a=!1),e(...arguments)}}}}}}},92135:(e,t,n)=>{"use strict";n.r(t),n.d(t,{requestSnippetGenerator_curl_bash:()=>A,requestSnippetGenerator_curl_cmd:()=>C,requestSnippetGenerator_curl_powershell:()=>S});var r=n(11882),o=n.n(r),a=n(81607),i=n.n(a),s=n(35627),l=n.n(s),u=n(97606),c=n.n(u),p=n(12196),f=n.n(p),h=n(74386),d=n.n(h),m=n(58118),g=n.n(m),y=n(27504),v=n(43393);const b=e=>{var t;const n="_**[]";return o()(e).call(e,n)<0?e:i()(t=e.split(n)[0]).call(t)},w=e=>"-d "===e||/^[_\/-]/g.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'",E=e=>"-d "===(e=e.replace(/\^/g,"^^").replace(/\\"/g,'\\\\"').replace(/"/g,'""').replace(/\n/g,"^\n"))?e.replace(/-d /g,"-d ^\n"):/^[_\/-]/g.test(e)?e:'"'+e+'"',x=e=>"-d "===e?e:/\n/.test(e)?'@"\n'+e.replace(/"/g,'\\"').replace(/`/g,"``").replace(/\$/,"`$")+'\n"@':/^[_\/-]/g.test(e)?e:"'"+e.replace(/"/g,'""').replace(/'/g,"''")+"'";const _=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=!1,a="";const i=function(){for(var e=arguments.length,n=new Array(e),r=0;ra+=` ${n}`,p=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return a+=f()(" ").call(" ",e)};let h=e.get("headers");if(a+="curl"+r,e.has("curlOptions")&&i(...e.get("curlOptions")),i("-X",e.get("method")),u(),p(),s(`${e.get("url")}`),h&&h.size)for(let t of d()(m=e.get("headers")).call(m)){var m;u(),p();let[e,n]=t;s("-H",`${e}: ${n}`),o=o||/^content-type$/i.test(e)&&/^multipart\/form-data$/i.test(n)}const w=e.get("body");var E;if(w)if(o&&g()(E=["POST","PUT","PATCH"]).call(E,e.get("method")))for(let[e,t]of w.entrySeq()){let n=b(e);u(),p(),s("-F"),t instanceof y.Z.File?i(`${n}=@${t.name}${t.type?`;type=${t.type}`:""}`):i(`${n}=${t}`)}else if(w instanceof y.Z.File)u(),p(),s(`--data-binary '@${w.name}'`);else{u(),p(),s("-d ");let t=w;v.Map.isMap(t)?s(function(e){let t=[];for(let[n,r]of e.get("body").entrySeq()){let e=b(n);r instanceof y.Z.File?t.push(` "${e}": {\n "name": "${r.name}"${r.type?`,\n "type": "${r.type}"`:""}\n }`):t.push(` "${e}": ${l()(r,null,2).replace(/(\r\n|\r|\n)/g,"\n ")}`)}return`{\n${t.join(",\n")}\n}`}(e)):("string"!=typeof t&&(t=l()(t)),s(t))}else w||"POST"!==e.get("method")||(u(),p(),s("-d ''"));return a},S=e=>_(e,x,"`\n",".exe"),A=e=>_(e,w,"\\\n"),C=e=>_(e,E,"^\n")},86575:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(92135),o=n(4669),a=n(84206);const i=()=>({components:{RequestSnippets:a.default},fn:r,statePlugins:{requestSnippets:{selectors:o}}})},84206:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>w});var r=n(14418),o=n.n(r),a=n(25110),i=n.n(a),s=n(86),l=n.n(s),u=n(97606),c=n.n(u),p=n(67294),f=n(27361),h=n.n(f),d=n(23560),m=n.n(d),g=n(74855),y=n(33424);const v={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(250, 250, 250)",paddingBottom:"0",paddingTop:"0",border:"1px solid rgb(51, 51, 51)",borderRadius:"4px 4px 0 0",boxShadow:"none",borderBottom:"none"},b={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(51, 51, 51)",boxShadow:"none",border:"1px solid rgb(51, 51, 51)",paddingBottom:"0",paddingTop:"0",borderRadius:"4px 4px 0 0",marginTop:"-5px",marginRight:"-5px",marginLeft:"-5px",zIndex:"9999",borderBottom:"none"},w=e=>{var t,n;let{request:r,requestSnippetsSelectors:a,getConfigs:s}=e;const u=m()(s)?s():null,f=!1!==h()(u,"syntaxHighlight")&&h()(u,"syntaxHighlight.activated",!0),d=(0,p.useRef)(null),[w,E]=(0,p.useState)(null===(t=a.getSnippetGenerators())||void 0===t?void 0:t.keySeq().first()),[x,_]=(0,p.useState)(null==a?void 0:a.getDefaultExpanded());(0,p.useEffect)((()=>{}),[]),(0,p.useEffect)((()=>{var e;const t=o()(e=i()(d.current.childNodes)).call(e,(e=>{var t;return!!e.nodeType&&(null===(t=e.classList)||void 0===t?void 0:t.contains("curl-command"))}));return l()(t).call(t,(e=>e.addEventListener("mousewheel",j,{passive:!1}))),()=>{l()(t).call(t,(e=>e.removeEventListener("mousewheel",j)))}}),[r]);const S=a.getSnippetGenerators(),A=S.get(w),C=A.get("fn")(r),k=()=>{_(!x)},O=e=>e===w?b:v,j=e=>{const{target:t,deltaY:n}=e,{scrollHeight:r,offsetHeight:o,scrollTop:a}=t;r>o&&(0===a&&n<0||o+a>=r&&n>0)&&e.preventDefault()},T=f?p.createElement(y.d3,{language:A.get("syntax"),className:"curl microlight",style:(0,y.C2)(h()(u,"syntaxHighlight.theme"))},C):p.createElement("textarea",{readOnly:!0,className:"curl",value:C});return p.createElement("div",{className:"request-snippets",ref:d},p.createElement("div",{style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"center",marginBottom:"15px"}},p.createElement("h4",{onClick:()=>k(),style:{cursor:"pointer"}},"Snippets"),p.createElement("button",{onClick:()=>k(),style:{border:"none",background:"none"},title:x?"Collapse operation":"Expand operation"},p.createElement("svg",{className:"arrow",width:"10",height:"10"},p.createElement("use",{href:x?"#large-arrow-down":"#large-arrow",xlinkHref:x?"#large-arrow-down":"#large-arrow"})))),x&&p.createElement("div",{className:"curl-command"},p.createElement("div",{style:{paddingLeft:"15px",paddingRight:"10px",width:"100%",display:"flex"}},c()(n=S.entrySeq()).call(n,(e=>{let[t,n]=e;return p.createElement("div",{style:O(t),className:"btn",key:t,onClick:()=>(e=>{w!==e&&E(e)})(t)},p.createElement("h4",{style:t===w?{color:"white"}:{}},n.get("title")))}))),p.createElement("div",{className:"copy-to-clipboard"},p.createElement(g.CopyToClipboard,{text:C},p.createElement("button",null))),p.createElement("div",null,T)))}},4669:(e,t,n)=>{"use strict";n.r(t),n.d(t,{getActiveLanguage:()=>d,getDefaultExpanded:()=>m,getGenerators:()=>f,getSnippetGenerators:()=>h});var r=n(14418),o=n.n(r),a=n(58118),i=n.n(a),s=n(97606),l=n.n(s),u=n(20573),c=n(43393);const p=e=>e||(0,c.Map)(),f=(0,u.P1)(p,(e=>{const t=e.get("languages"),n=e.get("generators",(0,c.Map)());return!t||t.isEmpty()?n:o()(n).call(n,((e,n)=>i()(t).call(t,n)))})),h=e=>t=>{var n,r;let{fn:a}=t;return o()(n=l()(r=f(e)).call(r,((e,t)=>{const n=(e=>a[`requestSnippetGenerator_${e}`])(t);return"function"!=typeof n?null:e.set("fn",n)}))).call(n,(e=>e))},d=(0,u.P1)(p,(e=>e.get("activeLanguage"))),m=(0,u.P1)(p,(e=>e.get("defaultExpanded")))},36195:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ErrorBoundary:()=>i,default:()=>s});var r=n(67294),o=n(56189),a=n(29403);class i extends r.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:n}=this.props;if(this.state.hasError){const n=e("Fallback");return r.createElement(n,{name:t})}return n}}i.defaultProps={targetName:"this component",getComponent:()=>a.default,fn:{componentDidCatch:o.componentDidCatch},children:null};const s=i},29403:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{name:t}=e;return r.createElement("div",{className:"fallback"},"😱 ",r.createElement("i",null,"Could not render ","t"===t?"this component":t,", see the console."))}},56189:(e,t,n)=>{"use strict";n.r(t),n.d(t,{componentDidCatch:()=>i,withErrorBoundary:()=>s});var r=n(23101),o=n.n(r),a=n(67294);const i=console.error,s=e=>t=>{const{getComponent:n,fn:r}=e(),i=n("ErrorBoundary"),s=r.getDisplayName(t);class l extends a.Component{render(){return a.createElement(i,{targetName:s,getComponent:n,fn:r},a.createElement(t,o()({},this.props,this.context)))}}var u;return l.displayName=`WithErrorBoundary(${s})`,(u=t).prototype&&u.prototype.isReactComponent&&(l.prototype.mapStateToProps=t.prototype.mapStateToProps),l}},27621:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(47475),o=n.n(r),a=n(7287),i=n.n(a),s=n(36195),l=n(29403),u=n(56189);const c=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{var r;let{getSystem:a}=n;const c=t?e:["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper",...e],p=i()(c,o()(r=Array(c.length)).call(r,((e,t)=>{let{fn:n}=t;return n.withErrorBoundary(e)})));return{fn:{componentDidCatch:u.componentDidCatch,withErrorBoundary:(0,u.withErrorBoundary)(a)},components:{ErrorBoundary:s.default,Fallback:l.default},wrapComponents:p}}}},57050:(e,t,n)=>{"use strict";n.r(t),n.d(t,{createXMLExample:()=>U,inferSchema:()=>z,memoizedCreateXMLExample:()=>V,memoizedSampleFromSchema:()=>W,sampleFromSchema:()=>q,sampleFromSchemaGeneric:()=>F});var r=n(11882),o=n.n(r),a=n(86),i=n.n(a),s=n(58309),l=n.n(s),u=n(58118),c=n.n(u),p=n(92039),f=n.n(p),h=n(24278),d=n.n(h),m=n(51679),g=n.n(m),y=n(39022),v=n.n(y),b=n(97606),w=n.n(b),E=n(35627),x=n.n(E),_=n(53479),S=n.n(_),A=n(14419),C=n.n(A),k=n(41609),O=n.n(k),j=n(90242),T=n(60314);const I={string:e=>e.pattern?(e=>{try{return new(C())(e).gen()}catch(e){return"string"}})(e.pattern):"string",string_email:()=>"user@example.com","string_date-time":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",string_hostname:()=>"example.com",string_ipv4:()=>"198.51.100.42",string_ipv6:()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>"boolean"!=typeof e.default||e.default},N=e=>{e=(0,j.mz)(e);let{type:t,format:n}=e,r=I[`${t}_${n}`]||I[t];return(0,j.Wl)(r)?r(e):"Unknown Type: "+e.type},P=e=>(0,j.XV)(e,"$$ref",(e=>"string"==typeof e&&o()(e).call(e,"#")>-1)),R=["maxProperties","minProperties"],M=["minItems","maxItems"],D=["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],L=["minLength","maxLength"],B=function(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var a;(i()(n=["example","default","enum","xml","type",...R,...M,...D,...L]).call(n,(n=>(n=>{void 0===t[n]&&void 0!==e[n]&&(t[n]=e[n])})(n))),void 0!==e.required&&l()(e.required))&&(void 0!==t.required&&t.required.length||(t.required=[]),i()(a=e.required).call(a,(e=>{var n;c()(n=t.required).call(n,e)||t.required.push(e)})));if(e.properties){t.properties||(t.properties={});let n=(0,j.mz)(e.properties);for(let a in n){var s;if(Object.prototype.hasOwnProperty.call(n,a))if(!n[a]||!n[a].deprecated)if(!n[a]||!n[a].readOnly||r.includeReadOnly)if(!n[a]||!n[a].writeOnly||r.includeWriteOnly)if(!t.properties[a])t.properties[a]=n[a],!e.required&&l()(e.required)&&-1!==o()(s=e.required).call(s,a)&&(t.required?t.required.push(a):t.required=[a])}}return e.items&&(t.items||(t.items={}),t.items=B(e.items,t.items,r)),t},F=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&(0,j.Wl)(e.toJS)&&(e=e.toJS());let a=void 0!==n||e&&void 0!==e.example||e&&void 0!==e.default;const s=!a&&e&&e.oneOf&&e.oneOf.length>0,u=!a&&e&&e.anyOf&&e.anyOf.length>0;if(!a&&(s||u)){const n=(0,j.mz)(s?e.oneOf[0]:e.anyOf[0]);if(B(n,e,t),!e.xml&&n.xml&&(e.xml=n.xml),void 0!==e.example&&void 0!==n.example)a=!0;else if(n.properties){e.properties||(e.properties={});let r=(0,j.mz)(n.properties);for(let a in r){var p;if(Object.prototype.hasOwnProperty.call(r,a))if(!r[a]||!r[a].deprecated)if(!r[a]||!r[a].readOnly||t.includeReadOnly)if(!r[a]||!r[a].writeOnly||t.includeWriteOnly)if(!e.properties[a])e.properties[a]=r[a],!n.required&&l()(n.required)&&-1!==o()(p=n.required).call(p,a)&&(e.required?e.required.push(a):e.required=[a])}}}const h={};let{xml:m,type:y,example:b,properties:E,additionalProperties:x,items:_}=e||{},{includeReadOnly:S,includeWriteOnly:A}=t;m=m||{};let C,{name:k,prefix:T,namespace:I}=m,L={};if(r&&(k=k||"notagname",C=(T?T+":":"")+k,I)){h[T?"xmlns:"+T:"xmlns"]=I}r&&(L[C]=[]);const z=t=>f()(t).call(t,(t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!y&&(E||x||z(R)?y="object":_||z(M)?y="array":z(D)?(y="number",e.type="number"):a||e.enum||(y="string",e.type="string"));const U=t=>{var n,r,o,a,i;null!==(null===(n=e)||void 0===n?void 0:n.maxItems)&&void 0!==(null===(r=e)||void 0===r?void 0:r.maxItems)&&(t=d()(t).call(t,0,null===(i=e)||void 0===i?void 0:i.maxItems));if(null!==(null===(o=e)||void 0===o?void 0:o.minItems)&&void 0!==(null===(a=e)||void 0===a?void 0:a.minItems)){let n=0;for(;t.length<(null===(s=e)||void 0===s?void 0:s.minItems);){var s;t.push(t[n++%t.length])}}return t},q=(0,j.mz)(E);let $,V=0;const W=()=>e&&null!==e.maxProperties&&void 0!==e.maxProperties&&V>=e.maxProperties,H=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!W()&&(!(t=>{var n;return!(e&&e.required&&e.required.length&&c()(n=e.required).call(n,t))})(t)||e.maxProperties-V-(()=>{if(!e||!e.required)return 0;let t=0;var n,o;return r?i()(n=e.required).call(n,(e=>t+=void 0===L[e]?0:1)):i()(o=e.required).call(o,(e=>{var n;return t+=void 0===(null===(n=L[C])||void 0===n?void 0:g()(n).call(n,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if($=r?function(n){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&q[n]){if(q[n].xml=q[n].xml||{},q[n].xml.attribute){const e=l()(q[n].enum)?q[n].enum[0]:void 0,t=q[n].example,r=q[n].default;return void(h[q[n].xml.name||n]=void 0!==t?t:void 0!==r?r:void 0!==e?e:N(q[n]))}q[n].xml.name=q[n].xml.name||n}else q[n]||!1===x||(q[n]={xml:{name:n}});let a=F(e&&q[n]||void 0,t,o,r);var i;H(n)&&(V++,l()(a)?L[C]=v()(i=L[C]).call(i,a):L[C].push(a))}:(n,o)=>{if(H(n)){if(Object.prototype.hasOwnProperty.call(e,"discriminator")&&e.discriminator&&Object.prototype.hasOwnProperty.call(e.discriminator,"mapping")&&e.discriminator.mapping&&Object.prototype.hasOwnProperty.call(e,"$$ref")&&e.$$ref&&e.discriminator.propertyName===n){for(let t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){L[n]=t;break}}else L[n]=F(q[n],t,o,r);V++}},a){let o;if(o=P(void 0!==n?n:void 0!==b?b:e.default),!r){if("number"==typeof o&&"string"===y)return`${o}`;if("string"!=typeof o||"string"===y)return o;try{return JSON.parse(o)}catch(e){return o}}if(e||(y=l()(o)?"array":typeof o),"array"===y){if(!l()(o)){if("string"==typeof o)return o;o=[o]}const n=e?e.items:void 0;n&&(n.xml=n.xml||m||{},n.xml.name=n.xml.name||m.name);let a=w()(o).call(o,(e=>F(n,t,e,r)));return a=U(a),m.wrapped?(L[C]=a,O()(h)||L[C].push({_attr:h})):L=a,L}if("object"===y){if("string"==typeof o)return o;for(let t in o)Object.prototype.hasOwnProperty.call(o,t)&&(e&&q[t]&&q[t].readOnly&&!S||e&&q[t]&&q[t].writeOnly&&!A||(e&&q[t]&&q[t].xml&&q[t].xml.attribute?h[q[t].xml.name||t]=o[t]:$(t,o[t])));return O()(h)||L[C].push({_attr:h}),L}return L[C]=O()(h)?o:[{_attr:h},o],L}if("object"===y){for(let e in q)Object.prototype.hasOwnProperty.call(q,e)&&(q[e]&&q[e].deprecated||q[e]&&q[e].readOnly&&!S||q[e]&&q[e].writeOnly&&!A||$(e));if(r&&h&&L[C].push({_attr:h}),W())return L;if(!0===x)r?L[C].push({additionalProp:"Anything can be here"}):L.additionalProp1={},V++;else if(x){const n=(0,j.mz)(x),o=F(n,t,void 0,r);if(r&&n.xml&&n.xml.name&&"notagname"!==n.xml.name)L[C].push(o);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&VF(B(_,e,t),t,void 0,r)));else if(l()(_.oneOf)){var G;n=w()(G=_.oneOf).call(G,(e=>F(B(_,e,t),t,void 0,r)))}else{if(!(!r||r&&m.wrapped))return F(_,t,void 0,r);n=[F(_,t,void 0,r)]}return n=U(n),r&&m.wrapped?(L[C]=n,O()(h)||L[C].push({_attr:h}),L):n}let Z;if(e&&l()(e.enum))Z=(0,j.AF)(e.enum)[0];else{if(!e)return;if(Z=N(e),"number"==typeof Z){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,Z=t);let n=e.maximum;null!=n&&(e.exclusiveMaximum&&n--,Z=n)}if("string"==typeof Z&&(null!==e.maxLength&&void 0!==e.maxLength&&(Z=d()(Z).call(Z,0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;Z.length(e.schema&&(e=e.schema),e.properties&&(e.type="object"),e),U=(e,t,n)=>{const r=F(e,t,n,!0);if(r)return"string"==typeof r?r:S()(r,{declaration:!0,indent:"\t"})},q=(e,t,n)=>F(e,t,n,!1),$=(e,t,n)=>[e,x()(t),x()(n)],V=(0,T.Z)(U,$),W=(0,T.Z)(q,$)},8883:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(57050);function o(){return{fn:r}}},51228:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CLEAR_REQUEST:()=>Q,CLEAR_RESPONSE:()=>Y,CLEAR_VALIDATE_PARAMS:()=>X,LOG_REQUEST:()=>Z,SET_MUTATED_REQUEST:()=>G,SET_REQUEST:()=>K,SET_RESPONSE:()=>J,SET_SCHEME:()=>re,UPDATE_EMPTY_PARAM_INCLUSION:()=>W,UPDATE_JSON:()=>$,UPDATE_OPERATION_META_VALUE:()=>ee,UPDATE_PARAM:()=>V,UPDATE_RESOLVED:()=>te,UPDATE_RESOLVED_SUBTREE:()=>ne,UPDATE_SPEC:()=>U,UPDATE_URL:()=>q,VALIDATE_PARAMS:()=>H,changeConsumesValue:()=>xe,changeParam:()=>me,changeParamByIdentity:()=>ge,changeProducesValue:()=>_e,clearRequest:()=>Ie,clearResponse:()=>Te,clearValidateParams:()=>Ee,execute:()=>je,executeRequest:()=>Oe,invalidateResolvedSubtreeCache:()=>ve,logRequest:()=>ke,parseToJson:()=>ue,requestResolvedSubtree:()=>de,resolveSpec:()=>pe,setMutatedRequest:()=>Ce,setRequest:()=>Ae,setResponse:()=>Se,setScheme:()=>Ne,updateEmptyParamInclusion:()=>we,updateJsonSpec:()=>le,updateResolved:()=>ie,updateResolvedSubtree:()=>ye,updateSpec:()=>ae,updateUrl:()=>se,validateParams:()=>be});var r=n(58309),o=n.n(r),a=n(97606),i=n.n(a),s=n(96718),l=n.n(s),u=n(24282),c=n.n(u),p=n(2250),f=n.n(p),h=n(6226),d=n.n(h),m=n(14418),g=n.n(m),y=n(3665),v=n.n(y),b=n(11882),w=n.n(b),E=n(86),x=n.n(E),_=n(28222),S=n.n(_),A=n(76986),C=n.n(A),k=n(70586),O=n.n(k),j=n(1272),T=n(43393),I=n(84564),N=n.n(I),P=n(7710),R=n(47037),M=n.n(R),D=n(23279),L=n.n(D),B=n(36968),F=n.n(B),z=n(90242);const U="spec_update_spec",q="spec_update_url",$="spec_update_json",V="spec_update_param",W="spec_update_empty_param_inclusion",H="spec_validate_param",J="spec_set_response",K="spec_set_request",G="spec_set_mutated_request",Z="spec_log_request",Y="spec_clear_response",Q="spec_clear_request",X="spec_clear_validate_param",ee="spec_update_operation_meta_value",te="spec_update_resolved",ne="spec_update_resolved_subtree",re="set_scheme",oe=e=>M()(e)?e:"";function ae(e){const t=oe(e).replace(/\t/g," ");if("string"==typeof e)return{type:U,payload:t}}function ie(e){return{type:te,payload:e}}function se(e){return{type:q,payload:e}}function le(e){return{type:$,payload:e}}const ue=e=>t=>{let{specActions:n,specSelectors:r,errActions:o}=t,{specStr:a}=r,i=null;try{e=e||a(),o.clear({source:"parser"}),i=j.ZP.load(e,{schema:j.A8})}catch(e){return console.error(e),o.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&"object"==typeof i?n.updateJsonSpec(i):{}};let ce=!1;const pe=(e,t)=>n=>{let{specActions:r,specSelectors:a,errActions:s,fn:{fetch:u,resolve:c,AST:p={}},getConfigs:f}=n;ce||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),ce=!0);const{modelPropertyMacro:h,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}=f();void 0===e&&(e=a.specJson()),void 0===t&&(t=a.url());let y=p.getLineNumberForPath?p.getLineNumberForPath:()=>{},v=a.specStr();return c({fetch:u,spec:e,baseDoc:t,modelPropertyMacro:h,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}).then((e=>{let{spec:t,errors:n}=e;if(s.clear({type:"thrown"}),o()(n)&&n.length>0){let e=i()(n).call(n,(e=>(console.error(e),e.line=e.fullPath?y(v,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",l()(e,"message",{enumerable:!0,value:e.message}),e)));s.newThrownErrBatch(e)}return r.updateResolved(t)}))};let fe=[];const he=L()((async()=>{const e=fe.system;if(!e)return void console.error("debResolveSubtrees: don't have a system to operate on, aborting.");const{errActions:t,errSelectors:n,fn:{resolveSubtree:r,fetch:a,AST:s={}},specSelectors:u,specActions:p}=e;if(!r)return void console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.");let h=s.getLineNumberForPath?s.getLineNumberForPath:()=>{};const m=u.specStr(),{modelPropertyMacro:y,parameterMacro:b,requestInterceptor:w,responseInterceptor:E}=e.getConfigs();try{var x=await c()(fe).call(fe,(async(e,s)=>{const{resultMap:c,specWithCurrentSubtrees:p}=await e,{errors:x,spec:_}=await r(p,s,{baseDoc:u.url(),modelPropertyMacro:y,parameterMacro:b,requestInterceptor:w,responseInterceptor:E});if(n.allErrors().size&&t.clearBy((e=>{var t;return"thrown"!==e.get("type")||"resolver"!==e.get("source")||!f()(t=e.get("fullPath")).call(t,((e,t)=>e===s[t]||void 0===s[t]))})),o()(x)&&x.length>0){let e=i()(x).call(x,(e=>(e.line=e.fullPath?h(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",l()(e,"message",{enumerable:!0,value:e.message}),e)));t.newThrownErrBatch(e)}var S,A;_&&u.isOAS3()&&"components"===s[0]&&"securitySchemes"===s[1]&&await d().all(i()(S=g()(A=v()(_)).call(A,(e=>"openIdConnect"===e.type))).call(S,(async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:w,responseInterceptor:E};try{const n=await a(t);n instanceof Error||n.status>=400?console.error(n.statusText+" "+t.url):e.openIdConnectData=JSON.parse(n.text)}catch(e){console.error(e)}})));return F()(c,s,_),F()(p,s,_),{resultMap:c,specWithCurrentSubtrees:p}}),d().resolve({resultMap:(u.specResolvedSubtree([])||(0,T.Map)()).toJS(),specWithCurrentSubtrees:u.specJson().toJS()}));delete fe.system,fe=[]}catch(e){console.error(e)}p.updateResolvedSubtree([],x.resultMap)}),35),de=e=>t=>{var n;w()(n=i()(fe).call(fe,(e=>e.join("@@")))).call(n,e.join("@@"))>-1||(fe.push(e),fe.system=t,he())};function me(e,t,n,r,o){return{type:V,payload:{path:e,value:r,paramName:t,paramIn:n,isXml:o}}}function ge(e,t,n,r){return{type:V,payload:{path:e,param:t,value:n,isXml:r}}}const ye=(e,t)=>({type:ne,payload:{path:e,value:t}}),ve=()=>({type:ne,payload:{path:[],value:(0,T.Map)()}}),be=(e,t)=>({type:H,payload:{pathMethod:e,isOAS3:t}}),we=(e,t,n,r)=>({type:W,payload:{pathMethod:e,paramName:t,paramIn:n,includeEmptyValue:r}});function Ee(e){return{type:X,payload:{pathMethod:e}}}function xe(e,t){return{type:ee,payload:{path:e,value:t,key:"consumes_value"}}}function _e(e,t){return{type:ee,payload:{path:e,value:t,key:"produces_value"}}}const Se=(e,t,n)=>({payload:{path:e,method:t,res:n},type:J}),Ae=(e,t,n)=>({payload:{path:e,method:t,req:n},type:K}),Ce=(e,t,n)=>({payload:{path:e,method:t,req:n},type:G}),ke=e=>({payload:e,type:Z}),Oe=e=>t=>{let{fn:n,specActions:r,specSelectors:a,getConfigs:s,oas3Selectors:l}=t,{pathName:u,method:c,operation:p}=e,{requestInterceptor:f,responseInterceptor:h}=s(),d=p.toJS();var m,y;p&&p.get("parameters")&&x()(m=g()(y=p.get("parameters")).call(y,(e=>e&&!0===e.get("allowEmptyValue")))).call(m,(t=>{if(a.parameterInclusionSettingFor([u,c],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};const n=(0,z.cz)(t,e.parameters);(!n||n&&0===n.size)&&(e.parameters[t.get("name")]="")}}));if(e.contextUrl=N()(a.url()).toString(),d&&d.operationId?e.operationId=d.operationId:d&&u&&c&&(e.operationId=n.opId(d,u,c)),a.isOAS3()){const t=`${u}:${c}`;e.server=l.selectedServer(t)||l.selectedServer();const n=l.serverVariables({server:e.server,namespace:t}).toJS(),r=l.serverVariables({server:e.server}).toJS();e.serverVariables=S()(n).length?n:r,e.requestContentType=l.requestContentType(u,c),e.responseContentType=l.responseContentType(u,c)||"*/*";const a=l.requestBodyValue(u,c),s=l.requestBodyInclusionSetting(u,c);var v;if(a&&a.toJS)e.requestBody=g()(v=i()(a).call(a,(e=>T.Map.isMap(e)?e.get("value"):e))).call(v,((e,t)=>(o()(e)?0!==e.length:!(0,z.O2)(e))||s.get(t))).toJS();else e.requestBody=a}let b=C()({},e);b=n.buildRequest(b),r.setRequest(e.pathName,e.method,b);e.requestInterceptor=async t=>{let n=await f.apply(void 0,[t]),o=C()({},n);return r.setMutatedRequest(e.pathName,e.method,o),n},e.responseInterceptor=h;const w=O()();return n.execute(e).then((t=>{t.duration=O()()-w,r.setResponse(e.pathName,e.method,t)})).catch((t=>{"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),r.setResponse(e.pathName,e.method,{error:!0,err:(0,P.serializeError)(t)})}))},je=function(){let{path:e,method:t,...n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{let{fn:{fetch:o},specSelectors:a,specActions:i}=r,s=a.specJsonWithResolvedSubtrees().toJS(),l=a.operationScheme(e,t),{requestContentType:u,responseContentType:c}=a.contentTypeValues([e,t]).toJS(),p=/xml/i.test(u),f=a.parameterValues([e,t],p).toJS();return i.executeRequest({...n,fetch:o,spec:s,pathName:e,method:t,parameters:f,requestContentType:u,scheme:l,responseContentType:c})}};function Te(e,t){return{type:Y,payload:{path:e,method:t}}}function Ie(e,t){return{type:Q,payload:{path:e,method:t}}}function Ne(e,t,n){return{type:re,payload:{scheme:e,path:t,method:n}}}},37038:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(20032),o=n(51228),a=n(33881),i=n(77508);function s(){return{statePlugins:{spec:{wrapActions:i,reducers:r.default,actions:o,selectors:a}}}}},20032:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>d});var r=n(24282),o=n.n(r),a=n(97606),i=n.n(a),s=n(76986),l=n.n(s),u=n(43393),c=n(90242),p=n(27504),f=n(33881),h=n(51228);const d={[h.UPDATE_SPEC]:(e,t)=>"string"==typeof t.payload?e.set("spec",t.payload):e,[h.UPDATE_URL]:(e,t)=>e.set("url",t.payload+""),[h.UPDATE_JSON]:(e,t)=>e.set("json",(0,c.oG)(t.payload)),[h.UPDATE_RESOLVED]:(e,t)=>e.setIn(["resolved"],(0,c.oG)(t.payload)),[h.UPDATE_RESOLVED_SUBTREE]:(e,t)=>{const{value:n,path:r}=t.payload;return e.setIn(["resolvedSubtrees",...r],(0,c.oG)(n))},[h.UPDATE_PARAM]:(e,t)=>{let{payload:n}=t,{path:r,paramName:o,paramIn:a,param:i,value:s,isXml:l}=n,u=i?(0,c.V9)(i):`${a}.${o}`;const p=l?"value_xml":"value";return e.setIn(["meta","paths",...r,"parameters",u,p],s)},[h.UPDATE_EMPTY_PARAM_INCLUSION]:(e,t)=>{let{payload:n}=t,{pathMethod:r,paramName:o,paramIn:a,includeEmptyValue:i}=n;if(!o||!a)return console.warn("Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey."),e;const s=`${a}.${o}`;return e.setIn(["meta","paths",...r,"parameter_inclusions",s],i)},[h.VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n,isOAS3:r}}=t;const a=(0,f.specJsonWithResolvedSubtrees)(e).getIn(["paths",...n]),i=(0,f.parameterValues)(e,n).toJS();return e.updateIn(["meta","paths",...n,"parameters"],(0,u.fromJS)({}),(t=>{var s;return o()(s=a.get("parameters",(0,u.List)())).call(s,((t,o)=>{const a=(0,c.cz)(o,i),s=(0,f.parameterInclusionSettingFor)(e,n,o.get("name"),o.get("in")),l=(0,c.Ik)(o,a,{bypassRequiredCheck:s,isOAS3:r});return t.setIn([(0,c.V9)(o),"errors"],(0,u.fromJS)(l))}),t)}))},[h.CLEAR_VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n}}=t;return e.updateIn(["meta","paths",...n,"parameters"],(0,u.fromJS)([]),(e=>i()(e).call(e,(e=>e.set("errors",(0,u.fromJS)([]))))))},[h.SET_RESPONSE]:(e,t)=>{let n,{payload:{res:r,path:o,method:a}}=t;n=r.error?l()({error:!0,name:r.err.name,message:r.err.message,statusCode:r.err.statusCode},r.err.response):r,n.headers=n.headers||{};let i=e.setIn(["responses",o,a],(0,c.oG)(n));return p.Z.Blob&&r.data instanceof p.Z.Blob&&(i=i.setIn(["responses",o,a,"text"],r.data)),i},[h.SET_REQUEST]:(e,t)=>{let{payload:{req:n,path:r,method:o}}=t;return e.setIn(["requests",r,o],(0,c.oG)(n))},[h.SET_MUTATED_REQUEST]:(e,t)=>{let{payload:{req:n,path:r,method:o}}=t;return e.setIn(["mutatedRequests",r,o],(0,c.oG)(n))},[h.UPDATE_OPERATION_META_VALUE]:(e,t)=>{let{payload:{path:n,value:r,key:o}}=t,a=["paths",...n],i=["meta","paths",...n];return e.getIn(["json",...a])||e.getIn(["resolved",...a])||e.getIn(["resolvedSubtrees",...a])?e.setIn([...i,o],(0,u.fromJS)(r)):e},[h.CLEAR_RESPONSE]:(e,t)=>{let{payload:{path:n,method:r}}=t;return e.deleteIn(["responses",n,r])},[h.CLEAR_REQUEST]:(e,t)=>{let{payload:{path:n,method:r}}=t;return e.deleteIn(["requests",n,r])},[h.SET_SCHEME]:(e,t)=>{let{payload:{scheme:n,path:r,method:o}}=t;return r&&o?e.setIn(["scheme",r,o],n):r||o?void 0:e.setIn(["scheme","_defaultScheme"],n)}}},33881:(e,t,n)=>{"use strict";n.r(t),n.d(t,{allowTryItOutFor:()=>pe,basePath:()=>Y,canExecuteScheme:()=>Ce,consumes:()=>W,consumesOptionsFor:()=>Se,contentTypeValues:()=>Ee,currentProducesFor:()=>xe,definitions:()=>Z,externalDocs:()=>z,findDefinition:()=>G,getOAS3RequiredRequestBodyContentType:()=>je,getParameter:()=>ge,hasHost:()=>ye,host:()=>Q,info:()=>F,isMediaTypeSchemaPropertiesEqual:()=>Te,isOAS3:()=>B,lastError:()=>O,mutatedRequestFor:()=>ce,mutatedRequests:()=>se,operationScheme:()=>Ae,operationWithMeta:()=>me,operations:()=>V,operationsWithRootInherited:()=>ee,operationsWithTags:()=>re,parameterInclusionSettingFor:()=>he,parameterValues:()=>ve,parameterWithMeta:()=>de,parameterWithMetaByIdentity:()=>fe,parametersIncludeIn:()=>be,parametersIncludeType:()=>we,paths:()=>$,produces:()=>H,producesOptionsFor:()=>_e,requestFor:()=>ue,requests:()=>ie,responseFor:()=>le,responses:()=>ae,schemes:()=>X,security:()=>J,securityDefinitions:()=>K,semver:()=>q,spec:()=>L,specJson:()=>N,specJsonWithResolvedSubtrees:()=>D,specResolved:()=>P,specResolvedSubtree:()=>R,specSource:()=>I,specStr:()=>T,tagDetails:()=>ne,taggedOperations:()=>oe,tags:()=>te,url:()=>j,validateBeforeExecute:()=>Oe,validationErrors:()=>ke,version:()=>U});var r=n(24278),o=n.n(r),a=n(86),i=n.n(a),s=n(11882),l=n.n(s),u=n(97606),c=n.n(u),p=n(14418),f=n.n(p),h=n(51679),d=n.n(h),m=n(24282),g=n.n(m),y=n(2578),v=n.n(y),b=n(92039),w=n.n(b),E=n(58309),x=n.n(E),_=n(20573),S=n(90242),A=n(43393);const C=["get","put","post","delete","options","head","patch","trace"],k=e=>e||(0,A.Map)(),O=(0,_.P1)(k,(e=>e.get("lastError"))),j=(0,_.P1)(k,(e=>e.get("url"))),T=(0,_.P1)(k,(e=>e.get("spec")||"")),I=(0,_.P1)(k,(e=>e.get("specSource")||"not-editor")),N=(0,_.P1)(k,(e=>e.get("json",(0,A.Map)()))),P=(0,_.P1)(k,(e=>e.get("resolved",(0,A.Map)()))),R=(e,t)=>e.getIn(["resolvedSubtrees",...t],void 0),M=(e,t)=>A.Map.isMap(e)&&A.Map.isMap(t)?t.get("$$ref")?t:(0,A.OrderedMap)().mergeWith(M,e,t):t,D=(0,_.P1)(k,(e=>(0,A.OrderedMap)().mergeWith(M,e.get("json"),e.get("resolvedSubtrees")))),L=e=>N(e),B=(0,_.P1)(L,(()=>!1)),F=(0,_.P1)(L,(e=>Ie(e&&e.get("info")))),z=(0,_.P1)(L,(e=>Ie(e&&e.get("externalDocs")))),U=(0,_.P1)(F,(e=>e&&e.get("version"))),q=(0,_.P1)(U,(e=>{var t;return o()(t=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e)).call(t,1)})),$=(0,_.P1)(D,(e=>e.get("paths"))),V=(0,_.P1)($,(e=>{if(!e||e.size<1)return(0,A.List)();let t=(0,A.List)();return e&&i()(e)?(i()(e).call(e,((e,n)=>{if(!e||!i()(e))return{};i()(e).call(e,((e,r)=>{l()(C).call(C,r)<0||(t=t.push((0,A.fromJS)({path:n,method:r,operation:e,id:`${r}-${n}`})))}))})),t):(0,A.List)()})),W=(0,_.P1)(L,(e=>(0,A.Set)(e.get("consumes")))),H=(0,_.P1)(L,(e=>(0,A.Set)(e.get("produces")))),J=(0,_.P1)(L,(e=>e.get("security",(0,A.List)()))),K=(0,_.P1)(L,(e=>e.get("securityDefinitions"))),G=(e,t)=>{const n=e.getIn(["resolvedSubtrees","definitions",t],null),r=e.getIn(["json","definitions",t],null);return n||r||null},Z=(0,_.P1)(L,(e=>{const t=e.get("definitions");return A.Map.isMap(t)?t:(0,A.Map)()})),Y=(0,_.P1)(L,(e=>e.get("basePath"))),Q=(0,_.P1)(L,(e=>e.get("host"))),X=(0,_.P1)(L,(e=>e.get("schemes",(0,A.Map)()))),ee=(0,_.P1)(V,W,H,((e,t,n)=>c()(e).call(e,(e=>e.update("operation",(e=>{if(e){if(!A.Map.isMap(e))return;return e.withMutations((e=>(e.get("consumes")||e.update("consumes",(e=>(0,A.Set)(e).merge(t))),e.get("produces")||e.update("produces",(e=>(0,A.Set)(e).merge(n))),e)))}return(0,A.Map)()})))))),te=(0,_.P1)(L,(e=>{const t=e.get("tags",(0,A.List)());return A.List.isList(t)?f()(t).call(t,(e=>A.Map.isMap(e))):(0,A.List)()})),ne=(e,t)=>{var n;let r=te(e)||(0,A.List)();return d()(n=f()(r).call(r,A.Map.isMap)).call(n,(e=>e.get("name")===t),(0,A.Map)())},re=(0,_.P1)(ee,te,((e,t)=>g()(e).call(e,((e,t)=>{let n=(0,A.Set)(t.getIn(["operation","tags"]));return n.count()<1?e.update("default",(0,A.List)(),(e=>e.push(t))):g()(n).call(n,((e,n)=>e.update(n,(0,A.List)(),(e=>e.push(t)))),e)}),g()(t).call(t,((e,t)=>e.set(t.get("name"),(0,A.List)())),(0,A.OrderedMap)())))),oe=e=>t=>{var n;let{getConfigs:r}=t,{tagsSorter:o,operationsSorter:a}=r();return c()(n=re(e).sortBy(((e,t)=>t),((e,t)=>{let n="function"==typeof o?o:S.wh.tagsSorter[o];return n?n(e,t):null}))).call(n,((t,n)=>{let r="function"==typeof a?a:S.wh.operationsSorter[a],o=r?v()(t).call(t,r):t;return(0,A.Map)({tagDetails:ne(e,n),operations:o})}))},ae=(0,_.P1)(k,(e=>e.get("responses",(0,A.Map)()))),ie=(0,_.P1)(k,(e=>e.get("requests",(0,A.Map)()))),se=(0,_.P1)(k,(e=>e.get("mutatedRequests",(0,A.Map)()))),le=(e,t,n)=>ae(e).getIn([t,n],null),ue=(e,t,n)=>ie(e).getIn([t,n],null),ce=(e,t,n)=>se(e).getIn([t,n],null),pe=()=>!0,fe=(e,t,n)=>{const r=D(e).getIn(["paths",...t,"parameters"],(0,A.OrderedMap)()),o=e.getIn(["meta","paths",...t,"parameters"],(0,A.OrderedMap)()),a=c()(r).call(r,(e=>{const t=o.get(`${n.get("in")}.${n.get("name")}`),r=o.get(`${n.get("in")}.${n.get("name")}.hash-${n.hashCode()}`);return(0,A.OrderedMap)().merge(e,t,r)}));return d()(a).call(a,(e=>e.get("in")===n.get("in")&&e.get("name")===n.get("name")),(0,A.OrderedMap)())},he=(e,t,n,r)=>{const o=`${r}.${n}`;return e.getIn(["meta","paths",...t,"parameter_inclusions",o],!1)},de=(e,t,n,r)=>{const o=D(e).getIn(["paths",...t,"parameters"],(0,A.OrderedMap)()),a=d()(o).call(o,(e=>e.get("in")===r&&e.get("name")===n),(0,A.OrderedMap)());return fe(e,t,a)},me=(e,t,n)=>{var r;const o=D(e).getIn(["paths",t,n],(0,A.OrderedMap)()),a=e.getIn(["meta","paths",t,n],(0,A.OrderedMap)()),i=c()(r=o.get("parameters",(0,A.List)())).call(r,(r=>fe(e,[t,n],r)));return(0,A.OrderedMap)().merge(o,a).set("parameters",i)};function ge(e,t,n,r){t=t||[];let o=e.getIn(["meta","paths",...t,"parameters"],(0,A.fromJS)([]));return d()(o).call(o,(e=>A.Map.isMap(e)&&e.get("name")===n&&e.get("in")===r))||(0,A.Map)()}const ye=(0,_.P1)(L,(e=>{const t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function ve(e,t,n){t=t||[];let r=me(e,...t).get("parameters",(0,A.List)());return g()(r).call(r,((e,t)=>{let r=n&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set((0,S.V9)(t,{allowHashes:!1}),r)}),(0,A.fromJS)({}))}function be(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(A.List.isList(e))return w()(e).call(e,(e=>A.Map.isMap(e)&&e.get("in")===t))}function we(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(A.List.isList(e))return w()(e).call(e,(e=>A.Map.isMap(e)&&e.get("type")===t))}function Ee(e,t){t=t||[];let n=D(e).getIn(["paths",...t],(0,A.fromJS)({})),r=e.getIn(["meta","paths",...t],(0,A.fromJS)({})),o=xe(e,t);const a=n.get("parameters")||new A.List,i=r.get("consumes_value")?r.get("consumes_value"):we(a,"file")?"multipart/form-data":we(a,"formData")?"application/x-www-form-urlencoded":void 0;return(0,A.fromJS)({requestContentType:i,responseContentType:o})}function xe(e,t){t=t||[];const n=D(e).getIn(["paths",...t],null);if(null===n)return;const r=e.getIn(["meta","paths",...t,"produces_value"],null),o=n.getIn(["produces",0],null);return r||o||"application/json"}function _e(e,t){t=t||[];const n=D(e),r=n.getIn(["paths",...t],null);if(null===r)return;const[o]=t,a=r.get("produces",null),i=n.getIn(["paths",o,"produces"],null),s=n.getIn(["produces"],null);return a||i||s}function Se(e,t){t=t||[];const n=D(e),r=n.getIn(["paths",...t],null);if(null===r)return;const[o]=t,a=r.get("consumes",null),i=n.getIn(["paths",o,"consumes"],null),s=n.getIn(["consumes"],null);return a||i||s}const Ae=(e,t,n)=>{let r=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),o=x()(r)?r[1]:null;return e.getIn(["scheme",t,n])||e.getIn(["scheme","_defaultScheme"])||o||""},Ce=(e,t,n)=>{var r;return l()(r=["http","https"]).call(r,Ae(e,t,n))>-1},ke=(e,t)=>{t=t||[];let n=e.getIn(["meta","paths",...t,"parameters"],(0,A.fromJS)([]));const r=[];return i()(n).call(n,(e=>{let t=e.get("errors");t&&t.count()&&i()(t).call(t,(e=>r.push(e)))})),r},Oe=(e,t)=>0===ke(e,t).length,je=(e,t)=>{var n;let r={requestBody:!1,requestContentType:{}},o=e.getIn(["resolvedSubtrees","paths",...t,"requestBody"],(0,A.fromJS)([]));return o.size<1||(o.getIn(["required"])&&(r.requestBody=o.getIn(["required"])),i()(n=o.getIn(["content"]).entrySeq()).call(n,(e=>{const t=e[0];if(e[1].getIn(["schema","required"])){const n=e[1].getIn(["schema","required"]).toJS();r.requestContentType[t]=n}}))),r},Te=(e,t,n,r)=>{if((n||r)&&n===r)return!0;let o=e.getIn(["resolvedSubtrees","paths",...t,"requestBody","content"],(0,A.fromJS)([]));if(o.size<2||!n||!r)return!1;let a=o.getIn([n,"schema","properties"],(0,A.fromJS)([])),i=o.getIn([r,"schema","properties"],(0,A.fromJS)([]));return!!a.equals(i)};function Ie(e){return A.Map.isMap(e)?e:new A.Map}},77508:(e,t,n)=>{"use strict";n.r(t),n.d(t,{executeRequest:()=>p,updateJsonSpec:()=>c,updateSpec:()=>u,validateParams:()=>f});var r=n(28222),o=n.n(r),a=n(86),i=n.n(a),s=n(27361),l=n.n(s);const u=(e,t)=>{let{specActions:n}=t;return function(){e(...arguments),n.parseToJson(...arguments)}},c=(e,t)=>{let{specActions:n}=t;return function(){for(var t=arguments.length,r=new Array(t),a=0;a{l()(u,[e]).$ref&&n.requestResolvedSubtree(["paths",e])})),n.requestResolvedSubtree(["components","securitySchemes"])}},p=(e,t)=>{let{specActions:n}=t;return t=>(n.logRequest(t),e(t))},f=(e,t)=>{let{specSelectors:n}=t;return t=>e(t,n.isOAS3())}},34852:(e,t,n)=>{"use strict";n.r(t),n.d(t,{loaded:()=>r});const r=(e,t)=>function(){e(...arguments);const n=t.getConfigs().withCredentials;void 0!==n&&(t.fn.fetch.withCredentials="string"==typeof n?"true"===n:!!n)}},74370:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>rn});var r={};n.r(r),n.d(r,{JsonPatchError:()=>G,_areEquals:()=>ae,applyOperation:()=>ee,applyPatch:()=>te,applyReducer:()=>ne,deepClone:()=>Z,getValueByPointer:()=>X,validate:()=>oe,validator:()=>re});var o={};n.r(o),n.d(o,{compare:()=>he,generate:()=>pe,observe:()=>ce,unobserve:()=>ue});var a={};n.r(a),n.d(a,{cookie:()=>Ft,header:()=>Bt,path:()=>Mt,query:()=>Dt});var i=n(58826),s=n.n(i);const l="application/json, application/yaml";function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{requestInterceptor:n,responseInterceptor:r}=t,o=e.withCredentials?"include":"same-origin";return t=>e({url:t,loadSpec:!0,requestInterceptor:n,responseInterceptor:r,headers:{Accept:l},credentials:o}).then((e=>e.body))}n(31905);var c=n(80129),p=n.n(c),f=n(1272);const h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,{FormData:d,Blob:m,File:g}=h,y=e=>":/?#[]@!$&'()*+,;=".indexOf(e)>-1,v=e=>/^[a-z0-9\-._~]+$/i.test(e);function b(e){let{escape:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return"number"==typeof e&&(e=e.toString()),"string"==typeof e&&e.length&&t?n?JSON.parse(e):[...e].map((e=>{if(v(e))return e;if(y(e)&&"unsafe"===t)return e;const n=new TextEncoder;return Array.from(n.encode(e)).map((e=>`0${e.toString(16).toUpperCase()}`.slice(-2))).map((e=>`%${e}`)).join("")})).join(""):e}function w(e){const{value:t}=e;return Array.isArray(t)?function(e){let{key:t,value:n,style:r,explode:o,escape:a}=e;const i=e=>b(e,{escape:a});if("simple"===r)return n.map((e=>i(e))).join(",");if("label"===r)return`.${n.map((e=>i(e))).join(".")}`;if("matrix"===r)return n.map((e=>i(e))).reduce(((e,n)=>!e||o?`${e||""};${t}=${n}`:`${e},${n}`),"");if("form"===r){const e=o?`&${t}=`:",";return n.map((e=>i(e))).join(e)}if("spaceDelimited"===r){const e=o?`${t}=`:"";return n.map((e=>i(e))).join(` ${e}`)}if("pipeDelimited"===r){const e=o?`${t}=`:"";return n.map((e=>i(e))).join(`|${e}`)}return}(e):"object"==typeof t?function(e){let{key:t,value:n,style:r,explode:o,escape:a}=e;const i=e=>b(e,{escape:a}),s=Object.keys(n);if("simple"===r)return s.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e},`:""}${t}${o?"=":","}${r}`}),"");if("label"===r)return s.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e}.`:"."}${t}${o?"=":"."}${r}`}),"");if("matrix"===r&&o)return s.reduce(((e,t)=>`${e?`${e};`:";"}${t}=${i(n[t])}`),"");if("matrix"===r)return s.reduce(((e,r)=>{const o=i(n[r]);return`${e?`${e},`:`;${t}=`}${r},${o}`}),"");if("form"===r)return s.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e}${o?"&":","}`:""}${t}${o?"=":","}${r}`}),"");return}(e):function(e){let{key:t,value:n,style:r,escape:o}=e;const a=e=>b(e,{escape:o});if("simple"===r)return a(n);if("label"===r)return`.${a(n)}`;if("matrix"===r)return`;${t}=${a(n)}`;if("form"===r)return a(n);if("deepObject"===r)return a(n,{},!0);return}(e)}const E=(e,t)=>{t.body=e},x={serializeRes:A,mergeInQueryOrForm:R};async function _(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"object"==typeof e&&(t=e,e=t.url),t.headers=t.headers||{},x.mergeInQueryOrForm(t),t.headers&&Object.keys(t.headers).forEach((e=>{const n=t.headers[e];"string"==typeof n&&(t.headers[e]=n.replace(/\n+/g," "))})),t.requestInterceptor&&(t=await t.requestInterceptor(t)||t);const n=t.headers["content-type"]||t.headers["Content-Type"];let r;/multipart\/form-data/i.test(n)&&t.body instanceof d&&(delete t.headers["content-type"],delete t.headers["Content-Type"]);try{r=await(t.userFetch||fetch)(t.url,t),r=await x.serializeRes(r,e,t),t.responseInterceptor&&(r=await t.responseInterceptor(r)||r)}catch(e){if(!r)throw e;const t=new Error(r.statusText||`response status is ${r.status}`);throw t.status=r.status,t.statusCode=r.status,t.responseError=e,t}if(!r.ok){const e=new Error(r.statusText||`response status is ${r.status}`);throw e.status=r.status,e.statusCode=r.status,e.response=r,e}return r}const S=function(){return/(json|xml|yaml|text)\b/.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")};function A(e,t){let{loadSpec:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r={ok:e.ok,url:e.url||t,status:e.status,statusText:e.statusText,headers:C(e.headers)},o=r.headers["content-type"],a=n||S(o);return(a?e.text:e.blob||e.buffer).call(e).then((e=>{if(r.text=e,r.data=e,a)try{const t=function(e,t){return t&&(0===t.indexOf("application/json")||t.indexOf("+json")>0)?JSON.parse(e):f.ZP.load(e)}(e,o);r.body=t,r.obj=t}catch(e){r.parseError=e}return r}))}function C(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return"function"!=typeof e.entries?{}:Array.from(e.entries()).reduce(((e,t)=>{let[n,r]=t;return e[n]=function(e){return e.includes(", ")?e.split(", "):e}(r),e}),{})}function k(e,t){return t||"undefined"==typeof navigator||(t=navigator),t&&"ReactNative"===t.product?!(!e||"object"!=typeof e||"string"!=typeof e.uri):void 0!==g&&e instanceof g||(void 0!==m&&e instanceof m||(!!ArrayBuffer.isView(e)||null!==e&&"object"==typeof e&&"function"==typeof e.pipe))}function O(e,t){return Array.isArray(e)&&e.some((e=>k(e,t)))}const j={form:",",spaceDelimited:"%20",pipeDelimited:"|"},T={csv:",",ssv:"%20",tsv:"%09",pipes:"|"};function I(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{collectionFormat:r,allowEmptyValue:o,serializationOption:a,encoding:i}=t,s="object"!=typeof t||Array.isArray(t)?t:t.value,l=n?e=>e.toString():e=>encodeURIComponent(e),u=l(e);if(void 0===s&&o)return[[u,""]];if(k(s)||O(s))return[[u,s]];if(a)return N(e,s,n,a);if(i){if([typeof i.style,typeof i.explode,typeof i.allowReserved].some((e=>"undefined"!==e))){const{style:t,explode:r,allowReserved:o}=i;return N(e,s,n,{style:t,explode:r,allowReserved:o})}if(i.contentType){if("application/json"===i.contentType){return[[u,l("string"==typeof s?s:JSON.stringify(s))]]}return[[u,l(s.toString())]]}return"object"!=typeof s?[[u,l(s)]]:Array.isArray(s)&&s.every((e=>"object"!=typeof e))?[[u,s.map(l).join(",")]]:[[u,l(JSON.stringify(s))]]}return"object"!=typeof s?[[u,l(s)]]:Array.isArray(s)?"multi"===r?[[u,s.map(l)]]:[[u,s.map(l).join(T[r||"csv"])]]:[[u,""]]}function N(e,t,n,r){const o=r.style||"form",a=void 0===r.explode?"form"===o:r.explode,i=!n&&(r&&r.allowReserved?"unsafe":"reserved"),s=e=>b(e,{escape:i}),l=n?e=>e:e=>b(e,{escape:i});return"object"!=typeof t?[[l(e),s(t)]]:Array.isArray(t)?a?[[l(e),t.map(s)]]:[[l(e),t.map(s).join(j[o])]]:"deepObject"===o?Object.keys(t).map((n=>[l(`${e}[${n}]`),s(t[n])])):a?Object.keys(t).map((e=>[l(e),s(t[e])])):[[l(e),Object.keys(t).map((e=>[`${l(e)},${s(t[e])}`])).join(",")]]}function P(e){const t=Object.keys(e).reduce(((t,n)=>{for(const[r,o]of I(n,e[n]))t[r]=o;return t}),{});return p().stringify(t,{encode:!1,indices:!1})||""}function R(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{url:t="",query:n,form:r}=e;if(r){const t=Object.keys(r).some((e=>{const{value:t}=r[e];return k(t)||O(t)})),n=e.headers["content-type"]||e.headers["Content-Type"];if(t||/multipart\/form-data/i.test(n)){const t=(o=e.form,Object.entries(o).reduce(((e,t)=>{let[n,r]=t;for(const[t,o]of I(n,r,!0))if(Array.isArray(o))for(const n of o)if(ArrayBuffer.isView(n)){const r=new m([n]);e.append(t,r)}else e.append(t,n);else if(ArrayBuffer.isView(o)){const n=new m([o]);e.append(t,n)}else e.append(t,o);return e}),new d));E(t,e)}else e.body=P(r);delete e.form}var o;if(n){const[r,o]=t.split("?");let a="";if(o){const e=p().parse(o);Object.keys(n).forEach((t=>delete e[t])),a=p().stringify(e,{encode:!0})}const i=function(){for(var e=arguments.length,t=new Array(e),n=0;ne)).join("&");return r?`?${r}`:""}(a,P(n));e.url=r+i,delete e.query}return e}const M=e=>{const{baseDoc:t,url:n}=e;return t||n||""},D=e=>{const{fetch:t,http:n}=e;return t||n||_};var L,B=(L=function(e,t){return L=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},L(e,t)},function(e,t){function n(){this.constructor=e}L(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),F=Object.prototype.hasOwnProperty;function z(e,t){return F.call(e,t)}function U(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n=48&&t<=57))return!1;n++}return!0}function V(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function W(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function H(e){if(void 0===e)return!0;if(e)if(Array.isArray(e)){for(var t=0,n=e.length;t0&&"constructor"==s[u-1]))throw new TypeError("JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(n&&void 0===p&&(void 0===l[f]?p=s.slice(0,u).join("/"):u==c-1&&(p=t.path),void 0!==p&&h(t,0,e,p)),u++,Array.isArray(l)){if("-"===f)f=l.length;else{if(n&&!$(f))throw new G("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",a,t,e);$(f)&&(f=~~f)}if(u>=c){if(n&&"add"===t.op&&f>l.length)throw new G("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",a,t,e);if(!1===(i=Q[t.op].call(t,l,f,e)).test)throw new G("Test operation failed","TEST_OPERATION_FAILED",a,t,e);return i}}else if(u>=c){if(!1===(i=Y[t.op].call(t,l,f,e)).test)throw new G("Test operation failed","TEST_OPERATION_FAILED",a,t,e);return i}if(l=l[f],n&&u0)throw new G('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,n);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new G("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new G("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&H(e.value))throw new G("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",t,e,n);if(n)if("add"==e.op){var o=e.path.split("/").length,a=r.split("/").length;if(o!==a+1&&o!==a)throw new G("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",t,e,n)}else if("replace"===e.op||"remove"===e.op||"_get"===e.op){if(e.path!==r)throw new G("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",t,e,n)}else if("move"===e.op||"copy"===e.op){var i=oe([{op:"_get",path:e.from,value:void 0}],n);if(i&&"OPERATION_PATH_UNRESOLVABLE"===i.name)throw new G("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",t,e,n)}}function oe(e,t,n){try{if(!Array.isArray(e))throw new G("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(t)te(q(t),q(e),n||!0);else{n=n||re;for(var r=0;r0&&(e.patches=[],e.callback&&e.callback(r)),r}function fe(e,t,n,r,o){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var a=U(t),i=U(e),s=!1,l=i.length-1;l>=0;l--){var u=e[p=i[l]];if(!z(t,p)||void 0===t[p]&&void 0!==u&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(o&&n.push({op:"test",path:r+"/"+V(p),value:q(u)}),n.push({op:"remove",path:r+"/"+V(p)}),s=!0):(o&&n.push({op:"test",path:r,value:e}),n.push({op:"replace",path:r,value:t}),!0);else{var c=t[p];"object"==typeof u&&null!=u&&"object"==typeof c&&null!=c&&Array.isArray(u)===Array.isArray(c)?fe(u,c,n,r+"/"+V(p),o):u!==c&&(!0,o&&n.push({op:"test",path:r+"/"+V(p),value:q(u)}),n.push({op:"replace",path:r+"/"+V(p),value:q(c)}))}}if(s||a.length!=i.length)for(l=0;lvoid 0!==t&&e?e[t]:e),e)},applyPatch:function(e,t,n){if(n=n||{},"merge"===(t=s()(s()({},t),{},{path:t.path&&ye(t.path)})).op){const n=Ie(e,t.path);Object.assign(n,t.value),te(e,[ve(t.path,n)])}else if("mergeDeep"===t.op){const n=Ie(e,t.path),r=me()(n,t.value);e=te(e,[ve(t.path,r)]).newDocument}else if("add"===t.op&&""===t.path&&Ae(t.value)){te(e,Object.keys(t.value).reduce(((e,n)=>(e.push({op:"add",path:`/${ye(n)}`,value:t.value[n]}),e)),[]))}else if("replace"===t.op&&""===t.path){let{value:r}=t;n.allowMetaPatches&&t.meta&&je(t)&&(Array.isArray(t.value)||Ae(t.value))&&(r=s()(s()({},r),t.meta)),e=r}else if(te(e,[t]),n.allowMetaPatches&&t.meta&&je(t)&&(Array.isArray(t.value)||Ae(t.value))){const n=Ie(e,t.path),r=s()(s()({},n),t.meta);te(e,[ve(t.path,r)])}return e},parentPathMatch:function(e,t){if(!Array.isArray(t))return!1;for(let n=0,r=t.length;n(e+"").replace(/~/g,"~0").replace(/\//g,"~1"))).join("/")}`:e}function ve(e,t,n){return{op:"replace",path:e,value:t,meta:n}}function be(e,t,n){return Se(_e(e.filter(je).map((e=>t(e.value,n,e.path)))||[]))}function we(e,t,n){return n=n||[],Array.isArray(e)?e.map(((e,r)=>we(e,t,n.concat(r)))):Ae(e)?Object.keys(e).map((r=>we(e[r],t,n.concat(r)))):t(e,n[n.length-1],n)}function Ee(e,t,n){let r=[];if((n=n||[]).length>0){const o=t(e,n[n.length-1],n);o&&(r=r.concat(o))}if(Array.isArray(e)){const o=e.map(((e,r)=>Ee(e,t,n.concat(r))));o&&(r=r.concat(o))}else if(Ae(e)){const o=Object.keys(e).map((r=>Ee(e[r],t,n.concat(r))));o&&(r=r.concat(o))}return r=_e(r),r}function xe(e){return Array.isArray(e)?e:[e]}function _e(e){return[].concat(...e.map((e=>Array.isArray(e)?_e(e):e)))}function Se(e){return e.filter((e=>void 0!==e))}function Ae(e){return e&&"object"==typeof e}function Ce(e){return e&&"function"==typeof e}function ke(e){if(Te(e)){const{op:t}=e;return"add"===t||"remove"===t||"replace"===t}return!1}function Oe(e){return ke(e)||Te(e)&&"mutation"===e.type}function je(e){return Oe(e)&&("add"===e.op||"replace"===e.op||"merge"===e.op||"mergeDeep"===e.op)}function Te(e){return e&&"object"==typeof e}function Ie(e,t){try{return X(e,t)}catch(e){return console.error(e),{}}}var Ne=n(8575);function Pe(e,t){function n(){Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack;for(var e=arguments.length,n=new Array(e),r=0;r-1&&-1===Le.indexOf(n)||Be.indexOf(r)>-1||Fe.some((e=>r.indexOf(e)>-1))}function Ue(e,t){const[n,r]=e.split("#"),o=Ne.resolve(n||"",t||"");return r?`${o}#${r}`:o}const qe=/^([a-z]+:\/\/|\/\/)/i,$e=Pe("JSONRefError",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),Ve={},We=new WeakMap,He=[e=>"paths"===e[0]&&"responses"===e[3]&&"examples"===e[5],e=>"paths"===e[0]&&"responses"===e[3]&&"content"===e[5]&&"example"===e[7],e=>"paths"===e[0]&&"responses"===e[3]&&"content"===e[5]&&"examples"===e[7]&&"value"===e[9],e=>"paths"===e[0]&&"requestBody"===e[3]&&"content"===e[4]&&"example"===e[6],e=>"paths"===e[0]&&"requestBody"===e[3]&&"content"===e[4]&&"examples"===e[6]&&"value"===e[8],e=>"paths"===e[0]&&"parameters"===e[2]&&"example"===e[4],e=>"paths"===e[0]&&"parameters"===e[3]&&"example"===e[5],e=>"paths"===e[0]&&"parameters"===e[2]&&"examples"===e[4]&&"value"===e[6],e=>"paths"===e[0]&&"parameters"===e[3]&&"examples"===e[5]&&"value"===e[7],e=>"paths"===e[0]&&"parameters"===e[2]&&"content"===e[4]&&"example"===e[6],e=>"paths"===e[0]&&"parameters"===e[2]&&"content"===e[4]&&"examples"===e[6]&&"value"===e[8],e=>"paths"===e[0]&&"parameters"===e[3]&&"content"===e[4]&&"example"===e[7],e=>"paths"===e[0]&&"parameters"===e[3]&&"content"===e[5]&&"examples"===e[7]&&"value"===e[9]],Je={key:"$ref",plugin:(e,t,n,r)=>{const o=r.getInstance(),a=n.slice(0,-1);if(ze(a)||(e=>He.some((t=>t(e))))(a))return;const{baseDoc:i}=r.getContext(n);if("string"!=typeof e)return new $e("$ref: must be a string (JSON-Ref)",{$ref:e,baseDoc:i,fullPath:n});const s=Qe(e),l=s[0],u=s[1]||"";let c,p,f;try{c=i||l?Ze(l,i):null}catch(t){return Ye(t,{pointer:u,$ref:e,basePath:c,fullPath:n})}if(function(e,t,n,r){let o=We.get(r);o||(o={},We.set(r,o));const a=function(e){if(0===e.length)return"";return`/${e.map(ot).join("/")}`}(n),i=`${t||""}#${e}`,s=a.replace(/allOf\/\d+\/?/g,""),l=r.contextTree.get([]).baseDoc;if(t===l&&it(s,e))return!0;let u="";const c=n.some((e=>(u=`${u}/${ot(e)}`,o[u]&&o[u].some((e=>it(e,i)||it(i,e))))));if(c)return!0;return void(o[s]=(o[s]||[]).concat(i))}(u,c,a,r)&&!o.useCircularStructures){const t=Ue(e,c);return e===t?null:ge.replace(n,t)}if(null==c?(f=nt(u),p=r.get(f),void 0===p&&(p=new $e(`Could not resolve reference: ${e}`,{pointer:u,$ref:e,baseDoc:i,fullPath:n}))):(p=Xe(c,u),p=null!=p.__value?p.__value:p.catch((t=>{throw Ye(t,{pointer:u,$ref:e,baseDoc:i,fullPath:n})}))),p instanceof Error)return[ge.remove(n),p];const h=Ue(e,c),d=ge.replace(a,p,{$$ref:h});if(c&&c!==i)return[d,ge.context(a,{baseDoc:c})];try{if(!function(e,t){const n=[e];return t.path.reduce(((e,t)=>(n.push(e[t]),e[t])),e),r(t.value);function r(e){return ge.isObject(e)&&(n.indexOf(e)>=0||Object.keys(e).some((t=>r(e[t]))))}}(r.state,d)||o.useCircularStructures)return d}catch(e){return null}}},Ke=Object.assign(Je,{docCache:Ve,absoluteify:Ze,clearCache:function(e){void 0!==e?delete Ve[e]:Object.keys(Ve).forEach((e=>{delete Ve[e]}))},JSONRefError:$e,wrapError:Ye,getDoc:et,split:Qe,extractFromDoc:Xe,fetchJSON:function(e){return fetch(e,{headers:{Accept:l},loadSpec:!0}).then((e=>e.text())).then((e=>f.ZP.load(e)))},extract:tt,jsonPointerToArray:nt,unescapeJsonPointerToken:rt}),Ge=Ke;function Ze(e,t){if(!qe.test(e)){if(!t)throw new $e(`Tried to resolve a relative URL, without having a basePath. path: '${e}' basePath: '${t}'`);return Ne.resolve(t,e)}return e}function Ye(e,t){let n;return n=e&&e.response&&e.response.body?`${e.response.body.code} ${e.response.body.message}`:e.message,new $e(`Could not resolve reference: ${n}`,t,e)}function Qe(e){return(e+"").split("#")}function Xe(e,t){const n=Ve[e];if(n&&!ge.isPromise(n))try{const e=tt(t,n);return Object.assign(Promise.resolve(e),{__value:e})}catch(e){return Promise.reject(e)}return et(e).then((e=>tt(t,e)))}function et(e){const t=Ve[e];return t?ge.isPromise(t)?t:Promise.resolve(t):(Ve[e]=Ke.fetchJSON(e).then((t=>(Ve[e]=t,t))),Ve[e])}function tt(e,t){const n=nt(e);if(n.length<1)return t;const r=ge.getIn(t,n);if(void 0===r)throw new $e(`Could not resolve pointer: ${e} does not exist in document`,{pointer:e});return r}function nt(e){if("string"!=typeof e)throw new TypeError("Expected a string, got a "+typeof e);return"/"===e[0]&&(e=e.substr(1)),""===e?[]:e.split("/").map(rt)}function rt(e){if("string"!=typeof e)return e;return new URLSearchParams(`=${e.replace(/~1/g,"/").replace(/~0/g,"~")}`).get("")}function ot(e){return new URLSearchParams([["",e.replace(/~/g,"~0").replace(/\//g,"~1")]]).toString().slice(1)}const at=e=>!e||"/"===e||"#"===e;function it(e,t){if(at(t))return!0;const n=e.charAt(t.length),r=t.slice(-1);return 0===e.indexOf(t)&&(!n||"/"===n||"#"===n)&&"#"!==r}const st={key:"allOf",plugin:(e,t,n,r,o)=>{if(o.meta&&o.meta.$$ref)return;const a=n.slice(0,-1);if(ze(a))return;if(!Array.isArray(e)){const e=new TypeError("allOf must be an array");return e.fullPath=n,e}let i=!1,l=o.value;if(a.forEach((e=>{l&&(l=l[e])})),l=s()({},l),0===Object.keys(l).length)return;delete l.allOf;const u=[];return u.push(r.replace(a,{})),e.forEach(((e,t)=>{if(!r.isObject(e)){if(i)return null;i=!0;const e=new TypeError("Elements in allOf must be objects");return e.fullPath=n,u.push(e)}u.push(r.mergeDeep(a,e));const o=function(e,t){let{specmap:n,getBaseUrlForNodePath:r=(e=>n.getContext([...t,...e]).baseDoc),targetKeys:o=["$ref","$$ref"]}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=[];return Me()(e).forEach((function(){if(o.includes(this.key)&&"string"==typeof this.node){const e=this.path,o=t.concat(this.path),i=Ue(this.node,r(e));a.push(n.replace(o,i))}})),a}(e,n.slice(0,-1),{getBaseUrlForNodePath:e=>r.getContext([...n,t,...e]).baseDoc,specmap:r});u.push(...o)})),l.example&&u.push(r.remove([].concat(a,"example"))),u.push(r.mergeDeep(a,l)),l.$$ref||u.push(r.remove([].concat(a,"$$ref"))),u}},lt={key:"parameters",plugin:(e,t,n,r)=>{if(Array.isArray(e)&&e.length){const t=Object.assign([],e),o=n.slice(0,-1),a=s()({},ge.getIn(r.spec,o));for(let o=0;o{const o=s()({},e);for(const t in e)try{o[t].default=r.modelPropertyMacro(o[t])}catch(e){const t=new Error(e);return t.fullPath=n,t}return ge.replace(n,o)}};class ct{constructor(e){this.root=pt(e||{})}set(e,t){const n=this.getParent(e,!0);if(!n)return void ft(this.root,t,null);const r=e[e.length-1],{children:o}=n;o[r]?ft(o[r],t,n):o[r]=pt(t,n)}get(e){if((e=e||[]).length<1)return this.root.value;let t,n,r=this.root;for(let o=0;o{if(!e)return e;const{children:r}=e;return!r[n]&&t&&(r[n]=pt(null,e)),r[n]}),this.root)}}function pt(e,t){return ft({children:{}},e,t)}function ft(e,t,n){return e.value=t||{},e.protoValue=n?s()(s()({},n.protoValue),e.value):e.value,Object.keys(e.children).forEach((t=>{const n=e.children[t];e.children[t]=ft(n,n.value,e)})),e}const ht=()=>{};class dt{static getPluginName(e){return e.pluginName}static getPatchesOfType(e,t){return e.filter(t)}constructor(e){Object.assign(this,{spec:"",debugLevel:"info",plugins:[],pluginHistory:{},errors:[],mutations:[],promisedPatches:[],state:{},patches:[],context:{},contextTree:new ct,showDebug:!1,allPatches:[],pluginProp:"specMap",libMethods:Object.assign(Object.create(this),ge,{getInstance:()=>this}),allowMetaPatches:!1},e),this.get=this._get.bind(this),this.getContext=this._getContext.bind(this),this.hasRun=this._hasRun.bind(this),this.wrappedPlugins=this.plugins.map(this.wrapPlugin.bind(this)).filter(ge.isFunction),this.patches.push(ge.add([],this.spec)),this.patches.push(ge.context([],this.context)),this.updatePatches(this.patches)}debug(e){if(this.debugLevel===e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r!Array.isArray(e)||e.every(((e,n)=>e===t[n]));return function*(r,o){const a={};for(const e of r.filter(ge.isAdditiveMutation))yield*i(e.value,e.path,e);function*i(r,s,l){if(ge.isObject(r)){const u=s.length-1,c=s[u],p=s.indexOf("properties"),f="properties"===c&&u===p,h=o.allowMetaPatches&&a[r.$$ref];for(const u of Object.keys(r)){const c=r[u],p=s.concat(u),d=ge.isObject(c),m=r.$$ref;if(h||d&&(o.allowMetaPatches&&m&&(a[m]=!0),yield*i(c,p,l)),!f&&u===e.key){const r=t(n,s);n&&!r||(yield e.plugin(c,u,p,o,l))}}}else e.key===s[s.length-1]&&(yield e.plugin(r,e.key,s,o))}}}(e)),Object.assign(r.bind(o),{pluginName:e.name||t,isGenerator:ge.isGenerator(r)})}nextPlugin(){return this.wrappedPlugins.find((e=>this.getMutationsForPlugin(e).length>0))}nextPromisedPatch(){if(this.promisedPatches.length>0)return Promise.race(this.promisedPatches.map((e=>e.value)))}getPluginHistory(e){const t=this.constructor.getPluginName(e);return this.pluginHistory[t]||[]}getPluginRunCount(e){return this.getPluginHistory(e).length}getPluginHistoryTip(e){const t=this.getPluginHistory(e);return t&&t[t.length-1]||{}}getPluginMutationIndex(e){const t=this.getPluginHistoryTip(e).mutationIndex;return"number"!=typeof t?-1:t}updatePluginHistory(e,t){const n=this.constructor.getPluginName(e);this.pluginHistory[n]=this.pluginHistory[n]||[],this.pluginHistory[n].push(t)}updatePatches(e){ge.normalizeArray(e).forEach((e=>{if(e instanceof Error)this.errors.push(e);else try{if(!ge.isObject(e))return void this.debug("updatePatches","Got a non-object patch",e);if(this.showDebug&&this.allPatches.push(e),ge.isPromise(e.value))return this.promisedPatches.push(e),void this.promisedPatchThen(e);if(ge.isContextPatch(e))return void this.setContext(e.path,e.value);if(ge.isMutation(e))return void this.updateMutations(e)}catch(e){console.error(e),this.errors.push(e)}}))}updateMutations(e){"object"==typeof e.value&&!Array.isArray(e.value)&&this.allowMetaPatches&&(e.value=s()({},e.value));const t=ge.applyPatch(this.state,e,{allowMetaPatches:this.allowMetaPatches});t&&(this.mutations.push(e),this.state=t)}removePromisedPatch(e){const t=this.promisedPatches.indexOf(e);t<0?this.debug("Tried to remove a promisedPatch that isn't there!"):this.promisedPatches.splice(t,1)}promisedPatchThen(e){return e.value=e.value.then((t=>{const n=s()(s()({},e),{},{value:t});this.removePromisedPatch(e),this.updatePatches(n)})).catch((t=>{this.removePromisedPatch(e),this.updatePatches(t)})),e.value}getMutations(e,t){return e=e||0,"number"!=typeof t&&(t=this.mutations.length),this.mutations.slice(e,t)}getCurrentMutations(){return this.getMutationsForPlugin(this.getCurrentPlugin())}getMutationsForPlugin(e){const t=this.getPluginMutationIndex(e);return this.getMutations(t+1)}getCurrentPlugin(){return this.currentPlugin}getLib(){return this.libMethods}_get(e){return ge.getIn(this.state,e)}_getContext(e){return this.contextTree.get(e)}setContext(e,t){return this.contextTree.set(e,t)}_hasRun(e){return this.getPluginRunCount(this.getCurrentPlugin())>(e||0)}dispatch(){const e=this,t=this.nextPlugin();if(!t){const e=this.nextPromisedPatch();if(e)return e.then((()=>this.dispatch())).catch((()=>this.dispatch()));const t={spec:this.state,errors:this.errors};return this.showDebug&&(t.patches=this.allPatches),Promise.resolve(t)}if(e.pluginCount=e.pluginCount||{},e.pluginCount[t]=(e.pluginCount[t]||0)+1,e.pluginCount[t]>100)return Promise.resolve({spec:e.state,errors:e.errors.concat(new Error("We've reached a hard limit of 100 plugin runs"))});if(t!==this.currentPlugin&&this.promisedPatches.length){const e=this.promisedPatches.map((e=>e.value));return Promise.all(e.map((e=>e.then(ht,ht)))).then((()=>this.dispatch()))}return function(){e.currentPlugin=t;const r=e.getCurrentMutations(),o=e.mutations.length-1;try{if(t.isGenerator)for(const o of t(r,e.getLib()))n(o);else{n(t(r,e.getLib()))}}catch(e){console.error(e),n([Object.assign(Object.create(e),{plugin:t})])}finally{e.updatePluginHistory(t,{mutationIndex:o})}return e.dispatch()}();function n(n){n&&(n=ge.fullyNormalizeArray(n),e.updatePatches(n,t))}}}const mt={refs:Ge,allOf:st,parameters:lt,properties:ut};var gt=n(32454);function yt(e){const{spec:t}=e,{paths:n}=t,r={};if(!n||t.$$normalized)return e;for(const e in n){const o=n[e];if(null==o||!["object","function"].includes(typeof o))continue;const a=o.parameters;for(const n in o){const i=o[n];if(null==i||!["object","function"].includes(typeof i))continue;const s=(0,gt.Z)(i,e,n);if(s){r[s]?r[s].push(i):r[s]=[i];const e=r[s];if(e.length>1)e.forEach(((e,t)=>{e.__originalOperationId=e.__originalOperationId||e.operationId,e.operationId=`${s}${t+1}`}));else if(void 0!==i.operationId){const t=e[0];t.__originalOperationId=t.__originalOperationId||i.operationId,t.operationId=s}}if("parameters"!==n){const e=[],n={};for(const r in t)"produces"!==r&&"consumes"!==r&&"security"!==r||(n[r]=t[r],e.push(n));if(a&&(n.parameters=a,e.push(n)),e.length)for(const t of e)for(const e in t)if(i[e]){if("parameters"===e)for(const n of t[e]){i[e].some((e=>e.name&&e.name===n.name||e.$ref&&e.$ref===n.$ref||e.$$ref&&e.$$ref===n.$$ref||e===n))||i[e].push(n)}}else i[e]=t[e]}}}return t.$$normalized=!0,e}async function vt(e){const{spec:t,mode:n,allowMetaPatches:r=!0,pathDiscriminator:o,modelPropertyMacro:a,parameterMacro:i,requestInterceptor:s,responseInterceptor:l,skipNormalization:c,useCircularStructures:p}=e,f=M(e),h=D(e);return function(e){f&&(mt.refs.docCache[f]=e);mt.refs.fetchJSON=u(h,{requestInterceptor:s,responseInterceptor:l});const t=[mt.refs];"function"==typeof i&&t.push(mt.parameters);"function"==typeof a&&t.push(mt.properties);"strict"!==n&&t.push(mt.allOf);return(d={spec:e,context:{baseDoc:f},plugins:t,allowMetaPatches:r,pathDiscriminator:o,parameterMacro:i,modelPropertyMacro:a,useCircularStructures:p},new dt(d).dispatch()).then(c?async e=>e:yt);var d}(t)}const bt={name:"generic",match:()=>!0,normalize(e){let{spec:t}=e;const{spec:n}=yt({spec:t});return n},resolve:async e=>vt(e)};const wt=e=>{try{const{openapi:t}=e;return"string"==typeof t&&/^3\.0\.([0123])(?:-rc[012])?$/.test(t)}catch{return!1}},Et=e=>wt(e)||(e=>{try{const{openapi:t}=e;return"string"==typeof t&&/^3\.1\.(?:[1-9]\d*|0)$/.test(t)}catch{return!1}})(e),xt={name:"openapi-2",match(e){let{spec:t}=e;return(e=>{try{const{swagger:t}=e;return"2.0"===t}catch{return!1}})(t)},normalize(e){let{spec:t}=e;const{spec:n}=yt({spec:t});return n},resolve:async e=>async function(e){return vt(e)}(e)};const _t={name:"openapi-3-0",match(e){let{spec:t}=e;return wt(t)},normalize(e){let{spec:t}=e;const{spec:n}=yt({spec:t});return n},resolve:async e=>async function(e){return vt(e)}(e)},St=(At={strategies:[_t,xt,bt]},async e=>(async e=>{const{spec:t,requestInterceptor:n,responseInterceptor:r}=e,o=M(e),a=D(e),i=t||await u(a,{requestInterceptor:n,responseInterceptor:r})(o),l=s()(s()({},e),{},{spec:i});return e.strategies.find((e=>e.match(l))).resolve(l)})(s()(s()({},At),e)));var At,Ct=n(88436),kt=n.n(Ct),Ot=n(27361),jt=n.n(Ot),Tt=n(76489);function It(e){return"[object Object]"===Object.prototype.toString.call(e)}function Nt(e){var t,n;return!1!==It(e)&&(void 0===(t=e.constructor)||!1!==It(n=t.prototype)&&!1!==n.hasOwnProperty("isPrototypeOf"))}const Pt={body:function(e){let{req:t,value:n}=e;t.body=n},header:function(e){let{req:t,parameter:n,value:r}=e;t.headers=t.headers||{},void 0!==r&&(t.headers[n.name]=r)},query:function(e){let{req:t,value:n,parameter:r}=e;t.query=t.query||{},!1===n&&"boolean"===r.type&&(n="false");0===n&&["number","integer"].indexOf(r.type)>-1&&(n="0");if(n)t.query[r.name]={collectionFormat:r.collectionFormat,value:n};else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}},path:function(e){let{req:t,value:n,parameter:r}=e;t.url=t.url.split(`{${r.name}}`).join(encodeURIComponent(n))},formData:function(e){let{req:t,value:n,parameter:r}=e;(n||r.allowEmptyValue)&&(t.form=t.form||{},t.form[r.name]={value:n,allowEmptyValue:r.allowEmptyValue,collectionFormat:r.collectionFormat})}};function Rt(e,t){return t.includes("application/json")?"string"==typeof e?e:JSON.stringify(e):e.toString()}function Mt(e){let{req:t,value:n,parameter:r}=e;const{name:o,style:a,explode:i,content:s}=r;if(s){const e=Object.keys(s)[0];return void(t.url=t.url.split(`{${o}}`).join(b(Rt(n,e),{escape:!0})))}const l=w({key:r.name,value:n,style:a||"simple",explode:i||!1,escape:!0});t.url=t.url.split(`{${o}}`).join(l)}function Dt(e){let{req:t,value:n,parameter:r}=e;if(t.query=t.query||{},r.content){const e=Rt(n,Object.keys(r.content)[0]);if(e)t.query[r.name]=e;else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}}else if(!1===n&&(n="false"),0===n&&(n="0"),n){const{style:e,explode:o,allowReserved:a}=r;t.query[r.name]={value:n,serializationOption:{style:e,explode:o,allowReserved:a}}}else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}}const Lt=["accept","authorization","content-type"];function Bt(e){let{req:t,parameter:n,value:r}=e;if(t.headers=t.headers||{},!(Lt.indexOf(n.name.toLowerCase())>-1))if(n.content){const e=Object.keys(n.content)[0];t.headers[n.name]=Rt(r,e)}else void 0!==r&&(t.headers[n.name]=w({key:n.name,value:r,style:n.style||"simple",explode:void 0!==n.explode&&n.explode,escape:!1}))}function Ft(e){let{req:t,parameter:n,value:r}=e;t.headers=t.headers||{};const o=typeof r;if(n.content){const e=Object.keys(n.content)[0];t.headers.Cookie=`${n.name}=${Rt(r,e)}`}else if("undefined"!==o){const e="object"===o&&!Array.isArray(r)&&n.explode?"":`${n.name}=`;t.headers.Cookie=e+w({key:n.name,value:r,escape:!1,style:n.style||"form",explode:void 0!==n.explode&&n.explode})}}const zt="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,{btoa:Ut}=zt,qt=Ut;function $t(e,t){const{operation:n,requestBody:r,securities:o,spec:a,attachContentTypeForEmptyPayload:i}=e;let{requestContentType:l}=e;t=function(e){let{request:t,securities:n={},operation:r={},spec:o}=e;const a=s()({},t),{authorized:i={}}=n,l=r.security||o.security||[],u=i&&!!Object.keys(i).length,c=jt()(o,["components","securitySchemes"])||{};if(a.headers=a.headers||{},a.query=a.query||{},!Object.keys(n).length||!u||!l||Array.isArray(r.security)&&!r.security.length)return t;return l.forEach((e=>{Object.keys(e).forEach((e=>{const t=i[e],n=c[e];if(!t)return;const r=t.value||t,{type:o}=n;if(t)if("apiKey"===o)"query"===n.in&&(a.query[n.name]=r),"header"===n.in&&(a.headers[n.name]=r),"cookie"===n.in&&(a.cookies[n.name]=r);else if("http"===o){if(/^basic$/i.test(n.scheme)){const e=r.username||"",t=r.password||"",n=qt(`${e}:${t}`);a.headers.Authorization=`Basic ${n}`}/^bearer$/i.test(n.scheme)&&(a.headers.Authorization=`Bearer ${r}`)}else if("oauth2"===o||"openIdConnect"===o){const e=t.token||{},r=e[n["x-tokenName"]||"access_token"];let o=e.token_type;o&&"bearer"!==o.toLowerCase()||(o="Bearer"),a.headers.Authorization=`${o} ${r}`}}))})),a}({request:t,securities:o,operation:n,spec:a});const u=n.requestBody||{},c=Object.keys(u.content||{}),p=l&&c.indexOf(l)>-1;if(r||i){if(l&&p)t.headers["Content-Type"]=l;else if(!l){const e=c[0];e&&(t.headers["Content-Type"]=e,l=e)}}else l&&p&&(t.headers["Content-Type"]=l);if(!e.responseContentType&&n.responses){const e=Object.entries(n.responses).filter((e=>{let[t,n]=e;const r=parseInt(t,10);return r>=200&&r<300&&Nt(n.content)})).reduce(((e,t)=>{let[,n]=t;return e.concat(Object.keys(n.content))}),[]);e.length>0&&(t.headers.accept=e.join(", "))}if(r)if(l){if(c.indexOf(l)>-1)if("application/x-www-form-urlencoded"===l||"multipart/form-data"===l)if("object"==typeof r){const e=(u.content[l]||{}).encoding||{};t.form={},Object.keys(r).forEach((n=>{t.form[n]={value:r[n],encoding:e[n]||{}}}))}else t.form=r;else t.body=r}else t.body=r;return t}function Vt(e,t){const{spec:n,operation:r,securities:o,requestContentType:a,responseContentType:i,attachContentTypeForEmptyPayload:l}=e;if(t=function(e){let{request:t,securities:n={},operation:r={},spec:o}=e;const a=s()({},t),{authorized:i={},specSecurity:l=[]}=n,u=r.security||l,c=i&&!!Object.keys(i).length,p=o.securityDefinitions;if(a.headers=a.headers||{},a.query=a.query||{},!Object.keys(n).length||!c||!u||Array.isArray(r.security)&&!r.security.length)return t;return u.forEach((e=>{Object.keys(e).forEach((e=>{const t=i[e];if(!t)return;const{token:n}=t,r=t.value||t,o=p[e],{type:s}=o,l=o["x-tokenName"]||"access_token",u=n&&n[l];let c=n&&n.token_type;if(t)if("apiKey"===s){const e="query"===o.in?"query":"headers";a[e]=a[e]||{},a[e][o.name]=r}else if("basic"===s)if(r.header)a.headers.authorization=r.header;else{const e=r.username||"",t=r.password||"";r.base64=qt(`${e}:${t}`),a.headers.authorization=`Basic ${r.base64}`}else"oauth2"===s&&u&&(c=c&&"bearer"!==c.toLowerCase()?c:"Bearer",a.headers.authorization=`${c} ${u}`)}))})),a}({request:t,securities:o,operation:r,spec:n}),t.body||t.form||l)a?t.headers["Content-Type"]=a:Array.isArray(r.consumes)?[t.headers["Content-Type"]]=r.consumes:Array.isArray(n.consumes)?[t.headers["Content-Type"]]=n.consumes:r.parameters&&r.parameters.filter((e=>"file"===e.type)).length?t.headers["Content-Type"]="multipart/form-data":r.parameters&&r.parameters.filter((e=>"formData"===e.in)).length&&(t.headers["Content-Type"]="application/x-www-form-urlencoded");else if(a){const e=r.parameters&&r.parameters.filter((e=>"body"===e.in)).length>0,n=r.parameters&&r.parameters.filter((e=>"formData"===e.in)).length>0;(e||n)&&(t.headers["Content-Type"]=a)}return!i&&Array.isArray(r.produces)&&r.produces.length>0&&(t.headers.accept=r.produces.join(", ")),t}function Wt(e,t){return`${t.toLowerCase()}-${e}`}const Ht=["http","fetch","spec","operationId","pathName","method","parameters","securities"],Jt=e=>Array.isArray(e)?e:[],Kt=Pe("OperationNotFoundError",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),Gt=(e,t)=>t.filter((t=>t.name===e)),Zt=e=>{const t={};e.forEach((e=>{t[e.in]||(t[e.in]={}),t[e.in][e.name]=e}));const n=[];return Object.keys(t).forEach((e=>{Object.keys(t[e]).forEach((r=>{n.push(t[e][r])}))})),n},Yt={buildRequest:Xt};function Qt(e){let{http:t,fetch:n,spec:r,operationId:o,pathName:a,method:i,parameters:l,securities:u}=e,c=kt()(e,Ht);const p=t||n||_;a&&i&&!o&&(o=Wt(a,i));const f=Yt.buildRequest(s()({spec:r,operationId:o,parameters:l,securities:u,http:p},c));return f.body&&(Nt(f.body)||Array.isArray(f.body))&&(f.body=JSON.stringify(f.body)),p(f)}function Xt(e){const{spec:t,operationId:n,responseContentType:r,scheme:o,requestInterceptor:i,responseInterceptor:l,contextUrl:u,userFetch:c,server:p,serverVariables:f,http:h,signal:d}=e;let{parameters:m,parameterBuilders:g}=e;const y=Et(t);g||(g=y?a:Pt);let v={url:"",credentials:h&&h.withCredentials?"include":"same-origin",headers:{},cookies:{}};d&&(v.signal=d),i&&(v.requestInterceptor=i),l&&(v.responseInterceptor=l),c&&(v.userFetch=c);const b=function(e,t){return e&&e.paths?function(e,t){return function(e,t,n){if(!e||"object"!=typeof e||!e.paths||"object"!=typeof e.paths)return null;const{paths:r}=e;for(const o in r)for(const a in r[o]){if("PARAMETERS"===a.toUpperCase())continue;const i=r[o][a];if(!i||"object"!=typeof i)continue;const s={spec:e,pathName:o,method:a.toUpperCase(),operation:i},l=t(s);if(n&&l)return s}}(e,t,!0)||null}(e,(e=>{let{pathName:n,method:r,operation:o}=e;if(!o||"object"!=typeof o)return!1;const a=o.operationId;return[(0,gt.Z)(o,n,r),Wt(n,r),a].some((e=>e&&e===t))})):null}(t,n);if(!b)throw new Kt(`Operation ${n} not found`);const{operation:w={},method:E,pathName:x}=b;if(v.url+=function(e){const t=Et(e.spec);return t?function(e){let{spec:t,pathName:n,method:r,server:o,contextUrl:a,serverVariables:i={}}=e;const s=jt()(t,["paths",n,(r||"").toLowerCase(),"servers"])||jt()(t,["paths",n,"servers"])||jt()(t,["servers"]);let l="",u=null;if(o&&s&&s.length){const e=s.map((e=>e.url));e.indexOf(o)>-1&&(l=o,u=s[e.indexOf(o)])}!l&&s&&s.length&&(l=s[0].url,[u]=s);if(l.indexOf("{")>-1){(function(e){const t=[],n=/{([^}]+)}/g;let r;for(;r=n.exec(e);)t.push(r[1]);return t})(l).forEach((e=>{if(u.variables&&u.variables[e]){const t=u.variables[e],n=i[e]||t.default,r=new RegExp(`{${e}}`,"g");l=l.replace(r,n)}}))}return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=e&&t?Ne.parse(Ne.resolve(t,e)):Ne.parse(e),r=Ne.parse(t),o=en(n.protocol)||en(r.protocol)||"",a=n.host||r.host,i=n.pathname||"";let s;s=o&&a?`${o}://${a+i}`:i;return"/"===s[s.length-1]?s.slice(0,-1):s}(l,a)}(e):function(e){let{spec:t,scheme:n,contextUrl:r=""}=e;const o=Ne.parse(r),a=Array.isArray(t.schemes)?t.schemes[0]:null,i=n||a||en(o.protocol)||"http",s=t.host||o.host||"",l=t.basePath||"";let u;u=i&&s?`${i}://${s+l}`:l;return"/"===u[u.length-1]?u.slice(0,-1):u}(e)}({spec:t,scheme:o,contextUrl:u,server:p,serverVariables:f,pathName:x,method:E}),!n)return delete v.cookies,v;v.url+=x,v.method=`${E}`.toUpperCase(),m=m||{};const _=t.paths[x]||{};r&&(v.headers.accept=r);const S=Zt([].concat(Jt(w.parameters)).concat(Jt(_.parameters)));S.forEach((e=>{const n=g[e.in];let r;if("body"===e.in&&e.schema&&e.schema.properties&&(r=m),r=e&&e.name&&m[e.name],void 0===r?r=e&&e.name&&m[`${e.in}.${e.name}`]:Gt(e.name,S).length>1&&console.warn(`Parameter '${e.name}' is ambiguous because the defined spec has more than one parameter with the name: '${e.name}' and the passed-in parameter values did not define an 'in' value.`),null!==r){if(void 0!==e.default&&void 0===r&&(r=e.default),void 0===r&&e.required&&!e.allowEmptyValue)throw new Error(`Required parameter ${e.name} is not provided`);if(y&&e.schema&&"object"===e.schema.type&&"string"==typeof r)try{r=JSON.parse(r)}catch(e){throw new Error("Could not parse object parameter value string as JSON")}n&&n({req:v,parameter:e,value:r,operation:w,spec:t})}}));const A=s()(s()({},e),{},{operation:w});if(v=y?$t(A,v):Vt(A,v),v.cookies&&Object.keys(v.cookies).length){const e=Object.keys(v.cookies).reduce(((e,t)=>{const n=v.cookies[t];return e+(e?"&":"")+Tt.serialize(t,n)}),"");v.headers.Cookie=e}return v.cookies&&delete v.cookies,R(v),v}const en=e=>e?e.replace(/\W/g,""):null;const tn=(e=>async function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return async function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{returnEntireTree:r,baseDoc:o,requestInterceptor:a,responseInterceptor:i,parameterMacro:l,modelPropertyMacro:u,useCircularStructures:c,strategies:p}=n,f={spec:e,pathDiscriminator:t,baseDoc:o,requestInterceptor:a,responseInterceptor:i,parameterMacro:l,modelPropertyMacro:u,useCircularStructures:c,strategies:p},h=p.find((e=>e.match(f))).normalize(f),d=await St(s()(s()({},f),{},{spec:h,allowMetaPatches:!0,skipNormalization:!0}));return!r&&Array.isArray(t)&&t.length&&(d.spec=jt()(d.spec,t)||null),d}(t,n,s()(s()({},e),r))})({strategies:[_t,xt,bt]});var nn=n(34852);function rn(e){let{configs:t,getConfigs:n}=e;return{fn:{fetch:(r=_,o=t.preFetch,a=t.postFetch,a=a||(e=>e),o=o||(e=>e),e=>("string"==typeof e&&(e={url:e}),x.mergeInQueryOrForm(e),e=o(e),a(r(e)))),buildRequest:Xt,execute:Qt,resolve:St,resolveSubtree:function(e,t,r){if(void 0===r){const e=n();r={modelPropertyMacro:e.modelPropertyMacro,parameterMacro:e.parameterMacro,requestInterceptor:e.requestInterceptor,responseInterceptor:e.responseInterceptor}}for(var o=arguments.length,a=new Array(o>3?o-3:0),i=3;i{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(90242);function o(){return{fn:{shallowEqualKeys:r.be}}}},48347:(e,t,n)=>{"use strict";n.r(t),n.d(t,{getDisplayName:()=>r});const r=e=>e.displayName||e.name||"Component"},73420:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(35627),o=n.n(r),a=n(90242),i=n(11092),s=n(48347),l=n(60314);const u=e=>{let{getComponents:t,getStore:n,getSystem:r}=e;const u=(c=(0,i.getComponent)(r,n,t),(0,a.HP)(c,(function(){for(var e=arguments.length,t=new Array(e),n=0;n(0,l.Z)(e,(function(){for(var e=arguments.length,t=new Array(e),n=0;n{"use strict";n.r(t),n.d(t,{getComponent:()=>Q,render:()=>Y,withMappedContainer:()=>Z});var r=n(23101),o=n.n(r),a=n(28222),i=n.n(a),s=n(67294),l=n(73935),u=n(97779),c=n(61688),p=n(52798);let f=function(e){e()};const h=()=>f,d=(0,s.createContext)(null);let m=null;var g=n(87462),y=n(63366),v=n(8679),b=n.n(v),w=n(59864);const E=["initMapStateToProps","initMapDispatchToProps","initMergeProps"];function x(e,t,n,r,{areStatesEqual:o,areOwnPropsEqual:a,areStatePropsEqual:i}){let s,l,u,c,p,f=!1;function h(f,h){const d=!a(h,l),m=!o(f,s,h,l);return s=f,l=h,d&&m?(u=e(s,l),t.dependsOnOwnProps&&(c=t(r,l)),p=n(u,c,l),p):d?(e.dependsOnOwnProps&&(u=e(s,l)),t.dependsOnOwnProps&&(c=t(r,l)),p=n(u,c,l),p):m?function(){const t=e(s,l),r=!i(t,u);return u=t,r&&(p=n(u,c,l)),p}():p}return function(o,a){return f?h(o,a):(s=o,l=a,u=e(s,l),c=t(r,l),p=n(u,c,l),f=!0,p)}}function _(e){return function(t){const n=e(t);function r(){return n}return r.dependsOnOwnProps=!1,r}}function S(e){return e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function A(e,t){return function(t,{displayName:n}){const r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e,void 0)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=S(e);let o=r(t,n);return"function"==typeof o&&(r.mapToProps=o,r.dependsOnOwnProps=S(o),o=r(t,n)),o},r}}function C(e,t){return(n,r)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${r.wrappedComponentName}.`)}}function k(e,t,n){return(0,g.Z)({},n,e,t)}const O={notify(){},get:()=>[]};function j(e,t){let n,r=O;function o(){i.onStateChange&&i.onStateChange()}function a(){n||(n=t?t.addNestedSub(o):e.subscribe(o),r=function(){const e=h();let t=null,n=null;return{clear(){t=null,n=null},notify(){e((()=>{let e=t;for(;e;)e.callback(),e=e.next}))},get(){let e=[],n=t;for(;n;)e.push(n),n=n.next;return e},subscribe(e){let r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}())}const i={addNestedSub:function(e){return a(),r.subscribe(e)},notifyNestedSubs:function(){r.notify()},handleChangeWrapper:o,isSubscribed:function(){return Boolean(n)},trySubscribe:a,tryUnsubscribe:function(){n&&(n(),n=void 0,r.clear(),r=O)},getListeners:()=>r};return i}const T=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement)?s.useLayoutEffect:s.useEffect;function I(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function N(e,t){if(I(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r=0;r{throw new Error("uSES not initialized!")};const M=[null,null];function D(e,t,n,r,o,a){e.current=r,n.current=!1,o.current&&(o.current=null,a())}function L(e,t){return e===t}const B=function(e,t,n,{pure:r,areStatesEqual:o=L,areOwnPropsEqual:a=N,areStatePropsEqual:i=N,areMergedPropsEqual:l=N,forwardRef:u=!1,context:c=d}={}){const p=c,f=function(e){return e?"function"==typeof e?A(e):C(e,"mapStateToProps"):_((()=>({})))}(e),h=function(e){return e&&"object"==typeof e?_((t=>function(e,t){const n={};for(const r in e){const o=e[r];"function"==typeof o&&(n[r]=(...e)=>t(o(...e)))}return n}(e,t))):e?"function"==typeof e?A(e):C(e,"mapDispatchToProps"):_((e=>({dispatch:e})))}(t),m=function(e){return e?"function"==typeof e?function(e){return function(t,{displayName:n,areMergedPropsEqual:r}){let o,a=!1;return function(t,n,i){const s=e(t,n,i);return a?r(s,o)||(o=s):(a=!0,o=s),o}}}(e):C(e,"mergeProps"):()=>k}(n),v=Boolean(e);return e=>{const t=e.displayName||e.name||"Component",n=`Connect(${t})`,r={shouldHandleStateChanges:v,displayName:n,wrappedComponentName:t,WrappedComponent:e,initMapStateToProps:f,initMapDispatchToProps:h,initMergeProps:m,areStatesEqual:o,areStatePropsEqual:i,areOwnPropsEqual:a,areMergedPropsEqual:l};function c(t){const[n,o,a]=(0,s.useMemo)((()=>{const{reactReduxForwardedRef:e}=t,n=(0,y.Z)(t,P);return[t.context,e,n]}),[t]),i=(0,s.useMemo)((()=>n&&n.Consumer&&(0,w.isContextConsumer)(s.createElement(n.Consumer,null))?n:p),[n,p]),l=(0,s.useContext)(i),u=Boolean(t.store)&&Boolean(t.store.getState)&&Boolean(t.store.dispatch),c=Boolean(l)&&Boolean(l.store);const f=u?t.store:l.store,h=c?l.getServerState:f.getState,d=(0,s.useMemo)((()=>function(e,t){let{initMapStateToProps:n,initMapDispatchToProps:r,initMergeProps:o}=t,a=(0,y.Z)(t,E);return x(n(e,a),r(e,a),o(e,a),e,a)}(f.dispatch,r)),[f]),[m,b]=(0,s.useMemo)((()=>{if(!v)return M;const e=j(f,u?void 0:l.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[f,u,l]),_=(0,s.useMemo)((()=>u?l:(0,g.Z)({},l,{subscription:m})),[u,l,m]),S=(0,s.useRef)(),A=(0,s.useRef)(a),C=(0,s.useRef)(),k=(0,s.useRef)(!1),O=((0,s.useRef)(!1),(0,s.useRef)(!1)),I=(0,s.useRef)();T((()=>(O.current=!0,()=>{O.current=!1})),[]);const N=(0,s.useMemo)((()=>()=>C.current&&a===A.current?C.current:d(f.getState(),a)),[f,a]),L=(0,s.useMemo)((()=>e=>m?function(e,t,n,r,o,a,i,s,l,u,c){if(!e)return()=>{};let p=!1,f=null;const h=()=>{if(p||!s.current)return;const e=t.getState();let n,h;try{n=r(e,o.current)}catch(e){h=e,f=e}h||(f=null),n===a.current?i.current||u():(a.current=n,l.current=n,i.current=!0,c())};return n.onStateChange=h,n.trySubscribe(),h(),()=>{if(p=!0,n.tryUnsubscribe(),n.onStateChange=null,f)throw f}}(v,f,m,d,A,S,k,O,C,b,e):()=>{}),[m]);var B,F,z;let U;B=D,F=[A,S,k,a,C,b],T((()=>B(...F)),z);try{U=R(L,N,h?()=>d(h(),a):N)}catch(e){throw I.current&&(e.message+=`\nThe error may be correlated with this previous error:\n${I.current.stack}\n\n`),e}T((()=>{I.current=void 0,C.current=void 0,S.current=U}));const q=(0,s.useMemo)((()=>s.createElement(e,(0,g.Z)({},U,{ref:o}))),[o,e,U]);return(0,s.useMemo)((()=>v?s.createElement(i.Provider,{value:_},q):q),[i,q,_])}const d=s.memo(c);if(d.WrappedComponent=e,d.displayName=c.displayName=n,u){const t=s.forwardRef((function(e,t){return s.createElement(d,(0,g.Z)({},e,{reactReduxForwardedRef:t}))}));return t.displayName=n,t.WrappedComponent=e,b()(t,e)}return b()(d,e)}};const F=function({store:e,context:t,children:n,serverState:r}){const o=(0,s.useMemo)((()=>{const t=j(e);return{store:e,subscription:t,getServerState:r?()=>r:void 0}}),[e,r]),a=(0,s.useMemo)((()=>e.getState()),[e]);T((()=>{const{subscription:t}=o;return t.onStateChange=t.notifyNestedSubs,t.trySubscribe(),a!==e.getState()&&t.notifyNestedSubs(),()=>{t.tryUnsubscribe(),t.onStateChange=void 0}}),[o,a]);const i=t||d;return s.createElement(i.Provider,{value:o},n)};var z,U;z=p.useSyncExternalStoreWithSelector,m=z,(e=>{R=e})(c.useSyncExternalStore),U=l.unstable_batchedUpdates,f=U;var q=n(57557),$=n.n(q),V=n(6557),W=n.n(V);const H=e=>t=>{const{fn:n}=e();class r extends s.Component{render(){return s.createElement(t,o()({},e(),this.props,this.context))}}return r.displayName=`WithSystem(${n.getDisplayName(t)})`,r},J=(e,t)=>n=>{const{fn:r}=e();class a extends s.Component{render(){return s.createElement(F,{store:t},s.createElement(n,o()({},this.props,this.context)))}}return a.displayName=`WithRoot(${r.getDisplayName(n)})`,a},K=(e,t,n)=>(0,u.qC)(n?J(e,n):W(),B(((n,r)=>{var o;const a={...r,...e()},i=(null===(o=t.prototype)||void 0===o?void 0:o.mapStateToProps)||(e=>({state:e}));return i(n,a)})),H(e))(t),G=(e,t,n,r)=>{for(const o in t){const a=t[o];"function"==typeof a&&a(n[o],r[o],e())}},Z=(e,t,n)=>(t,r)=>{const{fn:o}=e(),a=n(t,"root");class l extends s.Component{constructor(t,n){super(t,n),G(e,r,t,{})}UNSAFE_componentWillReceiveProps(t){G(e,r,t,this.props)}render(){const e=$()(this.props,r?i()(r):[]);return s.createElement(a,e)}}return l.displayName=`WithMappedContainer(${o.getDisplayName(a)})`,l},Y=(e,t,n,r)=>o=>{const a=n(e,t,r)("App","root");l.render(s.createElement(a,null),o)},Q=(e,t,n)=>function(r,o){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"!=typeof r)throw new TypeError("Need a string, to fetch a component. Was given a "+typeof r);const i=n(r);return i?o?"root"===o?K(e,i,t()):K(e,i):i:(a.failSilently||e().log.warn("Could not find component:",r),null)}},33424:(e,t,n)=>{"use strict";n.d(t,{d3:()=>D,C2:()=>ee});var r=n(28222),o=n.n(r),a=n(58118),i=n.n(a),s=n(63366);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return function(e){if(0===e.length||1===e.length)return e;var t,n,r=e.join(".");return m[r]||(m[r]=0===(n=(t=e).length)||1===n?t:2===n?[t[0],t[1],"".concat(t[0],".").concat(t[1]),"".concat(t[1],".").concat(t[0])]:3===n?[t[0],t[1],t[2],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0])]:n>=4?[t[0],t[1],t[2],t[3],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[2],".").concat(t[3]),"".concat(t[3],".").concat(t[0]),"".concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[0]),"".concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[3],".").concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[2],".").concat(t[1],".").concat(t[0])]:void 0),m[r]}(e.filter((function(e){return"token"!==e}))).reduce((function(e,t){return d(d({},e),n[t])}),t)}function y(e){return e.join(" ")}function v(e){var t=e.node,n=e.stylesheet,r=e.style,o=void 0===r?{}:r,a=e.useInlineStyles,i=e.key,s=t.properties,l=t.type,u=t.tagName,c=t.value;if("text"===l)return c;if(u){var h,m=function(e,t){var n=0;return function(r){return n+=1,r.map((function(r,o){return v({node:r,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(o)})}))}}(n,a);if(a){var b=Object.keys(n).reduce((function(e,t){return t.split(".").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),w=s.className&&s.className.includes("token")?["token"]:[],E=s.className&&w.concat(s.className.filter((function(e){return!b.includes(e)})));h=d(d({},s),{},{className:y(E)||void 0,style:g(s.className,Object.assign({},s.style,o),n)})}else h=d(d({},s),{},{className:y(s.className)});var x=m(t.children);return p.createElement(u,(0,f.Z)({key:i},h),x)}}const b=function(e,t){return-1!==e.listLanguages().indexOf(t)};var w=["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"];function E(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function x(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=0;r2&&void 0!==arguments[2]?arguments[2]:[];return t||u.length>0?function(e,t){return k({children:e,lineNumber:t,lineNumberStyle:s,largestLineNumber:i,showInlineLineNumbers:o,lineProps:n,className:arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],showLineNumbers:r,wrapLongLines:l})}(e,a,u):function(e,t){if(r&&t&&o){var n=C(s,t,i);e.unshift(A(t,n))}return e}(e,a)}for(var m=function(){var e=c[h],t=e.children[0].value;if(t.match(_)){var n=t.split("\n");n.forEach((function(t,o){var i=r&&p.length+a,s={type:"text",value:"".concat(t,"\n")};if(0===o){var l=d(c.slice(f+1,h).concat(k({children:[s],className:e.properties.className})),i);p.push(l)}else if(o===n.length-1){var u=c[h+1]&&c[h+1].children&&c[h+1].children[0],m={type:"text",value:"".concat(t)};if(u){var g=k({children:[m],className:e.properties.className});c.splice(h+1,0,g)}else{var y=d([m],i,e.properties.className);p.push(y)}}else{var v=d([s],i,e.properties.className);p.push(v)}})),f=h}h++};h=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,w);$=$||N;var W=d?p.createElement(S,{containerStyle:E,codeStyle:u.style||{},numberStyle:A,startingLineNumber:v,codeString:q}):null,H=o.hljs||o['pre[class*="language-"]']||{backgroundColor:"#fff"},J=I($)?"hljs":"prismjs",K=f?Object.assign({},V,{style:Object.assign({},H,i)}):Object.assign({},V,{className:V.className?"".concat(J," ").concat(V.className):J,style:Object.assign({},i)});if(u.style=x(x({},u.style),{},O?{whiteSpace:"pre-wrap"}:{whiteSpace:"pre"}),!$)return p.createElement(B,K,W,p.createElement(z,u,q));(void 0===C&&D||O)&&(C=!0),D=D||T;var G=[{type:"text",value:q}],Z=function(e){var t=e.astGenerator,n=e.language,r=e.code,o=e.defaultCodeValue;if(I(t)){var a=b(t,n);return"text"===n?{value:o,language:"text"}:a?t.highlight(n,r):t.highlightAuto(r)}try{return n&&"text"!==n?{value:t.highlight(r,n)}:{value:o}}catch(e){return{value:o}}}({astGenerator:$,language:t,code:q,defaultCodeValue:G});null===Z.language&&(Z.value=G);var Y=j(Z,C,M,d,g,v,Z.value.length+v,A,O);return p.createElement(B,K,p.createElement(z,u,!g&&W,D({rows:Y,stylesheet:o,useInlineStyles:f})))});M.registerLanguage=R.registerLanguage;const D=M;var L=n(96344);const B=n.n(L)();var F=n(82026);const z=n.n(F)();var U=n(42157);const q=n.n(U)();var $=n(61519);const V=n.n($)();var W=n(54587);const H=n.n(W)();var J=n(30786);const K=n.n(J)();var G=n(66336);const Z=n.n(G)(),Y={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#333",color:"white"},"hljs-name":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-code":{fontStyle:"italic",color:"#888"},"hljs-emphasis":{fontStyle:"italic"},"hljs-tag":{color:"#62c8f3"},"hljs-variable":{color:"#ade5fc"},"hljs-template-variable":{color:"#ade5fc"},"hljs-selector-id":{color:"#ade5fc"},"hljs-selector-class":{color:"#ade5fc"},"hljs-string":{color:"#a2fca2"},"hljs-bullet":{color:"#d36363"},"hljs-type":{color:"#ffa"},"hljs-title":{color:"#ffa"},"hljs-section":{color:"#ffa"},"hljs-attribute":{color:"#ffa"},"hljs-quote":{color:"#ffa"},"hljs-built_in":{color:"#ffa"},"hljs-builtin-name":{color:"#ffa"},"hljs-number":{color:"#d36363"},"hljs-symbol":{color:"#d36363"},"hljs-keyword":{color:"#fcc28c"},"hljs-selector-tag":{color:"#fcc28c"},"hljs-literal":{color:"#fcc28c"},"hljs-comment":{color:"#888"},"hljs-deletion":{color:"#333",backgroundColor:"#fc9b9b"},"hljs-regexp":{color:"#c6b4f0"},"hljs-link":{color:"#c6b4f0"},"hljs-meta":{color:"#fc9b9b"},"hljs-addition":{backgroundColor:"#a2fca2",color:"#333"}};D.registerLanguage("json",z),D.registerLanguage("js",B),D.registerLanguage("xml",q),D.registerLanguage("yaml",H),D.registerLanguage("http",K),D.registerLanguage("bash",V),D.registerLanguage("powershell",Z),D.registerLanguage("javascript",B);const Q={agate:Y,arta:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#222",color:"#aaa"},"hljs-subst":{color:"#aaa"},"hljs-section":{color:"#fff",fontWeight:"bold"},"hljs-comment":{color:"#444"},"hljs-quote":{color:"#444"},"hljs-meta":{color:"#444"},"hljs-string":{color:"#ffcc33"},"hljs-symbol":{color:"#ffcc33"},"hljs-bullet":{color:"#ffcc33"},"hljs-regexp":{color:"#ffcc33"},"hljs-number":{color:"#00cc66"},"hljs-addition":{color:"#00cc66"},"hljs-built_in":{color:"#32aaee"},"hljs-builtin-name":{color:"#32aaee"},"hljs-literal":{color:"#32aaee"},"hljs-type":{color:"#32aaee"},"hljs-template-variable":{color:"#32aaee"},"hljs-attribute":{color:"#32aaee"},"hljs-link":{color:"#32aaee"},"hljs-keyword":{color:"#6644aa"},"hljs-selector-tag":{color:"#6644aa"},"hljs-name":{color:"#6644aa"},"hljs-selector-id":{color:"#6644aa"},"hljs-selector-class":{color:"#6644aa"},"hljs-title":{color:"#bb1166"},"hljs-variable":{color:"#bb1166"},"hljs-deletion":{color:"#bb1166"},"hljs-template-tag":{color:"#bb1166"},"hljs-doctag":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-emphasis":{fontStyle:"italic"}},monokai:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#272822",color:"#ddd"},"hljs-tag":{color:"#f92672"},"hljs-keyword":{color:"#f92672",fontWeight:"bold"},"hljs-selector-tag":{color:"#f92672",fontWeight:"bold"},"hljs-literal":{color:"#f92672",fontWeight:"bold"},"hljs-strong":{color:"#f92672"},"hljs-name":{color:"#f92672"},"hljs-code":{color:"#66d9ef"},"hljs-class .hljs-title":{color:"white"},"hljs-attribute":{color:"#bf79db"},"hljs-symbol":{color:"#bf79db"},"hljs-regexp":{color:"#bf79db"},"hljs-link":{color:"#bf79db"},"hljs-string":{color:"#a6e22e"},"hljs-bullet":{color:"#a6e22e"},"hljs-subst":{color:"#a6e22e"},"hljs-title":{color:"#a6e22e",fontWeight:"bold"},"hljs-section":{color:"#a6e22e",fontWeight:"bold"},"hljs-emphasis":{color:"#a6e22e"},"hljs-type":{color:"#a6e22e",fontWeight:"bold"},"hljs-built_in":{color:"#a6e22e"},"hljs-builtin-name":{color:"#a6e22e"},"hljs-selector-attr":{color:"#a6e22e"},"hljs-selector-pseudo":{color:"#a6e22e"},"hljs-addition":{color:"#a6e22e"},"hljs-variable":{color:"#a6e22e"},"hljs-template-tag":{color:"#a6e22e"},"hljs-template-variable":{color:"#a6e22e"},"hljs-comment":{color:"#75715e"},"hljs-quote":{color:"#75715e"},"hljs-deletion":{color:"#75715e"},"hljs-meta":{color:"#75715e"},"hljs-doctag":{fontWeight:"bold"},"hljs-selector-id":{fontWeight:"bold"}},nord:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#2E3440",color:"#D8DEE9"},"hljs-subst":{color:"#D8DEE9"},"hljs-selector-tag":{color:"#81A1C1"},"hljs-selector-id":{color:"#8FBCBB",fontWeight:"bold"},"hljs-selector-class":{color:"#8FBCBB"},"hljs-selector-attr":{color:"#8FBCBB"},"hljs-selector-pseudo":{color:"#88C0D0"},"hljs-addition":{backgroundColor:"rgba(163, 190, 140, 0.5)"},"hljs-deletion":{backgroundColor:"rgba(191, 97, 106, 0.5)"},"hljs-built_in":{color:"#8FBCBB"},"hljs-type":{color:"#8FBCBB"},"hljs-class":{color:"#8FBCBB"},"hljs-function":{color:"#88C0D0"},"hljs-function > .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},obsidian:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},"tomorrow-night":{"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}}},X=o()(Q),ee=e=>i()(X).call(X,e)?Q[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),Y)},90242:(e,t,n)=>{"use strict";n.d(t,{AF:()=>he,Ay:()=>be,D$:()=>He,DR:()=>Se,GZ:()=>Me,HP:()=>ve,Ik:()=>ke,J6:()=>Ue,Kn:()=>me,LQ:()=>de,Nm:()=>Le,O2:()=>Qe,Pz:()=>We,Q2:()=>we,QG:()=>Fe,UG:()=>Ne,Uj:()=>Ge,V9:()=>Je,Wl:()=>ge,XV:()=>Ve,Xb:()=>Ze,Zl:()=>Ae,_5:()=>Ee,be:()=>De,cz:()=>Ke,gp:()=>_e,hW:()=>Be,iQ:()=>xe,kJ:()=>ye,mz:()=>pe,nX:()=>qe,oG:()=>fe,oJ:()=>ze,po:()=>$e,r3:()=>Pe,wh:()=>Re,xi:()=>Ie});var r=n(58309),o=n.n(r),a=n(97606),i=n.n(a),s=n(74386),l=n.n(s),u=n(86),c=n.n(u),p=n(14418),f=n.n(p),h=n(28222),d=n.n(h),m=(n(11189),n(24282)),g=n.n(m),y=n(76986),v=n.n(y),b=n(2578),w=n.n(b),E=n(24278),x=n.n(E),_=(n(39022),n(92039)),S=n.n(_),A=(n(58118),n(35627)),C=n.n(A),k=n(11882),O=n.n(k),j=n(51679),T=n.n(j),I=n(27043),N=n.n(I),P=n(81607),R=n.n(P),M=n(43393),D=n.n(M),L=n(17967),B=n(68929),F=n.n(B),z=n(11700),U=n.n(z),q=n(88306),$=n.n(q),V=n(13311),W=n.n(V),H=n(59704),J=n.n(H),K=n(77813),G=n.n(K),Z=n(23560),Y=n.n(Z),Q=n(57050),X=n(27504),ee=n(8269),te=n.n(ee),ne=n(19069),re=n(92282),oe=n.n(re),ae=n(89072),ie=n.n(ae),se=n(1272),le=n(48764).Buffer;const ue="default",ce=e=>D().Iterable.isIterable(e);function pe(e){return me(e)?ce(e)?e.toJS():e:{}}function fe(e){var t,n;if(ce(e))return e;if(e instanceof X.Z.File)return e;if(!me(e))return e;if(o()(e))return i()(n=D().Seq(e)).call(n,fe).toList();if(Y()(l()(e))){var r;const t=function(e){if(!Y()(l()(e)))return e;const t={},n="_**[]",r={};for(let o of l()(e).call(e))if(t[o[0]]||r[o[0]]&&r[o[0]].containsMultiple){if(!r[o[0]]){r[o[0]]={containsMultiple:!0,length:1},t[`${o[0]}${n}${r[o[0]].length}`]=t[o[0]],delete t[o[0]]}r[o[0]].length+=1,t[`${o[0]}${n}${r[o[0]].length}`]=o[1]}else t[o[0]]=o[1];return t}(e);return i()(r=D().OrderedMap(t)).call(r,fe)}return i()(t=D().OrderedMap(e)).call(t,fe)}function he(e){return o()(e)?e:[e]}function de(e){return"function"==typeof e}function me(e){return!!e&&"object"==typeof e}function ge(e){return"function"==typeof e}function ye(e){return o()(e)}const ve=$();function be(e,t){var n;return g()(n=d()(e)).call(n,((n,r)=>(n[r]=t(e[r],r),n)),{})}function we(e,t){var n;return g()(n=d()(e)).call(n,((n,r)=>{let o=t(e[r],r);return o&&"object"==typeof o&&v()(n,o),n}),{})}function Ee(e){return t=>{let{dispatch:n,getState:r}=t;return t=>n=>"function"==typeof n?n(e()):t(n)}}function xe(e){var t;let n=e.keySeq();return n.contains(ue)?ue:w()(t=f()(n).call(n,(e=>"2"===(e+"")[0]))).call(t).first()}function _e(e,t){if(!D().Iterable.isIterable(e))return D().List();let n=e.getIn(o()(t)?t:[t]);return D().List.isList(n)?n:D().List()}function Se(e){let t,n=[/filename\*=[^']+'\w*'"([^"]+)";?/i,/filename\*=[^']+'\w*'([^;]+);?/i,/filename="([^;]*);?"/i,/filename=([^;]*);?/i];if(S()(n).call(n,(n=>(t=n.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function Ae(e){return t=e.replace(/\.[^./]*$/,""),U()(F()(t));var t}function Ce(e,t,n,r,a){if(!t)return[];let s=[],l=t.get("nullable"),u=t.get("required"),p=t.get("maximum"),h=t.get("minimum"),d=t.get("type"),m=t.get("format"),g=t.get("maxLength"),y=t.get("minLength"),v=t.get("uniqueItems"),b=t.get("maxItems"),w=t.get("minItems"),E=t.get("pattern");const x=n||!0===u,_=null!=e;if(l&&null===e||!d||!(x||_&&"array"===d||!(!x&&!_)))return[];let A="string"===d&&e,C="array"===d&&o()(e)&&e.length,k="array"===d&&D().List.isList(e)&&e.count();const O=[A,C,k,"array"===d&&"string"==typeof e&&e,"file"===d&&e instanceof X.Z.File,"boolean"===d&&(e||!1===e),"number"===d&&(e||0===e),"integer"===d&&(e||0===e),"object"===d&&"object"==typeof e&&null!==e,"object"===d&&"string"==typeof e&&e],j=S()(O).call(O,(e=>!!e));if(x&&!j&&!r)return s.push("Required field is not provided"),s;if("object"===d&&(null===a||"application/json"===a)){let n=e;if("string"==typeof e)try{n=JSON.parse(e)}catch(e){return s.push("Parameter string value must be valid JSON"),s}var T;if(t&&t.has("required")&&ge(u.isList)&&u.isList()&&c()(u).call(u,(e=>{void 0===n[e]&&s.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties"))c()(T=t.get("properties")).call(T,((e,t)=>{const o=Ce(n[t],e,!1,r,a);s.push(...i()(o).call(o,(e=>({propKey:t,error:e}))))}))}if(E){let t=((e,t)=>{if(!new RegExp(t).test(e))return"Value must follow pattern "+t})(e,E);t&&s.push(t)}if(w&&"array"===d){let t=((e,t)=>{if(!e&&t>=1||e&&e.length{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?"":"s"}`})(e,b);t&&s.push({needRemove:!0,error:t})}if(v&&"array"===d){let t=((e,t)=>{if(e&&("true"===t||!0===t)){const t=(0,M.fromJS)(e),n=t.toSet();if(e.length>n.size){let e=(0,M.Set)();if(c()(t).call(t,((n,r)=>{f()(t).call(t,(e=>ge(e.equals)?e.equals(n):e===n)).size>1&&(e=e.add(r))})),0!==e.size)return i()(e).call(e,(e=>({index:e,error:"No duplicates allowed."}))).toArray()}}})(e,v);t&&s.push(...t)}if(g||0===g){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?"s":""}`})(e,g);t&&s.push(t)}if(y){let t=((e,t)=>{if(e.length{if(e>t)return`Value must be less than ${t}`})(e,p);t&&s.push(t)}if(h||0===h){let t=((e,t)=>{if(e{if(isNaN(Date.parse(e)))return"Value must be a DateTime"})(e):"uuid"===m?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return"Value must be a Guid"})(e):(e=>{if(e&&"string"!=typeof e)return"Value must be a string"})(e),!t)return s;s.push(t)}else if("boolean"===d){let t=(e=>{if("true"!==e&&"false"!==e&&!0!==e&&!1!==e)return"Value must be a boolean"})(e);if(!t)return s;s.push(t)}else if("number"===d){let t=(e=>{if(!/^-?\d+(\.?\d+)?$/.test(e))return"Value must be a number"})(e);if(!t)return s;s.push(t)}else if("integer"===d){let t=(e=>{if(!/^-?\d+$/.test(e))return"Value must be an integer"})(e);if(!t)return s;s.push(t)}else if("array"===d){if(!C&&!k)return s;e&&c()(e).call(e,((e,n)=>{const o=Ce(e,t.get("items"),!1,r,a);s.push(...i()(o).call(o,(e=>({index:n,error:e}))))}))}else if("file"===d){let t=(e=>{if(e&&!(e instanceof X.Z.File))return"Value must be a file"})(e);if(!t)return s;s.push(t)}return s}const ke=function(e,t){let{isOAS3:n=!1,bypassRequiredCheck:r=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=e.get("required"),{schema:a,parameterContentMediaType:i}=(0,ne.Z)(e,{isOAS3:n});return Ce(t,a,o,r,i)},Oe=[{when:/json/,shouldStringifyTypes:["string"]}],je=["object"],Te=(e,t,n,r)=>{const o=(0,Q.memoizedSampleFromSchema)(e,t,r),a=typeof o,i=g()(Oe).call(Oe,((e,t)=>t.when.test(n)?[...e,...t.shouldStringifyTypes]:e),je);return J()(i,(e=>e===a))?C()(o,null,2):o},Ie=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return e&&ge(e.toJS)&&(e=e.toJS()),r&&ge(r.toJS)&&(r=r.toJS()),/xml/.test(t)?((e,t,n)=>{if(e&&!e.xml&&(e.xml={}),e&&!e.xml.name){if(!e.$$ref&&(e.type||e.items||e.properties||e.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(e.$$ref){let t=e.$$ref.match(/\S*\/(\S+)$/);e.xml.name=t[1]}}return(0,Q.memoizedCreateXMLExample)(e,t,n)})(e,n,r):/(yaml|yml)/.test(t)?((e,t,n,r)=>{const o=Te(e,t,n,r);let a;try{a=se.ZP.dump(se.ZP.load(o),{lineWidth:-1},{schema:se.A8}),"\n"===a[a.length-1]&&(a=x()(a).call(a,0,a.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return a.replace(/\t/g," ")})(e,n,t,r):Te(e,n,t,r)},Ne=()=>{let e={},t=X.Z.location.search;if(!t)return{};if(""!=t){let n=t.substr(1).split("&");for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&(t=n[t].split("="),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||"")}return e},Pe=e=>{let t;return t=e instanceof le?e:le.from(e.toString(),"utf-8"),t.toString("base64")},Re={operationsSorter:{alpha:(e,t)=>e.get("path").localeCompare(t.get("path")),method:(e,t)=>e.get("method").localeCompare(t.get("method"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},Me=e=>{let t=[];for(let n in e){let r=e[n];void 0!==r&&""!==r&&t.push([n,"=",encodeURIComponent(r).replace(/%20/g,"+")].join(""))}return t.join("&")},De=(e,t,n)=>!!W()(n,(n=>G()(e[n],t[n])));function Le(e){return"string"!=typeof e||""===e?"":(0,L.N)(e)}function Be(e){return!(!e||O()(e).call(e,"localhost")>=0||O()(e).call(e,"127.0.0.1")>=0||"none"===e)}function Fe(e){if(!D().OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=T()(e).call(e,((e,t)=>N()(t).call(t,"2")&&d()(e.get("content")||{}).length>0)),n=e.get("default")||D().OrderedMap(),r=(n.get("content")||D().OrderedMap()).keySeq().toJS().length?n:null;return t||r}const ze=e=>"string"==typeof e||e instanceof String?R()(e).call(e).replace(/\s/g,"%20"):"",Ue=e=>te()(ze(e).replace(/%20/g,"_")),qe=e=>f()(e).call(e,((e,t)=>/^x-/.test(t))),$e=e=>f()(e).call(e,((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function Ve(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if("object"!=typeof e||o()(e)||null===e||!t)return e;const a=v()({},e);return c()(n=d()(a)).call(n,(e=>{e===t&&r(a[e],e)?delete a[e]:a[e]=Ve(a[e],t,r)})),a}function We(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"==typeof e&&null!==e)try{return C()(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function He(e){return"number"==typeof e?e.toString():e}function Je(e){let{returnAll:t=!1,allowHashes:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!D().Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");const r=e.get("name"),o=e.get("in");let a=[];return e&&e.hashCode&&o&&r&&n&&a.push(`${o}.${r}.hash-${e.hashCode()}`),o&&r&&a.push(`${o}.${r}`),a.push(r),t?a:a[0]||""}function Ke(e,t){var n;const r=Je(e,{returnAll:!0});return f()(n=i()(r).call(r,(e=>t[e]))).call(n,(e=>void 0!==e))[0]}function Ge(){return Ye(oe()(32).toString("base64"))}function Ze(e){return Ye(ie()("sha256").update(e).digest("base64"))}function Ye(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}const Qe=e=>!e||!(!ce(e)||!e.isEmpty())},2518:(e,t,n)=>{"use strict";function r(e){return function(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?"json":null}n.d(t,{O:()=>r})},27504:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=function(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if("undefined"==typeof window)return e;try{e=window;for(var t of["File","Blob","FormData"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}()},19069:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(14418),o=n.n(r),a=n(58118),i=n.n(a),s=n(43393),l=n.n(s);const u=l().Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");function c(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!l().Map.isMap(e))return{schema:l().Map(),parameterContentMediaType:null};if(!t)return"body"===e.get("in")?{schema:e.get("schema",l().Map()),parameterContentMediaType:null}:{schema:o()(e).call(e,((e,t)=>i()(u).call(u,t))),parameterContentMediaType:null};if(e.get("content")){const t=e.get("content",l().Map({})).keySeq().first();return{schema:e.getIn(["content",t,"schema"],l().Map()),parameterContentMediaType:t}}return{schema:e.get("schema")?e.get("schema",l().Map()):l().Map(),parameterContentMediaType:null}}},60314:(e,t,n)=>{"use strict";n.d(t,{Z:()=>x});var r=n(58309),o=n.n(r),a=n(2250),i=n.n(a),s=n(25110),l=n.n(s),u=n(8712),c=n.n(u),p=n(51679),f=n.n(p),h=n(12373),d=n.n(h),m=n(18492),g=n.n(m),y=n(88306),v=n.n(y);const b=e=>t=>o()(e)&&o()(t)&&e.length===t.length&&i()(e).call(e,((e,n)=>e===t[n])),w=function(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:w;const{Cache:n}=v();v().Cache=E;const r=v()(e,t);return v().Cache=n,r}},79742:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,a=s(e),i=a[0],l=a[1],u=new o(function(e,t,n){return 3*(t+n)/4-n}(0,i,l)),c=0,p=l>0?i-4:i;for(n=0;n>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,u[c++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,a=[],i=16383,s=0,u=r-o;su?u:s+i));1===o?(t=e[r-1],a.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],a.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return a.join("")};for(var n=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)n[i]=a[i],r[a.charCodeAt(i)]=i;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,r){for(var o,a,i=[],s=t;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return i.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},48764:(e,t,n)=>{"use strict";const r=n(79742),o=n(80645),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return p(e)}return u(e,t,n)}function u(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|m(e,t);let r=s(n);const o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(G(e,Uint8Array)){const t=new Uint8Array(e);return h(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(G(e,ArrayBuffer)||e&&G(e.buffer,ArrayBuffer))return h(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(G(e,SharedArrayBuffer)||e&&G(e.buffer,SharedArrayBuffer)))return h(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const o=function(e){if(l.isBuffer(e)){const t=0|d(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!=typeof e.length||Z(e.length)?s(0):f(e);if("Buffer"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function p(e){return c(e),s(e<0?0:0|d(e))}function f(e){const t=e.length<0?0:0|d(e.length),n=s(t);for(let r=0;r=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||G(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return H(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return J(e).length;default:if(o)return r?-1:H(e).length;t=(""+t).toLowerCase(),o=!0}}function g(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return C(this,t,n);case"ascii":return O(this,t,n);case"latin1":case"binary":return j(this,t,n);case"base64":return A(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),Z(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){let a,i=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;i=2,s/=2,l/=2,n/=2}function u(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let r=-1;for(a=n;as&&(n=s-l),a=n;a>=0;a--){let n=!0;for(let r=0;ro&&(r=o):r=o;const a=t.length;let i;for(r>a/2&&(r=a/2),i=0;i>8,o=n%256,a.push(o),a.push(r);return a}(t,e.length-n),e,n,r)}function A(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function C(e,t,n){n=Math.min(e.length,n);const r=[];let o=t;for(;o239?4:t>223?3:t>191?2:1;if(o+i<=n){let n,r,s,l;switch(i){case 1:t<128&&(a=t);break;case 2:n=e[o+1],128==(192&n)&&(l=(31&t)<<6|63&n,l>127&&(a=l));break;case 3:n=e[o+1],r=e[o+2],128==(192&n)&&128==(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(a=l));break;case 4:n=e[o+1],r=e[o+2],s=e[o+3],128==(192&n)&&128==(192&r)&&128==(192&s)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&s,l>65535&&l<1114112&&(a=l))}}null===a?(a=65533,i=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),o+=i}return function(e){const t=e.length;if(t<=k)return String.fromCharCode.apply(String,e);let n="",r=0;for(;rr.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,o)):Uint8Array.prototype.set.call(r,t,o);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(r,o)}o+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tn&&(e+=" ... "),""},a&&(l.prototype[a]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,o){if(G(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;let a=(o>>>=0)-(r>>>=0),i=(n>>>=0)-(t>>>=0);const s=Math.min(a,i),u=this.slice(r,o),c=e.slice(t,n);for(let e=0;e>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}const o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let a=!1;for(;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return E(this,e,t,n);case"ascii":case"latin1":case"binary":return x(this,e,t,n);case"base64":return _(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const k=4096;function O(e,t,n){let r="";n=Math.min(e.length,n);for(let o=t;or)&&(n=r);let o="";for(let r=t;rn)throw new RangeError("Trying to access beyond buffer length")}function P(e,t,n,r,o,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function R(e,t,n,r,o){q(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,n}function M(e,t,n,r,o){q(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n+7]=a,a>>=8,e[n+6]=a,a>>=8,e[n+5]=a,a>>=8,e[n+4]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=i,i>>=8,e[n+2]=i,i>>=8,e[n+1]=i,i>>=8,e[n]=i,n+8}function D(e,t,n,r,o,a){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function L(e,t,n,r,a){return t=+t,n>>>=0,a||D(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,a){return t=+t,n>>>=0,a||D(e,0,n,8),o.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t>>=0,t>>>=0,n||N(e,t,this.length);let r=this[e],o=1,a=0;for(;++a>>=0,t>>>=0,n||N(e,t,this.length);let r=this[e+--t],o=1;for(;t>0&&(o*=256);)r+=this[e+--t]*o;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||N(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||N(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||N(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||N(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||N(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=Q((function(e){$(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(o)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<>>=0,t>>>=0,n||N(e,t,this.length);let r=this[e],o=1,a=0;for(;++a=o&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||N(e,t,this.length);let r=t,o=1,a=this[e+--r];for(;r>0&&(o*=256);)a+=this[e+--r]*o;return o*=128,a>=o&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return e>>>=0,t||N(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||N(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||N(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||N(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||N(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=Q((function(e){$(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<>>=0,t||N(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||N(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||N(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||N(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){P(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=1,a=0;for(this[t]=255&e;++a>>=0,n>>>=0,!r){P(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=n-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=Q((function(e,t=0){return R(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=Q((function(e,t=0){return M(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);P(this,e,t,n,r-1,-r)}let o=0,a=1,i=0;for(this[t]=255&e;++o>0)-i&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);P(this,e,t,n,r-1,-r)}let o=n-1,a=1,i=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/a>>0)-i&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=Q((function(e,t=0){return R(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=Q((function(e,t=0){return M(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return L(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return L(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o=r+4;n-=3)t=`_${e.slice(n-3,n)}${t}`;return`${e.slice(0,n)}${t}`}function q(e,t,n,r,o,a){if(e>n||e3?0===t||t===BigInt(0)?`>= 0${r} and < 2${r} ** ${8*(a+1)}${r}`:`>= -(2${r} ** ${8*(a+1)-1}${r}) and < 2 ** ${8*(a+1)-1}${r}`:`>= ${t}${r} and <= ${n}${r}`,new F.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,n){$(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||V(t,e.length-(n+1))}(r,o,a)}function $(e,t){if("number"!=typeof e)throw new F.ERR_INVALID_ARG_TYPE(t,"number",e)}function V(e,t,n){if(Math.floor(e)!==e)throw $(e,n),new F.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new F.ERR_BUFFER_OUT_OF_BOUNDS;throw new F.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${t}`,e)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(e,t,n){let r=`The value of "${e}" is out of range.`,o=n;return Number.isInteger(n)&&Math.abs(n)>2**32?o=U(String(n)):"bigint"==typeof n&&(o=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(o=U(o)),o+="n"),r+=` It must be ${t}. Received ${o}`,r}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function H(e,t){let n;t=t||1/0;const r=e.length;let o=null;const a=[];for(let i=0;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(i+1===r){(t-=3)>-1&&a.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&a.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function J(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(W,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function K(e,t,n,r){let o;for(o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function G(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Z(e){return e!=e}const Y=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let o=0;o<16;++o)t[r+o]=e[n]+e[o]}return t}();function Q(e){return"undefined"==typeof BigInt?X:e}function X(){throw new Error("BigInt not supported")}},21924:(e,t,n)=>{"use strict";var r=n(40210),o=n(55559),a=o(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"==typeof n&&a(e,".prototype.")>-1?o(n):n}},55559:(e,t,n)=>{"use strict";var r=n(58612),o=n(40210),a=o("%Function.prototype.apply%"),i=o("%Function.prototype.call%"),s=o("%Reflect.apply%",!0)||r.call(i,a),l=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),c=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(e){u=null}e.exports=function(e){var t=s(r,i,arguments);l&&u&&(l(t,"length").configurable&&u(t,"length",{value:1+c(0,e.length-(arguments.length-1))}));return t};var p=function(){return s(r,a,arguments)};u?u(e.exports,"apply",{value:p}):e.exports.apply=p},94184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t{"use strict";t.parse=function(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");var n={},r=(t||{}).decode||o,a=0;for(;a{"use strict";var r=n(11742),o={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,a,i,s,l,u,c=!1;t||(t={}),n=t.debug||!1;try{if(i=r(),s=document.createRange(),l=document.getSelection(),(u=document.createElement("span")).textContent=e,u.ariaHidden="true",u.style.all="unset",u.style.position="fixed",u.style.top=0,u.style.clip="rect(0, 0, 0, 0)",u.style.whiteSpace="pre",u.style.webkitUserSelect="text",u.style.MozUserSelect="text",u.style.msUserSelect="text",u.style.userSelect="text",u.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[t.format]||o.default;window.clipboardData.setData(a,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(u),s.selectNodeContents(u),l.addRange(s),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");c=!0}catch(r){n&&console.error("unable to copy using execCommand: ",r),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),c=!0}catch(r){n&&console.error("unable to copy using clipboardData: ",r),n&&console.error("falling back to prompt"),a=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(a,e)}}finally{l&&("function"==typeof l.removeRange?l.removeRange(s):l.removeAllRanges()),u&&document.body.removeChild(u),i()}return c}},90093:(e,t,n)=>{var r=n(28196);e.exports=r},3688:(e,t,n)=>{var r=n(11955);e.exports=r},83838:(e,t,n)=>{var r=n(46279);e.exports=r},15684:(e,t,n)=>{var r=n(19373);e.exports=r},81331:(e,t,n)=>{var r=n(52759);e.exports=r},65362:(e,t,n)=>{var r=n(63383);e.exports=r},91254:(e,t,n)=>{var r=n(57396);e.exports=r},43536:(e,t,n)=>{var r=n(41910);e.exports=r},37331:(e,t,n)=>{var r=n(79427);e.exports=r},68522:(e,t,n)=>{var r=n(62857);e.exports=r},73151:(e,t,n)=>{var r=n(9534);e.exports=r},45012:(e,t,n)=>{var r=n(23059);e.exports=r},80281:(e,t,n)=>{var r=n(92547);n(97522),n(43975),n(45414),e.exports=r},40031:(e,t,n)=>{var r=n(46509);e.exports=r},17487:(e,t,n)=>{var r=n(35774);e.exports=r},54493:(e,t,n)=>{n(77971),n(53242);var r=n(54058);e.exports=r.Array.from},24034:(e,t,n)=>{n(92737);var r=n(54058);e.exports=r.Array.isArray},15367:(e,t,n)=>{n(85906);var r=n(35703);e.exports=r("Array").concat},12710:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r("Array").entries},51459:(e,t,n)=>{n(48851);var r=n(35703);e.exports=r("Array").every},6172:(e,t,n)=>{n(80290);var r=n(35703);e.exports=r("Array").fill},62383:(e,t,n)=>{n(21501);var r=n(35703);e.exports=r("Array").filter},60009:(e,t,n)=>{n(44929);var r=n(35703);e.exports=r("Array").findIndex},17671:(e,t,n)=>{n(80833);var r=n(35703);e.exports=r("Array").find},99324:(e,t,n)=>{n(2437);var r=n(35703);e.exports=r("Array").forEach},80991:(e,t,n)=>{n(97690);var r=n(35703);e.exports=r("Array").includes},8700:(e,t,n)=>{n(99076);var r=n(35703);e.exports=r("Array").indexOf},95909:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r("Array").keys},6442:(e,t,n)=>{n(75915);var r=n(35703);e.exports=r("Array").lastIndexOf},23866:(e,t,n)=>{n(68787);var r=n(35703);e.exports=r("Array").map},9896:(e,t,n)=>{n(48528);var r=n(35703);e.exports=r("Array").push},52999:(e,t,n)=>{n(81876);var r=n(35703);e.exports=r("Array").reduce},24900:(e,t,n)=>{n(60186);var r=n(35703);e.exports=r("Array").slice},3824:(e,t,n)=>{n(36026);var r=n(35703);e.exports=r("Array").some},2948:(e,t,n)=>{n(4115);var r=n(35703);e.exports=r("Array").sort},78209:(e,t,n)=>{n(98611);var r=n(35703);e.exports=r("Array").splice},14423:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r("Array").values},81103:(e,t,n)=>{n(95160);var r=n(54058);e.exports=r.Date.now},27700:(e,t,n)=>{n(73381);var r=n(35703);e.exports=r("Function").bind},16246:(e,t,n)=>{var r=n(7046),o=n(27700),a=Function.prototype;e.exports=function(e){var t=e.bind;return e===a||r(a,e)&&t===a.bind?o:t}},56043:(e,t,n)=>{var r=n(7046),o=n(15367),a=Array.prototype;e.exports=function(e){var t=e.concat;return e===a||r(a,e)&&t===a.concat?o:t}},13160:(e,t,n)=>{var r=n(7046),o=n(51459),a=Array.prototype;e.exports=function(e){var t=e.every;return e===a||r(a,e)&&t===a.every?o:t}},80446:(e,t,n)=>{var r=n(7046),o=n(6172),a=Array.prototype;e.exports=function(e){var t=e.fill;return e===a||r(a,e)&&t===a.fill?o:t}},2480:(e,t,n)=>{var r=n(7046),o=n(62383),a=Array.prototype;e.exports=function(e){var t=e.filter;return e===a||r(a,e)&&t===a.filter?o:t}},7147:(e,t,n)=>{var r=n(7046),o=n(60009),a=Array.prototype;e.exports=function(e){var t=e.findIndex;return e===a||r(a,e)&&t===a.findIndex?o:t}},32236:(e,t,n)=>{var r=n(7046),o=n(17671),a=Array.prototype;e.exports=function(e){var t=e.find;return e===a||r(a,e)&&t===a.find?o:t}},58557:(e,t,n)=>{var r=n(7046),o=n(80991),a=n(21631),i=Array.prototype,s=String.prototype;e.exports=function(e){var t=e.includes;return e===i||r(i,e)&&t===i.includes?o:"string"==typeof e||e===s||r(s,e)&&t===s.includes?a:t}},34570:(e,t,n)=>{var r=n(7046),o=n(8700),a=Array.prototype;e.exports=function(e){var t=e.indexOf;return e===a||r(a,e)&&t===a.indexOf?o:t}},57564:(e,t,n)=>{var r=n(7046),o=n(6442),a=Array.prototype;e.exports=function(e){var t=e.lastIndexOf;return e===a||r(a,e)&&t===a.lastIndexOf?o:t}},88287:(e,t,n)=>{var r=n(7046),o=n(23866),a=Array.prototype;e.exports=function(e){var t=e.map;return e===a||r(a,e)&&t===a.map?o:t}},93993:(e,t,n)=>{var r=n(7046),o=n(9896),a=Array.prototype;e.exports=function(e){var t=e.push;return e===a||r(a,e)&&t===a.push?o:t}},68025:(e,t,n)=>{var r=n(7046),o=n(52999),a=Array.prototype;e.exports=function(e){var t=e.reduce;return e===a||r(a,e)&&t===a.reduce?o:t}},59257:(e,t,n)=>{var r=n(7046),o=n(80454),a=String.prototype;e.exports=function(e){var t=e.repeat;return"string"==typeof e||e===a||r(a,e)&&t===a.repeat?o:t}},69601:(e,t,n)=>{var r=n(7046),o=n(24900),a=Array.prototype;e.exports=function(e){var t=e.slice;return e===a||r(a,e)&&t===a.slice?o:t}},28299:(e,t,n)=>{var r=n(7046),o=n(3824),a=Array.prototype;e.exports=function(e){var t=e.some;return e===a||r(a,e)&&t===a.some?o:t}},69355:(e,t,n)=>{var r=n(7046),o=n(2948),a=Array.prototype;e.exports=function(e){var t=e.sort;return e===a||r(a,e)&&t===a.sort?o:t}},18339:(e,t,n)=>{var r=n(7046),o=n(78209),a=Array.prototype;e.exports=function(e){var t=e.splice;return e===a||r(a,e)&&t===a.splice?o:t}},71611:(e,t,n)=>{var r=n(7046),o=n(3269),a=String.prototype;e.exports=function(e){var t=e.startsWith;return"string"==typeof e||e===a||r(a,e)&&t===a.startsWith?o:t}},62774:(e,t,n)=>{var r=n(7046),o=n(13348),a=String.prototype;e.exports=function(e){var t=e.trim;return"string"==typeof e||e===a||r(a,e)&&t===a.trim?o:t}},84426:(e,t,n)=>{n(32619);var r=n(54058),o=n(79730);r.JSON||(r.JSON={stringify:JSON.stringify}),e.exports=function(e,t,n){return o(r.JSON.stringify,null,arguments)}},91018:(e,t,n)=>{n(66274),n(37501),n(55967),n(77971);var r=n(54058);e.exports=r.Map},45999:(e,t,n)=>{n(49221);var r=n(54058);e.exports=r.Object.assign},7702:(e,t,n)=>{n(74979);var r=n(54058).Object,o=e.exports=function(e,t){return r.defineProperties(e,t)};r.defineProperties.sham&&(o.sham=!0)},48171:(e,t,n)=>{n(86450);var r=n(54058).Object,o=e.exports=function(e,t,n){return r.defineProperty(e,t,n)};r.defineProperty.sham&&(o.sham=!0)},286:(e,t,n)=>{n(46924);var r=n(54058).Object,o=e.exports=function(e,t){return r.getOwnPropertyDescriptor(e,t)};r.getOwnPropertyDescriptor.sham&&(o.sham=!0)},92766:(e,t,n)=>{n(88482);var r=n(54058);e.exports=r.Object.getOwnPropertyDescriptors},30498:(e,t,n)=>{n(35824);var r=n(54058);e.exports=r.Object.getOwnPropertySymbols},48494:(e,t,n)=>{n(21724);var r=n(54058);e.exports=r.Object.keys},98430:(e,t,n)=>{n(26614);var r=n(54058);e.exports=r.Object.values},52956:(e,t,n)=>{n(47627),n(66274),n(55967),n(98881),n(4560),n(91302),n(44349),n(77971);var r=n(54058);e.exports=r.Promise},21631:(e,t,n)=>{n(11035);var r=n(35703);e.exports=r("String").includes},80454:(e,t,n)=>{n(60986);var r=n(35703);e.exports=r("String").repeat},3269:(e,t,n)=>{n(94761);var r=n(35703);e.exports=r("String").startsWith},13348:(e,t,n)=>{n(57398);var r=n(35703);e.exports=r("String").trim},57473:(e,t,n)=>{n(85906),n(55967),n(35824),n(8555),n(52615),n(21732),n(35903),n(1825),n(28394),n(45915),n(61766),n(62737),n(89911),n(74315),n(63131),n(64714),n(70659),n(69120),n(79413),n(1502);var r=n(54058);e.exports=r.Symbol},24227:(e,t,n)=>{n(66274),n(55967),n(77971),n(1825);var r=n(11477);e.exports=r.f("iterator")},62978:(e,t,n)=>{n(18084),n(63131);var r=n(11477);e.exports=r.f("toPrimitive")},14122:(e,t,n)=>{e.exports=n(89097)},44442:(e,t,n)=>{e.exports=n(51675)},57152:(e,t,n)=>{e.exports=n(82507)},69447:(e,t,n)=>{e.exports=n(628)},1449:(e,t,n)=>{e.exports=n(34501)},60269:(e,t,n)=>{e.exports=n(76936)},70573:(e,t,n)=>{e.exports=n(18180)},73685:(e,t,n)=>{e.exports=n(80621)},27533:(e,t,n)=>{e.exports=n(22948)},39057:(e,t,n)=>{e.exports=n(82108)},84710:(e,t,n)=>{e.exports=n(14058)},93799:(e,t,n)=>{e.exports=n(92093)},86600:(e,t,n)=>{e.exports=n(52201)},9759:(e,t,n)=>{e.exports=n(27398)},71384:(e,t,n)=>{e.exports=n(26189)},89097:(e,t,n)=>{var r=n(90093);e.exports=r},51675:(e,t,n)=>{var r=n(3688);e.exports=r},82507:(e,t,n)=>{var r=n(83838);e.exports=r},628:(e,t,n)=>{var r=n(15684);e.exports=r},34501:(e,t,n)=>{var r=n(81331);e.exports=r},76936:(e,t,n)=>{var r=n(65362);e.exports=r},18180:(e,t,n)=>{var r=n(91254);e.exports=r},80621:(e,t,n)=>{var r=n(43536);e.exports=r},22948:(e,t,n)=>{var r=n(37331);e.exports=r},82108:(e,t,n)=>{var r=n(68522);e.exports=r},14058:(e,t,n)=>{var r=n(73151);e.exports=r},92093:(e,t,n)=>{var r=n(45012);e.exports=r},52201:(e,t,n)=>{var r=n(80281);n(28783),n(97618),n(6989),n(65799),n(46774),n(22731),n(85605),n(31943),n(80620),n(36172),e.exports=r},27398:(e,t,n)=>{var r=n(40031);e.exports=r},26189:(e,t,n)=>{var r=n(17487);e.exports=r},24883:(e,t,n)=>{var r=n(57475),o=n(69826),a=TypeError;e.exports=function(e){if(r(e))return e;throw a(o(e)+" is not a function")}},174:(e,t,n)=>{var r=n(24284),o=n(69826),a=TypeError;e.exports=function(e){if(r(e))return e;throw a(o(e)+" is not a constructor")}},11851:(e,t,n)=>{var r=n(57475),o=String,a=TypeError;e.exports=function(e){if("object"==typeof e||r(e))return e;throw a("Can't set "+o(e)+" as a prototype")}},18479:e=>{e.exports=function(){}},5743:(e,t,n)=>{var r=n(7046),o=TypeError;e.exports=function(e,t){if(r(t,e))return e;throw o("Incorrect invocation")}},96059:(e,t,n)=>{var r=n(10941),o=String,a=TypeError;e.exports=function(e){if(r(e))return e;throw a(o(e)+" is not an object")}},97135:(e,t,n)=>{var r=n(95981);e.exports=r((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},91860:(e,t,n)=>{"use strict";var r=n(89678),o=n(59413),a=n(10623);e.exports=function(e){for(var t=r(this),n=a(t),i=arguments.length,s=o(i>1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,u=void 0===l?n:o(l,n);u>s;)t[s++]=e;return t}},56837:(e,t,n)=>{"use strict";var r=n(3610).forEach,o=n(34194)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},11354:(e,t,n)=>{"use strict";var r=n(86843),o=n(78834),a=n(89678),i=n(75196),s=n(6782),l=n(24284),u=n(10623),c=n(55449),p=n(53476),f=n(22902),h=Array;e.exports=function(e){var t=a(e),n=l(this),d=arguments.length,m=d>1?arguments[1]:void 0,g=void 0!==m;g&&(m=r(m,d>2?arguments[2]:void 0));var y,v,b,w,E,x,_=f(t),S=0;if(!_||this===h&&s(_))for(y=u(t),v=n?new this(y):h(y);y>S;S++)x=g?m(t[S],S):t[S],c(v,S,x);else for(E=(w=p(t,_)).next,v=n?new this:[];!(b=o(E,w)).done;S++)x=g?i(w,m,[b.value,S],!0):b.value,c(v,S,x);return v.length=S,v}},31692:(e,t,n)=>{var r=n(74529),o=n(59413),a=n(10623),i=function(e){return function(t,n,i){var s,l=r(t),u=a(l),c=o(i,u);if(e&&n!=n){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===n)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},3610:(e,t,n)=>{var r=n(86843),o=n(95329),a=n(37026),i=n(89678),s=n(10623),l=n(64692),u=o([].push),c=function(e){var t=1==e,n=2==e,o=3==e,c=4==e,p=6==e,f=7==e,h=5==e||p;return function(d,m,g,y){for(var v,b,w=i(d),E=a(w),x=r(m,g),_=s(E),S=0,A=y||l,C=t?A(d,_):n||f?A(d,0):void 0;_>S;S++)if((h||S in E)&&(b=x(v=E[S],S,w),e))if(t)C[S]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return S;case 2:u(C,v)}else switch(e){case 4:return!1;case 7:u(C,v)}return p?-1:o||c?c:C}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterReject:c(7)}},67145:(e,t,n)=>{"use strict";var r=n(79730),o=n(74529),a=n(62435),i=n(10623),s=n(34194),l=Math.min,u=[].lastIndexOf,c=!!u&&1/[1].lastIndexOf(1,-0)<0,p=s("lastIndexOf"),f=c||!p;e.exports=f?function(e){if(c)return r(u,this,arguments)||0;var t=o(this),n=i(t),s=n-1;for(arguments.length>1&&(s=l(s,a(arguments[1]))),s<0&&(s=n+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:u},50568:(e,t,n)=>{var r=n(95981),o=n(99813),a=n(53385),i=o("species");e.exports=function(e){return a>=51||!r((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},34194:(e,t,n)=>{"use strict";var r=n(95981);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){return 1},1)}))}},46499:(e,t,n)=>{var r=n(24883),o=n(89678),a=n(37026),i=n(10623),s=TypeError,l=function(e){return function(t,n,l,u){r(n);var c=o(t),p=a(c),f=i(c),h=e?f-1:0,d=e?-1:1;if(l<2)for(;;){if(h in p){u=p[h],h+=d;break}if(h+=d,e?h<0:f<=h)throw s("Reduce of empty array with no initial value")}for(;e?h>=0:f>h;h+=d)h in p&&(u=n(u,p[h],h,c));return u}};e.exports={left:l(!1),right:l(!0)}},89779:(e,t,n)=>{"use strict";var r=n(55746),o=n(1052),a=TypeError,i=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(o(e)&&!i(e,"length").writable)throw a("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},15790:(e,t,n)=>{var r=n(59413),o=n(10623),a=n(55449),i=Array,s=Math.max;e.exports=function(e,t,n){for(var l=o(e),u=r(t,l),c=r(void 0===n?l:n,l),p=i(s(c-u,0)),f=0;u{var r=n(95329);e.exports=r([].slice)},61388:(e,t,n)=>{var r=n(15790),o=Math.floor,a=function(e,t){var n=e.length,l=o(n/2);return n<8?i(e,t):s(e,a(r(e,0,l),t),a(r(e,l),t),t)},i=function(e,t){for(var n,r,o=e.length,a=1;a0;)e[r]=e[--r];r!==a++&&(e[r]=n)}return e},s=function(e,t,n,r){for(var o=t.length,a=n.length,i=0,s=0;i{var r=n(1052),o=n(24284),a=n(10941),i=n(99813)("species"),s=Array;e.exports=function(e){var t;return r(e)&&(t=e.constructor,(o(t)&&(t===s||r(t.prototype))||a(t)&&null===(t=t[i]))&&(t=void 0)),void 0===t?s:t}},64692:(e,t,n)=>{var r=n(5693);e.exports=function(e,t){return new(r(e))(0===t?0:t)}},75196:(e,t,n)=>{var r=n(96059),o=n(7609);e.exports=function(e,t,n,a){try{return a?t(r(n)[0],n[1]):t(n)}catch(t){o(e,"throw",t)}}},21385:(e,t,n)=>{var r=n(99813)("iterator"),o=!1;try{var a=0,i={next:function(){return{done:!!a++}},return:function(){o=!0}};i[r]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var a={};a[r]=function(){return{next:function(){return{done:n=!0}}}},e(a)}catch(e){}return n}},82532:(e,t,n)=>{var r=n(95329),o=r({}.toString),a=r("".slice);e.exports=function(e){return a(o(e),8,-1)}},9697:(e,t,n)=>{var r=n(22885),o=n(57475),a=n(82532),i=n(99813)("toStringTag"),s=Object,l="Arguments"==a(function(){return arguments}());e.exports=r?a:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=s(e),i))?n:l?a(t):"Object"==(r=a(t))&&o(t.callee)?"Arguments":r}},85616:(e,t,n)=>{"use strict";var r=n(29290),o=n(29202),a=n(94380),i=n(86843),s=n(5743),l=n(82119),u=n(93091),c=n(75105),p=n(23538),f=n(94431),h=n(55746),d=n(21647).fastKey,m=n(45402),g=m.set,y=m.getterFor;e.exports={getConstructor:function(e,t,n,c){var p=e((function(e,o){s(e,f),g(e,{type:t,index:r(null),first:void 0,last:void 0,size:0}),h||(e.size=0),l(o)||u(o,e[c],{that:e,AS_ENTRIES:n})})),f=p.prototype,m=y(t),v=function(e,t,n){var r,o,a=m(e),i=b(e,t);return i?i.value=n:(a.last=i={index:o=d(t,!0),key:t,value:n,previous:r=a.last,next:void 0,removed:!1},a.first||(a.first=i),r&&(r.next=i),h?a.size++:e.size++,"F"!==o&&(a.index[o]=i)),e},b=function(e,t){var n,r=m(e),o=d(t);if("F"!==o)return r.index[o];for(n=r.first;n;n=n.next)if(n.key==t)return n};return a(f,{clear:function(){for(var e=m(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete t[n.index],n=n.next;e.first=e.last=void 0,h?e.size=0:this.size=0},delete:function(e){var t=this,n=m(t),r=b(t,e);if(r){var o=r.next,a=r.previous;delete n.index[r.index],r.removed=!0,a&&(a.next=o),o&&(o.previous=a),n.first==r&&(n.first=o),n.last==r&&(n.last=a),h?n.size--:t.size--}return!!r},forEach:function(e){for(var t,n=m(this),r=i(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!b(this,e)}}),a(f,n?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),h&&o(f,"size",{configurable:!0,get:function(){return m(this).size}}),p},setStrong:function(e,t,n){var r=t+" Iterator",o=y(t),a=y(r);c(e,t,(function(e,t){g(this,{type:r,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?p("keys"==t?n.key:"values"==t?n.value:[n.key,n.value],!1):(e.target=void 0,p(void 0,!0))}),n?"entries":"values",!n,!0),f(t)}}},24683:(e,t,n)=>{"use strict";var r=n(76887),o=n(21899),a=n(21647),i=n(95981),s=n(32029),l=n(93091),u=n(5743),c=n(57475),p=n(10941),f=n(90904),h=n(65988).f,d=n(3610).forEach,m=n(55746),g=n(45402),y=g.set,v=g.getterFor;e.exports=function(e,t,n){var g,b=-1!==e.indexOf("Map"),w=-1!==e.indexOf("Weak"),E=b?"set":"add",x=o[e],_=x&&x.prototype,S={};if(m&&c(x)&&(w||_.forEach&&!i((function(){(new x).entries().next()})))){var A=(g=t((function(t,n){y(u(t,A),{type:e,collection:new x}),null!=n&&l(n,t[E],{that:t,AS_ENTRIES:b})}))).prototype,C=v(e);d(["add","clear","delete","forEach","get","has","set","keys","values","entries"],(function(e){var t="add"==e||"set"==e;!(e in _)||w&&"clear"==e||s(A,e,(function(n,r){var o=C(this).collection;if(!t&&w&&!p(n))return"get"==e&&void 0;var a=o[e](0===n?0:n,r);return t?this:a}))})),w||h(A,"size",{configurable:!0,get:function(){return C(this).collection.size}})}else g=n.getConstructor(t,e,b,E),a.enable();return f(g,e,!1,!0),S[e]=g,r({global:!0,forced:!0},S),w||n.setStrong(g,e,b),g}},23489:(e,t,n)=>{var r=n(90953),o=n(31136),a=n(49677),i=n(65988);e.exports=function(e,t,n){for(var s=o(t),l=i.f,u=a.f,c=0;c{var r=n(99813)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(e){}}return!1}},64160:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},23538:e=>{e.exports=function(e,t){return{value:e,done:t}}},32029:(e,t,n)=>{var r=n(55746),o=n(65988),a=n(31887);e.exports=r?function(e,t,n){return o.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},31887:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},55449:(e,t,n)=>{"use strict";var r=n(83894),o=n(65988),a=n(31887);e.exports=function(e,t,n){var i=r(t);i in e?o.f(e,i,a(0,n)):e[i]=n}},29202:(e,t,n)=>{var r=n(65988);e.exports=function(e,t,n){return r.f(e,t,n)}},95929:(e,t,n)=>{var r=n(32029);e.exports=function(e,t,n,o){return o&&o.enumerable?e[t]=n:r(e,t,n),e}},94380:(e,t,n)=>{var r=n(95929);e.exports=function(e,t,n){for(var o in t)n&&n.unsafe&&e[o]?e[o]=t[o]:r(e,o,t[o],n);return e}},75609:(e,t,n)=>{var r=n(21899),o=Object.defineProperty;e.exports=function(e,t){try{o(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},15863:(e,t,n)=>{"use strict";var r=n(69826),o=TypeError;e.exports=function(e,t){if(!delete e[t])throw o("Cannot delete property "+r(t)+" of "+r(e))}},55746:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},76616:e=>{var t="object"==typeof document&&document.all,n=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:n}},61333:(e,t,n)=>{var r=n(21899),o=n(10941),a=r.document,i=o(a)&&o(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},66796:e=>{var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},63281:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},34342:(e,t,n)=>{var r=n(2861).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},23321:(e,t,n)=>{var r=n(48501),o=n(6049);e.exports=!r&&!o&&"object"==typeof window&&"object"==typeof document},56491:e=>{e.exports="function"==typeof Bun&&Bun&&"string"==typeof Bun.version},48501:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},81046:(e,t,n)=>{var r=n(2861);e.exports=/MSIE|Trident/.test(r)},4470:(e,t,n)=>{var r=n(2861);e.exports=/ipad|iphone|ipod/i.test(r)&&"undefined"!=typeof Pebble},22749:(e,t,n)=>{var r=n(2861);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},6049:(e,t,n)=>{var r=n(34155),o=n(82532);e.exports=void 0!==r&&"process"==o(r)},58045:(e,t,n)=>{var r=n(2861);e.exports=/web0s(?!.*chrome)/i.test(r)},2861:e=>{e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},53385:(e,t,n)=>{var r,o,a=n(21899),i=n(2861),s=a.process,l=a.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(o=(r=c.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&i&&(!(r=i.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=i.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},18938:(e,t,n)=>{var r=n(2861).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},35703:(e,t,n)=>{var r=n(54058);e.exports=function(e){return r[e+"Prototype"]}},56759:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},53995:(e,t,n)=>{var r=n(95329),o=Error,a=r("".replace),i=String(o("zxcasd").stack),s=/\n\s*at [^:]*:[^\n]*/,l=s.test(i);e.exports=function(e,t){if(l&&"string"==typeof e&&!o.prepareStackTrace)for(;t--;)e=a(e,s,"");return e}},79585:(e,t,n)=>{var r=n(32029),o=n(53995),a=n(18780),i=Error.captureStackTrace;e.exports=function(e,t,n,s){a&&(i?i(e,t):r(e,"stack",o(n,s)))}},18780:(e,t,n)=>{var r=n(95981),o=n(31887);e.exports=!r((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},76887:(e,t,n)=>{"use strict";var r=n(21899),o=n(79730),a=n(97484),i=n(57475),s=n(49677).f,l=n(37252),u=n(54058),c=n(86843),p=n(32029),f=n(90953),h=function(e){var t=function(n,r,a){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,a)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,o,d,m,g,y,v,b,w,E=e.target,x=e.global,_=e.stat,S=e.proto,A=x?r:_?r[E]:(r[E]||{}).prototype,C=x?u:u[E]||p(u,E,{})[E],k=C.prototype;for(m in t)o=!(n=l(x?m:E+(_?".":"#")+m,e.forced))&&A&&f(A,m),y=C[m],o&&(v=e.dontCallGetSet?(w=s(A,m))&&w.value:A[m]),g=o&&v?v:t[m],o&&typeof y==typeof g||(b=e.bind&&o?c(g,r):e.wrap&&o?h(g):S&&i(g)?a(g):g,(e.sham||g&&g.sham||y&&y.sham)&&p(b,"sham",!0),p(C,m,b),S&&(f(u,d=E+"Prototype")||p(u,d,{}),p(u[d],m,g),e.real&&k&&(n||!k[m])&&p(k,m,g)))}},95981:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},45602:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},79730:(e,t,n)=>{var r=n(18285),o=Function.prototype,a=o.apply,i=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?i.bind(a):function(){return i.apply(a,arguments)})},86843:(e,t,n)=>{var r=n(97484),o=n(24883),a=n(18285),i=r(r.bind);e.exports=function(e,t){return o(e),void 0===t?e:a?i(e,t):function(){return e.apply(t,arguments)}}},18285:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},98308:(e,t,n)=>{"use strict";var r=n(95329),o=n(24883),a=n(10941),i=n(90953),s=n(93765),l=n(18285),u=Function,c=r([].concat),p=r([].join),f={};e.exports=l?u.bind:function(e){var t=o(this),n=t.prototype,r=s(arguments,1),l=function(){var n=c(r,s(arguments));return this instanceof l?function(e,t,n){if(!i(f,t)){for(var r=[],o=0;o{var r=n(18285),o=Function.prototype.call;e.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},79417:(e,t,n)=>{var r=n(55746),o=n(90953),a=Function.prototype,i=r&&Object.getOwnPropertyDescriptor,s=o(a,"name"),l=s&&"something"===function(){}.name,u=s&&(!r||r&&i(a,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},45526:(e,t,n)=>{var r=n(95329),o=n(24883);e.exports=function(e,t,n){try{return r(o(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},97484:(e,t,n)=>{var r=n(82532),o=n(95329);e.exports=function(e){if("Function"===r(e))return o(e)}},95329:(e,t,n)=>{var r=n(18285),o=Function.prototype,a=o.call,i=r&&o.bind.bind(a,a);e.exports=r?i:function(e){return function(){return a.apply(e,arguments)}}},626:(e,t,n)=>{var r=n(54058),o=n(21899),a=n(57475),i=function(e){return a(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},22902:(e,t,n)=>{var r=n(9697),o=n(14229),a=n(82119),i=n(12077),s=n(99813)("iterator");e.exports=function(e){if(!a(e))return o(e,s)||o(e,"@@iterator")||i[r(e)]}},53476:(e,t,n)=>{var r=n(78834),o=n(24883),a=n(96059),i=n(69826),s=n(22902),l=TypeError;e.exports=function(e,t){var n=arguments.length<2?s(e):t;if(o(n))return a(r(n,e));throw l(i(e)+" is not iterable")}},33323:(e,t,n)=>{var r=n(95329),o=n(1052),a=n(57475),i=n(82532),s=n(85803),l=r([].push);e.exports=function(e){if(a(e))return e;if(o(e)){for(var t=e.length,n=[],r=0;r{var r=n(24883),o=n(82119);e.exports=function(e,t){var n=e[t];return o(n)?void 0:r(n)}},21899:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||this||Function("return this")()},90953:(e,t,n)=>{var r=n(95329),o=n(89678),a=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(o(e),t)}},27748:e=>{e.exports={}},34845:e=>{e.exports=function(e,t){try{1==arguments.length?console.error(e):console.error(e,t)}catch(e){}}},15463:(e,t,n)=>{var r=n(626);e.exports=r("document","documentElement")},2840:(e,t,n)=>{var r=n(55746),o=n(95981),a=n(61333);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},37026:(e,t,n)=>{var r=n(95329),o=n(95981),a=n(82532),i=Object,s=r("".split);e.exports=o((function(){return!i("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?s(e,""):i(e)}:i},81302:(e,t,n)=>{var r=n(95329),o=n(57475),a=n(63030),i=r(Function.toString);o(a.inspectSource)||(a.inspectSource=function(e){return i(e)}),e.exports=a.inspectSource},53794:(e,t,n)=>{var r=n(10941),o=n(32029);e.exports=function(e,t){r(t)&&"cause"in t&&o(e,"cause",t.cause)}},21647:(e,t,n)=>{var r=n(76887),o=n(95329),a=n(27748),i=n(10941),s=n(90953),l=n(65988).f,u=n(10946),c=n(684),p=n(91584),f=n(99418),h=n(45602),d=!1,m=f("meta"),g=0,y=function(e){l(e,m,{value:{objectID:"O"+g++,weakData:{}}})},v=e.exports={enable:function(){v.enable=function(){},d=!0;var e=u.f,t=o([].splice),n={};n[m]=1,e(n).length&&(u.f=function(n){for(var r=e(n),o=0,a=r.length;o{var r,o,a,i=n(47093),s=n(21899),l=n(10941),u=n(32029),c=n(90953),p=n(63030),f=n(44262),h=n(27748),d="Object already initialized",m=s.TypeError,g=s.WeakMap;if(i||p.state){var y=p.state||(p.state=new g);y.get=y.get,y.has=y.has,y.set=y.set,r=function(e,t){if(y.has(e))throw m(d);return t.facade=e,y.set(e,t),t},o=function(e){return y.get(e)||{}},a=function(e){return y.has(e)}}else{var v=f("state");h[v]=!0,r=function(e,t){if(c(e,v))throw m(d);return t.facade=e,u(e,v,t),t},o=function(e){return c(e,v)?e[v]:{}},a=function(e){return c(e,v)}}e.exports={set:r,get:o,has:a,enforce:function(e){return a(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=o(t)).type!==e)throw m("Incompatible receiver, "+e+" required");return n}}}},6782:(e,t,n)=>{var r=n(99813),o=n(12077),a=r("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||i[a]===e)}},1052:(e,t,n)=>{var r=n(82532);e.exports=Array.isArray||function(e){return"Array"==r(e)}},57475:(e,t,n)=>{var r=n(76616),o=r.all;e.exports=r.IS_HTMLDDA?function(e){return"function"==typeof e||e===o}:function(e){return"function"==typeof e}},24284:(e,t,n)=>{var r=n(95329),o=n(95981),a=n(57475),i=n(9697),s=n(626),l=n(81302),u=function(){},c=[],p=s("Reflect","construct"),f=/^\s*(?:class|function)\b/,h=r(f.exec),d=!f.exec(u),m=function(e){if(!a(e))return!1;try{return p(u,c,e),!0}catch(e){return!1}},g=function(e){if(!a(e))return!1;switch(i(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return d||!!h(f,l(e))}catch(e){return!0}};g.sham=!0,e.exports=!p||o((function(){var e;return m(m.call)||!m(Object)||!m((function(){e=!0}))||e}))?g:m},37252:(e,t,n)=>{var r=n(95981),o=n(57475),a=/#|\.prototype\./,i=function(e,t){var n=l[s(e)];return n==c||n!=u&&(o(t)?r(t):!!t)},s=i.normalize=function(e){return String(e).replace(a,".").toLowerCase()},l=i.data={},u=i.NATIVE="N",c=i.POLYFILL="P";e.exports=i},82119:e=>{e.exports=function(e){return null==e}},10941:(e,t,n)=>{var r=n(57475),o=n(76616),a=o.all;e.exports=o.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:r(e)||e===a}:function(e){return"object"==typeof e?null!==e:r(e)}},82529:e=>{e.exports=!0},60685:(e,t,n)=>{var r=n(10941),o=n(82532),a=n(99813)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[a])?!!t:"RegExp"==o(e))}},56664:(e,t,n)=>{var r=n(626),o=n(57475),a=n(7046),i=n(32302),s=Object;e.exports=i?function(e){return"symbol"==typeof e}:function(e){var t=r("Symbol");return o(t)&&a(t.prototype,s(e))}},93091:(e,t,n)=>{var r=n(86843),o=n(78834),a=n(96059),i=n(69826),s=n(6782),l=n(10623),u=n(7046),c=n(53476),p=n(22902),f=n(7609),h=TypeError,d=function(e,t){this.stopped=e,this.result=t},m=d.prototype;e.exports=function(e,t,n){var g,y,v,b,w,E,x,_=n&&n.that,S=!(!n||!n.AS_ENTRIES),A=!(!n||!n.IS_RECORD),C=!(!n||!n.IS_ITERATOR),k=!(!n||!n.INTERRUPTED),O=r(t,_),j=function(e){return g&&f(g,"normal",e),new d(!0,e)},T=function(e){return S?(a(e),k?O(e[0],e[1],j):O(e[0],e[1])):k?O(e,j):O(e)};if(A)g=e.iterator;else if(C)g=e;else{if(!(y=p(e)))throw h(i(e)+" is not iterable");if(s(y)){for(v=0,b=l(e);b>v;v++)if((w=T(e[v]))&&u(m,w))return w;return new d(!1)}g=c(e,y)}for(E=A?e.next:g.next;!(x=o(E,g)).done;){try{w=T(x.value)}catch(e){f(g,"throw",e)}if("object"==typeof w&&w&&u(m,w))return w}return new d(!1)}},7609:(e,t,n)=>{var r=n(78834),o=n(96059),a=n(14229);e.exports=function(e,t,n){var i,s;o(e);try{if(!(i=a(e,"return"))){if("throw"===t)throw n;return n}i=r(i,e)}catch(e){s=!0,i=e}if("throw"===t)throw n;if(s)throw i;return o(i),n}},53847:(e,t,n)=>{"use strict";var r=n(35143).IteratorPrototype,o=n(29290),a=n(31887),i=n(90904),s=n(12077),l=function(){return this};e.exports=function(e,t,n,u){var c=t+" Iterator";return e.prototype=o(r,{next:a(+!u,n)}),i(e,c,!1,!0),s[c]=l,e}},75105:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(82529),i=n(79417),s=n(57475),l=n(53847),u=n(249),c=n(88929),p=n(90904),f=n(32029),h=n(95929),d=n(99813),m=n(12077),g=n(35143),y=i.PROPER,v=i.CONFIGURABLE,b=g.IteratorPrototype,w=g.BUGGY_SAFARI_ITERATORS,E=d("iterator"),x="keys",_="values",S="entries",A=function(){return this};e.exports=function(e,t,n,i,d,g,C){l(n,t,i);var k,O,j,T=function(e){if(e===d&&M)return M;if(!w&&e in P)return P[e];switch(e){case x:case _:case S:return function(){return new n(this,e)}}return function(){return new n(this)}},I=t+" Iterator",N=!1,P=e.prototype,R=P[E]||P["@@iterator"]||d&&P[d],M=!w&&R||T(d),D="Array"==t&&P.entries||R;if(D&&(k=u(D.call(new e)))!==Object.prototype&&k.next&&(a||u(k)===b||(c?c(k,b):s(k[E])||h(k,E,A)),p(k,I,!0,!0),a&&(m[I]=A)),y&&d==_&&R&&R.name!==_&&(!a&&v?f(P,"name",_):(N=!0,M=function(){return o(R,this)})),d)if(O={values:T(_),keys:g?M:T(x),entries:T(S)},C)for(j in O)(w||N||!(j in P))&&h(P,j,O[j]);else r({target:t,proto:!0,forced:w||N},O);return a&&!C||P[E]===M||h(P,E,M,{name:d}),m[t]=M,O}},35143:(e,t,n)=>{"use strict";var r,o,a,i=n(95981),s=n(57475),l=n(10941),u=n(29290),c=n(249),p=n(95929),f=n(99813),h=n(82529),d=f("iterator"),m=!1;[].keys&&("next"in(a=[].keys())?(o=c(c(a)))!==Object.prototype&&(r=o):m=!0),!l(r)||i((function(){var e={};return r[d].call(e)!==e}))?r={}:h&&(r=u(r)),s(r[d])||p(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},12077:e=>{e.exports={}},10623:(e,t,n)=>{var r=n(43057);e.exports=function(e){return r(e.length)}},35331:e=>{var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},66132:(e,t,n)=>{var r,o,a,i,s,l=n(21899),u=n(86843),c=n(49677).f,p=n(42941).set,f=n(18397),h=n(22749),d=n(4470),m=n(58045),g=n(6049),y=l.MutationObserver||l.WebKitMutationObserver,v=l.document,b=l.process,w=l.Promise,E=c(l,"queueMicrotask"),x=E&&E.value;if(!x){var _=new f,S=function(){var e,t;for(g&&(e=b.domain)&&e.exit();t=_.get();)try{t()}catch(e){throw _.head&&r(),e}e&&e.enter()};h||g||m||!y||!v?!d&&w&&w.resolve?((i=w.resolve(void 0)).constructor=w,s=u(i.then,i),r=function(){s(S)}):g?r=function(){b.nextTick(S)}:(p=u(p,l),r=function(){p(S)}):(o=!0,a=v.createTextNode(""),new y(S).observe(a,{characterData:!0}),r=function(){a.data=o=!o}),x=function(e){_.head||r(),_.add(e)}}e.exports=x},69520:(e,t,n)=>{"use strict";var r=n(24883),o=TypeError,a=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw o("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new a(e)}},14649:(e,t,n)=>{var r=n(85803);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:r(e)}},70344:(e,t,n)=>{var r=n(60685),o=TypeError;e.exports=function(e){if(r(e))throw o("The method doesn't accept regular expressions");return e}},24420:(e,t,n)=>{"use strict";var r=n(55746),o=n(95329),a=n(78834),i=n(95981),s=n(14771),l=n(87857),u=n(36760),c=n(89678),p=n(37026),f=Object.assign,h=Object.defineProperty,d=o([].concat);e.exports=!f||i((function(){if(r&&1!==f({b:1},f(h({},"a",{enumerable:!0,get:function(){h(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o="abcdefghijklmnopqrst";return e[n]=7,o.split("").forEach((function(e){t[e]=e})),7!=f({},e)[n]||s(f({},t)).join("")!=o}))?function(e,t){for(var n=c(e),o=arguments.length,i=1,f=l.f,h=u.f;o>i;)for(var m,g=p(arguments[i++]),y=f?d(s(g),f(g)):s(g),v=y.length,b=0;v>b;)m=y[b++],r&&!a(h,g,m)||(n[m]=g[m]);return n}:f},29290:(e,t,n)=>{var r,o=n(96059),a=n(59938),i=n(56759),s=n(27748),l=n(15463),u=n(61333),c=n(44262),p="prototype",f="script",h=c("IE_PROTO"),d=function(){},m=function(e){return"<"+f+">"+e+""},g=function(e){e.write(m("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject("htmlfile")}catch(e){}var e,t,n;y="undefined"!=typeof document?document.domain&&r?g(r):(t=u("iframe"),n="java"+f+":",t.style.display="none",l.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(m("document.F=Object")),e.close(),e.F):g(r);for(var o=i.length;o--;)delete y[p][i[o]];return y()};s[h]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(d[p]=o(e),n=new d,d[p]=null,n[h]=e):n=y(),void 0===t?n:a.f(n,t)}},59938:(e,t,n)=>{var r=n(55746),o=n(83937),a=n(65988),i=n(96059),s=n(74529),l=n(14771);t.f=r&&!o?Object.defineProperties:function(e,t){i(e);for(var n,r=s(t),o=l(t),u=o.length,c=0;u>c;)a.f(e,n=o[c++],r[n]);return e}},65988:(e,t,n)=>{var r=n(55746),o=n(2840),a=n(83937),i=n(96059),s=n(83894),l=TypeError,u=Object.defineProperty,c=Object.getOwnPropertyDescriptor,p="enumerable",f="configurable",h="writable";t.f=r?a?function(e,t,n){if(i(e),t=s(t),i(n),"function"==typeof e&&"prototype"===t&&"value"in n&&h in n&&!n[h]){var r=c(e,t);r&&r[h]&&(e[t]=n.value,n={configurable:f in n?n[f]:r[f],enumerable:p in n?n[p]:r[p],writable:!1})}return u(e,t,n)}:u:function(e,t,n){if(i(e),t=s(t),i(n),o)try{return u(e,t,n)}catch(e){}if("get"in n||"set"in n)throw l("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},49677:(e,t,n)=>{var r=n(55746),o=n(78834),a=n(36760),i=n(31887),s=n(74529),l=n(83894),u=n(90953),c=n(2840),p=Object.getOwnPropertyDescriptor;t.f=r?p:function(e,t){if(e=s(e),t=l(t),c)try{return p(e,t)}catch(e){}if(u(e,t))return i(!o(a.f,e,t),e[t])}},684:(e,t,n)=>{var r=n(82532),o=n(74529),a=n(10946).f,i=n(15790),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return s&&"Window"==r(e)?function(e){try{return a(e)}catch(e){return i(s)}}(e):a(o(e))}},10946:(e,t,n)=>{var r=n(55629),o=n(56759).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},87857:(e,t)=>{t.f=Object.getOwnPropertySymbols},249:(e,t,n)=>{var r=n(90953),o=n(57475),a=n(89678),i=n(44262),s=n(64160),l=i("IE_PROTO"),u=Object,c=u.prototype;e.exports=s?u.getPrototypeOf:function(e){var t=a(e);if(r(t,l))return t[l];var n=t.constructor;return o(n)&&t instanceof n?n.prototype:t instanceof u?c:null}},91584:(e,t,n)=>{var r=n(95981),o=n(10941),a=n(82532),i=n(97135),s=Object.isExtensible,l=r((function(){s(1)}));e.exports=l||i?function(e){return!!o(e)&&((!i||"ArrayBuffer"!=a(e))&&(!s||s(e)))}:s},7046:(e,t,n)=>{var r=n(95329);e.exports=r({}.isPrototypeOf)},55629:(e,t,n)=>{var r=n(95329),o=n(90953),a=n(74529),i=n(31692).indexOf,s=n(27748),l=r([].push);e.exports=function(e,t){var n,r=a(e),u=0,c=[];for(n in r)!o(s,n)&&o(r,n)&&l(c,n);for(;t.length>u;)o(r,n=t[u++])&&(~i(c,n)||l(c,n));return c}},14771:(e,t,n)=>{var r=n(55629),o=n(56759);e.exports=Object.keys||function(e){return r(e,o)}},36760:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},88929:(e,t,n)=>{var r=n(45526),o=n(96059),a=n(11851);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=r(Object.prototype,"__proto__","set"))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return o(n),a(r),t?e(n,r):n.__proto__=r,n}}():void 0)},88810:(e,t,n)=>{var r=n(55746),o=n(95981),a=n(95329),i=n(249),s=n(14771),l=n(74529),u=a(n(36760).f),c=a([].push),p=r&&o((function(){var e=Object.create(null);return e[2]=2,!u(e,2)})),f=function(e){return function(t){for(var n,o=l(t),a=s(o),f=p&&null===i(o),h=a.length,d=0,m=[];h>d;)n=a[d++],r&&!(f?n in o:u(o,n))||c(m,e?[n,o[n]]:o[n]);return m}};e.exports={entries:f(!0),values:f(!1)}},95623:(e,t,n)=>{"use strict";var r=n(22885),o=n(9697);e.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},39811:(e,t,n)=>{var r=n(78834),o=n(57475),a=n(10941),i=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&o(n=e.toString)&&!a(s=r(n,e)))return s;if(o(n=e.valueOf)&&!a(s=r(n,e)))return s;if("string"!==t&&o(n=e.toString)&&!a(s=r(n,e)))return s;throw i("Can't convert object to primitive value")}},31136:(e,t,n)=>{var r=n(626),o=n(95329),a=n(10946),i=n(87857),s=n(96059),l=o([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=a.f(s(e)),n=i.f;return n?l(t,n(e)):t}},54058:e=>{e.exports={}},40002:e=>{e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},67742:(e,t,n)=>{var r=n(21899),o=n(6991),a=n(57475),i=n(37252),s=n(81302),l=n(99813),u=n(23321),c=n(48501),p=n(82529),f=n(53385),h=o&&o.prototype,d=l("species"),m=!1,g=a(r.PromiseRejectionEvent),y=i("Promise",(function(){var e=s(o),t=e!==String(o);if(!t&&66===f)return!0;if(p&&(!h.catch||!h.finally))return!0;if(!f||f<51||!/native code/.test(e)){var n=new o((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};if((n.constructor={})[d]=r,!(m=n.then((function(){}))instanceof r))return!0}return!t&&(u||c)&&!g}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:g,SUBCLASSING:m}},6991:(e,t,n)=>{var r=n(21899);e.exports=r.Promise},56584:(e,t,n)=>{var r=n(96059),o=n(10941),a=n(69520);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=a.f(e);return(0,n.resolve)(t),n.promise}},31542:(e,t,n)=>{var r=n(6991),o=n(21385),a=n(67742).CONSTRUCTOR;e.exports=a||!o((function(e){r.all(e).then(void 0,(function(){}))}))},18397:e=>{var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},n=this.tail;n?n.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},e.exports=t},48219:(e,t,n)=>{var r=n(82119),o=TypeError;e.exports=function(e){if(r(e))throw o("Can't call method on "+e);return e}},37620:(e,t,n)=>{"use strict";var r,o=n(21899),a=n(79730),i=n(57475),s=n(56491),l=n(2861),u=n(93765),c=n(18348),p=o.Function,f=/MSIE .\./.test(l)||s&&((r=o.Bun.version.split(".")).length<3||0==r[0]&&(r[1]<3||3==r[1]&&0==r[2]));e.exports=function(e,t){var n=t?2:1;return f?function(r,o){var s=c(arguments.length,1)>n,l=i(r)?r:p(r),f=s?u(arguments,n):[],h=s?function(){a(l,this,f)}:l;return t?e(h,o):e(h)}:e}},94431:(e,t,n)=>{"use strict";var r=n(626),o=n(29202),a=n(99813),i=n(55746),s=a("species");e.exports=function(e){var t=r(e);i&&t&&!t[s]&&o(t,s,{configurable:!0,get:function(){return this}})}},90904:(e,t,n)=>{var r=n(22885),o=n(65988).f,a=n(32029),i=n(90953),s=n(95623),l=n(99813)("toStringTag");e.exports=function(e,t,n,u){if(e){var c=n?e:e.prototype;i(c,l)||o(c,l,{configurable:!0,value:t}),u&&!r&&a(c,"toString",s)}}},44262:(e,t,n)=>{var r=n(68726),o=n(99418),a=r("keys");e.exports=function(e){return a[e]||(a[e]=o(e))}},63030:(e,t,n)=>{var r=n(21899),o=n(75609),a="__core-js_shared__",i=r[a]||o(a,{});e.exports=i},68726:(e,t,n)=>{var r=n(82529),o=n(63030);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.31.0",mode:r?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.31.0/LICENSE",source:"https://github.com/zloirock/core-js"})},70487:(e,t,n)=>{var r=n(96059),o=n(174),a=n(82119),i=n(99813)("species");e.exports=function(e,t){var n,s=r(e).constructor;return void 0===s||a(n=r(s)[i])?t:o(n)}},64620:(e,t,n)=>{var r=n(95329),o=n(62435),a=n(85803),i=n(48219),s=r("".charAt),l=r("".charCodeAt),u=r("".slice),c=function(e){return function(t,n){var r,c,p=a(i(t)),f=o(n),h=p.length;return f<0||f>=h?e?"":void 0:(r=l(p,f))<55296||r>56319||f+1===h||(c=l(p,f+1))<56320||c>57343?e?s(p,f):r:e?u(p,f,f+2):c-56320+(r-55296<<10)+65536}};e.exports={codeAt:c(!1),charAt:c(!0)}},73291:(e,t,n)=>{var r=n(95329),o=2147483647,a=/[^\0-\u007E]/,i=/[.\u3002\uFF0E\uFF61]/g,s="Overflow: input needs wider integers to process",l=RangeError,u=r(i.exec),c=Math.floor,p=String.fromCharCode,f=r("".charCodeAt),h=r([].join),d=r([].push),m=r("".replace),g=r("".split),y=r("".toLowerCase),v=function(e){return e+22+75*(e<26)},b=function(e,t,n){var r=0;for(e=n?c(e/700):e>>1,e+=c(e/t);e>455;)e=c(e/35),r+=36;return c(r+36*e/(e+38))},w=function(e){var t=[];e=function(e){for(var t=[],n=0,r=e.length;n=55296&&o<=56319&&n=i&&rc((o-u)/E))throw l(s);for(u+=(w-i)*E,i=w,n=0;no)throw l(s);if(r==i){for(var x=u,_=36;;){var S=_<=m?1:_>=m+26?26:_-m;if(x{"use strict";var r=n(62435),o=n(85803),a=n(48219),i=RangeError;e.exports=function(e){var t=o(a(this)),n="",s=r(e);if(s<0||s==1/0)throw i("Wrong number of repetitions");for(;s>0;(s>>>=1)&&(t+=t))1&s&&(n+=t);return n}},93093:(e,t,n)=>{var r=n(79417).PROPER,o=n(95981),a=n(73483);e.exports=function(e){return o((function(){return!!a[e]()||"​…᠎"!=="​…᠎"[e]()||r&&a[e].name!==e}))}},74853:(e,t,n)=>{var r=n(95329),o=n(48219),a=n(85803),i=n(73483),s=r("".replace),l=RegExp("^["+i+"]+"),u=RegExp("(^|[^"+i+"])["+i+"]+$"),c=function(e){return function(t){var n=a(o(t));return 1&e&&(n=s(n,l,"")),2&e&&(n=s(n,u,"$1")),n}};e.exports={start:c(1),end:c(2),trim:c(3)}},63405:(e,t,n)=>{var r=n(53385),o=n(95981),a=n(21899).String;e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!a(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},29630:(e,t,n)=>{var r=n(78834),o=n(626),a=n(99813),i=n(95929);e.exports=function(){var e=o("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,s=a("toPrimitive");t&&!t[s]&&i(t,s,(function(e){return r(n,this)}),{arity:1})}},32087:(e,t,n)=>{var r=n(626),o=n(95329),a=r("Symbol"),i=a.keyFor,s=o(a.prototype.valueOf);e.exports=a.isRegisteredSymbol||function(e){try{return void 0!==i(s(e))}catch(e){return!1}}},96559:(e,t,n)=>{for(var r=n(68726),o=n(626),a=n(95329),i=n(56664),s=n(99813),l=o("Symbol"),u=l.isWellKnownSymbol,c=o("Object","getOwnPropertyNames"),p=a(l.prototype.valueOf),f=r("wks"),h=0,d=c(l),m=d.length;h{var r=n(63405);e.exports=r&&!!Symbol.for&&!!Symbol.keyFor},42941:(e,t,n)=>{var r,o,a,i,s=n(21899),l=n(79730),u=n(86843),c=n(57475),p=n(90953),f=n(95981),h=n(15463),d=n(93765),m=n(61333),g=n(18348),y=n(22749),v=n(6049),b=s.setImmediate,w=s.clearImmediate,E=s.process,x=s.Dispatch,_=s.Function,S=s.MessageChannel,A=s.String,C=0,k={},O="onreadystatechange";f((function(){r=s.location}));var j=function(e){if(p(k,e)){var t=k[e];delete k[e],t()}},T=function(e){return function(){j(e)}},I=function(e){j(e.data)},N=function(e){s.postMessage(A(e),r.protocol+"//"+r.host)};b&&w||(b=function(e){g(arguments.length,1);var t=c(e)?e:_(e),n=d(arguments,1);return k[++C]=function(){l(t,void 0,n)},o(C),C},w=function(e){delete k[e]},v?o=function(e){E.nextTick(T(e))}:x&&x.now?o=function(e){x.now(T(e))}:S&&!y?(i=(a=new S).port2,a.port1.onmessage=I,o=u(i.postMessage,i)):s.addEventListener&&c(s.postMessage)&&!s.importScripts&&r&&"file:"!==r.protocol&&!f(N)?(o=N,s.addEventListener("message",I,!1)):o=O in m("script")?function(e){h.appendChild(m("script"))[O]=function(){h.removeChild(this),j(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:b,clear:w}},59413:(e,t,n)=>{var r=n(62435),o=Math.max,a=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):a(n,t)}},74529:(e,t,n)=>{var r=n(37026),o=n(48219);e.exports=function(e){return r(o(e))}},62435:(e,t,n)=>{var r=n(35331);e.exports=function(e){var t=+e;return t!=t||0===t?0:r(t)}},43057:(e,t,n)=>{var r=n(62435),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},89678:(e,t,n)=>{var r=n(48219),o=Object;e.exports=function(e){return o(r(e))}},46935:(e,t,n)=>{var r=n(78834),o=n(10941),a=n(56664),i=n(14229),s=n(39811),l=n(99813),u=TypeError,c=l("toPrimitive");e.exports=function(e,t){if(!o(e)||a(e))return e;var n,l=i(e,c);if(l){if(void 0===t&&(t="default"),n=r(l,e,t),!o(n)||a(n))return n;throw u("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},83894:(e,t,n)=>{var r=n(46935),o=n(56664);e.exports=function(e){var t=r(e,"string");return o(t)?t:t+""}},22885:(e,t,n)=>{var r={};r[n(99813)("toStringTag")]="z",e.exports="[object z]"===String(r)},85803:(e,t,n)=>{var r=n(9697),o=String;e.exports=function(e){if("Symbol"===r(e))throw TypeError("Cannot convert a Symbol value to a string");return o(e)}},69826:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},99418:(e,t,n)=>{var r=n(95329),o=0,a=Math.random(),i=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+i(++o+a,36)}},14766:(e,t,n)=>{var r=n(95981),o=n(99813),a=n(55746),i=n(82529),s=o("iterator");e.exports=!r((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n=new URLSearchParams("a=1&a=2"),r="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),r+=n+e})),n.delete("a",2),i&&(!e.toJSON||!n.has("a",1)||n.has("a",2))||!t.size&&(i||!a)||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[s]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==r||"x"!==new URL("http://x",void 0).host}))},32302:(e,t,n)=>{var r=n(63405);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},83937:(e,t,n)=>{var r=n(55746),o=n(95981);e.exports=r&&o((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},18348:e=>{var t=TypeError;e.exports=function(e,n){if(e{var r=n(21899),o=n(57475),a=r.WeakMap;e.exports=o(a)&&/native code/.test(String(a))},73464:(e,t,n)=>{var r=n(54058),o=n(90953),a=n(11477),i=n(65988).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||i(t,e,{value:a.f(e)})}},11477:(e,t,n)=>{var r=n(99813);t.f=r},99813:(e,t,n)=>{var r=n(21899),o=n(68726),a=n(90953),i=n(99418),s=n(63405),l=n(32302),u=r.Symbol,c=o("wks"),p=l?u.for||u:u&&u.withoutSetter||i;e.exports=function(e){return a(c,e)||(c[e]=s&&a(u,e)?u[e]:p("Symbol."+e)),c[e]}},73483:e=>{e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},49812:(e,t,n)=>{"use strict";var r=n(76887),o=n(7046),a=n(249),i=n(88929),s=n(23489),l=n(29290),u=n(32029),c=n(31887),p=n(53794),f=n(79585),h=n(93091),d=n(14649),m=n(99813)("toStringTag"),g=Error,y=[].push,v=function(e,t){var n,r=o(b,this);i?n=i(g(),r?a(this):b):(n=r?this:l(b),u(n,m,"Error")),void 0!==t&&u(n,"message",d(t)),f(n,v,n.stack,1),arguments.length>2&&p(n,arguments[2]);var s=[];return h(e,y,{that:s}),u(n,"errors",s),n};i?i(v,g):s(v,g,{name:!0});var b=v.prototype=l(g.prototype,{constructor:c(1,v),message:c(1,""),name:c(1,"AggregateError")});r({global:!0,constructor:!0,arity:2},{AggregateError:v})},47627:(e,t,n)=>{n(49812)},85906:(e,t,n)=>{"use strict";var r=n(76887),o=n(95981),a=n(1052),i=n(10941),s=n(89678),l=n(10623),u=n(66796),c=n(55449),p=n(64692),f=n(50568),h=n(99813),d=n(53385),m=h("isConcatSpreadable"),g=d>=51||!o((function(){var e=[];return e[m]=!1,e.concat()[0]!==e})),y=function(e){if(!i(e))return!1;var t=e[m];return void 0!==t?!!t:a(e)};r({target:"Array",proto:!0,arity:1,forced:!g||!f("concat")},{concat:function(e){var t,n,r,o,a,i=s(this),f=p(i,0),h=0;for(t=-1,r=arguments.length;t{"use strict";var r=n(76887),o=n(3610).every;r({target:"Array",proto:!0,forced:!n(34194)("every")},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},80290:(e,t,n)=>{var r=n(76887),o=n(91860),a=n(18479);r({target:"Array",proto:!0},{fill:o}),a("fill")},21501:(e,t,n)=>{"use strict";var r=n(76887),o=n(3610).filter;r({target:"Array",proto:!0,forced:!n(50568)("filter")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},44929:(e,t,n)=>{"use strict";var r=n(76887),o=n(3610).findIndex,a=n(18479),i="findIndex",s=!0;i in[]&&Array(1)[i]((function(){s=!1})),r({target:"Array",proto:!0,forced:s},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),a(i)},80833:(e,t,n)=>{"use strict";var r=n(76887),o=n(3610).find,a=n(18479),i="find",s=!0;i in[]&&Array(1)[i]((function(){s=!1})),r({target:"Array",proto:!0,forced:s},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),a(i)},2437:(e,t,n)=>{"use strict";var r=n(76887),o=n(56837);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},53242:(e,t,n)=>{var r=n(76887),o=n(11354);r({target:"Array",stat:!0,forced:!n(21385)((function(e){Array.from(e)}))},{from:o})},97690:(e,t,n)=>{"use strict";var r=n(76887),o=n(31692).includes,a=n(95981),i=n(18479);r({target:"Array",proto:!0,forced:a((function(){return!Array(1).includes()}))},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i("includes")},99076:(e,t,n)=>{"use strict";var r=n(76887),o=n(97484),a=n(31692).indexOf,i=n(34194),s=o([].indexOf),l=!!s&&1/s([1],1,-0)<0;r({target:"Array",proto:!0,forced:l||!i("indexOf")},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return l?s(this,e,t)||0:a(this,e,t)}})},92737:(e,t,n)=>{n(76887)({target:"Array",stat:!0},{isArray:n(1052)})},66274:(e,t,n)=>{"use strict";var r=n(74529),o=n(18479),a=n(12077),i=n(45402),s=n(65988).f,l=n(75105),u=n(23538),c=n(82529),p=n(55746),f="Array Iterator",h=i.set,d=i.getterFor(f);e.exports=l(Array,"Array",(function(e,t){h(this,{type:f,target:r(e),index:0,kind:t})}),(function(){var e=d(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,u(void 0,!0)):u("keys"==n?r:"values"==n?t[r]:[r,t[r]],!1)}),"values");var m=a.Arguments=a.Array;if(o("keys"),o("values"),o("entries"),!c&&p&&"values"!==m.name)try{s(m,"name",{value:"values"})}catch(e){}},75915:(e,t,n)=>{var r=n(76887),o=n(67145);r({target:"Array",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},68787:(e,t,n)=>{"use strict";var r=n(76887),o=n(3610).map;r({target:"Array",proto:!0,forced:!n(50568)("map")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},48528:(e,t,n)=>{"use strict";var r=n(76887),o=n(89678),a=n(10623),i=n(89779),s=n(66796);r({target:"Array",proto:!0,arity:1,forced:n(95981)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=o(this),n=a(t),r=arguments.length;s(n+r);for(var l=0;l{"use strict";var r=n(76887),o=n(46499).left,a=n(34194),i=n(53385);r({target:"Array",proto:!0,forced:!n(6049)&&i>79&&i<83||!a("reduce")},{reduce:function(e){var t=arguments.length;return o(this,e,t,t>1?arguments[1]:void 0)}})},60186:(e,t,n)=>{"use strict";var r=n(76887),o=n(1052),a=n(24284),i=n(10941),s=n(59413),l=n(10623),u=n(74529),c=n(55449),p=n(99813),f=n(50568),h=n(93765),d=f("slice"),m=p("species"),g=Array,y=Math.max;r({target:"Array",proto:!0,forced:!d},{slice:function(e,t){var n,r,p,f=u(this),d=l(f),v=s(e,d),b=s(void 0===t?d:t,d);if(o(f)&&(n=f.constructor,(a(n)&&(n===g||o(n.prototype))||i(n)&&null===(n=n[m]))&&(n=void 0),n===g||void 0===n))return h(f,v,b);for(r=new(void 0===n?g:n)(y(b-v,0)),p=0;v{"use strict";var r=n(76887),o=n(3610).some;r({target:"Array",proto:!0,forced:!n(34194)("some")},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},4115:(e,t,n)=>{"use strict";var r=n(76887),o=n(95329),a=n(24883),i=n(89678),s=n(10623),l=n(15863),u=n(85803),c=n(95981),p=n(61388),f=n(34194),h=n(34342),d=n(81046),m=n(53385),g=n(18938),y=[],v=o(y.sort),b=o(y.push),w=c((function(){y.sort(void 0)})),E=c((function(){y.sort(null)})),x=f("sort"),_=!c((function(){if(m)return m<70;if(!(h&&h>3)){if(d)return!0;if(g)return g<603;var e,t,n,r,o="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)y.push({k:t+r,v:n})}for(y.sort((function(e,t){return t.v-e.v})),r=0;ru(n)?1:-1}}(e)),n=s(o),r=0;r{"use strict";var r=n(76887),o=n(89678),a=n(59413),i=n(62435),s=n(10623),l=n(89779),u=n(66796),c=n(64692),p=n(55449),f=n(15863),h=n(50568)("splice"),d=Math.max,m=Math.min;r({target:"Array",proto:!0,forced:!h},{splice:function(e,t){var n,r,h,g,y,v,b=o(this),w=s(b),E=a(e,w),x=arguments.length;for(0===x?n=r=0:1===x?(n=0,r=w-E):(n=x-2,r=m(d(i(t),0),w-E)),u(w+n-r),h=c(b,r),g=0;gw-r+n;g--)f(b,g-1)}else if(n>r)for(g=w-r;g>E;g--)v=g+n-1,(y=g+r-1)in b?b[v]=b[y]:f(b,v);for(g=0;g{var r=n(76887),o=n(95329),a=Date,i=o(a.prototype.getTime);r({target:"Date",stat:!0},{now:function(){return i(new a)}})},18084:()=>{},73381:(e,t,n)=>{var r=n(76887),o=n(98308);r({target:"Function",proto:!0,forced:Function.bind!==o},{bind:o})},32619:(e,t,n)=>{var r=n(76887),o=n(626),a=n(79730),i=n(78834),s=n(95329),l=n(95981),u=n(57475),c=n(56664),p=n(93765),f=n(33323),h=n(63405),d=String,m=o("JSON","stringify"),g=s(/./.exec),y=s("".charAt),v=s("".charCodeAt),b=s("".replace),w=s(1..toString),E=/[\uD800-\uDFFF]/g,x=/^[\uD800-\uDBFF]$/,_=/^[\uDC00-\uDFFF]$/,S=!h||l((function(){var e=o("Symbol")();return"[null]"!=m([e])||"{}"!=m({a:e})||"{}"!=m(Object(e))})),A=l((function(){return'"\\udf06\\ud834"'!==m("\udf06\ud834")||'"\\udead"'!==m("\udead")})),C=function(e,t){var n=p(arguments),r=f(t);if(u(r)||void 0!==e&&!c(e))return n[1]=function(e,t){if(u(r)&&(t=i(r,this,d(e),t)),!c(t))return t},a(m,null,n)},k=function(e,t,n){var r=y(n,t-1),o=y(n,t+1);return g(x,e)&&!g(_,o)||g(_,e)&&!g(x,r)?"\\u"+w(v(e,0),16):e};m&&r({target:"JSON",stat:!0,arity:3,forced:S||A},{stringify:function(e,t,n){var r=p(arguments),o=a(S?C:m,null,r);return A&&"string"==typeof o?b(o,E,k):o}})},69120:(e,t,n)=>{var r=n(21899);n(90904)(r.JSON,"JSON",!0)},23112:(e,t,n)=>{"use strict";n(24683)("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(85616))},37501:(e,t,n)=>{n(23112)},79413:()=>{},49221:(e,t,n)=>{var r=n(76887),o=n(24420);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},74979:(e,t,n)=>{var r=n(76887),o=n(55746),a=n(59938).f;r({target:"Object",stat:!0,forced:Object.defineProperties!==a,sham:!o},{defineProperties:a})},86450:(e,t,n)=>{var r=n(76887),o=n(55746),a=n(65988).f;r({target:"Object",stat:!0,forced:Object.defineProperty!==a,sham:!o},{defineProperty:a})},46924:(e,t,n)=>{var r=n(76887),o=n(95981),a=n(74529),i=n(49677).f,s=n(55746);r({target:"Object",stat:!0,forced:!s||o((function(){i(1)})),sham:!s},{getOwnPropertyDescriptor:function(e,t){return i(a(e),t)}})},88482:(e,t,n)=>{var r=n(76887),o=n(55746),a=n(31136),i=n(74529),s=n(49677),l=n(55449);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),o=s.f,u=a(r),c={},p=0;u.length>p;)void 0!==(n=o(r,t=u[p++]))&&l(c,t,n);return c}})},37144:(e,t,n)=>{var r=n(76887),o=n(63405),a=n(95981),i=n(87857),s=n(89678);r({target:"Object",stat:!0,forced:!o||a((function(){i.f(1)}))},{getOwnPropertySymbols:function(e){var t=i.f;return t?t(s(e)):[]}})},21724:(e,t,n)=>{var r=n(76887),o=n(89678),a=n(14771);r({target:"Object",stat:!0,forced:n(95981)((function(){a(1)}))},{keys:function(e){return a(o(e))}})},55967:()=>{},26614:(e,t,n)=>{var r=n(76887),o=n(88810).values;r({target:"Object",stat:!0},{values:function(e){return o(e)}})},4560:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(24883),i=n(69520),s=n(40002),l=n(93091);r({target:"Promise",stat:!0,forced:n(31542)},{allSettled:function(e){var t=this,n=i.f(t),r=n.resolve,u=n.reject,c=s((function(){var n=a(t.resolve),i=[],s=0,u=1;l(e,(function(e){var a=s++,l=!1;u++,o(n,t,e).then((function(e){l||(l=!0,i[a]={status:"fulfilled",value:e},--u||r(i))}),(function(e){l||(l=!0,i[a]={status:"rejected",reason:e},--u||r(i))}))})),--u||r(i)}));return c.error&&u(c.value),n.promise}})},16890:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(24883),i=n(69520),s=n(40002),l=n(93091);r({target:"Promise",stat:!0,forced:n(31542)},{all:function(e){var t=this,n=i.f(t),r=n.resolve,u=n.reject,c=s((function(){var n=a(t.resolve),i=[],s=0,c=1;l(e,(function(e){var a=s++,l=!1;c++,o(n,t,e).then((function(e){l||(l=!0,i[a]=e,--c||r(i))}),u)})),--c||r(i)}));return c.error&&u(c.value),n.promise}})},91302:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(24883),i=n(626),s=n(69520),l=n(40002),u=n(93091),c=n(31542),p="No one promise resolved";r({target:"Promise",stat:!0,forced:c},{any:function(e){var t=this,n=i("AggregateError"),r=s.f(t),c=r.resolve,f=r.reject,h=l((function(){var r=a(t.resolve),i=[],s=0,l=1,h=!1;u(e,(function(e){var a=s++,u=!1;l++,o(r,t,e).then((function(e){u||h||(h=!0,c(e))}),(function(e){u||h||(u=!0,i[a]=e,--l||f(new n(i,p)))}))})),--l||f(new n(i,p))}));return h.error&&f(h.value),r.promise}})},83376:(e,t,n)=>{"use strict";var r=n(76887),o=n(82529),a=n(67742).CONSTRUCTOR,i=n(6991),s=n(626),l=n(57475),u=n(95929),c=i&&i.prototype;if(r({target:"Promise",proto:!0,forced:a,real:!0},{catch:function(e){return this.then(void 0,e)}}),!o&&l(i)){var p=s("Promise").prototype.catch;c.catch!==p&&u(c,"catch",p,{unsafe:!0})}},26934:(e,t,n)=>{"use strict";var r,o,a,i=n(76887),s=n(82529),l=n(6049),u=n(21899),c=n(78834),p=n(95929),f=n(88929),h=n(90904),d=n(94431),m=n(24883),g=n(57475),y=n(10941),v=n(5743),b=n(70487),w=n(42941).set,E=n(66132),x=n(34845),_=n(40002),S=n(18397),A=n(45402),C=n(6991),k=n(67742),O=n(69520),j="Promise",T=k.CONSTRUCTOR,I=k.REJECTION_EVENT,N=k.SUBCLASSING,P=A.getterFor(j),R=A.set,M=C&&C.prototype,D=C,L=M,B=u.TypeError,F=u.document,z=u.process,U=O.f,q=U,$=!!(F&&F.createEvent&&u.dispatchEvent),V="unhandledrejection",W=function(e){var t;return!(!y(e)||!g(t=e.then))&&t},H=function(e,t){var n,r,o,a=t.value,i=1==t.state,s=i?e.ok:e.fail,l=e.resolve,u=e.reject,p=e.domain;try{s?(i||(2===t.rejection&&Y(t),t.rejection=1),!0===s?n=a:(p&&p.enter(),n=s(a),p&&(p.exit(),o=!0)),n===e.promise?u(B("Promise-chain cycle")):(r=W(n))?c(r,n,l,u):l(n)):u(a)}catch(e){p&&!o&&p.exit(),u(e)}},J=function(e,t){e.notified||(e.notified=!0,E((function(){for(var n,r=e.reactions;n=r.get();)H(n,e);e.notified=!1,t&&!e.rejection&&G(e)})))},K=function(e,t,n){var r,o;$?((r=F.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),u.dispatchEvent(r)):r={promise:t,reason:n},!I&&(o=u["on"+e])?o(r):e===V&&x("Unhandled promise rejection",n)},G=function(e){c(w,u,(function(){var t,n=e.facade,r=e.value;if(Z(e)&&(t=_((function(){l?z.emit("unhandledRejection",r,n):K(V,n,r)})),e.rejection=l||Z(e)?2:1,t.error))throw t.value}))},Z=function(e){return 1!==e.rejection&&!e.parent},Y=function(e){c(w,u,(function(){var t=e.facade;l?z.emit("rejectionHandled",t):K("rejectionhandled",t,e.value)}))},Q=function(e,t,n){return function(r){e(t,r,n)}},X=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,J(e,!0))},ee=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw B("Promise can't be resolved itself");var r=W(t);r?E((function(){var n={done:!1};try{c(r,t,Q(ee,n,e),Q(X,n,e))}catch(t){X(n,t,e)}})):(e.value=t,e.state=1,J(e,!1))}catch(t){X({done:!1},t,e)}}};if(T&&(L=(D=function(e){v(this,L),m(e),c(r,this);var t=P(this);try{e(Q(ee,t),Q(X,t))}catch(e){X(t,e)}}).prototype,(r=function(e){R(this,{type:j,done:!1,notified:!1,parent:!1,reactions:new S,rejection:!1,state:0,value:void 0})}).prototype=p(L,"then",(function(e,t){var n=P(this),r=U(b(this,D));return n.parent=!0,r.ok=!g(e)||e,r.fail=g(t)&&t,r.domain=l?z.domain:void 0,0==n.state?n.reactions.add(r):E((function(){H(r,n)})),r.promise})),o=function(){var e=new r,t=P(e);this.promise=e,this.resolve=Q(ee,t),this.reject=Q(X,t)},O.f=U=function(e){return e===D||undefined===e?new o(e):q(e)},!s&&g(C)&&M!==Object.prototype)){a=M.then,N||p(M,"then",(function(e,t){var n=this;return new D((function(e,t){c(a,n,e,t)})).then(e,t)}),{unsafe:!0});try{delete M.constructor}catch(e){}f&&f(M,L)}i({global:!0,constructor:!0,wrap:!0,forced:T},{Promise:D}),h(D,j,!1,!0),d(j)},44349:(e,t,n)=>{"use strict";var r=n(76887),o=n(82529),a=n(6991),i=n(95981),s=n(626),l=n(57475),u=n(70487),c=n(56584),p=n(95929),f=a&&a.prototype;if(r({target:"Promise",proto:!0,real:!0,forced:!!a&&i((function(){f.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=u(this,s("Promise")),n=l(e);return this.then(n?function(n){return c(t,e()).then((function(){return n}))}:e,n?function(n){return c(t,e()).then((function(){throw n}))}:e)}}),!o&&l(a)){var h=s("Promise").prototype.finally;f.finally!==h&&p(f,"finally",h,{unsafe:!0})}},98881:(e,t,n)=>{n(26934),n(16890),n(83376),n(55921),n(64069),n(14482)},55921:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(24883),i=n(69520),s=n(40002),l=n(93091);r({target:"Promise",stat:!0,forced:n(31542)},{race:function(e){var t=this,n=i.f(t),r=n.reject,u=s((function(){var i=a(t.resolve);l(e,(function(e){o(i,t,e).then(n.resolve,r)}))}));return u.error&&r(u.value),n.promise}})},64069:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(69520);r({target:"Promise",stat:!0,forced:n(67742).CONSTRUCTOR},{reject:function(e){var t=a.f(this);return o(t.reject,void 0,e),t.promise}})},14482:(e,t,n)=>{"use strict";var r=n(76887),o=n(626),a=n(82529),i=n(6991),s=n(67742).CONSTRUCTOR,l=n(56584),u=o("Promise"),c=a&&!s;r({target:"Promise",stat:!0,forced:a||s},{resolve:function(e){return l(c&&this===u?i:this,e)}})},1502:()=>{},11035:(e,t,n)=>{"use strict";var r=n(76887),o=n(95329),a=n(70344),i=n(48219),s=n(85803),l=n(67772),u=o("".indexOf);r({target:"String",proto:!0,forced:!l("includes")},{includes:function(e){return!!~u(s(i(this)),s(a(e)),arguments.length>1?arguments[1]:void 0)}})},77971:(e,t,n)=>{"use strict";var r=n(64620).charAt,o=n(85803),a=n(45402),i=n(75105),s=n(23538),l="String Iterator",u=a.set,c=a.getterFor(l);i(String,"String",(function(e){u(this,{type:l,string:o(e),index:0})}),(function(){var e,t=c(this),n=t.string,o=t.index;return o>=n.length?s(void 0,!0):(e=r(n,o),t.index+=e.length,s(e,!1))}))},60986:(e,t,n)=>{n(76887)({target:"String",proto:!0},{repeat:n(16178)})},94761:(e,t,n)=>{"use strict";var r,o=n(76887),a=n(97484),i=n(49677).f,s=n(43057),l=n(85803),u=n(70344),c=n(48219),p=n(67772),f=n(82529),h=a("".startsWith),d=a("".slice),m=Math.min,g=p("startsWith");o({target:"String",proto:!0,forced:!!(f||g||(r=i(String.prototype,"startsWith"),!r||r.writable))&&!g},{startsWith:function(e){var t=l(c(this));u(e);var n=s(m(arguments.length>1?arguments[1]:void 0,t.length)),r=l(e);return h?h(t,r,n):d(t,n,n+r.length)===r}})},57398:(e,t,n)=>{"use strict";var r=n(76887),o=n(74853).trim;r({target:"String",proto:!0,forced:n(93093)("trim")},{trim:function(){return o(this)}})},8555:(e,t,n)=>{n(73464)("asyncIterator")},48616:(e,t,n)=>{"use strict";var r=n(76887),o=n(21899),a=n(78834),i=n(95329),s=n(82529),l=n(55746),u=n(63405),c=n(95981),p=n(90953),f=n(7046),h=n(96059),d=n(74529),m=n(83894),g=n(85803),y=n(31887),v=n(29290),b=n(14771),w=n(10946),E=n(684),x=n(87857),_=n(49677),S=n(65988),A=n(59938),C=n(36760),k=n(95929),O=n(29202),j=n(68726),T=n(44262),I=n(27748),N=n(99418),P=n(99813),R=n(11477),M=n(73464),D=n(29630),L=n(90904),B=n(45402),F=n(3610).forEach,z=T("hidden"),U="Symbol",q="prototype",$=B.set,V=B.getterFor(U),W=Object[q],H=o.Symbol,J=H&&H[q],K=o.TypeError,G=o.QObject,Z=_.f,Y=S.f,Q=E.f,X=C.f,ee=i([].push),te=j("symbols"),ne=j("op-symbols"),re=j("wks"),oe=!G||!G[q]||!G[q].findChild,ae=l&&c((function(){return 7!=v(Y({},"a",{get:function(){return Y(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=Z(W,t);r&&delete W[t],Y(e,t,n),r&&e!==W&&Y(W,t,r)}:Y,ie=function(e,t){var n=te[e]=v(J);return $(n,{type:U,tag:e,description:t}),l||(n.description=t),n},se=function(e,t,n){e===W&&se(ne,t,n),h(e);var r=m(t);return h(n),p(te,r)?(n.enumerable?(p(e,z)&&e[z][r]&&(e[z][r]=!1),n=v(n,{enumerable:y(0,!1)})):(p(e,z)||Y(e,z,y(1,{})),e[z][r]=!0),ae(e,r,n)):Y(e,r,n)},le=function(e,t){h(e);var n=d(t),r=b(n).concat(fe(n));return F(r,(function(t){l&&!a(ue,n,t)||se(e,t,n[t])})),e},ue=function(e){var t=m(e),n=a(X,this,t);return!(this===W&&p(te,t)&&!p(ne,t))&&(!(n||!p(this,t)||!p(te,t)||p(this,z)&&this[z][t])||n)},ce=function(e,t){var n=d(e),r=m(t);if(n!==W||!p(te,r)||p(ne,r)){var o=Z(n,r);return!o||!p(te,r)||p(n,z)&&n[z][r]||(o.enumerable=!0),o}},pe=function(e){var t=Q(d(e)),n=[];return F(t,(function(e){p(te,e)||p(I,e)||ee(n,e)})),n},fe=function(e){var t=e===W,n=Q(t?ne:d(e)),r=[];return F(n,(function(e){!p(te,e)||t&&!p(W,e)||ee(r,te[e])})),r};u||(k(J=(H=function(){if(f(J,this))throw K("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?g(arguments[0]):void 0,t=N(e),n=function(e){this===W&&a(n,ne,e),p(this,z)&&p(this[z],t)&&(this[z][t]=!1),ae(this,t,y(1,e))};return l&&oe&&ae(W,t,{configurable:!0,set:n}),ie(t,e)})[q],"toString",(function(){return V(this).tag})),k(H,"withoutSetter",(function(e){return ie(N(e),e)})),C.f=ue,S.f=se,A.f=le,_.f=ce,w.f=E.f=pe,x.f=fe,R.f=function(e){return ie(P(e),e)},l&&(O(J,"description",{configurable:!0,get:function(){return V(this).description}}),s||k(W,"propertyIsEnumerable",ue,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!u,sham:!u},{Symbol:H}),F(b(re),(function(e){M(e)})),r({target:U,stat:!0,forced:!u},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),r({target:"Object",stat:!0,forced:!u,sham:!l},{create:function(e,t){return void 0===t?v(e):le(v(e),t)},defineProperty:se,defineProperties:le,getOwnPropertyDescriptor:ce}),r({target:"Object",stat:!0,forced:!u},{getOwnPropertyNames:pe}),D(),L(H,U),I[z]=!0},52615:()=>{},64523:(e,t,n)=>{var r=n(76887),o=n(626),a=n(90953),i=n(85803),s=n(68726),l=n(34680),u=s("string-to-symbol-registry"),c=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!l},{for:function(e){var t=i(e);if(a(u,t))return u[t];var n=o("Symbol")(t);return u[t]=n,c[n]=t,n}})},21732:(e,t,n)=>{n(73464)("hasInstance")},35903:(e,t,n)=>{n(73464)("isConcatSpreadable")},1825:(e,t,n)=>{n(73464)("iterator")},35824:(e,t,n)=>{n(48616),n(64523),n(38608),n(32619),n(37144)},38608:(e,t,n)=>{var r=n(76887),o=n(90953),a=n(56664),i=n(69826),s=n(68726),l=n(34680),u=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!l},{keyFor:function(e){if(!a(e))throw TypeError(i(e)+" is not a symbol");if(o(u,e))return u[e]}})},45915:(e,t,n)=>{n(73464)("matchAll")},28394:(e,t,n)=>{n(73464)("match")},61766:(e,t,n)=>{n(73464)("replace")},62737:(e,t,n)=>{n(73464)("search")},89911:(e,t,n)=>{n(73464)("species")},74315:(e,t,n)=>{n(73464)("split")},63131:(e,t,n)=>{var r=n(73464),o=n(29630);r("toPrimitive"),o()},64714:(e,t,n)=>{var r=n(626),o=n(73464),a=n(90904);o("toStringTag"),a(r("Symbol"),"Symbol")},70659:(e,t,n)=>{n(73464)("unscopables")},97522:(e,t,n)=>{var r=n(99813),o=n(65988).f,a=r("metadata"),i=Function.prototype;void 0===i[a]&&o(i,a,{value:null})},28783:(e,t,n)=>{n(73464)("asyncDispose")},43975:(e,t,n)=>{n(73464)("dispose")},97618:(e,t,n)=>{n(76887)({target:"Symbol",stat:!0},{isRegisteredSymbol:n(32087)})},22731:(e,t,n)=>{n(76887)({target:"Symbol",stat:!0,name:"isRegisteredSymbol"},{isRegistered:n(32087)})},6989:(e,t,n)=>{n(76887)({target:"Symbol",stat:!0,forced:!0},{isWellKnownSymbol:n(96559)})},85605:(e,t,n)=>{n(76887)({target:"Symbol",stat:!0,name:"isWellKnownSymbol",forced:!0},{isWellKnown:n(96559)})},65799:(e,t,n)=>{n(73464)("matcher")},31943:(e,t,n)=>{n(73464)("metadataKey")},45414:(e,t,n)=>{n(73464)("metadata")},46774:(e,t,n)=>{n(73464)("observable")},80620:(e,t,n)=>{n(73464)("patternMatch")},36172:(e,t,n)=>{n(73464)("replaceAll")},7634:(e,t,n)=>{n(66274);var r=n(63281),o=n(21899),a=n(9697),i=n(32029),s=n(12077),l=n(99813)("toStringTag");for(var u in r){var c=o[u],p=c&&c.prototype;p&&a(p)!==l&&i(p,l,u),s[u]=s.Array}},79229:(e,t,n)=>{var r=n(76887),o=n(21899),a=n(37620)(o.setInterval,!0);r({global:!0,bind:!0,forced:o.setInterval!==a},{setInterval:a})},17749:(e,t,n)=>{var r=n(76887),o=n(21899),a=n(37620)(o.setTimeout,!0);r({global:!0,bind:!0,forced:o.setTimeout!==a},{setTimeout:a})},71249:(e,t,n)=>{n(79229),n(17749)},62524:(e,t,n)=>{"use strict";n(66274);var r=n(76887),o=n(21899),a=n(78834),i=n(95329),s=n(55746),l=n(14766),u=n(95929),c=n(29202),p=n(94380),f=n(90904),h=n(53847),d=n(45402),m=n(5743),g=n(57475),y=n(90953),v=n(86843),b=n(9697),w=n(96059),E=n(10941),x=n(85803),_=n(29290),S=n(31887),A=n(53476),C=n(22902),k=n(18348),O=n(99813),j=n(61388),T=O("iterator"),I="URLSearchParams",N=I+"Iterator",P=d.set,R=d.getterFor(I),M=d.getterFor(N),D=Object.getOwnPropertyDescriptor,L=function(e){if(!s)return o[e];var t=D(o,e);return t&&t.value},B=L("fetch"),F=L("Request"),z=L("Headers"),U=F&&F.prototype,q=z&&z.prototype,$=o.RegExp,V=o.TypeError,W=o.decodeURIComponent,H=o.encodeURIComponent,J=i("".charAt),K=i([].join),G=i([].push),Z=i("".replace),Y=i([].shift),Q=i([].splice),X=i("".split),ee=i("".slice),te=/\+/g,ne=Array(4),re=function(e){return ne[e-1]||(ne[e-1]=$("((?:%[\\da-f]{2}){"+e+"})","gi"))},oe=function(e){try{return W(e)}catch(t){return e}},ae=function(e){var t=Z(e,te," "),n=4;try{return W(t)}catch(e){for(;n;)t=Z(t,re(n--),oe);return t}},ie=/[!'()~]|%20/g,se={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},le=function(e){return se[e]},ue=function(e){return Z(H(e),ie,le)},ce=h((function(e,t){P(this,{type:N,iterator:A(R(e).entries),kind:t})}),"Iterator",(function(){var e=M(this),t=e.kind,n=e.iterator.next(),r=n.value;return n.done||(n.value="keys"===t?r.key:"values"===t?r.value:[r.key,r.value]),n}),!0),pe=function(e){this.entries=[],this.url=null,void 0!==e&&(E(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===J(e,0)?ee(e,1):e:x(e)))};pe.prototype={type:I,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,o,i,s,l,u=C(e);if(u)for(n=(t=A(e,u)).next;!(r=a(n,t)).done;){if(i=(o=A(w(r.value))).next,(s=a(i,o)).done||(l=a(i,o)).done||!a(i,o).done)throw V("Expected sequence with length 2");G(this.entries,{key:x(s.value),value:x(l.value)})}else for(var c in e)y(e,c)&&G(this.entries,{key:c,value:x(e[c])})},parseQuery:function(e){if(e)for(var t,n,r=X(e,"&"),o=0;o0?arguments[0]:void 0));s||(this.size=e.entries.length)},he=fe.prototype;if(p(he,{append:function(e,t){var n=R(this);k(arguments.length,2),G(n.entries,{key:x(e),value:x(t)}),s||this.length++,n.updateURL()},delete:function(e){for(var t=R(this),n=k(arguments.length,1),r=t.entries,o=x(e),a=n<2?void 0:arguments[1],i=void 0===a?a:x(a),l=0;lt.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,n=R(this).entries,r=v(e,arguments.length>1?arguments[1]:void 0),o=0;o1?ge(arguments[1]):{})}}),g(F)){var ye=function(e){return m(this,U),new F(e,arguments.length>1?ge(arguments[1]):{})};U.constructor=ye,ye.prototype=U,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:ye})}}e.exports={URLSearchParams:fe,getState:R}},16454:()=>{},73305:()=>{},95304:(e,t,n)=>{n(62524)},62337:()=>{},84630:(e,t,n)=>{var r=n(76887),o=n(626),a=n(95981),i=n(18348),s=n(85803),l=n(14766),u=o("URL");r({target:"URL",stat:!0,forced:!(l&&a((function(){u.canParse()})))},{canParse:function(e){var t=i(arguments.length,1),n=s(e),r=t<2||void 0===arguments[1]?void 0:s(arguments[1]);try{return!!new u(n,r)}catch(e){return!1}}})},47250:(e,t,n)=>{"use strict";n(77971);var r,o=n(76887),a=n(55746),i=n(14766),s=n(21899),l=n(86843),u=n(95329),c=n(95929),p=n(29202),f=n(5743),h=n(90953),d=n(24420),m=n(11354),g=n(15790),y=n(64620).codeAt,v=n(73291),b=n(85803),w=n(90904),E=n(18348),x=n(62524),_=n(45402),S=_.set,A=_.getterFor("URL"),C=x.URLSearchParams,k=x.getState,O=s.URL,j=s.TypeError,T=s.parseInt,I=Math.floor,N=Math.pow,P=u("".charAt),R=u(/./.exec),M=u([].join),D=u(1..toString),L=u([].pop),B=u([].push),F=u("".replace),z=u([].shift),U=u("".split),q=u("".slice),$=u("".toLowerCase),V=u([].unshift),W="Invalid scheme",H="Invalid host",J="Invalid port",K=/[a-z]/i,G=/[\d+-.a-z]/i,Z=/\d/,Y=/^0x/i,Q=/^[0-7]+$/,X=/^\d+$/,ee=/^[\da-f]+$/i,te=/[\0\t\n\r #%/:<>?@[\\\]^|]/,ne=/[\0\t\n\r #/:<>?@[\\\]^|]/,re=/^[\u0000-\u0020]+/,oe=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,ae=/[\t\n\r]/g,ie=function(e){var t,n,r,o;if("number"==typeof e){for(t=[],n=0;n<4;n++)V(t,e%256),e=I(e/256);return M(t,".")}if("object"==typeof e){for(t="",r=function(e){for(var t=null,n=1,r=null,o=0,a=0;a<8;a++)0!==e[a]?(o>n&&(t=r,n=o),r=null,o=0):(null===r&&(r=a),++o);return o>n&&(t=r,n=o),t}(e),n=0;n<8;n++)o&&0===e[n]||(o&&(o=!1),r===n?(t+=n?":":"::",o=!0):(t+=D(e[n],16),n<7&&(t+=":")));return"["+t+"]"}return e},se={},le=d({},se,{" ":1,'"':1,"<":1,">":1,"`":1}),ue=d({},le,{"#":1,"?":1,"{":1,"}":1}),ce=d({},ue,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),pe=function(e,t){var n=y(e,0);return n>32&&n<127&&!h(t,e)?e:encodeURIComponent(e)},fe={ftp:21,file:null,http:80,https:443,ws:80,wss:443},he=function(e,t){var n;return 2==e.length&&R(K,P(e,0))&&(":"==(n=P(e,1))||!t&&"|"==n)},de=function(e){var t;return e.length>1&&he(q(e,0,2))&&(2==e.length||"/"===(t=P(e,2))||"\\"===t||"?"===t||"#"===t)},me=function(e){return"."===e||"%2e"===$(e)},ge={},ye={},ve={},be={},we={},Ee={},xe={},_e={},Se={},Ae={},Ce={},ke={},Oe={},je={},Te={},Ie={},Ne={},Pe={},Re={},Me={},De={},Le=function(e,t,n){var r,o,a,i=b(e);if(t){if(o=this.parse(i))throw j(o);this.searchParams=null}else{if(void 0!==n&&(r=new Le(n,!0)),o=this.parse(i,null,r))throw j(o);(a=k(new C)).bindURL(this),this.searchParams=a}};Le.prototype={type:"URL",parse:function(e,t,n){var o,a,i,s,l,u=this,c=t||ge,p=0,f="",d=!1,y=!1,v=!1;for(e=b(e),t||(u.scheme="",u.username="",u.password="",u.host=null,u.port=null,u.path=[],u.query=null,u.fragment=null,u.cannotBeABaseURL=!1,e=F(e,re,""),e=F(e,oe,"$1")),e=F(e,ae,""),o=m(e);p<=o.length;){switch(a=o[p],c){case ge:if(!a||!R(K,a)){if(t)return W;c=ve;continue}f+=$(a),c=ye;break;case ye:if(a&&(R(G,a)||"+"==a||"-"==a||"."==a))f+=$(a);else{if(":"!=a){if(t)return W;f="",c=ve,p=0;continue}if(t&&(u.isSpecial()!=h(fe,f)||"file"==f&&(u.includesCredentials()||null!==u.port)||"file"==u.scheme&&!u.host))return;if(u.scheme=f,t)return void(u.isSpecial()&&fe[u.scheme]==u.port&&(u.port=null));f="","file"==u.scheme?c=je:u.isSpecial()&&n&&n.scheme==u.scheme?c=be:u.isSpecial()?c=_e:"/"==o[p+1]?(c=we,p++):(u.cannotBeABaseURL=!0,B(u.path,""),c=Re)}break;case ve:if(!n||n.cannotBeABaseURL&&"#"!=a)return W;if(n.cannotBeABaseURL&&"#"==a){u.scheme=n.scheme,u.path=g(n.path),u.query=n.query,u.fragment="",u.cannotBeABaseURL=!0,c=De;break}c="file"==n.scheme?je:Ee;continue;case be:if("/"!=a||"/"!=o[p+1]){c=Ee;continue}c=Se,p++;break;case we:if("/"==a){c=Ae;break}c=Pe;continue;case Ee:if(u.scheme=n.scheme,a==r)u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,u.path=g(n.path),u.query=n.query;else if("/"==a||"\\"==a&&u.isSpecial())c=xe;else if("?"==a)u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,u.path=g(n.path),u.query="",c=Me;else{if("#"!=a){u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,u.path=g(n.path),u.path.length--,c=Pe;continue}u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,u.path=g(n.path),u.query=n.query,u.fragment="",c=De}break;case xe:if(!u.isSpecial()||"/"!=a&&"\\"!=a){if("/"!=a){u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,c=Pe;continue}c=Ae}else c=Se;break;case _e:if(c=Se,"/"!=a||"/"!=P(f,p+1))continue;p++;break;case Se:if("/"!=a&&"\\"!=a){c=Ae;continue}break;case Ae:if("@"==a){d&&(f="%40"+f),d=!0,i=m(f);for(var w=0;w65535)return J;u.port=u.isSpecial()&&_===fe[u.scheme]?null:_,f=""}if(t)return;c=Ne;continue}return J}f+=a;break;case je:if(u.scheme="file","/"==a||"\\"==a)c=Te;else{if(!n||"file"!=n.scheme){c=Pe;continue}if(a==r)u.host=n.host,u.path=g(n.path),u.query=n.query;else if("?"==a)u.host=n.host,u.path=g(n.path),u.query="",c=Me;else{if("#"!=a){de(M(g(o,p),""))||(u.host=n.host,u.path=g(n.path),u.shortenPath()),c=Pe;continue}u.host=n.host,u.path=g(n.path),u.query=n.query,u.fragment="",c=De}}break;case Te:if("/"==a||"\\"==a){c=Ie;break}n&&"file"==n.scheme&&!de(M(g(o,p),""))&&(he(n.path[0],!0)?B(u.path,n.path[0]):u.host=n.host),c=Pe;continue;case Ie:if(a==r||"/"==a||"\\"==a||"?"==a||"#"==a){if(!t&&he(f))c=Pe;else if(""==f){if(u.host="",t)return;c=Ne}else{if(s=u.parseHost(f))return s;if("localhost"==u.host&&(u.host=""),t)return;f="",c=Ne}continue}f+=a;break;case Ne:if(u.isSpecial()){if(c=Pe,"/"!=a&&"\\"!=a)continue}else if(t||"?"!=a)if(t||"#"!=a){if(a!=r&&(c=Pe,"/"!=a))continue}else u.fragment="",c=De;else u.query="",c=Me;break;case Pe:if(a==r||"/"==a||"\\"==a&&u.isSpecial()||!t&&("?"==a||"#"==a)){if(".."===(l=$(l=f))||"%2e."===l||".%2e"===l||"%2e%2e"===l?(u.shortenPath(),"/"==a||"\\"==a&&u.isSpecial()||B(u.path,"")):me(f)?"/"==a||"\\"==a&&u.isSpecial()||B(u.path,""):("file"==u.scheme&&!u.path.length&&he(f)&&(u.host&&(u.host=""),f=P(f,0)+":"),B(u.path,f)),f="","file"==u.scheme&&(a==r||"?"==a||"#"==a))for(;u.path.length>1&&""===u.path[0];)z(u.path);"?"==a?(u.query="",c=Me):"#"==a&&(u.fragment="",c=De)}else f+=pe(a,ue);break;case Re:"?"==a?(u.query="",c=Me):"#"==a?(u.fragment="",c=De):a!=r&&(u.path[0]+=pe(a,se));break;case Me:t||"#"!=a?a!=r&&("'"==a&&u.isSpecial()?u.query+="%27":u.query+="#"==a?"%23":pe(a,se)):(u.fragment="",c=De);break;case De:a!=r&&(u.fragment+=pe(a,le))}p++}},parseHost:function(e){var t,n,r;if("["==P(e,0)){if("]"!=P(e,e.length-1))return H;if(t=function(e){var t,n,r,o,a,i,s,l=[0,0,0,0,0,0,0,0],u=0,c=null,p=0,f=function(){return P(e,p)};if(":"==f()){if(":"!=P(e,1))return;p+=2,c=++u}for(;f();){if(8==u)return;if(":"!=f()){for(t=n=0;n<4&&R(ee,f());)t=16*t+T(f(),16),p++,n++;if("."==f()){if(0==n)return;if(p-=n,u>6)return;for(r=0;f();){if(o=null,r>0){if(!("."==f()&&r<4))return;p++}if(!R(Z,f()))return;for(;R(Z,f());){if(a=T(f(),10),null===o)o=a;else{if(0==o)return;o=10*o+a}if(o>255)return;p++}l[u]=256*l[u]+o,2!=++r&&4!=r||u++}if(4!=r)return;break}if(":"==f()){if(p++,!f())return}else if(f())return;l[u++]=t}else{if(null!==c)return;p++,c=++u}}if(null!==c)for(i=u-c,u=7;0!=u&&i>0;)s=l[u],l[u--]=l[c+i-1],l[c+--i]=s;else if(8!=u)return;return l}(q(e,1,-1)),!t)return H;this.host=t}else if(this.isSpecial()){if(e=v(e),R(te,e))return H;if(t=function(e){var t,n,r,o,a,i,s,l=U(e,".");if(l.length&&""==l[l.length-1]&&l.length--,(t=l.length)>4)return e;for(n=[],r=0;r1&&"0"==P(o,0)&&(a=R(Y,o)?16:8,o=q(o,8==a?1:2)),""===o)i=0;else{if(!R(10==a?X:8==a?Q:ee,o))return e;i=T(o,a)}B(n,i)}for(r=0;r=N(256,5-t))return null}else if(i>255)return null;for(s=L(n),r=0;r1?arguments[1]:void 0,r=S(t,new Le(e,!1,n));a||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},Fe=Be.prototype,ze=function(e,t){return{get:function(){return A(this)[e]()},set:t&&function(e){return A(this)[t](e)},configurable:!0,enumerable:!0}};if(a&&(p(Fe,"href",ze("serialize","setHref")),p(Fe,"origin",ze("getOrigin")),p(Fe,"protocol",ze("getProtocol","setProtocol")),p(Fe,"username",ze("getUsername","setUsername")),p(Fe,"password",ze("getPassword","setPassword")),p(Fe,"host",ze("getHost","setHost")),p(Fe,"hostname",ze("getHostname","setHostname")),p(Fe,"port",ze("getPort","setPort")),p(Fe,"pathname",ze("getPathname","setPathname")),p(Fe,"search",ze("getSearch","setSearch")),p(Fe,"searchParams",ze("getSearchParams")),p(Fe,"hash",ze("getHash","setHash"))),c(Fe,"toJSON",(function(){return A(this).serialize()}),{enumerable:!0}),c(Fe,"toString",(function(){return A(this).serialize()}),{enumerable:!0}),O){var Ue=O.createObjectURL,qe=O.revokeObjectURL;Ue&&c(Be,"createObjectURL",l(Ue,O)),qe&&c(Be,"revokeObjectURL",l(qe,O))}w(Be,"URL"),o({global:!0,constructor:!0,forced:!i,sham:!a},{URL:Be})},33601:(e,t,n)=>{n(47250)},98947:()=>{},24848:(e,t,n)=>{var r=n(54493);e.exports=r},83363:(e,t,n)=>{var r=n(24034);e.exports=r},62908:(e,t,n)=>{var r=n(12710);e.exports=r},49216:(e,t,n)=>{var r=n(99324);e.exports=r},56668:(e,t,n)=>{var r=n(95909);e.exports=r},74719:(e,t,n)=>{var r=n(14423);e.exports=r},57784:(e,t,n)=>{var r=n(81103);e.exports=r},28196:(e,t,n)=>{var r=n(16246);e.exports=r},8065:(e,t,n)=>{var r=n(56043);e.exports=r},57448:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),a=n(7046),i=n(62908),s=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.entries;return e===s||a(s,e)&&t===s.entries||o(l,r(e))?i:t}},29455:(e,t,n)=>{var r=n(13160);e.exports=r},69743:(e,t,n)=>{var r=n(80446);e.exports=r},11955:(e,t,n)=>{var r=n(2480);e.exports=r},96064:(e,t,n)=>{var r=n(7147);e.exports=r},61577:(e,t,n)=>{var r=n(32236);e.exports=r},46279:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),a=n(7046),i=n(49216),s=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.forEach;return e===s||a(s,e)&&t===s.forEach||o(l,r(e))?i:t}},33778:(e,t,n)=>{var r=n(58557);e.exports=r},19373:(e,t,n)=>{var r=n(34570);e.exports=r},73819:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),a=n(7046),i=n(56668),s=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.keys;return e===s||a(s,e)&&t===s.keys||o(l,r(e))?i:t}},11022:(e,t,n)=>{var r=n(57564);e.exports=r},61798:(e,t,n)=>{var r=n(88287);e.exports=r},52759:(e,t,n)=>{var r=n(93993);e.exports=r},52527:(e,t,n)=>{var r=n(68025);e.exports=r},36857:(e,t,n)=>{var r=n(59257);e.exports=r},82073:(e,t,n)=>{var r=n(69601);e.exports=r},45286:(e,t,n)=>{var r=n(28299);e.exports=r},62856:(e,t,n)=>{var r=n(69355);e.exports=r},2348:(e,t,n)=>{var r=n(18339);e.exports=r},35178:(e,t,n)=>{var r=n(71611);e.exports=r},76361:(e,t,n)=>{var r=n(62774);e.exports=r},71815:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),a=n(7046),i=n(74719),s=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.values;return e===s||a(s,e)&&t===s.values||o(l,r(e))?i:t}},8933:(e,t,n)=>{var r=n(84426);e.exports=r},15868:(e,t,n)=>{var r=n(91018);n(7634),e.exports=r},63383:(e,t,n)=>{var r=n(45999);e.exports=r},57396:(e,t,n)=>{var r=n(7702);e.exports=r},41910:(e,t,n)=>{var r=n(48171);e.exports=r},79427:(e,t,n)=>{var r=n(286);e.exports=r},62857:(e,t,n)=>{var r=n(92766);e.exports=r},9534:(e,t,n)=>{var r=n(30498);e.exports=r},23059:(e,t,n)=>{var r=n(48494);e.exports=r},47795:(e,t,n)=>{var r=n(98430);e.exports=r},27460:(e,t,n)=>{var r=n(52956);n(7634),e.exports=r},27989:(e,t,n)=>{n(71249);var r=n(54058);e.exports=r.setTimeout},92547:(e,t,n)=>{var r=n(57473);n(7634),e.exports=r},46509:(e,t,n)=>{var r=n(24227);n(7634),e.exports=r},35774:(e,t,n)=>{var r=n(62978);e.exports=r},57641:(e,t,n)=>{var r=n(71459);e.exports=r},47610:(e,t,n)=>{n(95304),n(16454),n(73305),n(62337);var r=n(54058);e.exports=r.URLSearchParams},71459:(e,t,n)=>{n(47610),n(33601),n(84630),n(98947);var r=n(54058);e.exports=r.URL},31905:function(){!function(e){!function(t){var n="URLSearchParams"in e,r="Symbol"in e&&"iterator"in Symbol,o="FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),a="FormData"in e,i="ArrayBuffer"in e;if(i)var s=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],l=ArrayBuffer.isView||function(e){return e&&s.indexOf(Object.prototype.toString.call(e))>-1};function u(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function c(e){return"string"!=typeof e&&(e=String(e)),e}function p(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return r&&(t[Symbol.iterator]=function(){return t}),t}function f(e){this.map={},e instanceof f?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function h(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function d(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function m(e){var t=new FileReader,n=d(t);return t.readAsArrayBuffer(e),n}function g(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function y(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:o&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:a&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():i&&o&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=g(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):i&&(ArrayBuffer.prototype.isPrototypeOf(e)||l(e))?this._bodyArrayBuffer=g(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},o&&(this.blob=function(){var e=h(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?h(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(m)}),this.text=function(){var e,t,n,r=h(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=d(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o)}function w(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function E(e,t){t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new f(t.headers),this.url=t.url||"",this._initBody(e)}b.prototype.clone=function(){return new b(this,{body:this._bodyInit})},y.call(b.prototype),y.call(E.prototype),E.prototype.clone=function(){return new E(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new f(this.headers),url:this.url})},E.error=function(){var e=new E(null,{status:0,statusText:""});return e.type="error",e};var x=[301,302,303,307,308];E.redirect=function(e,t){if(-1===x.indexOf(t))throw new RangeError("Invalid status code");return new E(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function _(e,n){return new Promise((function(r,a){var i=new b(e,n);if(i.signal&&i.signal.aborted)return a(new t.DOMException("Aborted","AbortError"));var s=new XMLHttpRequest;function l(){s.abort()}s.onload=function(){var e,t,n={status:s.status,statusText:s.statusText,headers:(e=s.getAllResponseHeaders()||"",t=new f,e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}})),t)};n.url="responseURL"in s?s.responseURL:n.headers.get("X-Request-URL");var o="response"in s?s.response:s.responseText;r(new E(o,n))},s.onerror=function(){a(new TypeError("Network request failed"))},s.ontimeout=function(){a(new TypeError("Network request failed"))},s.onabort=function(){a(new t.DOMException("Aborted","AbortError"))},s.open(i.method,i.url,!0),"include"===i.credentials?s.withCredentials=!0:"omit"===i.credentials&&(s.withCredentials=!1),"responseType"in s&&o&&(s.responseType="blob"),i.headers.forEach((function(e,t){s.setRequestHeader(t,e)})),i.signal&&(i.signal.addEventListener("abort",l),s.onreadystatechange=function(){4===s.readyState&&i.signal.removeEventListener("abort",l)}),s.send(void 0===i._bodyInit?null:i._bodyInit)}))}_.polyfill=!0,e.fetch||(e.fetch=_,e.Headers=f,e.Request=b,e.Response=E),t.Headers=f,t.Request=b,t.Response=E,t.fetch=_,Object.defineProperty(t,"__esModule",{value:!0})}({})}("undefined"!=typeof self?self:this)},8269:function(e,t,n){var r;r=void 0!==n.g?n.g:this,e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var t,n=String(e),r=n.length,o=-1,a="",i=n.charCodeAt(0);++o=1&&t<=31||127==t||0==o&&t>=48&&t<=57||1==o&&t>=48&&t<=57&&45==i?"\\"+t.toString(16)+" ":0==o&&1==r&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?"\\"+n.charAt(o):n.charAt(o):a+="�";return a};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(r)},27698:(e,t,n)=>{"use strict";var r=n(48764).Buffer;function o(e){return e instanceof r||e instanceof Date||e instanceof RegExp}function a(e){if(e instanceof r){var t=r.alloc?r.alloc(e.length):new r(e.length);return e.copy(t),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function i(e){var t=[];return e.forEach((function(e,n){"object"==typeof e&&null!==e?Array.isArray(e)?t[n]=i(e):o(e)?t[n]=a(e):t[n]=l({},e):t[n]=e})),t}function s(e,t){return"__proto__"===t?void 0:e[t]}var l=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,n=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(r){"object"!=typeof r||null===r||Array.isArray(r)||Object.keys(r).forEach((function(u){return t=s(n,u),(e=s(r,u))===n?void 0:"object"!=typeof e||null===e?void(n[u]=e):Array.isArray(e)?void(n[u]=i(e)):o(e)?void(n[u]=a(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(n[u]=l({},e)):void(n[u]=l(t,e))}))})),n}},9996:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===n}(e)}(e)};var n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function r(e,t){return!1!==t.clone&&t.isMergeableObject(e)?l((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function o(e,t,n){return e.concat(t).map((function(e){return r(e,n)}))}function a(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function i(e,t){try{return t in e}catch(e){return!1}}function s(e,t,n){var o={};return n.isMergeableObject(e)&&a(e).forEach((function(t){o[t]=r(e[t],n)})),a(t).forEach((function(a){(function(e,t){return i(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,a)||(i(e,a)&&n.isMergeableObject(t[a])?o[a]=function(e,t){if(!t.customMerge)return l;var n=t.customMerge(e);return"function"==typeof n?n:l}(a,n)(e[a],t[a],n):o[a]=r(t[a],n))})),o}function l(e,n,a){(a=a||{}).arrayMerge=a.arrayMerge||o,a.isMergeableObject=a.isMergeableObject||t,a.cloneUnlessOtherwiseSpecified=r;var i=Array.isArray(n);return i===Array.isArray(e)?i?a.arrayMerge(e,n,a):s(e,n,a):r(n,a)}l.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,n){return l(e,n,t)}),{})};var u=l;e.exports=u},27856:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:o}=Object;let{freeze:a,seal:i,create:s}=Object,{apply:l,construct:u}="undefined"!=typeof Reflect&&Reflect;l||(l=function(e,t,n){return e.apply(t,n)}),a||(a=function(e){return e}),i||(i=function(e){return e}),u||(u=function(e,t){return new e(...t)});const c=E(Array.prototype.forEach),p=E(Array.prototype.pop),f=E(Array.prototype.push),h=E(String.prototype.toLowerCase),d=E(String.prototype.toString),m=E(String.prototype.match),g=E(String.prototype.replace),y=E(String.prototype.indexOf),v=E(String.prototype.trim),b=E(RegExp.prototype.test),w=x(TypeError);function E(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o/gm),F=i(/\${[\w\W]*}/gm),z=i(/^data-[\-\w.\u00B7-\uFFFF]/),U=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),V=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var H=Object.freeze({__proto__:null,MUSTACHE_EXPR:L,ERB_EXPR:B,TMPLIT_EXPR:F,DATA_ATTR:z,ARIA_ATTR:U,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:V,DOCTYPE_NAME:W});const J=()=>"undefined"==typeof window?null:window,K=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t.currentScript&&t.currentScript.hasAttribute(r)&&(n=t.currentScript.getAttribute(r));const o="dompurify"+(n?"#"+n:"");try{return e.createPolicy(o,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function G(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:J();const n=e=>G(e);if(n.version="3.0.2",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;const r=t.document;let{document:o}=t;const{DocumentFragment:i,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:E,NamedNodeMap:x=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:L,DOMParser:B,trustedTypes:F}=t,z=u.prototype,U=A(z,"cloneNode"),$=A(z,"nextSibling"),V=A(z,"childNodes"),Z=A(z,"parentNode");if("function"==typeof s){const e=o.createElement("template");e.content&&e.content.ownerDocument&&(o=e.content.ownerDocument)}const Y=K(F,r),Q=Y?Y.createHTML(""):"",{implementation:X,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=o,{importNode:re}=r;let oe={};n.isSupported="function"==typeof e&&"function"==typeof Z&&X&&void 0!==X.createHTMLDocument;const{MUSTACHE_EXPR:ae,ERB_EXPR:ie,TMPLIT_EXPR:se,DATA_ATTR:le,ARIA_ATTR:ue,IS_SCRIPT_OR_DATA:ce,ATTR_WHITESPACE:pe}=H;let{IS_ALLOWED_URI:fe}=H,he=null;const de=_({},[...C,...k,...O,...T,...N]);let me=null;const ge=_({},[...P,...R,...M,...D]);let ye=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,we=!0,Ee=!0,xe=!1,_e=!0,Se=!1,Ae=!1,Ce=!1,ke=!1,Oe=!1,je=!1,Te=!1,Ie=!0,Ne=!1;const Pe="user-content-";let Re=!0,Me=!1,De={},Le=null;const Be=_({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Fe=null;const ze=_({},["audio","video","img","source","image","track"]);let Ue=null;const qe=_({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),$e="http://www.w3.org/1998/Math/MathML",Ve="http://www.w3.org/2000/svg",We="http://www.w3.org/1999/xhtml";let He=We,Je=!1,Ke=null;const Ge=_({},[$e,Ve,We],d);let Ze;const Ye=["application/xhtml+xml","text/html"],Qe="text/html";let Xe,et=null;const tt=o.createElement("form"),nt=function(e){return e instanceof RegExp||e instanceof Function},rt=function(e){et&&et===e||(e&&"object"==typeof e||(e={}),e=S(e),Ze=Ze=-1===Ye.indexOf(e.PARSER_MEDIA_TYPE)?Qe:e.PARSER_MEDIA_TYPE,Xe="application/xhtml+xml"===Ze?d:h,he="ALLOWED_TAGS"in e?_({},e.ALLOWED_TAGS,Xe):de,me="ALLOWED_ATTR"in e?_({},e.ALLOWED_ATTR,Xe):ge,Ke="ALLOWED_NAMESPACES"in e?_({},e.ALLOWED_NAMESPACES,d):Ge,Ue="ADD_URI_SAFE_ATTR"in e?_(S(qe),e.ADD_URI_SAFE_ATTR,Xe):qe,Fe="ADD_DATA_URI_TAGS"in e?_(S(ze),e.ADD_DATA_URI_TAGS,Xe):ze,Le="FORBID_CONTENTS"in e?_({},e.FORBID_CONTENTS,Xe):Be,ve="FORBID_TAGS"in e?_({},e.FORBID_TAGS,Xe):{},be="FORBID_ATTR"in e?_({},e.FORBID_ATTR,Xe):{},De="USE_PROFILES"in e&&e.USE_PROFILES,we=!1!==e.ALLOW_ARIA_ATTR,Ee=!1!==e.ALLOW_DATA_ATTR,xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,_e=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,Se=e.SAFE_FOR_TEMPLATES||!1,Ae=e.WHOLE_DOCUMENT||!1,Oe=e.RETURN_DOM||!1,je=e.RETURN_DOM_FRAGMENT||!1,Te=e.RETURN_TRUSTED_TYPE||!1,ke=e.FORCE_BODY||!1,Ie=!1!==e.SANITIZE_DOM,Ne=e.SANITIZE_NAMED_PROPS||!1,Re=!1!==e.KEEP_CONTENT,Me=e.IN_PLACE||!1,fe=e.ALLOWED_URI_REGEXP||q,He=e.NAMESPACE||We,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&nt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&nt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Se&&(Ee=!1),je&&(Oe=!0),De&&(he=_({},[...N]),me=[],!0===De.html&&(_(he,C),_(me,P)),!0===De.svg&&(_(he,k),_(me,R),_(me,D)),!0===De.svgFilters&&(_(he,O),_(me,R),_(me,D)),!0===De.mathMl&&(_(he,T),_(me,M),_(me,D))),e.ADD_TAGS&&(he===de&&(he=S(he)),_(he,e.ADD_TAGS,Xe)),e.ADD_ATTR&&(me===ge&&(me=S(me)),_(me,e.ADD_ATTR,Xe)),e.ADD_URI_SAFE_ATTR&&_(Ue,e.ADD_URI_SAFE_ATTR,Xe),e.FORBID_CONTENTS&&(Le===Be&&(Le=S(Le)),_(Le,e.FORBID_CONTENTS,Xe)),Re&&(he["#text"]=!0),Ae&&_(he,["html","head","body"]),he.table&&(_(he,["tbody"]),delete ve.tbody),a&&a(e),et=e)},ot=_({},["mi","mo","mn","ms","mtext"]),at=_({},["foreignobject","desc","title","annotation-xml"]),it=_({},["title","style","font","a","script"]),st=_({},k);_(st,O),_(st,j);const lt=_({},T);_(lt,I);const ut=function(e){let t=Z(e);t&&t.tagName||(t={namespaceURI:He,tagName:"template"});const n=h(e.tagName),r=h(t.tagName);return!!Ke[e.namespaceURI]&&(e.namespaceURI===Ve?t.namespaceURI===We?"svg"===n:t.namespaceURI===$e?"svg"===n&&("annotation-xml"===r||ot[r]):Boolean(st[n]):e.namespaceURI===$e?t.namespaceURI===We?"math"===n:t.namespaceURI===Ve?"math"===n&&at[r]:Boolean(lt[n]):e.namespaceURI===We?!(t.namespaceURI===Ve&&!at[r])&&!(t.namespaceURI===$e&&!ot[r])&&!lt[n]&&(it[n]||!st[n]):!("application/xhtml+xml"!==Ze||!Ke[e.namespaceURI]))},ct=function(e){f(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},pt=function(e,t){try{f(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){f(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Oe||je)try{ct(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ft=function(e){let t,n;if(ke)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ze&&He===We&&(e=''+e+"");const r=Y?Y.createHTML(e):e;if(He===We)try{t=(new B).parseFromString(r,Ze)}catch(e){}if(!t||!t.documentElement){t=X.createDocument(He,"template",null);try{t.documentElement.innerHTML=Je?Q:r}catch(e){}}const a=t.body||t.documentElement;return e&&n&&a.insertBefore(o.createTextNode(n),a.childNodes[0]||null),He===We?ne.call(t,Ae?"html":"body")[0]:Ae?t.documentElement:a},ht=function(e){return ee.call(e.ownerDocument||e,e,E.SHOW_ELEMENT|E.SHOW_COMMENT|E.SHOW_TEXT,null,!1)},dt=function(e){return e instanceof L&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof x)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},mt=function(e){return"object"==typeof l?e instanceof l:e&&"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},gt=function(e,t,r){oe[e]&&c(oe[e],(e=>{e.call(n,t,r,et)}))},yt=function(e){let t;if(gt("beforeSanitizeElements",e,null),dt(e))return ct(e),!0;const r=Xe(e.nodeName);if(gt("uponSanitizeElement",e,{tagName:r,allowedTags:he}),e.hasChildNodes()&&!mt(e.firstElementChild)&&(!mt(e.content)||!mt(e.content.firstElementChild))&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return ct(e),!0;if(!he[r]||ve[r]){if(!ve[r]&&bt(r)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,r))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(r))return!1}if(Re&&!Le[r]){const t=Z(e)||e.parentNode,n=V(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(U(n[r],!0),$(e))}return ct(e),!0}return e instanceof u&&!ut(e)?(ct(e),!0):"noscript"!==r&&"noembed"!==r||!b(/<\/no(script|embed)/i,e.innerHTML)?(Se&&3===e.nodeType&&(t=e.textContent,t=g(t,ae," "),t=g(t,ie," "),t=g(t,se," "),e.textContent!==t&&(f(n.removed,{element:e.cloneNode()}),e.textContent=t)),gt("afterSanitizeElements",e,null),!1):(ct(e),!0)},vt=function(e,t,n){if(Ie&&("id"===t||"name"===t)&&(n in o||n in tt))return!1;if(Ee&&!be[t]&&b(le,t));else if(we&&b(ue,t));else if(!me[t]||be[t]){if(!(bt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Ue[t]);else if(b(fe,g(n,pe,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Fe[e])if(xe&&!b(ce,g(n,pe,"")));else if(n)return!1;return!0},bt=function(e){return e.indexOf("-")>0},wt=function(e){let t,r,o,a;gt("beforeSanitizeAttributes",e,null);const{attributes:i}=e;if(!i)return;const s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};for(a=i.length;a--;){t=i[a];const{name:l,namespaceURI:u}=t;if(r="value"===l?t.value:v(t.value),o=Xe(l),s.attrName=o,s.attrValue=r,s.keepAttr=!0,s.forceKeepAttr=void 0,gt("uponSanitizeAttribute",e,s),r=s.attrValue,s.forceKeepAttr)continue;if(pt(l,e),!s.keepAttr)continue;if(!_e&&b(/\/>/i,r)){pt(l,e);continue}Se&&(r=g(r,ae," "),r=g(r,ie," "),r=g(r,se," "));const c=Xe(e.nodeName);if(vt(c,o,r)){if(!Ne||"id"!==o&&"name"!==o||(pt(l,e),r=Pe+r),Y&&"object"==typeof F&&"function"==typeof F.getAttributeType)if(u);else switch(F.getAttributeType(c,o)){case"TrustedHTML":r=Y.createHTML(r);break;case"TrustedScriptURL":r=Y.createScriptURL(r)}try{u?e.setAttributeNS(u,l,r):e.setAttribute(l,r),p(n.removed)}catch(e){}}}gt("afterSanitizeAttributes",e,null)},Et=function e(t){let n;const r=ht(t);for(gt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)gt("uponSanitizeShadowNode",n,null),yt(n)||(n.content instanceof i&&e(n.content),wt(n));gt("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e){let t,o,a,s,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Je=!e,Je&&(e="\x3c!--\x3e"),"string"!=typeof e&&!mt(e)){if("function"!=typeof e.toString)throw w("toString is not a function");if("string"!=typeof(e=e.toString()))throw w("dirty is not a string, aborting")}if(!n.isSupported)return e;if(Ce||rt(u),n.removed=[],"string"==typeof e&&(Me=!1),Me){if(e.nodeName){const t=Xe(e.nodeName);if(!he[t]||ve[t])throw w("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof l)t=ft("\x3c!----\x3e"),o=t.ownerDocument.importNode(e,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?t=o:t.appendChild(o);else{if(!Oe&&!Se&&!Ae&&-1===e.indexOf("<"))return Y&&Te?Y.createHTML(e):e;if(t=ft(e),!t)return Oe?null:Te?Q:""}t&&ke&&ct(t.firstChild);const c=ht(Me?e:t);for(;a=c.nextNode();)yt(a)||(a.content instanceof i&&Et(a.content),wt(a));if(Me)return e;if(Oe){if(je)for(s=te.call(t.ownerDocument);t.firstChild;)s.appendChild(t.firstChild);else s=t;return(me.shadowroot||me.shadowrootmod)&&(s=re.call(r,s,!0)),s}let p=Ae?t.outerHTML:t.innerHTML;return Ae&&he["!doctype"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&b(W,t.ownerDocument.doctype.name)&&(p="\n"+p),Se&&(p=g(p,ae," "),p=g(p,ie," "),p=g(p,se," ")),Y&&Te?Y.createHTML(p):p},n.setConfig=function(e){rt(e),Ce=!0},n.clearConfig=function(){et=null,Ce=!1},n.isValidAttribute=function(e,t,n){et||rt({});const r=Xe(e),o=Xe(t);return vt(r,o,n)},n.addHook=function(e,t){"function"==typeof t&&(oe[e]=oe[e]||[],f(oe[e],t))},n.removeHook=function(e){if(oe[e])return p(oe[e])},n.removeHooks=function(e){oe[e]&&(oe[e]=[])},n.removeAllHooks=function(){oe={}},n}return G()}()},69450:e=>{"use strict";class t{constructor(e,t){this.low=e,this.high=t,this.length=1+t-e}overlaps(e){return!(this.highe.high)}touches(e){return!(this.high+1e.high)}add(e){return new t(Math.min(this.low,e.low),Math.max(this.high,e.high))}subtract(e){return e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.highe+t.length),0)}add(e,r){var o=e=>{for(var t=0;t{for(var t=0;t{for(var n=0;n{for(var n=t.low;n<=t.high;)e.push(n),n++;return e}),[])}subranges(){return this.ranges.map((e=>({low:e.low,high:e.high,length:1+e.high-e.low})))}}e.exports=n},17187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}e.exports=a,e.exports.once=function(e,t){return new Promise((function(n,r){function o(n){e.removeListener(t,a),r(n)}function a(){"function"==typeof e.removeListener&&e.removeListener("error",o),n([].slice.call(arguments))}m(e,t,a,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,o,{once:!0})}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var i=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var o,a,i,u;if(s(n),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),a=e._events),i=a[t]),void 0===i)i=a[t]=n,++e._eventsCount;else if("function"==typeof i?i=a[t]=r?[n,i]:[i,n]:r?i.unshift(n):i.push(n),(o=l(e))>0&&i.length>o&&!i.warned){i.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=i.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=c.bind(r);return o.listener=n,r.wrapFn=o,o}function f(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(i=t[0]),i instanceof Error)throw i;var s=new Error("Unhandled error."+(i?" ("+i.message+")":""));throw s.context=i,s}var l=a[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=d(l,u);for(n=0;n=0;a--)if(n[a]===t||n[a].listener===t){i=n[a].listener,o=a;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},a.prototype.listeners=function(e){return f(this,e,!0)},a.prototype.rawListeners=function(e){return f(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},a.prototype.listenerCount=h,a.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},21102:(e,t,n)=>{"use strict";var r=n(46291),o=a(Error);function a(e){return t.displayName=e.displayName||e.name,t;function t(t){return t&&(t=r.apply(null,arguments)),new e(t)}}e.exports=o,o.eval=a(EvalError),o.range=a(RangeError),o.reference=a(ReferenceError),o.syntax=a(SyntaxError),o.type=a(TypeError),o.uri=a(URIError),o.create=a},46291:e=>{!function(){var t;function n(e){for(var t,n,r,o,a=1,i=[].slice.call(arguments),s=0,l=e.length,u="",c=!1,p=!1,f=function(){return i[a++]},h=function(){for(var n="";/\d/.test(e[s]);)n+=e[s++],t=e[s];return n.length>0?parseInt(n):null};s{"use strict";var t=Array.prototype.slice,n=Object.prototype.toString;e.exports=function(e){var r=this;if("function"!=typeof r||"[object Function]"!==n.call(r))throw new TypeError("Function.prototype.bind called on incompatible "+r);for(var o,a=t.call(arguments,1),i=Math.max(0,r.length-a.length),s=[],l=0;l{"use strict";var r=n(17648);e.exports=Function.prototype.bind||r},40210:(e,t,n)=>{"use strict";var r,o=SyntaxError,a=Function,i=TypeError,s=function(e){try{return a('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var u=function(){throw new i},c=l?function(){try{return u}catch(e){try{return l(arguments,"callee").get}catch(e){return u}}}():u,p=n(41405)(),f=Object.getPrototypeOf||function(e){return e.__proto__},h={},d="undefined"==typeof Uint8Array?r:f(Uint8Array),m={"%AggregateError%":"undefined"==typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":p?f([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":h,"%AsyncGenerator%":h,"%AsyncGeneratorFunction%":h,"%AsyncIteratorPrototype%":h,"%Atomics%":"undefined"==typeof Atomics?r:Atomics,"%BigInt%":"undefined"==typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":a,"%GeneratorFunction%":h,"%Int8Array%":"undefined"==typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":p?f(f([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":"undefined"==typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&p?f((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?r:Promise,"%Proxy%":"undefined"==typeof Proxy?r:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&p?f((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":p?f(""[Symbol.iterator]()):r,"%Symbol%":p?Symbol:r,"%SyntaxError%":o,"%ThrowTypeError%":c,"%TypedArray%":d,"%TypeError%":i,"%Uint8Array%":"undefined"==typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?r:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?r:WeakSet};try{null.error}catch(e){var g=f(f(e));m["%Error.prototype%"]=g}var y=function e(t){var n;if("%AsyncFunction%"===t)n=s("async function () {}");else if("%GeneratorFunction%"===t)n=s("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=s("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&(n=f(o.prototype))}return m[t]=n,n},v={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},b=n(58612),w=n(17642),E=b.call(Function.call,Array.prototype.concat),x=b.call(Function.apply,Array.prototype.splice),_=b.call(Function.call,String.prototype.replace),S=b.call(Function.call,String.prototype.slice),A=b.call(Function.call,RegExp.prototype.exec),C=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,k=/\\(\\)?/g,O=function(e,t){var n,r=e;if(w(v,r)&&(r="%"+(n=v[r])[0]+"%"),w(m,r)){var a=m[r];if(a===h&&(a=y(r)),void 0===a&&!t)throw new i("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:a}}throw new o("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new i("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new i('"allowMissing" argument must be a boolean');if(null===A(/^%?[^%]*%?$/,e))throw new o("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=S(e,0,1),n=S(e,-1);if("%"===t&&"%"!==n)throw new o("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new o("invalid intrinsic syntax, expected opening `%`");var r=[];return _(e,C,(function(e,t,n,o){r[r.length]=n?_(o,k,"$1"):t||e})),r}(e),r=n.length>0?n[0]:"",a=O("%"+r+"%",t),s=a.name,u=a.value,c=!1,p=a.alias;p&&(r=p[0],x(n,E([0,1],p)));for(var f=1,h=!0;f=n.length){var v=l(u,d);u=(h=!!v)&&"get"in v&&!("originalValue"in v.get)?v.get:u[d]}else h=w(u,d),u=u[d];h&&!c&&(m[s]=u)}}return u}},41405:(e,t,n)=>{"use strict";var r="undefined"!=typeof Symbol&&Symbol,o=n(55419);e.exports=function(){return"function"==typeof r&&("function"==typeof Symbol&&("symbol"==typeof r("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},55419:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},17642:(e,t,n)=>{"use strict";var r=n(58612);e.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},47802:e=>{function t(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(n){var r=e[n];"object"!=typeof r||Object.isFrozen(r)||t(r)})),e}var n=t,r=t;n.default=r;class o{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function a(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.kind;class l{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=a(e)}openNode(e){if(!s(e))return;let t=e.kind;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){s(e)&&(this.buffer+="")}value(){return this.buffer}span(e){this.buffer+=``}}class u{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{u._collapse(e)})))}}class c extends u{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function p(e){return e?"string"==typeof e?e:e.source:null}const f=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;const h="[a-zA-Z]\\w*",d="[a-zA-Z_]\\w*",m="\\b\\d+(\\.\\d+)?",g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",y="\\b(0b[01]+)",v={begin:"\\\\[\\s\\S]",relevance:0},b={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[v]},w={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[v]},E={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},x=function(e,t,n={}){const r=i({className:"comment",begin:e,end:t,contains:[]},n);return r.contains.push(E),r.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),r},_=x("//","$"),S=x("/\\*","\\*/"),A=x("#","$"),C={className:"number",begin:m,relevance:0},k={className:"number",begin:g,relevance:0},O={className:"number",begin:y,relevance:0},j={className:"number",begin:m+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},T={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[v,{begin:/\[/,end:/\]/,relevance:0,contains:[v]}]}]},I={className:"title",begin:h,relevance:0},N={className:"title",begin:d,relevance:0},P={begin:"\\.\\s*"+d,relevance:0};var R=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:h,UNDERSCORE_IDENT_RE:d,NUMBER_RE:m,C_NUMBER_RE:g,BINARY_NUMBER_RE:y,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map((e=>p(e))).join("")}(t,/.*\b/,e.binary,/\b.*/)),i({className:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:v,APOS_STRING_MODE:b,QUOTE_STRING_MODE:w,PHRASAL_WORDS_MODE:E,COMMENT:x,C_LINE_COMMENT_MODE:_,C_BLOCK_COMMENT_MODE:S,HASH_COMMENT_MODE:A,NUMBER_MODE:C,C_NUMBER_MODE:k,BINARY_NUMBER_MODE:O,CSS_NUMBER_MODE:j,REGEXP_MODE:T,TITLE_MODE:I,UNDERSCORE_TITLE_MODE:N,METHOD_GUARD:P,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function M(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}function D(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=M,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function L(e,t){Array.isArray(e.illegal)&&(e.illegal=function(...e){return"("+e.map((e=>p(e))).join("|")+")"}(...e.illegal))}function B(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function F(e,t){void 0===e.relevance&&(e.relevance=1)}const z=["of","and","for","in","not","or","if","then","parent","list","value"],U="keyword";function q(e,t,n=U){const r={};return"string"==typeof e?o(n,e.split(" ")):Array.isArray(e)?o(n,e):Object.keys(e).forEach((function(n){Object.assign(r,q(e[n],t,n))})),r;function o(e,n){t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((function(t){const n=t.split("|");r[n[0]]=[e,$(n[0],n[1])]}))}}function $(e,t){return t?Number(t):function(e){return z.includes(e.toLowerCase())}(e)?0:1}function V(e,{plugins:t}){function n(t,n){return new RegExp(p(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class r{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=n(function(e,t="|"){let n=0;return e.map((e=>{n+=1;const t=n;let r=p(e),o="";for(;r.length>0;){const e=f.exec(r);if(!e){o+=r;break}o+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?o+="\\"+String(Number(e[1])+t):(o+=e[0],"("===e[0]&&n++)}return o})).map((e=>`(${e})`)).join(t)}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class o{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new r;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=i(e.classNameAliases||{}),function t(r,a){const s=r;if(r.isCompiled)return s;[B].forEach((e=>e(r,a))),e.compilerExtensions.forEach((e=>e(r,a))),r.__beforeBegin=null,[D,L,F].forEach((e=>e(r,a))),r.isCompiled=!0;let l=null;if("object"==typeof r.keywords&&(l=r.keywords.$pattern,delete r.keywords.$pattern),r.keywords&&(r.keywords=q(r.keywords,e.case_insensitive)),r.lexemes&&l)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l=l||r.lexemes||/\w+/,s.keywordPatternRe=n(l,!0),a&&(r.begin||(r.begin=/\B|\b/),s.beginRe=n(r.begin),r.endSameAsBegin&&(r.end=r.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),r.end&&(s.endRe=n(r.end)),s.terminatorEnd=p(r.end)||"",r.endsWithParent&&a.terminatorEnd&&(s.terminatorEnd+=(r.end?"|":"")+a.terminatorEnd)),r.illegal&&(s.illegalRe=n(r.illegal)),r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return i(e,{variants:null},t)})));if(e.cachedVariants)return e.cachedVariants;if(W(e))return i(e,{starts:e.starts?i(e.starts):null});if(Object.isFrozen(e))return i(e);return e}("self"===e?r:e)}))),r.contains.forEach((function(e){t(e,s)})),r.starts&&t(r.starts,a),s.matcher=function(e){const t=new o;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(s),s}(e)}function W(e){return!!e&&(e.endsWithParent||W(e.starts))}function H(e){const t={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,a(this.code);let t={};return this.autoDetect?(t=e.highlightAuto(this.code),this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),t.value},autoDetect(){return!this.language||(e=this.autodetect,Boolean(e||""===e));var e},ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:t,VuePlugin:{install(e){e.component("highlightjs",t)}}}}const J={"after:highlightElement":({el:e,result:t,text:n})=>{const r=G(e);if(!r.length)return;const o=document.createElement("div");o.innerHTML=t.value,t.value=function(e,t,n){let r=0,o="";const i=[];function s(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function u(e){o+=""}function c(e){("start"===e.event?l:u)(e.node)}for(;e.length||t.length;){let t=s();if(o+=a(n.substring(r,t[0].offset)),r=t[0].offset,t===e){i.reverse().forEach(u);do{c(t.splice(0,1)[0]),t=s()}while(t===e&&t.length&&t[0].offset===r);i.reverse().forEach(l)}else"start"===t[0].event?i.push(t[0].node):i.pop(),c(t.splice(0,1)[0])}return o+a(n.substr(r))}(r,G(o),n)}};function K(e){return e.nodeName.toLowerCase()}function G(e){const t=[];return function e(n,r){for(let o=n.firstChild;o;o=o.nextSibling)3===o.nodeType?r+=o.nodeValue.length:1===o.nodeType&&(t.push({event:"start",offset:r,node:o}),r=e(o,r),K(o).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:o}));return r}(e,0),t}const Z={},Y=e=>{console.error(e)},Q=(e,...t)=>{console.log(`WARN: ${e}`,...t)},X=(e,t)=>{Z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Z[`${e}/${t}`]=!0)},ee=a,te=i,ne=Symbol("nomatch");var re=function(e){const t=Object.create(null),r=Object.create(null),a=[];let i=!0;const s=/(^(<[^>]+>|\t|)+|\n)/gm,l="Could not find the language '{}', did you forget to load/include a language module?",u={disableAutodetect:!0,name:"Plain text",contains:[]};let p={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:c};function f(e){return p.noHighlightRe.test(e)}function h(e,t,n,r){let o="",a="";"object"==typeof t?(o=e,n=t.ignoreIllegals,a=t.language,r=void 0):(X("10.7.0","highlight(lang, code, ...args) has been deprecated."),X("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),a=e,o=t);const i={code:o,language:a};C("before:highlight",i);const s=i.result?i.result:d(i.language,i.code,n,r);return s.code=i.code,C("after:highlight",s),s}function d(e,n,r,s){function u(e,t){const n=E.case_insensitive?t[0].toLowerCase():t[0];return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}function c(){null!=A.subLanguage?function(){if(""===O)return;let e=null;if("string"==typeof A.subLanguage){if(!t[A.subLanguage])return void k.addText(O);e=d(A.subLanguage,O,!0,C[A.subLanguage]),C[A.subLanguage]=e.top}else e=m(O,A.subLanguage.length?A.subLanguage:null);A.relevance>0&&(j+=e.relevance),k.addSublanguage(e.emitter,e.language)}():function(){if(!A.keywords)return void k.addText(O);let e=0;A.keywordPatternRe.lastIndex=0;let t=A.keywordPatternRe.exec(O),n="";for(;t;){n+=O.substring(e,t.index);const r=u(A,t);if(r){const[e,o]=r;if(k.addText(n),n="",j+=o,e.startsWith("_"))n+=t[0];else{const n=E.classNameAliases[e]||e;k.addKeyword(t[0],n)}}else n+=t[0];e=A.keywordPatternRe.lastIndex,t=A.keywordPatternRe.exec(O)}n+=O.substr(e),k.addText(n)}(),O=""}function f(e){return e.className&&k.openNode(E.classNameAliases[e.className]||e.className),A=Object.create(e,{parent:{value:A}}),A}function h(e,t,n){let r=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(r){if(e["on:end"]){const n=new o(e);e["on:end"](t,n),n.isMatchIgnored&&(r=!1)}if(r){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return h(e.parent,t,n)}function g(e){return 0===A.matcher.regexIndex?(O+=e[0],1):(N=!0,0)}function y(e){const t=e[0],n=e.rule,r=new o(n),a=[n.__beforeBegin,n["on:begin"]];for(const n of a)if(n&&(n(e,r),r.isMatchIgnored))return g(t);return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),n.skip?O+=t:(n.excludeBegin&&(O+=t),c(),n.returnBegin||n.excludeBegin||(O=t)),f(n),n.returnBegin?0:t.length}function v(e){const t=e[0],r=n.substr(e.index),o=h(A,e,r);if(!o)return ne;const a=A;a.skip?O+=t:(a.returnEnd||a.excludeEnd||(O+=t),c(),a.excludeEnd&&(O=t));do{A.className&&k.closeNode(),A.skip||A.subLanguage||(j+=A.relevance),A=A.parent}while(A!==o.parent);return o.starts&&(o.endSameAsBegin&&(o.starts.endRe=o.endRe),f(o.starts)),a.returnEnd?0:t.length}let b={};function w(t,o){const a=o&&o[0];if(O+=t,null==a)return c(),0;if("begin"===b.type&&"end"===o.type&&b.index===o.index&&""===a){if(O+=n.slice(o.index,o.index+1),!i){const t=new Error("0 width match regex");throw t.languageName=e,t.badRule=b.rule,t}return 1}if(b=o,"begin"===o.type)return y(o);if("illegal"===o.type&&!r){const e=new Error('Illegal lexeme "'+a+'" for mode "'+(A.className||"")+'"');throw e.mode=A,e}if("end"===o.type){const e=v(o);if(e!==ne)return e}if("illegal"===o.type&&""===a)return 1;if(I>1e5&&I>3*o.index){throw new Error("potential infinite loop, way more iterations than matches")}return O+=a,a.length}const E=_(e);if(!E)throw Y(l.replace("{}",e)),new Error('Unknown language: "'+e+'"');const x=V(E,{plugins:a});let S="",A=s||x;const C={},k=new p.__emitter(p);!function(){const e=[];for(let t=A;t!==E;t=t.parent)t.className&&e.unshift(t.className);e.forEach((e=>k.openNode(e)))}();let O="",j=0,T=0,I=0,N=!1;try{for(A.matcher.considerAll();;){I++,N?N=!1:A.matcher.considerAll(),A.matcher.lastIndex=T;const e=A.matcher.exec(n);if(!e)break;const t=w(n.substring(T,e.index),e);T=e.index+t}return w(n.substr(T)),k.closeAllNodes(),k.finalize(),S=k.toHTML(),{relevance:Math.floor(j),value:S,language:e,illegal:!1,emitter:k,top:A}}catch(t){if(t.message&&t.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:t.message,context:n.slice(T-100,T+100),mode:t.mode},sofar:S,relevance:0,value:ee(n),emitter:k};if(i)return{illegal:!1,relevance:0,value:ee(n),emitter:k,language:e,top:A,errorRaised:t};throw t}}function m(e,n){n=n||p.languages||Object.keys(t);const r=function(e){const t={relevance:0,emitter:new p.__emitter(p),value:ee(e),illegal:!1,top:u};return t.emitter.addText(e),t}(e),o=n.filter(_).filter(A).map((t=>d(t,e,!1)));o.unshift(r);const a=o.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(_(e.language).supersetOf===t.language)return 1;if(_(t.language).supersetOf===e.language)return-1}return 0})),[i,s]=a,l=i;return l.second_best=s,l}const g={"before:highlightElement":({el:e})=>{p.useBR&&(e.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"))},"after:highlightElement":({result:e})=>{p.useBR&&(e.value=e.value.replace(/\n/g,"
    "))}},y=/^(<[^>]+>|\t)+/gm,v={"after:highlightElement":({result:e})=>{p.tabReplace&&(e.value=e.value.replace(y,(e=>e.replace(/\t/g,p.tabReplace))))}};function b(e){let t=null;const n=function(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=p.languageDetectRe.exec(t);if(n){const t=_(n[1]);return t||(Q(l.replace("{}",n[1])),Q("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>f(e)||_(e)))}(e);if(f(n))return;C("before:highlightElement",{el:e,language:n}),t=e;const o=t.textContent,a=n?h(o,{language:n,ignoreIllegals:!0}):m(o);C("after:highlightElement",{el:e,result:a,text:o}),e.innerHTML=a.value,function(e,t,n){const o=t?r[t]:n;e.classList.add("hljs"),o&&e.classList.add(o)}(e,n,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const w=()=>{if(w.called)return;w.called=!0,X("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead.");document.querySelectorAll("pre code").forEach(b)};let E=!1;function x(){if("loading"===document.readyState)return void(E=!0);document.querySelectorAll("pre code").forEach(b)}function _(e){return e=(e||"").toLowerCase(),t[e]||t[r[e]]}function S(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{r[e.toLowerCase()]=t}))}function A(e){const t=_(e);return t&&!t.disableAutodetect}function C(e,t){const n=e;a.forEach((function(e){e[n]&&e[n](t)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){E&&x()}),!1),Object.assign(e,{highlight:h,highlightAuto:m,highlightAll:x,fixMarkup:function(e){return X("10.2.0","fixMarkup will be removed entirely in v11.0"),X("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),t=e,p.tabReplace||p.useBR?t.replace(s,(e=>"\n"===e?p.useBR?"
    ":e:p.tabReplace?e.replace(/\t/g,p.tabReplace):e)):t;var t},highlightElement:b,highlightBlock:function(e){return X("10.7.0","highlightBlock will be removed entirely in v12.0"),X("10.7.0","Please use highlightElement now."),b(e)},configure:function(e){e.useBR&&(X("10.3.0","'useBR' will be removed entirely in v11.0"),X("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),p=te(p,e)},initHighlighting:w,initHighlightingOnLoad:function(){X("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),E=!0},registerLanguage:function(n,r){let o=null;try{o=r(e)}catch(e){if(Y("Language definition for '{}' could not be registered.".replace("{}",n)),!i)throw e;Y(e),o=u}o.name||(o.name=n),t[n]=o,o.rawDefinition=r.bind(null,e),o.aliases&&S(o.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(const t of Object.keys(r))r[t]===e&&delete r[t]},listLanguages:function(){return Object.keys(t)},getLanguage:_,registerAliases:S,requireLanguage:function(e){X("10.4.0","requireLanguage will be removed entirely in v11."),X("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const t=_(e);if(t)return t;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:A,inherit:te,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))})}(e),a.push(e)},vuePlugin:H(e).VuePlugin}),e.debugMode=function(){i=!1},e.safeMode=function(){i=!0},e.versionString="10.7.3";for(const e in R)"object"==typeof R[e]&&n(R[e]);return Object.assign(e,R),e.addPlugin(g),e.addPlugin(J),e.addPlugin(v),e}({});e.exports=re},61519:e=>{function t(...e){return e.map((e=>{return(t=e)?"string"==typeof t?t:t.source:null;var t})).join("")}e.exports=function(e){const n={},r={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{begin:t(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},r]});const o={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},a={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},i={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,o]};o.contains.push(i);const s={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,n]},l=e.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),u={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[l,e.SHEBANG(),u,s,e.HASH_COMMENT_MODE,a,i,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},n]}}},30786:e=>{function t(...e){return e.map((e=>{return(t=e)?"string"==typeof t?t:t.source:null;var t})).join("")}e.exports=function(e){const n="HTTP/(2|1\\.[01])",r={className:"attribute",begin:t("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},o=[r,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+n+" \\d{3})",end:/$/,contains:[{className:"meta",begin:n},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:o}},{begin:"(?=^[A-Z]+ (.*?) "+n+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:n},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:o}},e.inherit(r,{relevance:0})]}}},96344:e=>{const t="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],o=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function a(e){return i("(?=",e,")")}function i(...e){return e.map((e=>{return(t=e)?"string"==typeof t?t:t.source:null;var t})).join("")}e.exports=function(e){const s=t,l="<>",u="",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];"<"!==r?">"===r&&(((e,{after:t})=>{const n="",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:_}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:l,end:u},{begin:c.begin,"on:begin":c.isTrulyOpeningTag,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:p,contains:["self",e.inherit(e.TITLE_MODE,{begin:s}),S],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[S,e.inherit(e.TITLE_MODE,{begin:s})]},{variants:[{begin:"\\."+s},{begin:"\\$"+s}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:s}),"self",S]},{begin:"(get|set)\\s+(?="+s+"\\()",end:/\{/,keywords:"get set",contains:[e.inherit(e.TITLE_MODE,{begin:s}),{begin:/\(\)/},S]},{begin:/\$[(.]/}]}}},82026:e=>{e.exports=function(e){const t={literal:"true false null"},n=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],r=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],o={end:",",endsWithParent:!0,excludeEnd:!0,contains:r,keywords:t},a={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(o,{begin:/:/})].concat(n),illegal:"\\S"},i={begin:"\\[",end:"\\]",contains:[e.inherit(o)],illegal:"\\S"};return r.push(a,i),n.forEach((function(e){r.push(e)})),{name:"JSON",contains:r,keywords:t,illegal:"\\S"}}},66336:e=>{e.exports=function(e){const t={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},n={begin:"`[\\s\\S]",relevance:0},r={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},o={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[n,r,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},a={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},i=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),s={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},u={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[r]}]},c={begin:/using\s/,end:/$/,returnBegin:!0,contains:[o,a,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},p={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},f={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(t.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},h=[f,i,n,e.NUMBER_MODE,o,a,s,r,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/@\B/,relevance:0}],d={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",h,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return f.contains.unshift(d),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:t,contains:h.concat(l,u,c,p,d)}}},42157:e=>{function t(e){return e?"string"==typeof e?e:e.source:null}function n(e){return r("(?=",e,")")}function r(...e){return e.map((e=>t(e))).join("")}function o(...e){return"("+e.map((e=>t(e))).join("|")+")"}e.exports=function(e){const t=r(/[A-Z_]/,r("(",/[A-Z0-9_.-]*:/,")?"),/[A-Z0-9_.-]*/),a={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},s=e.inherit(i,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),u=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),c={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,u,l,s,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[i,s,u,l]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},a,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[c],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[c],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:r(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:c}]},{className:"tag",begin:r(/<\//,n(r(t,/>/))),contains:[{className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},54587:e=>{e.exports=function(e){var t="true false yes no null",n="[\\w#;/?:@&=+$,.~*'()[\\]]+",r={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},o=e.inherit(r,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),a={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},i={end:",",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},s={begin:/\{/,end:/\}/,contains:[i],illegal:"\\n",relevance:0},l={begin:"\\[",end:"\\]",contains:[i],illegal:"\\n",relevance:0},u=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+n},{className:"type",begin:"!<"+n+">"},{className:"type",begin:"!"+n},{className:"type",begin:"!!"+n},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},a,{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,l,r],c=[...u];return c.pop(),c.push(o),i.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:u}}},8679:(e,t,n)=>{"use strict";var r=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,h=Object.getPrototypeOf,d=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(d){var o=h(n);o&&o!==d&&e(t,o,r)}var i=c(n);p&&(i=i.concat(p(n)));for(var s=l(t),m=l(n),g=0;g{t.read=function(e,t,n,r,o){var a,i,s=8*o-r-1,l=(1<>1,c=-7,p=n?o-1:0,f=n?-1:1,h=e[t+p];for(p+=f,a=h&(1<<-c)-1,h>>=-c,c+=s;c>0;a=256*a+e[t+p],p+=f,c-=8);for(i=a&(1<<-c)-1,a>>=-c,c+=r;c>0;i=256*i+e[t+p],p+=f,c-=8);if(0===a)a=1-u;else{if(a===l)return i?NaN:1/0*(h?-1:1);i+=Math.pow(2,r),a-=u}return(h?-1:1)*i*Math.pow(2,a-r)},t.write=function(e,t,n,r,o,a){var i,s,l,u=8*a-o-1,c=(1<>1,f=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:a-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=c):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),(t+=i+p>=1?f/l:f*Math.pow(2,1-p))*l>=2&&(i++,l/=2),i+p>=c?(s=0,i=c):i+p>=1?(s=(t*l-1)*Math.pow(2,o),i+=p):(s=t*Math.pow(2,p-1)*Math.pow(2,o),i=0));o>=8;e[n+h]=255&s,h+=d,s/=256,o-=8);for(i=i<0;e[n+h]=255&i,h+=d,i/=256,u-=8);e[n+h-d]|=128*m}},43393:function(e){e.exports=function(){"use strict";var e=Array.prototype.slice;function t(e,t){t&&(e.prototype=Object.create(t.prototype)),e.prototype.constructor=e}function n(e){return i(e)?e:J(e)}function r(e){return s(e)?e:K(e)}function o(e){return l(e)?e:G(e)}function a(e){return i(e)&&!u(e)?e:Z(e)}function i(e){return!(!e||!e[p])}function s(e){return!(!e||!e[f])}function l(e){return!(!e||!e[h])}function u(e){return s(e)||l(e)}function c(e){return!(!e||!e[d])}t(r,n),t(o,n),t(a,n),n.isIterable=i,n.isKeyed=s,n.isIndexed=l,n.isAssociative=u,n.isOrdered=c,n.Keyed=r,n.Indexed=o,n.Set=a;var p="@@__IMMUTABLE_ITERABLE__@@",f="@@__IMMUTABLE_KEYED__@@",h="@@__IMMUTABLE_INDEXED__@@",d="@@__IMMUTABLE_ORDERED__@@",m="delete",g=5,y=1<>>0;if(""+n!==t||4294967295===n)return NaN;t=n}return t<0?C(e)+t:t}function O(){return!0}function j(e,t,n){return(0===e||void 0!==n&&e<=-n)&&(void 0===t||void 0!==n&&t>=n)}function T(e,t){return N(e,t,0)}function I(e,t){return N(e,t,t)}function N(e,t,n){return void 0===e?n:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}var P=0,R=1,M=2,D="function"==typeof Symbol&&Symbol.iterator,L="@@iterator",B=D||L;function F(e){this.next=e}function z(e,t,n,r){var o=0===e?t:1===e?n:[t,n];return r?r.value=o:r={value:o,done:!1},r}function U(){return{value:void 0,done:!0}}function q(e){return!!W(e)}function $(e){return e&&"function"==typeof e.next}function V(e){var t=W(e);return t&&t.call(e)}function W(e){var t=e&&(D&&e[D]||e[L]);if("function"==typeof t)return t}function H(e){return e&&"number"==typeof e.length}function J(e){return null==e?ie():i(e)?e.toSeq():ue(e)}function K(e){return null==e?ie().toKeyedSeq():i(e)?s(e)?e.toSeq():e.fromEntrySeq():se(e)}function G(e){return null==e?ie():i(e)?s(e)?e.entrySeq():e.toIndexedSeq():le(e)}function Z(e){return(null==e?ie():i(e)?s(e)?e.entrySeq():e:le(e)).toSetSeq()}F.prototype.toString=function(){return"[Iterator]"},F.KEYS=P,F.VALUES=R,F.ENTRIES=M,F.prototype.inspect=F.prototype.toSource=function(){return this.toString()},F.prototype[B]=function(){return this},t(J,n),J.of=function(){return J(arguments)},J.prototype.toSeq=function(){return this},J.prototype.toString=function(){return this.__toString("Seq {","}")},J.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},J.prototype.__iterate=function(e,t){return pe(this,e,t,!0)},J.prototype.__iterator=function(e,t){return fe(this,e,t,!0)},t(K,J),K.prototype.toKeyedSeq=function(){return this},t(G,J),G.of=function(){return G(arguments)},G.prototype.toIndexedSeq=function(){return this},G.prototype.toString=function(){return this.__toString("Seq [","]")},G.prototype.__iterate=function(e,t){return pe(this,e,t,!1)},G.prototype.__iterator=function(e,t){return fe(this,e,t,!1)},t(Z,J),Z.of=function(){return Z(arguments)},Z.prototype.toSetSeq=function(){return this},J.isSeq=ae,J.Keyed=K,J.Set=Z,J.Indexed=G;var Y,Q,X,ee="@@__IMMUTABLE_SEQ__@@";function te(e){this._array=e,this.size=e.length}function ne(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function re(e){this._iterable=e,this.size=e.length||e.size}function oe(e){this._iterator=e,this._iteratorCache=[]}function ae(e){return!(!e||!e[ee])}function ie(){return Y||(Y=new te([]))}function se(e){var t=Array.isArray(e)?new te(e).fromEntrySeq():$(e)?new oe(e).fromEntrySeq():q(e)?new re(e).fromEntrySeq():"object"==typeof e?new ne(e):void 0;if(!t)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+e);return t}function le(e){var t=ce(e);if(!t)throw new TypeError("Expected Array or iterable object of values: "+e);return t}function ue(e){var t=ce(e)||"object"==typeof e&&new ne(e);if(!t)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+e);return t}function ce(e){return H(e)?new te(e):$(e)?new oe(e):q(e)?new re(e):void 0}function pe(e,t,n,r){var o=e._cache;if(o){for(var a=o.length-1,i=0;i<=a;i++){var s=o[n?a-i:i];if(!1===t(s[1],r?s[0]:i,e))return i+1}return i}return e.__iterateUncached(t,n)}function fe(e,t,n,r){var o=e._cache;if(o){var a=o.length-1,i=0;return new F((function(){var e=o[n?a-i:i];return i++>a?U():z(t,r?e[0]:i-1,e[1])}))}return e.__iteratorUncached(t,n)}function he(e,t){return t?de(t,e,"",{"":e}):me(e)}function de(e,t,n,r){return Array.isArray(t)?e.call(r,n,G(t).map((function(n,r){return de(e,n,r,t)}))):ge(t)?e.call(r,n,K(t).map((function(n,r){return de(e,n,r,t)}))):t}function me(e){return Array.isArray(e)?G(e).map(me).toList():ge(e)?K(e).map(me).toMap():e}function ge(e){return e&&(e.constructor===Object||void 0===e.constructor)}function ye(e,t){if(e===t||e!=e&&t!=t)return!0;if(!e||!t)return!1;if("function"==typeof e.valueOf&&"function"==typeof t.valueOf){if((e=e.valueOf())===(t=t.valueOf())||e!=e&&t!=t)return!0;if(!e||!t)return!1}return!("function"!=typeof e.equals||"function"!=typeof t.equals||!e.equals(t))}function ve(e,t){if(e===t)return!0;if(!i(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||s(e)!==s(t)||l(e)!==l(t)||c(e)!==c(t))return!1;if(0===e.size&&0===t.size)return!0;var n=!u(e);if(c(e)){var r=e.entries();return t.every((function(e,t){var o=r.next().value;return o&&ye(o[1],e)&&(n||ye(o[0],t))}))&&r.next().done}var o=!1;if(void 0===e.size)if(void 0===t.size)"function"==typeof e.cacheResult&&e.cacheResult();else{o=!0;var a=e;e=t,t=a}var p=!0,f=t.__iterate((function(t,r){if(n?!e.has(t):o?!ye(t,e.get(r,b)):!ye(e.get(r,b),t))return p=!1,!1}));return p&&e.size===f}function be(e,t){if(!(this instanceof be))return new be(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(Q)return Q;Q=this}}function we(e,t){if(!e)throw new Error(t)}function Ee(e,t,n){if(!(this instanceof Ee))return new Ee(e,t,n);if(we(0!==n,"Cannot step a Range by 0"),e=e||0,void 0===t&&(t=1/0),n=void 0===n?1:Math.abs(n),tr?U():z(e,o,n[t?r-o++:o++])}))},t(ne,K),ne.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},ne.prototype.has=function(e){return this._object.hasOwnProperty(e)},ne.prototype.__iterate=function(e,t){for(var n=this._object,r=this._keys,o=r.length-1,a=0;a<=o;a++){var i=r[t?o-a:a];if(!1===e(n[i],i,this))return a+1}return a},ne.prototype.__iterator=function(e,t){var n=this._object,r=this._keys,o=r.length-1,a=0;return new F((function(){var i=r[t?o-a:a];return a++>o?U():z(e,i,n[i])}))},ne.prototype[d]=!0,t(re,G),re.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var n=V(this._iterable),r=0;if($(n))for(var o;!(o=n.next()).done&&!1!==e(o.value,r++,this););return r},re.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=V(this._iterable);if(!$(n))return new F(U);var r=0;return new F((function(){var t=n.next();return t.done?t:z(e,r++,t.value)}))},t(oe,G),oe.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var n,r=this._iterator,o=this._iteratorCache,a=0;a=r.length){var t=n.next();if(t.done)return t;r[o]=t.value}return z(e,o,r[o++])}))},t(be,G),be.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},be.prototype.get=function(e,t){return this.has(e)?this._value:t},be.prototype.includes=function(e){return ye(this._value,e)},be.prototype.slice=function(e,t){var n=this.size;return j(e,t,n)?this:new be(this._value,I(t,n)-T(e,n))},be.prototype.reverse=function(){return this},be.prototype.indexOf=function(e){return ye(this._value,e)?0:-1},be.prototype.lastIndexOf=function(e){return ye(this._value,e)?this.size:-1},be.prototype.__iterate=function(e,t){for(var n=0;n=0&&t=0&&nn?U():z(e,a++,i)}))},Ee.prototype.equals=function(e){return e instanceof Ee?this._start===e._start&&this._end===e._end&&this._step===e._step:ve(this,e)},t(xe,n),t(_e,xe),t(Se,xe),t(Ae,xe),xe.Keyed=_e,xe.Indexed=Se,xe.Set=Ae;var Ce="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(e,t){var n=65535&(e|=0),r=65535&(t|=0);return n*r+((e>>>16)*r+n*(t>>>16)<<16>>>0)|0};function ke(e){return e>>>1&1073741824|3221225471&e}function Oe(e){if(!1===e||null==e)return 0;if("function"==typeof e.valueOf&&(!1===(e=e.valueOf())||null==e))return 0;if(!0===e)return 1;var t=typeof e;if("number"===t){if(e!=e||e===1/0)return 0;var n=0|e;for(n!==e&&(n^=4294967295*e);e>4294967295;)n^=e/=4294967295;return ke(n)}if("string"===t)return e.length>Fe?je(e):Te(e);if("function"==typeof e.hashCode)return e.hashCode();if("object"===t)return Ie(e);if("function"==typeof e.toString)return Te(e.toString());throw new Error("Value type "+t+" cannot be hashed.")}function je(e){var t=qe[e];return void 0===t&&(t=Te(e),Ue===ze&&(Ue=0,qe={}),Ue++,qe[e]=t),t}function Te(e){for(var t=0,n=0;n0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}var Me,De="function"==typeof WeakMap;De&&(Me=new WeakMap);var Le=0,Be="__immutablehash__";"function"==typeof Symbol&&(Be=Symbol(Be));var Fe=16,ze=255,Ue=0,qe={};function $e(e){we(e!==1/0,"Cannot perform this action with an infinite size.")}function Ve(e){return null==e?ot():We(e)&&!c(e)?e:ot().withMutations((function(t){var n=r(e);$e(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function We(e){return!(!e||!e[Je])}t(Ve,_e),Ve.of=function(){var t=e.call(arguments,0);return ot().withMutations((function(e){for(var n=0;n=t.length)throw new Error("Missing value for key: "+t[n]);e.set(t[n],t[n+1])}}))},Ve.prototype.toString=function(){return this.__toString("Map {","}")},Ve.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},Ve.prototype.set=function(e,t){return at(this,e,t)},Ve.prototype.setIn=function(e,t){return this.updateIn(e,b,(function(){return t}))},Ve.prototype.remove=function(e){return at(this,e,b)},Ve.prototype.deleteIn=function(e){return this.updateIn(e,(function(){return b}))},Ve.prototype.update=function(e,t,n){return 1===arguments.length?e(this):this.updateIn([e],t,n)},Ve.prototype.updateIn=function(e,t,n){n||(n=t,t=void 0);var r=gt(this,xn(e),t,n);return r===b?void 0:r},Ve.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):ot()},Ve.prototype.merge=function(){return ft(this,void 0,arguments)},Ve.prototype.mergeWith=function(t){return ft(this,t,e.call(arguments,1))},Ve.prototype.mergeIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.merge?e.merge.apply(e,n):n[n.length-1]}))},Ve.prototype.mergeDeep=function(){return ft(this,ht,arguments)},Ve.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return ft(this,dt(t),n)},Ve.prototype.mergeDeepIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.mergeDeep?e.mergeDeep.apply(e,n):n[n.length-1]}))},Ve.prototype.sort=function(e){return qt(pn(this,e))},Ve.prototype.sortBy=function(e,t){return qt(pn(this,t,e))},Ve.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},Ve.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new S)},Ve.prototype.asImmutable=function(){return this.__ensureOwner()},Ve.prototype.wasAltered=function(){return this.__altered},Ve.prototype.__iterator=function(e,t){return new et(this,e,t)},Ve.prototype.__iterate=function(e,t){var n=this,r=0;return this._root&&this._root.iterate((function(t){return r++,e(t[1],t[0],n)}),t),r},Ve.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?rt(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Ve.isMap=We;var He,Je="@@__IMMUTABLE_MAP__@@",Ke=Ve.prototype;function Ge(e,t){this.ownerID=e,this.entries=t}function Ze(e,t,n){this.ownerID=e,this.bitmap=t,this.nodes=n}function Ye(e,t,n){this.ownerID=e,this.count=t,this.nodes=n}function Qe(e,t,n){this.ownerID=e,this.keyHash=t,this.entries=n}function Xe(e,t,n){this.ownerID=e,this.keyHash=t,this.entry=n}function et(e,t,n){this._type=t,this._reverse=n,this._stack=e._root&&nt(e._root)}function tt(e,t){return z(e,t[0],t[1])}function nt(e,t){return{node:e,index:0,__prev:t}}function rt(e,t,n,r){var o=Object.create(Ke);return o.size=e,o._root=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function ot(){return He||(He=rt(0))}function at(e,t,n){var r,o;if(e._root){var a=x(w),i=x(E);if(r=it(e._root,e.__ownerID,0,void 0,t,n,a,i),!i.value)return e;o=e.size+(a.value?n===b?-1:1:0)}else{if(n===b)return e;o=1,r=new Ge(e.__ownerID,[[t,n]])}return e.__ownerID?(e.size=o,e._root=r,e.__hash=void 0,e.__altered=!0,e):r?rt(o,r):ot()}function it(e,t,n,r,o,a,i,s){return e?e.update(t,n,r,o,a,i,s):a===b?e:(_(s),_(i),new Xe(t,r,[o,a]))}function st(e){return e.constructor===Xe||e.constructor===Qe}function lt(e,t,n,r,o){if(e.keyHash===r)return new Qe(t,r,[e.entry,o]);var a,i=(0===n?e.keyHash:e.keyHash>>>n)&v,s=(0===n?r:r>>>n)&v;return new Ze(t,1<>>=1)i[s]=1&n?t[a++]:void 0;return i[r]=o,new Ye(e,a+1,i)}function ft(e,t,n){for(var o=[],a=0;a>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135,e+=e>>8,127&(e+=e>>16)}function vt(e,t,n,r){var o=r?e:A(e);return o[t]=n,o}function bt(e,t,n,r){var o=e.length+1;if(r&&t+1===o)return e[t]=n,e;for(var a=new Array(o),i=0,s=0;s=Et)return ut(e,l,r,o);var f=e&&e===this.ownerID,h=f?l:A(l);return p?s?u===c-1?h.pop():h[u]=h.pop():h[u]=[r,o]:h.push([r,o]),f?(this.entries=h,this):new Ge(e,h)}},Ze.prototype.get=function(e,t,n,r){void 0===t&&(t=Oe(n));var o=1<<((0===e?t:t>>>e)&v),a=this.bitmap;return 0==(a&o)?r:this.nodes[yt(a&o-1)].get(e+g,t,n,r)},Ze.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Oe(r));var s=(0===t?n:n>>>t)&v,l=1<=xt)return pt(e,f,u,s,d);if(c&&!d&&2===f.length&&st(f[1^p]))return f[1^p];if(c&&d&&1===f.length&&st(d))return d;var m=e&&e===this.ownerID,y=c?d?u:u^l:u|l,w=c?d?vt(f,p,d,m):wt(f,p,m):bt(f,p,d,m);return m?(this.bitmap=y,this.nodes=w,this):new Ze(e,y,w)},Ye.prototype.get=function(e,t,n,r){void 0===t&&(t=Oe(n));var o=(0===e?t:t>>>e)&v,a=this.nodes[o];return a?a.get(e+g,t,n,r):r},Ye.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Oe(r));var s=(0===t?n:n>>>t)&v,l=o===b,u=this.nodes,c=u[s];if(l&&!c)return this;var p=it(c,e,t+g,n,r,o,a,i);if(p===c)return this;var f=this.count;if(c){if(!p&&--f<_t)return ct(e,u,f,s)}else f++;var h=e&&e===this.ownerID,d=vt(u,s,p,h);return h?(this.count=f,this.nodes=d,this):new Ye(e,f,d)},Qe.prototype.get=function(e,t,n,r){for(var o=this.entries,a=0,i=o.length;a0&&r=0&&e>>t&v;if(r>=this.array.length)return new Ot([],e);var o,a=0===r;if(t>0){var i=this.array[r];if((o=i&&i.removeBefore(e,t-g,n))===i&&a)return this}if(a&&!o)return this;var s=Lt(this,e);if(!a)for(var l=0;l>>t&v;if(o>=this.array.length)return this;if(t>0){var a=this.array[o];if((r=a&&a.removeAfter(e,t-g,n))===a&&o===this.array.length-1)return this}var i=Lt(this,e);return i.array.splice(o+1),r&&(i.array[o]=r),i};var jt,Tt,It={};function Nt(e,t){var n=e._origin,r=e._capacity,o=Ut(r),a=e._tail;return i(e._root,e._level,0);function i(e,t,n){return 0===t?s(e,n):l(e,t,n)}function s(e,i){var s=i===o?a&&a.array:e&&e.array,l=i>n?0:n-i,u=r-i;return u>y&&(u=y),function(){if(l===u)return It;var e=t?--u:l++;return s&&s[e]}}function l(e,o,a){var s,l=e&&e.array,u=a>n?0:n-a>>o,c=1+(r-a>>o);return c>y&&(c=y),function(){for(;;){if(s){var e=s();if(e!==It)return e;s=null}if(u===c)return It;var n=t?--c:u++;s=i(l&&l[n],o-g,a+(n<=e.size||t<0)return e.withMutations((function(e){t<0?Ft(e,t).set(0,n):Ft(e,0,t+1).set(t,n)}));t+=e._origin;var r=e._tail,o=e._root,a=x(E);return t>=Ut(e._capacity)?r=Dt(r,e.__ownerID,0,t,n,a):o=Dt(o,e.__ownerID,e._level,t,n,a),a.value?e.__ownerID?(e._root=o,e._tail=r,e.__hash=void 0,e.__altered=!0,e):Pt(e._origin,e._capacity,e._level,o,r):e}function Dt(e,t,n,r,o,a){var i,s=r>>>n&v,l=e&&s0){var u=e&&e.array[s],c=Dt(u,t,n-g,r,o,a);return c===u?e:((i=Lt(e,t)).array[s]=c,i)}return l&&e.array[s]===o?e:(_(a),i=Lt(e,t),void 0===o&&s===i.array.length-1?i.array.pop():i.array[s]=o,i)}function Lt(e,t){return t&&e&&t===e.ownerID?e:new Ot(e?e.array.slice():[],t)}function Bt(e,t){if(t>=Ut(e._capacity))return e._tail;if(t<1<0;)n=n.array[t>>>r&v],r-=g;return n}}function Ft(e,t,n){void 0!==t&&(t|=0),void 0!==n&&(n|=0);var r=e.__ownerID||new S,o=e._origin,a=e._capacity,i=o+t,s=void 0===n?a:n<0?a+n:o+n;if(i===o&&s===a)return e;if(i>=s)return e.clear();for(var l=e._level,u=e._root,c=0;i+c<0;)u=new Ot(u&&u.array.length?[void 0,u]:[],r),c+=1<<(l+=g);c&&(i+=c,o+=c,s+=c,a+=c);for(var p=Ut(a),f=Ut(s);f>=1<p?new Ot([],r):h;if(h&&f>p&&ig;y-=g){var b=p>>>y&v;m=m.array[b]=Lt(m.array[b],r)}m.array[p>>>g&v]=h}if(s=f)i-=f,s-=f,l=g,u=null,d=d&&d.removeBefore(r,0,i);else if(i>o||f>>l&v;if(w!==f>>>l&v)break;w&&(c+=(1<o&&(u=u.removeBefore(r,l,i-c)),u&&fa&&(a=u.size),i(l)||(u=u.map((function(e){return he(e)}))),r.push(u)}return a>e.size&&(e=e.setSize(a)),mt(e,t,r)}function Ut(e){return e>>g<=y&&i.size>=2*a.size?(r=(o=i.filter((function(e,t){return void 0!==e&&s!==t}))).toKeyedSeq().map((function(e){return e[0]})).flip().toMap(),e.__ownerID&&(r.__ownerID=o.__ownerID=e.__ownerID)):(r=a.remove(t),o=s===i.size-1?i.pop():i.set(s,void 0))}else if(l){if(n===i.get(s)[1])return e;r=a,o=i.set(s,[t,n])}else r=a.set(t,i.size),o=i.set(i.size,[t,n]);return e.__ownerID?(e.size=r.size,e._map=r,e._list=o,e.__hash=void 0,e):Vt(r,o)}function Jt(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function Kt(e){this._iter=e,this.size=e.size}function Gt(e){this._iter=e,this.size=e.size}function Zt(e){this._iter=e,this.size=e.size}function Yt(e){var t=bn(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=wn,t.__iterateUncached=function(t,n){var r=this;return e.__iterate((function(e,n){return!1!==t(n,e,r)}),n)},t.__iteratorUncached=function(t,n){if(t===M){var r=e.__iterator(t,n);return new F((function(){var e=r.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e}))}return e.__iterator(t===R?P:R,n)},t}function Qt(e,t,n){var r=bn(e);return r.size=e.size,r.has=function(t){return e.has(t)},r.get=function(r,o){var a=e.get(r,b);return a===b?o:t.call(n,a,r,e)},r.__iterateUncached=function(r,o){var a=this;return e.__iterate((function(e,o,i){return!1!==r(t.call(n,e,o,i),o,a)}),o)},r.__iteratorUncached=function(r,o){var a=e.__iterator(M,o);return new F((function(){var o=a.next();if(o.done)return o;var i=o.value,s=i[0];return z(r,s,t.call(n,i[1],s,e),o)}))},r}function Xt(e,t){var n=bn(e);return n._iter=e,n.size=e.size,n.reverse=function(){return e},e.flip&&(n.flip=function(){var t=Yt(e);return t.reverse=function(){return e.flip()},t}),n.get=function(n,r){return e.get(t?n:-1-n,r)},n.has=function(n){return e.has(t?n:-1-n)},n.includes=function(t){return e.includes(t)},n.cacheResult=wn,n.__iterate=function(t,n){var r=this;return e.__iterate((function(e,n){return t(e,n,r)}),!n)},n.__iterator=function(t,n){return e.__iterator(t,!n)},n}function en(e,t,n,r){var o=bn(e);return r&&(o.has=function(r){var o=e.get(r,b);return o!==b&&!!t.call(n,o,r,e)},o.get=function(r,o){var a=e.get(r,b);return a!==b&&t.call(n,a,r,e)?a:o}),o.__iterateUncached=function(o,a){var i=this,s=0;return e.__iterate((function(e,a,l){if(t.call(n,e,a,l))return s++,o(e,r?a:s-1,i)}),a),s},o.__iteratorUncached=function(o,a){var i=e.__iterator(M,a),s=0;return new F((function(){for(;;){var a=i.next();if(a.done)return a;var l=a.value,u=l[0],c=l[1];if(t.call(n,c,u,e))return z(o,r?u:s++,c,a)}}))},o}function tn(e,t,n){var r=Ve().asMutable();return e.__iterate((function(o,a){r.update(t.call(n,o,a,e),0,(function(e){return e+1}))})),r.asImmutable()}function nn(e,t,n){var r=s(e),o=(c(e)?qt():Ve()).asMutable();e.__iterate((function(a,i){o.update(t.call(n,a,i,e),(function(e){return(e=e||[]).push(r?[i,a]:a),e}))}));var a=vn(e);return o.map((function(t){return mn(e,a(t))}))}function rn(e,t,n,r){var o=e.size;if(void 0!==t&&(t|=0),void 0!==n&&(n===1/0?n=o:n|=0),j(t,n,o))return e;var a=T(t,o),i=I(n,o);if(a!=a||i!=i)return rn(e.toSeq().cacheResult(),t,n,r);var s,l=i-a;l==l&&(s=l<0?0:l);var u=bn(e);return u.size=0===s?s:e.size&&s||void 0,!r&&ae(e)&&s>=0&&(u.get=function(t,n){return(t=k(this,t))>=0&&ts)return U();var e=o.next();return r||t===R?e:z(t,l-1,t===P?void 0:e.value[1],e)}))},u}function on(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterate(r,o);var i=0;return e.__iterate((function(e,o,s){return t.call(n,e,o,s)&&++i&&r(e,o,a)})),i},r.__iteratorUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterator(r,o);var i=e.__iterator(M,o),s=!0;return new F((function(){if(!s)return U();var e=i.next();if(e.done)return e;var o=e.value,l=o[0],u=o[1];return t.call(n,u,l,a)?r===M?e:z(r,l,u,e):(s=!1,U())}))},r}function an(e,t,n,r){var o=bn(e);return o.__iterateUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterate(o,a);var s=!0,l=0;return e.__iterate((function(e,a,u){if(!s||!(s=t.call(n,e,a,u)))return l++,o(e,r?a:l-1,i)})),l},o.__iteratorUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterator(o,a);var s=e.__iterator(M,a),l=!0,u=0;return new F((function(){var e,a,c;do{if((e=s.next()).done)return r||o===R?e:z(o,u++,o===P?void 0:e.value[1],e);var p=e.value;a=p[0],c=p[1],l&&(l=t.call(n,c,a,i))}while(l);return o===M?e:z(o,a,c,e)}))},o}function sn(e,t){var n=s(e),o=[e].concat(t).map((function(e){return i(e)?n&&(e=r(e)):e=n?se(e):le(Array.isArray(e)?e:[e]),e})).filter((function(e){return 0!==e.size}));if(0===o.length)return e;if(1===o.length){var a=o[0];if(a===e||n&&s(a)||l(e)&&l(a))return a}var u=new te(o);return n?u=u.toKeyedSeq():l(e)||(u=u.toSetSeq()),(u=u.flatten(!0)).size=o.reduce((function(e,t){if(void 0!==e){var n=t.size;if(void 0!==n)return e+n}}),0),u}function ln(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=0,s=!1;function l(e,u){var c=this;e.__iterate((function(e,o){return(!t||u0}function dn(e,t,r){var o=bn(e);return o.size=new te(r).map((function(e){return e.size})).min(),o.__iterate=function(e,t){for(var n,r=this.__iterator(R,t),o=0;!(n=r.next()).done&&!1!==e(n.value,o++,this););return o},o.__iteratorUncached=function(e,o){var a=r.map((function(e){return e=n(e),V(o?e.reverse():e)})),i=0,s=!1;return new F((function(){var n;return s||(n=a.map((function(e){return e.next()})),s=n.some((function(e){return e.done}))),s?U():z(e,i++,t.apply(null,n.map((function(e){return e.value}))))}))},o}function mn(e,t){return ae(e)?t:e.constructor(t)}function gn(e){if(e!==Object(e))throw new TypeError("Expected [K, V] tuple: "+e)}function yn(e){return $e(e.size),C(e)}function vn(e){return s(e)?r:l(e)?o:a}function bn(e){return Object.create((s(e)?K:l(e)?G:Z).prototype)}function wn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):J.prototype.cacheResult.call(this)}function En(e,t){return e>t?1:e=0;n--)t={value:arguments[n],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):Kn(e,t)},$n.prototype.pushAll=function(e){if(0===(e=o(e)).size)return this;$e(e.size);var t=this.size,n=this._head;return e.reverse().forEach((function(e){t++,n={value:e,next:n}})),this.__ownerID?(this.size=t,this._head=n,this.__hash=void 0,this.__altered=!0,this):Kn(t,n)},$n.prototype.pop=function(){return this.slice(1)},$n.prototype.unshift=function(){return this.push.apply(this,arguments)},$n.prototype.unshiftAll=function(e){return this.pushAll(e)},$n.prototype.shift=function(){return this.pop.apply(this,arguments)},$n.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Gn()},$n.prototype.slice=function(e,t){if(j(e,t,this.size))return this;var n=T(e,this.size);if(I(t,this.size)!==this.size)return Se.prototype.slice.call(this,e,t);for(var r=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=r,this._head=o,this.__hash=void 0,this.__altered=!0,this):Kn(r,o)},$n.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Kn(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},$n.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var n=0,r=this._head;r&&!1!==e(r.value,n++,this);)r=r.next;return n},$n.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var n=0,r=this._head;return new F((function(){if(r){var t=r.value;return r=r.next,z(e,n++,t)}return U()}))},$n.isStack=Vn;var Wn,Hn="@@__IMMUTABLE_STACK__@@",Jn=$n.prototype;function Kn(e,t,n,r){var o=Object.create(Jn);return o.size=e,o._head=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function Gn(){return Wn||(Wn=Kn(0))}function Zn(e,t){var n=function(n){e.prototype[n]=t[n]};return Object.keys(t).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(n),e}Jn[Hn]=!0,Jn.withMutations=Ke.withMutations,Jn.asMutable=Ke.asMutable,Jn.asImmutable=Ke.asImmutable,Jn.wasAltered=Ke.wasAltered,n.Iterator=F,Zn(n,{toArray:function(){$e(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate((function(t,n){e[n]=t})),e},toIndexedSeq:function(){return new Kt(this)},toJS:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJS?e.toJS():e})).__toJS()},toJSON:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJSON?e.toJSON():e})).__toJS()},toKeyedSeq:function(){return new Jt(this,!0)},toMap:function(){return Ve(this.toKeyedSeq())},toObject:function(){$e(this.size);var e={};return this.__iterate((function(t,n){e[n]=t})),e},toOrderedMap:function(){return qt(this.toKeyedSeq())},toOrderedSet:function(){return Ln(s(this)?this.valueSeq():this)},toSet:function(){return jn(s(this)?this.valueSeq():this)},toSetSeq:function(){return new Gt(this)},toSeq:function(){return l(this)?this.toIndexedSeq():s(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return $n(s(this)?this.valueSeq():this)},toList:function(){return St(s(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(e,t){return 0===this.size?e+t:e+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+t},concat:function(){return mn(this,sn(this,e.call(arguments,0)))},includes:function(e){return this.some((function(t){return ye(t,e)}))},entries:function(){return this.__iterator(M)},every:function(e,t){$e(this.size);var n=!0;return this.__iterate((function(r,o,a){if(!e.call(t,r,o,a))return n=!1,!1})),n},filter:function(e,t){return mn(this,en(this,e,t,!0))},find:function(e,t,n){var r=this.findEntry(e,t);return r?r[1]:n},forEach:function(e,t){return $e(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){$e(this.size),e=void 0!==e?""+e:",";var t="",n=!0;return this.__iterate((function(r){n?n=!1:t+=e,t+=null!=r?r.toString():""})),t},keys:function(){return this.__iterator(P)},map:function(e,t){return mn(this,Qt(this,e,t))},reduce:function(e,t,n){var r,o;return $e(this.size),arguments.length<2?o=!0:r=t,this.__iterate((function(t,a,i){o?(o=!1,r=t):r=e.call(n,r,t,a,i)})),r},reduceRight:function(e,t,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return mn(this,Xt(this,!0))},slice:function(e,t){return mn(this,rn(this,e,t,!0))},some:function(e,t){return!this.every(tr(e),t)},sort:function(e){return mn(this,pn(this,e))},values:function(){return this.__iterator(R)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(e,t){return C(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return tn(this,e,t)},equals:function(e){return ve(this,e)},entrySeq:function(){var e=this;if(e._cache)return new te(e._cache);var t=e.toSeq().map(er).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(tr(e),t)},findEntry:function(e,t,n){var r=n;return this.__iterate((function(n,o,a){if(e.call(t,n,o,a))return r=[o,n],!1})),r},findKey:function(e,t){var n=this.findEntry(e,t);return n&&n[0]},findLast:function(e,t,n){return this.toKeyedSeq().reverse().find(e,t,n)},findLastEntry:function(e,t,n){return this.toKeyedSeq().reverse().findEntry(e,t,n)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(O)},flatMap:function(e,t){return mn(this,un(this,e,t))},flatten:function(e){return mn(this,ln(this,e,!0))},fromEntrySeq:function(){return new Zt(this)},get:function(e,t){return this.find((function(t,n){return ye(n,e)}),void 0,t)},getIn:function(e,t){for(var n,r=this,o=xn(e);!(n=o.next()).done;){var a=n.value;if((r=r&&r.get?r.get(a,b):b)===b)return t}return r},groupBy:function(e,t){return nn(this,e,t)},has:function(e){return this.get(e,b)!==b},hasIn:function(e){return this.getIn(e,b)!==b},isSubset:function(e){return e="function"==typeof e.includes?e:n(e),this.every((function(t){return e.includes(t)}))},isSuperset:function(e){return(e="function"==typeof e.isSubset?e:n(e)).isSubset(this)},keyOf:function(e){return this.findKey((function(t){return ye(t,e)}))},keySeq:function(){return this.toSeq().map(Xn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return fn(this,e)},maxBy:function(e,t){return fn(this,t,e)},min:function(e){return fn(this,e?nr(e):ar)},minBy:function(e,t){return fn(this,t?nr(t):ar,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return mn(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return mn(this,an(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(tr(e),t)},sortBy:function(e,t){return mn(this,pn(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return mn(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return mn(this,on(this,e,t))},takeUntil:function(e,t){return this.takeWhile(tr(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=ir(this))}});var Yn=n.prototype;Yn[p]=!0,Yn[B]=Yn.values,Yn.__toJS=Yn.toArray,Yn.__toStringMapper=rr,Yn.inspect=Yn.toSource=function(){return this.toString()},Yn.chain=Yn.flatMap,Yn.contains=Yn.includes,Zn(r,{flip:function(){return mn(this,Yt(this))},mapEntries:function(e,t){var n=this,r=0;return mn(this,this.toSeq().map((function(o,a){return e.call(t,[a,o],r++,n)})).fromEntrySeq())},mapKeys:function(e,t){var n=this;return mn(this,this.toSeq().flip().map((function(r,o){return e.call(t,r,o,n)})).flip())}});var Qn=r.prototype;function Xn(e,t){return t}function er(e,t){return[t,e]}function tr(e){return function(){return!e.apply(this,arguments)}}function nr(e){return function(){return-e.apply(this,arguments)}}function rr(e){return"string"==typeof e?JSON.stringify(e):String(e)}function or(){return A(arguments)}function ar(e,t){return et?-1:0}function ir(e){if(e.size===1/0)return 0;var t=c(e),n=s(e),r=t?1:0;return sr(e.__iterate(n?t?function(e,t){r=31*r+lr(Oe(e),Oe(t))|0}:function(e,t){r=r+lr(Oe(e),Oe(t))|0}:t?function(e){r=31*r+Oe(e)|0}:function(e){r=r+Oe(e)|0}),r)}function sr(e,t){return t=Ce(t,3432918353),t=Ce(t<<15|t>>>-15,461845907),t=Ce(t<<13|t>>>-13,5),t=Ce((t=(t+3864292196|0)^e)^t>>>16,2246822507),t=ke((t=Ce(t^t>>>13,3266489909))^t>>>16)}function lr(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}return Qn[f]=!0,Qn[B]=Yn.entries,Qn.__toJS=Yn.toObject,Qn.__toStringMapper=function(e,t){return JSON.stringify(t)+": "+rr(e)},Zn(o,{toKeyedSeq:function(){return new Jt(this,!1)},filter:function(e,t){return mn(this,en(this,e,t,!1))},findIndex:function(e,t){var n=this.findEntry(e,t);return n?n[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return mn(this,Xt(this,!1))},slice:function(e,t){return mn(this,rn(this,e,t,!1))},splice:function(e,t){var n=arguments.length;if(t=Math.max(0|t,0),0===n||2===n&&!t)return this;e=T(e,e<0?this.count():this.size);var r=this.slice(0,e);return mn(this,1===n?r:r.concat(A(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var n=this.findLastEntry(e,t);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(e){return mn(this,ln(this,e,!1))},get:function(e,t){return(e=k(this,e))<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find((function(t,n){return n===e}),void 0,t)},has:function(e){return(e=k(this,e))>=0&&(void 0!==this.size?this.size===1/0||e{"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},35823:e=>{e.exports=function(e,t,n,r){var o=new Blob(void 0!==r?[r,e]:[e],{type:n||"application/octet-stream"});if(void 0!==window.navigator.msSaveBlob)window.navigator.msSaveBlob(o,t);else{var a=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(o):window.webkitURL.createObjectURL(o),i=document.createElement("a");i.style.display="none",i.href=a,i.setAttribute("download",t),void 0===i.download&&i.setAttribute("target","_blank"),document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(a)}),200)}}},91296:(e,t,n)=>{var r=NaN,o="[object Symbol]",a=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt,c="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p="object"==typeof self&&self&&self.Object===Object&&self,f=c||p||Function("return this")(),h=Object.prototype.toString,d=Math.max,m=Math.min,g=function(){return f.Date.now()};function y(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function v(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&h.call(e)==o}(e))return r;if(y(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=y(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(a,"");var n=s.test(e);return n||l.test(e)?u(e.slice(2),n?2:8):i.test(e)?r:+e}e.exports=function(e,t,n){var r,o,a,i,s,l,u=0,c=!1,p=!1,f=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function h(t){var n=r,a=o;return r=o=void 0,u=t,i=e.apply(a,n)}function b(e){var n=e-l;return void 0===l||n>=t||n<0||p&&e-u>=a}function w(){var e=g();if(b(e))return E(e);s=setTimeout(w,function(e){var n=t-(e-l);return p?m(n,a-(e-u)):n}(e))}function E(e){return s=void 0,f&&r?h(e):(r=o=void 0,i)}function x(){var e=g(),n=b(e);if(r=arguments,o=this,l=e,n){if(void 0===s)return function(e){return u=e,s=setTimeout(w,t),c?h(e):i}(l);if(p)return s=setTimeout(w,t),h(l)}return void 0===s&&(s=setTimeout(w,t)),i}return t=v(t)||0,y(n)&&(c=!!n.leading,a=(p="maxWait"in n)?d(v(n.maxWait)||0,t):a,f="trailing"in n?!!n.trailing:f),x.cancel=function(){void 0!==s&&clearTimeout(s),u=0,r=l=o=s=void 0},x.flush=function(){return void 0===s?i:E(g())},x}},18552:(e,t,n)=>{var r=n(10852)(n(55639),"DataView");e.exports=r},1989:(e,t,n)=>{var r=n(51789),o=n(80401),a=n(57667),i=n(21327),s=n(81866);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(27040),o=n(14125),a=n(82117),i=n(67518),s=n(54705);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(10852)(n(55639),"Map");e.exports=r},83369:(e,t,n)=>{var r=n(24785),o=n(11285),a=n(96e3),i=n(49916),s=n(95265);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(10852)(n(55639),"Promise");e.exports=r},58525:(e,t,n)=>{var r=n(10852)(n(55639),"Set");e.exports=r},88668:(e,t,n)=>{var r=n(83369),o=n(90619),a=n(72385);function i(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t{var r=n(38407),o=n(37465),a=n(63779),i=n(67599),s=n(44758),l=n(34309);function u(e){var t=this.__data__=new r(e);this.size=t.size}u.prototype.clear=o,u.prototype.delete=a,u.prototype.get=i,u.prototype.has=s,u.prototype.set=l,e.exports=u},62705:(e,t,n)=>{var r=n(55639).Symbol;e.exports=r},11149:(e,t,n)=>{var r=n(55639).Uint8Array;e.exports=r},70577:(e,t,n)=>{var r=n(10852)(n(55639),"WeakMap");e.exports=r},96874:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},77412:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,a=[];++n{var r=n(22545),o=n(35694),a=n(1469),i=n(44144),s=n(65776),l=n(36719),u=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=a(e),c=!n&&o(e),p=!n&&!c&&i(e),f=!n&&!c&&!p&&l(e),h=n||c||p||f,d=h?r(e.length,String):[],m=d.length;for(var g in e)!t&&!u.call(e,g)||h&&("length"==g||p&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,m))||d.push(g);return d}},29932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n{e.exports=function(e,t,n,r){var o=-1,a=null==e?0:e.length;for(r&&a&&(n=e[++o]);++o{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{e.exports=function(e){return e.split("")}},49029:e=>{var t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;e.exports=function(e){return e.match(t)||[]}},86556:(e,t,n)=>{var r=n(89465),o=n(77813);e.exports=function(e,t,n){(void 0!==n&&!o(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}},34865:(e,t,n)=>{var r=n(89465),o=n(77813),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var i=e[t];a.call(e,t)&&o(i,n)&&(void 0!==n||t in e)||r(e,t,n)}},18470:(e,t,n)=>{var r=n(77813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},44037:(e,t,n)=>{var r=n(98363),o=n(3674);e.exports=function(e,t){return e&&r(t,o(t),e)}},63886:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e,t){return e&&r(t,o(t),e)}},89465:(e,t,n)=>{var r=n(38777);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},85990:(e,t,n)=>{var r=n(46384),o=n(77412),a=n(34865),i=n(44037),s=n(63886),l=n(64626),u=n(278),c=n(18805),p=n(1911),f=n(58234),h=n(46904),d=n(98882),m=n(43824),g=n(29148),y=n(38517),v=n(1469),b=n(44144),w=n(56688),E=n(13218),x=n(72928),_=n(3674),S=n(81704),A="[object Arguments]",C="[object Function]",k="[object Object]",O={};O[A]=O["[object Array]"]=O["[object ArrayBuffer]"]=O["[object DataView]"]=O["[object Boolean]"]=O["[object Date]"]=O["[object Float32Array]"]=O["[object Float64Array]"]=O["[object Int8Array]"]=O["[object Int16Array]"]=O["[object Int32Array]"]=O["[object Map]"]=O["[object Number]"]=O[k]=O["[object RegExp]"]=O["[object Set]"]=O["[object String]"]=O["[object Symbol]"]=O["[object Uint8Array]"]=O["[object Uint8ClampedArray]"]=O["[object Uint16Array]"]=O["[object Uint32Array]"]=!0,O["[object Error]"]=O[C]=O["[object WeakMap]"]=!1,e.exports=function e(t,n,j,T,I,N){var P,R=1&n,M=2&n,D=4&n;if(j&&(P=I?j(t,T,I,N):j(t)),void 0!==P)return P;if(!E(t))return t;var L=v(t);if(L){if(P=m(t),!R)return u(t,P)}else{var B=d(t),F=B==C||"[object GeneratorFunction]"==B;if(b(t))return l(t,R);if(B==k||B==A||F&&!I){if(P=M||F?{}:y(t),!R)return M?p(t,s(P,t)):c(t,i(P,t))}else{if(!O[B])return I?t:{};P=g(t,B,R)}}N||(N=new r);var z=N.get(t);if(z)return z;N.set(t,P),x(t)?t.forEach((function(r){P.add(e(r,n,j,r,t,N))})):w(t)&&t.forEach((function(r,o){P.set(o,e(r,n,j,o,t,N))}));var U=L?void 0:(D?M?h:f:M?S:_)(t);return o(U||t,(function(r,o){U&&(r=t[o=r]),a(P,o,e(r,n,j,o,t,N))})),P}},3118:(e,t,n)=>{var r=n(13218),o=Object.create,a=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=a},89881:(e,t,n)=>{var r=n(47816),o=n(99291)(r);e.exports=o},41848:e=>{e.exports=function(e,t,n,r){for(var o=e.length,a=n+(r?1:-1);r?a--:++a{var r=n(62488),o=n(37285);e.exports=function e(t,n,a,i,s){var l=-1,u=t.length;for(a||(a=o),s||(s=[]);++l0&&a(c)?n>1?e(c,n-1,a,i,s):r(s,c):i||(s[s.length]=c)}return s}},28483:(e,t,n)=>{var r=n(25063)();e.exports=r},47816:(e,t,n)=>{var r=n(28483),o=n(3674);e.exports=function(e,t){return e&&r(e,t,o)}},97786:(e,t,n)=>{var r=n(71811),o=n(40327);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n{var r=n(62488),o=n(1469);e.exports=function(e,t,n){var a=t(e);return o(e)?a:r(a,n(e))}},44239:(e,t,n)=>{var r=n(62705),o=n(89607),a=n(2333),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?o(e):a(e)}},13:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},9454:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},90939:(e,t,n)=>{var r=n(2492),o=n(37005);e.exports=function e(t,n,a,i,s){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,a,i,e,s))}},2492:(e,t,n)=>{var r=n(46384),o=n(67114),a=n(18351),i=n(16096),s=n(98882),l=n(1469),u=n(44144),c=n(36719),p="[object Arguments]",f="[object Array]",h="[object Object]",d=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,m,g,y){var v=l(e),b=l(t),w=v?f:s(e),E=b?f:s(t),x=(w=w==p?h:w)==h,_=(E=E==p?h:E)==h,S=w==E;if(S&&u(e)){if(!u(t))return!1;v=!0,x=!1}if(S&&!x)return y||(y=new r),v||c(e)?o(e,t,n,m,g,y):a(e,t,w,n,m,g,y);if(!(1&n)){var A=x&&d.call(e,"__wrapped__"),C=_&&d.call(t,"__wrapped__");if(A||C){var k=A?e.value():e,O=C?t.value():t;return y||(y=new r),g(k,O,n,m,y)}}return!!S&&(y||(y=new r),i(e,t,n,m,g,y))}},25588:(e,t,n)=>{var r=n(98882),o=n(37005);e.exports=function(e){return o(e)&&"[object Map]"==r(e)}},2958:(e,t,n)=>{var r=n(46384),o=n(90939);e.exports=function(e,t,n,a){var i=n.length,s=i,l=!a;if(null==e)return!s;for(e=Object(e);i--;){var u=n[i];if(l&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i{var r=n(23560),o=n(15346),a=n(13218),i=n(80346),s=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,c=l.toString,p=u.hasOwnProperty,f=RegExp("^"+c.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||o(e))&&(r(e)?f:s).test(i(e))}},29221:(e,t,n)=>{var r=n(98882),o=n(37005);e.exports=function(e){return o(e)&&"[object Set]"==r(e)}},38749:(e,t,n)=>{var r=n(44239),o=n(41780),a=n(37005),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return a(e)&&o(e.length)&&!!i[r(e)]}},67206:(e,t,n)=>{var r=n(91573),o=n(16432),a=n(6557),i=n(1469),s=n(39601);e.exports=function(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?i(e)?o(e[0],e[1]):r(e):s(e)}},280:(e,t,n)=>{var r=n(25726),o=n(86916),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))a.call(e,n)&&"constructor"!=n&&t.push(n);return t}},10313:(e,t,n)=>{var r=n(13218),o=n(25726),a=n(33498),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return a(e);var t=o(e),n=[];for(var s in e)("constructor"!=s||!t&&i.call(e,s))&&n.push(s);return n}},91573:(e,t,n)=>{var r=n(2958),o=n(1499),a=n(42634);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},16432:(e,t,n)=>{var r=n(90939),o=n(27361),a=n(79095),i=n(15403),s=n(89162),l=n(42634),u=n(40327);e.exports=function(e,t){return i(e)&&s(t)?l(u(e),t):function(n){var i=o(n,e);return void 0===i&&i===t?a(n,e):r(t,i,3)}}},42980:(e,t,n)=>{var r=n(46384),o=n(86556),a=n(28483),i=n(59783),s=n(13218),l=n(81704),u=n(36390);e.exports=function e(t,n,c,p,f){t!==n&&a(n,(function(a,l){if(f||(f=new r),s(a))i(t,n,l,c,e,p,f);else{var h=p?p(u(t,l),a,l+"",t,n,f):void 0;void 0===h&&(h=a),o(t,l,h)}}),l)}},59783:(e,t,n)=>{var r=n(86556),o=n(64626),a=n(77133),i=n(278),s=n(38517),l=n(35694),u=n(1469),c=n(29246),p=n(44144),f=n(23560),h=n(13218),d=n(68630),m=n(36719),g=n(36390),y=n(59881);e.exports=function(e,t,n,v,b,w,E){var x=g(e,n),_=g(t,n),S=E.get(_);if(S)r(e,n,S);else{var A=w?w(x,_,n+"",e,t,E):void 0,C=void 0===A;if(C){var k=u(_),O=!k&&p(_),j=!k&&!O&&m(_);A=_,k||O||j?u(x)?A=x:c(x)?A=i(x):O?(C=!1,A=o(_,!0)):j?(C=!1,A=a(_,!0)):A=[]:d(_)||l(_)?(A=x,l(x)?A=y(x):h(x)&&!f(x)||(A=s(_))):C=!1}C&&(E.set(_,A),b(A,_,v,w,E),E.delete(_)),r(e,n,A)}}},40371:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},79152:(e,t,n)=>{var r=n(97786);e.exports=function(e){return function(t){return r(t,e)}}},18674:e=>{e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},10107:e=>{e.exports=function(e,t,n,r,o){return o(e,(function(e,o,a){n=r?(r=!1,e):t(n,e,o,a)})),n}},5976:(e,t,n)=>{var r=n(6557),o=n(45357),a=n(30061);e.exports=function(e,t){return a(o(e,t,r),e+"")}},10611:(e,t,n)=>{var r=n(34865),o=n(71811),a=n(65776),i=n(13218),s=n(40327);e.exports=function(e,t,n,l){if(!i(e))return e;for(var u=-1,c=(t=o(t,e)).length,p=c-1,f=e;null!=f&&++u{var r=n(75703),o=n(38777),a=n(6557),i=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:a;e.exports=i},14259:e=>{e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(o);++r{var r=n(89881);e.exports=function(e,t){var n;return r(e,(function(e,r,o){return!(n=t(e,r,o))})),!!n}},22545:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n{var r=n(62705),o=n(29932),a=n(1469),i=n(33448),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return o(t,e)+"";if(i(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},27561:(e,t,n)=>{var r=n(67990),o=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(o,""):e}},7518:e=>{e.exports=function(e){return function(t){return e(t)}}},57406:(e,t,n)=>{var r=n(71811),o=n(10928),a=n(40292),i=n(40327);e.exports=function(e,t){return t=r(t,e),null==(e=a(e,t))||delete e[i(o(t))]}},1757:e=>{e.exports=function(e,t,n){for(var r=-1,o=e.length,a=t.length,i={};++r{e.exports=function(e,t){return e.has(t)}},71811:(e,t,n)=>{var r=n(1469),o=n(15403),a=n(55514),i=n(79833);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:a(i(e))}},40180:(e,t,n)=>{var r=n(14259);e.exports=function(e,t,n){var o=e.length;return n=void 0===n?o:n,!t&&n>=o?e:r(e,t,n)}},74318:(e,t,n)=>{var r=n(11149);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},64626:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o?r.Buffer:void 0,s=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}},57157:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},93147:e=>{var t=/\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},40419:(e,t,n)=>{var r=n(62705),o=r?r.prototype:void 0,a=o?o.valueOf:void 0;e.exports=function(e){return a?Object(a.call(e)):{}}},77133:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var r=n(34865),o=n(89465);e.exports=function(e,t,n,a){var i=!n;n||(n={});for(var s=-1,l=t.length;++s{var r=n(98363),o=n(99551);e.exports=function(e,t){return r(e,o(e),t)}},1911:(e,t,n)=>{var r=n(98363),o=n(51442);e.exports=function(e,t){return r(e,o(e),t)}},14429:(e,t,n)=>{var r=n(55639)["__core-js_shared__"];e.exports=r},21463:(e,t,n)=>{var r=n(5976),o=n(16612);e.exports=function(e){return r((function(t,n){var r=-1,a=n.length,i=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(i=e.length>3&&"function"==typeof i?(a--,i):void 0,s&&o(n[0],n[1],s)&&(i=a<3?void 0:i,a=1),t=Object(t);++r{var r=n(98612);e.exports=function(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var a=n.length,i=t?a:-1,s=Object(n);(t?i--:++i{e.exports=function(e){return function(t,n,r){for(var o=-1,a=Object(t),i=r(t),s=i.length;s--;){var l=i[e?s:++o];if(!1===n(a[l],l,a))break}return t}}},98805:(e,t,n)=>{var r=n(40180),o=n(62689),a=n(83140),i=n(79833);e.exports=function(e){return function(t){t=i(t);var n=o(t)?a(t):void 0,s=n?n[0]:t.charAt(0),l=n?r(n,1).join(""):t.slice(1);return s[e]()+l}}},35393:(e,t,n)=>{var r=n(62663),o=n(53816),a=n(58748),i=RegExp("['’]","g");e.exports=function(e){return function(t){return r(a(o(t).replace(i,"")),e,"")}}},67740:(e,t,n)=>{var r=n(67206),o=n(98612),a=n(3674);e.exports=function(e){return function(t,n,i){var s=Object(t);if(!o(t)){var l=r(n,3);t=a(t),n=function(e){return l(s[e],e,s)}}var u=e(t,n,i);return u>-1?s[l?t[u]:u]:void 0}}},60696:(e,t,n)=>{var r=n(68630);e.exports=function(e){return r(e)?void 0:e}},69389:(e,t,n)=>{var r=n(18674)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});e.exports=r},38777:(e,t,n)=>{var r=n(10852),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=o},67114:(e,t,n)=>{var r=n(88668),o=n(82908),a=n(74757);e.exports=function(e,t,n,i,s,l){var u=1&n,c=e.length,p=t.length;if(c!=p&&!(u&&p>c))return!1;var f=l.get(e),h=l.get(t);if(f&&h)return f==t&&h==e;var d=-1,m=!0,g=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++d{var r=n(62705),o=n(11149),a=n(77813),i=n(67114),s=n(68776),l=n(21814),u=r?r.prototype:void 0,c=u?u.valueOf:void 0;e.exports=function(e,t,n,r,u,p,f){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!p(new o(e),new o(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var h=s;case"[object Set]":var d=1&r;if(h||(h=l),e.size!=t.size&&!d)return!1;var m=f.get(e);if(m)return m==t;r|=2,f.set(e,t);var g=i(h(e),h(t),r,u,p,f);return f.delete(e),g;case"[object Symbol]":if(c)return c.call(e)==c.call(t)}return!1}},16096:(e,t,n)=>{var r=n(58234),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,a,i,s){var l=1&n,u=r(e),c=u.length;if(c!=r(t).length&&!l)return!1;for(var p=c;p--;){var f=u[p];if(!(l?f in t:o.call(t,f)))return!1}var h=s.get(e),d=s.get(t);if(h&&d)return h==t&&d==e;var m=!0;s.set(e,t),s.set(t,e);for(var g=l;++p{var r=n(85564),o=n(45357),a=n(30061);e.exports=function(e){return a(o(e,void 0,r),e+"")}},31957:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},58234:(e,t,n)=>{var r=n(68866),o=n(99551),a=n(3674);e.exports=function(e){return r(e,a,o)}},46904:(e,t,n)=>{var r=n(68866),o=n(51442),a=n(81704);e.exports=function(e){return r(e,a,o)}},45050:(e,t,n)=>{var r=n(37019);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},1499:(e,t,n)=>{var r=n(89162),o=n(3674);e.exports=function(e){for(var t=o(e),n=t.length;n--;){var a=t[n],i=e[a];t[n]=[a,i,r(i)]}return t}},10852:(e,t,n)=>{var r=n(28458),o=n(47801);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},85924:(e,t,n)=>{var r=n(5569)(Object.getPrototypeOf,Object);e.exports=r},89607:(e,t,n)=>{var r=n(62705),o=Object.prototype,a=o.hasOwnProperty,i=o.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var o=i.call(e);return r&&(t?e[s]=n:delete e[s]),o}},99551:(e,t,n)=>{var r=n(34963),o=n(70479),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,s=i?function(e){return null==e?[]:(e=Object(e),r(i(e),(function(t){return a.call(e,t)})))}:o;e.exports=s},51442:(e,t,n)=>{var r=n(62488),o=n(85924),a=n(99551),i=n(70479),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,a(e)),e=o(e);return t}:i;e.exports=s},98882:(e,t,n)=>{var r=n(18552),o=n(57071),a=n(53818),i=n(58525),s=n(70577),l=n(44239),u=n(80346),c="[object Map]",p="[object Promise]",f="[object Set]",h="[object WeakMap]",d="[object DataView]",m=u(r),g=u(o),y=u(a),v=u(i),b=u(s),w=l;(r&&w(new r(new ArrayBuffer(1)))!=d||o&&w(new o)!=c||a&&w(a.resolve())!=p||i&&w(new i)!=f||s&&w(new s)!=h)&&(w=function(e){var t=l(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case m:return d;case g:return c;case y:return p;case v:return f;case b:return h}return t}),e.exports=w},47801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},222:(e,t,n)=>{var r=n(71811),o=n(35694),a=n(1469),i=n(65776),s=n(41780),l=n(40327);e.exports=function(e,t,n){for(var u=-1,c=(t=r(t,e)).length,p=!1;++u{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},93157:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function(e){return t.test(e)}},51789:(e,t,n)=>{var r=n(94536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},80401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},57667:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},21327:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},81866:(e,t,n)=>{var r=n(94536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},43824:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&"string"==typeof e[0]&&t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},29148:(e,t,n)=>{var r=n(74318),o=n(57157),a=n(93147),i=n(40419),s=n(77133);e.exports=function(e,t,n){var l=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new l(+e);case"[object DataView]":return o(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(e,n);case"[object Map]":case"[object Set]":return new l;case"[object Number]":case"[object String]":return new l(e);case"[object RegExp]":return a(e);case"[object Symbol]":return i(e)}}},38517:(e,t,n)=>{var r=n(3118),o=n(85924),a=n(25726);e.exports=function(e){return"function"!=typeof e.constructor||a(e)?{}:r(o(e))}},37285:(e,t,n)=>{var r=n(62705),o=n(35694),a=n(1469),i=r?r.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||o(e)||!!(i&&e&&e[i])}},65776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e{var r=n(77813),o=n(98612),a=n(65776),i=n(13218);e.exports=function(e,t,n){if(!i(n))return!1;var s=typeof t;return!!("number"==s?o(n)&&a(t,n.length):"string"==s&&t in n)&&r(n[t],e)}},15403:(e,t,n)=>{var r=n(1469),o=n(33448),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(i.test(e)||!a.test(e)||null!=t&&e in Object(t))}},37019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},15346:(e,t,n)=>{var r,o=n(14429),a=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},25726:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},89162:(e,t,n)=>{var r=n(13218);e.exports=function(e){return e==e&&!r(e)}},27040:e=>{e.exports=function(){this.__data__=[],this.size=0}},14125:(e,t,n)=>{var r=n(18470),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},82117:(e,t,n)=>{var r=n(18470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},67518:(e,t,n)=>{var r=n(18470);e.exports=function(e){return r(this.__data__,e)>-1}},54705:(e,t,n)=>{var r=n(18470);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},24785:(e,t,n)=>{var r=n(1989),o=n(38407),a=n(57071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||o),string:new r}}},11285:(e,t,n)=>{var r=n(45050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},96e3:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).get(e)}},49916:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).has(e)}},95265:(e,t,n)=>{var r=n(45050);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},68776:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},42634:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},24523:(e,t,n)=>{var r=n(88306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},94536:(e,t,n)=>{var r=n(10852)(Object,"create");e.exports=r},86916:(e,t,n)=>{var r=n(5569)(Object.keys,Object);e.exports=r},33498:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},31167:(e,t,n)=>{e=n.nmd(e);var r=n(31957),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o&&r.process,s=function(){try{var e=a&&a.require&&a.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=s},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},45357:(e,t,n)=>{var r=n(96874),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var a=arguments,i=-1,s=o(a.length-t,0),l=Array(s);++i{var r=n(97786),o=n(14259);e.exports=function(e,t){return t.length<2?e:r(e,o(t,0,-1))}},55639:(e,t,n)=>{var r=n(31957),o="object"==typeof self&&self&&self.Object===Object&&self,a=r||o||Function("return this")();e.exports=a},36390:e=>{e.exports=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}},90619:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},72385:e=>{e.exports=function(e){return this.__data__.has(e)}},21814:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},30061:(e,t,n)=>{var r=n(56560),o=n(21275)(r);e.exports=o},21275:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var o=t(),a=16-(o-r);if(r=o,a>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},37465:(e,t,n)=>{var r=n(38407);e.exports=function(){this.__data__=new r,this.size=0}},63779:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},67599:e=>{e.exports=function(e){return this.__data__.get(e)}},44758:e=>{e.exports=function(e){return this.__data__.has(e)}},34309:(e,t,n)=>{var r=n(38407),o=n(57071),a=n(83369);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var i=n.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(i)}return n.set(e,t),this.size=n.size,this}},83140:(e,t,n)=>{var r=n(44286),o=n(62689),a=n(676);e.exports=function(e){return o(e)?a(e):r(e)}},55514:(e,t,n)=>{var r=n(24523),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,i=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(a,"$1"):n||e)})),t}));e.exports=i},40327:(e,t,n)=>{var r=n(33448);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},80346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},67990:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},676:e=>{var t="\\ud800-\\udfff",n="["+t+"]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",a="[^"+t+"]",i="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",l="(?:"+r+"|"+o+")"+"?",u="[\\ufe0e\\ufe0f]?",c=u+l+("(?:\\u200d(?:"+[a,i,s].join("|")+")"+u+l+")*"),p="(?:"+[a+r+"?",r,i,s,n].join("|")+")",f=RegExp(o+"(?="+o+")|"+p+c,"g");e.exports=function(e){return e.match(f)||[]}},2757:e=>{var t="\\ud800-\\udfff",n="\\u2700-\\u27bf",r="a-z\\xdf-\\xf6\\xf8-\\xff",o="A-Z\\xc0-\\xd6\\xd8-\\xde",a="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",i="["+a+"]",s="\\d+",l="["+n+"]",u="["+r+"]",c="[^"+t+a+s+n+r+o+"]",p="(?:\\ud83c[\\udde6-\\uddff]){2}",f="[\\ud800-\\udbff][\\udc00-\\udfff]",h="["+o+"]",d="(?:"+u+"|"+c+")",m="(?:"+h+"|"+c+")",g="(?:['’](?:d|ll|m|re|s|t|ve))?",y="(?:['’](?:D|LL|M|RE|S|T|VE))?",v="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",b="[\\ufe0e\\ufe0f]?",w=b+v+("(?:\\u200d(?:"+["[^"+t+"]",p,f].join("|")+")"+b+v+")*"),E="(?:"+[l,p,f].join("|")+")"+w,x=RegExp([h+"?"+u+"+"+g+"(?="+[i,h,"$"].join("|")+")",m+"+"+y+"(?="+[i,h+d,"$"].join("|")+")",h+"?"+d+"+"+g,h+"+"+y,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",s,E].join("|"),"g");e.exports=function(e){return e.match(x)||[]}},68929:(e,t,n)=>{var r=n(48403),o=n(35393)((function(e,t,n){return t=t.toLowerCase(),e+(n?r(t):t)}));e.exports=o},48403:(e,t,n)=>{var r=n(79833),o=n(11700);e.exports=function(e){return o(r(e).toLowerCase())}},75703:e=>{e.exports=function(e){return function(){return e}}},23279:(e,t,n)=>{var r=n(13218),o=n(7771),a=n(14841),i=Math.max,s=Math.min;e.exports=function(e,t,n){var l,u,c,p,f,h,d=0,m=!1,g=!1,y=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function v(t){var n=l,r=u;return l=u=void 0,d=t,p=e.apply(r,n)}function b(e){var n=e-h;return void 0===h||n>=t||n<0||g&&e-d>=c}function w(){var e=o();if(b(e))return E(e);f=setTimeout(w,function(e){var n=t-(e-h);return g?s(n,c-(e-d)):n}(e))}function E(e){return f=void 0,y&&l?v(e):(l=u=void 0,p)}function x(){var e=o(),n=b(e);if(l=arguments,u=this,h=e,n){if(void 0===f)return function(e){return d=e,f=setTimeout(w,t),m?v(e):p}(h);if(g)return clearTimeout(f),f=setTimeout(w,t),v(h)}return void 0===f&&(f=setTimeout(w,t)),p}return t=a(t)||0,r(n)&&(m=!!n.leading,c=(g="maxWait"in n)?i(a(n.maxWait)||0,t):c,y="trailing"in n?!!n.trailing:y),x.cancel=function(){void 0!==f&&clearTimeout(f),d=0,l=h=u=f=void 0},x.flush=function(){return void 0===f?p:E(o())},x}},53816:(e,t,n)=>{var r=n(69389),o=n(79833),a=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,i=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");e.exports=function(e){return(e=o(e))&&e.replace(a,r).replace(i,"")}},77813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},13311:(e,t,n)=>{var r=n(67740)(n(30998));e.exports=r},30998:(e,t,n)=>{var r=n(41848),o=n(67206),a=n(40554),i=Math.max;e.exports=function(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var l=null==n?0:a(n);return l<0&&(l=i(s+l,0)),r(e,o(t,3),l)}},85564:(e,t,n)=>{var r=n(21078);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},27361:(e,t,n)=>{var r=n(97786);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},79095:(e,t,n)=>{var r=n(13),o=n(222);e.exports=function(e,t){return null!=e&&o(e,t,r)}},6557:e=>{e.exports=function(e){return e}},35694:(e,t,n)=>{var r=n(9454),o=n(37005),a=Object.prototype,i=a.hasOwnProperty,s=a.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&i.call(e,"callee")&&!s.call(e,"callee")};e.exports=l},1469:e=>{var t=Array.isArray;e.exports=t},98612:(e,t,n)=>{var r=n(23560),o=n(41780);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},29246:(e,t,n)=>{var r=n(98612),o=n(37005);e.exports=function(e){return o(e)&&r(e)}},44144:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=n(95062),a=t&&!t.nodeType&&t,i=a&&e&&!e.nodeType&&e,s=i&&i.exports===a?r.Buffer:void 0,l=(s?s.isBuffer:void 0)||o;e.exports=l},41609:(e,t,n)=>{var r=n(280),o=n(98882),a=n(35694),i=n(1469),s=n(98612),l=n(44144),u=n(25726),c=n(36719),p=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(s(e)&&(i(e)||"string"==typeof e||"function"==typeof e.splice||l(e)||c(e)||a(e)))return!e.length;var t=o(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(u(e))return!r(e).length;for(var n in e)if(p.call(e,n))return!1;return!0}},23560:(e,t,n)=>{var r=n(44239),o=n(13218);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},41780:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},56688:(e,t,n)=>{var r=n(25588),o=n(7518),a=n(31167),i=a&&a.isMap,s=i?o(i):r;e.exports=s},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},37005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},68630:(e,t,n)=>{var r=n(44239),o=n(85924),a=n(37005),i=Function.prototype,s=Object.prototype,l=i.toString,u=s.hasOwnProperty,c=l.call(Object);e.exports=function(e){if(!a(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==c}},72928:(e,t,n)=>{var r=n(29221),o=n(7518),a=n(31167),i=a&&a.isSet,s=i?o(i):r;e.exports=s},47037:(e,t,n)=>{var r=n(44239),o=n(1469),a=n(37005);e.exports=function(e){return"string"==typeof e||!o(e)&&a(e)&&"[object String]"==r(e)}},33448:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},36719:(e,t,n)=>{var r=n(38749),o=n(7518),a=n(31167),i=a&&a.isTypedArray,s=i?o(i):r;e.exports=s},3674:(e,t,n)=>{var r=n(14636),o=n(280),a=n(98612);e.exports=function(e){return a(e)?r(e):o(e)}},81704:(e,t,n)=>{var r=n(14636),o=n(10313),a=n(98612);e.exports=function(e){return a(e)?r(e,!0):o(e)}},10928:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},88306:(e,t,n)=>{var r=n(83369);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],a=n.cache;if(a.has(o))return a.get(o);var i=e.apply(this,r);return n.cache=a.set(o,i)||a,i};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},82492:(e,t,n)=>{var r=n(42980),o=n(21463)((function(e,t,n){r(e,t,n)}));e.exports=o},7771:(e,t,n)=>{var r=n(55639);e.exports=function(){return r.Date.now()}},57557:(e,t,n)=>{var r=n(29932),o=n(85990),a=n(57406),i=n(71811),s=n(98363),l=n(60696),u=n(99021),c=n(46904),p=u((function(e,t){var n={};if(null==e)return n;var u=!1;t=r(t,(function(t){return t=i(t,e),u||(u=t.length>1),t})),s(e,c(e),n),u&&(n=o(n,7,l));for(var p=t.length;p--;)a(n,t[p]);return n}));e.exports=p},39601:(e,t,n)=>{var r=n(40371),o=n(79152),a=n(15403),i=n(40327);e.exports=function(e){return a(e)?r(i(e)):o(e)}},54061:(e,t,n)=>{var r=n(62663),o=n(89881),a=n(67206),i=n(10107),s=n(1469);e.exports=function(e,t,n){var l=s(e)?r:i,u=arguments.length<3;return l(e,a(t,4),n,u,o)}},36968:(e,t,n)=>{var r=n(10611);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},59704:(e,t,n)=>{var r=n(82908),o=n(67206),a=n(5076),i=n(1469),s=n(16612);e.exports=function(e,t,n){var l=i(e)?r:a;return n&&s(e,t,n)&&(t=void 0),l(e,o(t,3))}},70479:e=>{e.exports=function(){return[]}},95062:e=>{e.exports=function(){return!1}},18601:(e,t,n)=>{var r=n(14841),o=1/0;e.exports=function(e){return e?(e=r(e))===o||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},40554:(e,t,n)=>{var r=n(18601);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},7334:(e,t,n)=>{var r=n(79833);e.exports=function(e){return r(e).toLowerCase()}},14841:(e,t,n)=>{var r=n(27561),o=n(13218),a=n(33448),i=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||l.test(e)?u(e.slice(2),n?2:8):i.test(e)?NaN:+e}},59881:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e){return r(e,o(e))}},79833:(e,t,n)=>{var r=n(80531);e.exports=function(e){return null==e?"":r(e)}},11700:(e,t,n)=>{var r=n(98805)("toUpperCase");e.exports=r},58748:(e,t,n)=>{var r=n(49029),o=n(93157),a=n(79833),i=n(2757);e.exports=function(e,t,n){return e=a(e),void 0===(t=n?void 0:t)?o(e)?i(e):r(e):e.match(t)||[]}},7287:(e,t,n)=>{var r=n(34865),o=n(1757);e.exports=function(e,t){return o(e||[],t||[],r)}},96470:(e,t,n)=>{"use strict";var r=n(47802),o=n(21102);t.highlight=i,t.highlightAuto=function(e,t){var n,s,l,u,c=t||{},p=c.subset||r.listLanguages(),f=c.prefix,h=p.length,d=-1;null==f&&(f=a);if("string"!=typeof e)throw o("Expected `string` for value, got `%s`",e);s={relevance:0,language:null,value:[]},n={relevance:0,language:null,value:[]};for(;++ds.relevance&&(s=l),l.relevance>n.relevance&&(s=n,n=l));s.language&&(n.secondBest=s);return n},t.registerLanguage=function(e,t){r.registerLanguage(e,t)},t.listLanguages=function(){return r.listLanguages()},t.registerAlias=function(e,t){var n,o=e;t&&((o={})[e]=t);for(n in o)r.registerAliases(o[n],{languageName:n})},s.prototype.addText=function(e){var t,n,r=this.stack;if(""===e)return;t=r[r.length-1],(n=t.children[t.children.length-1])&&"text"===n.type?n.value+=e:t.children.push({type:"text",value:e})},s.prototype.addKeyword=function(e,t){this.openNode(t),this.addText(e),this.closeNode()},s.prototype.addSublanguage=function(e,t){var n=this.stack,r=n[n.length-1],o=e.rootNode.children,a=t?{type:"element",tagName:"span",properties:{className:[t]},children:o}:o;r.children=r.children.concat(a)},s.prototype.openNode=function(e){var t=this.stack,n=this.options.classPrefix+e,r=t[t.length-1],o={type:"element",tagName:"span",properties:{className:[n]},children:[]};r.children.push(o),t.push(o)},s.prototype.closeNode=function(){this.stack.pop()},s.prototype.closeAllNodes=l,s.prototype.finalize=l,s.prototype.toHTML=function(){return""};var a="hljs-";function i(e,t,n){var i,l=r.configure({}),u=(n||{}).prefix;if("string"!=typeof e)throw o("Expected `string` for name, got `%s`",e);if(!r.getLanguage(e))throw o("Unknown language: `%s` is not registered",e);if("string"!=typeof t)throw o("Expected `string` for value, got `%s`",t);if(null==u&&(u=a),r.configure({__emitter:s,classPrefix:u}),i=r.highlight(t,{language:e,ignoreIllegals:!0}),r.configure(l||{}),i.errorRaised)throw i.errorRaised;return{relevance:i.relevance,language:i.language,value:i.emitter.rootNode.children}}function s(e){this.options=e,this.rootNode={children:[]},this.stack=[this.rootNode]}function l(){}},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var a,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l{var r="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,a=r&&o&&"function"==typeof o.get?o.get:null,i=r&&Map.prototype.forEach,s="function"==typeof Set&&Set.prototype,l=Object.getOwnPropertyDescriptor&&s?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,u=s&&l&&"function"==typeof l.get?l.get:null,c=s&&Set.prototype.forEach,p="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,f="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,h="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,d=Boolean.prototype.valueOf,m=Object.prototype.toString,g=Function.prototype.toString,y=String.prototype.match,v=String.prototype.slice,b=String.prototype.replace,w=String.prototype.toUpperCase,E=String.prototype.toLowerCase,x=RegExp.prototype.test,_=Array.prototype.concat,S=Array.prototype.join,A=Array.prototype.slice,C=Math.floor,k="function"==typeof BigInt?BigInt.prototype.valueOf:null,O=Object.getOwnPropertySymbols,j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,T="function"==typeof Symbol&&"object"==typeof Symbol.iterator,I="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===T||"symbol")?Symbol.toStringTag:null,N=Object.prototype.propertyIsEnumerable,P=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function R(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||x.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-C(-e):C(e);if(r!==e){var o=String(r),a=v.call(t,o.length+1);return b.call(o,n,"$&_")+"."+b.call(b.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return b.call(t,n,"$&_")}var M=n(24654),D=M.custom,L=q(D)?D:null;function B(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function F(e){return b.call(String(e),/"/g,""")}function z(e){return!("[object Array]"!==W(e)||I&&"object"==typeof e&&I in e)}function U(e){return!("[object RegExp]"!==W(e)||I&&"object"==typeof e&&I in e)}function q(e){if(T)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!j)return!1;try{return j.call(e),!0}catch(e){}return!1}e.exports=function e(t,n,r,o){var s=n||{};if(V(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(V(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var l=!V(s,"customInspect")||s.customInspect;if("boolean"!=typeof l&&"symbol"!==l)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(V(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(V(s,"numericSeparator")&&"boolean"!=typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var m=s.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return J(t,s);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var w=String(t);return m?R(t,w):w}if("bigint"==typeof t){var x=String(t)+"n";return m?R(t,x):x}var C=void 0===s.depth?5:s.depth;if(void 0===r&&(r=0),r>=C&&C>0&&"object"==typeof t)return z(t)?"[Array]":"[Object]";var O=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=S.call(Array(e.indent+1)," ")}return{base:n,prev:S.call(Array(t+1),n)}}(s,r);if(void 0===o)o=[];else if(H(o,t)>=0)return"[Circular]";function D(t,n,a){if(n&&(o=A.call(o)).push(n),a){var i={depth:s.depth};return V(s,"quoteStyle")&&(i.quoteStyle=s.quoteStyle),e(t,i,r+1,o)}return e(t,s,r+1,o)}if("function"==typeof t&&!U(t)){var $=function(e){if(e.name)return e.name;var t=y.call(g.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),K=X(t,D);return"[Function"+($?": "+$:" (anonymous)")+"]"+(K.length>0?" { "+S.call(K,", ")+" }":"")}if(q(t)){var ee=T?b.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):j.call(t);return"object"!=typeof t||T?ee:G(ee)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var te="<"+E.call(String(t.nodeName)),ne=t.attributes||[],re=0;re"}if(z(t)){if(0===t.length)return"[]";var oe=X(t,D);return O&&!function(e){for(var t=0;t=0)return!1;return!0}(oe)?"["+Q(oe,O)+"]":"[ "+S.call(oe,", ")+" ]"}if(function(e){return!("[object Error]"!==W(e)||I&&"object"==typeof e&&I in e)}(t)){var ae=X(t,D);return"cause"in Error.prototype||!("cause"in t)||N.call(t,"cause")?0===ae.length?"["+String(t)+"]":"{ ["+String(t)+"] "+S.call(ae,", ")+" }":"{ ["+String(t)+"] "+S.call(_.call("[cause]: "+D(t.cause),ae),", ")+" }"}if("object"==typeof t&&l){if(L&&"function"==typeof t[L]&&M)return M(t,{depth:C-r});if("symbol"!==l&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!a||!e||"object"!=typeof e)return!1;try{a.call(e);try{u.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var ie=[];return i&&i.call(t,(function(e,n){ie.push(D(n,t,!0)+" => "+D(e,t))})),Y("Map",a.call(t),ie,O)}if(function(e){if(!u||!e||"object"!=typeof e)return!1;try{u.call(e);try{a.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var se=[];return c&&c.call(t,(function(e){se.push(D(e,t))})),Y("Set",u.call(t),se,O)}if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{p.call(e,p);try{f.call(e,f)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Z("WeakMap");if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Z("WeakSet");if(function(e){if(!h||!e||"object"!=typeof e)return!1;try{return h.call(e),!0}catch(e){}return!1}(t))return Z("WeakRef");if(function(e){return!("[object Number]"!==W(e)||I&&"object"==typeof e&&I in e)}(t))return G(D(Number(t)));if(function(e){if(!e||"object"!=typeof e||!k)return!1;try{return k.call(e),!0}catch(e){}return!1}(t))return G(D(k.call(t)));if(function(e){return!("[object Boolean]"!==W(e)||I&&"object"==typeof e&&I in e)}(t))return G(d.call(t));if(function(e){return!("[object String]"!==W(e)||I&&"object"==typeof e&&I in e)}(t))return G(D(String(t)));if(!function(e){return!("[object Date]"!==W(e)||I&&"object"==typeof e&&I in e)}(t)&&!U(t)){var le=X(t,D),ue=P?P(t)===Object.prototype:t instanceof Object||t.constructor===Object,ce=t instanceof Object?"":"null prototype",pe=!ue&&I&&Object(t)===t&&I in t?v.call(W(t),8,-1):ce?"Object":"",fe=(ue||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(pe||ce?"["+S.call(_.call([],pe||[],ce||[]),": ")+"] ":"");return 0===le.length?fe+"{}":O?fe+"{"+Q(le,O)+"}":fe+"{ "+S.call(le,", ")+" }"}return String(t)};var $=Object.prototype.hasOwnProperty||function(e){return e in this};function V(e,t){return $.call(e,t)}function W(e){return m.call(e)}function H(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return J(v.call(e,0,t.maxStringLength),t)+r}return B(b.call(b.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,K),"single",t)}function K(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+w.call(t.toString(16))}function G(e){return"Object("+e+")"}function Z(e){return e+" { ? }"}function Y(e,t,n,r){return e+" ("+t+") {"+(r?Q(n,r):S.call(n,", "))+"}"}function Q(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+S.call(e,","+n)+"\n"+t.prev}function X(e,t){var n=z(e),r=[];if(n){r.length=e.length;for(var o=0;o{var t,n,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:o}catch(e){t=o}try{n="function"==typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var s,l=[],u=!1,c=-1;function p(){u&&s&&(u=!1,s.length?l=s.concat(l):c=-1,l.length&&f())}function f(){if(!u){var e=i(p);u=!0;for(var t=l.length;t;){for(s=l,l=[];++c1)for(var n=1;n{"use strict";var r=n(50414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},55798:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},80129:(e,t,n)=>{"use strict";var r=n(58261),o=n(55235),a=n(55798);e.exports={formats:a,parse:o,stringify:r}},55235:(e,t,n)=>{"use strict";var r=n(12769),o=Object.prototype.hasOwnProperty,a=Array.isArray,i={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},s=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},l=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},u=function(e,t,n,r){if(e){var a=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,s=n.depth>0&&/(\[[^[\]]*])/.exec(a),u=s?a.slice(0,s.index):a,c=[];if(u){if(!n.plainObjects&&o.call(Object.prototype,u)&&!n.allowPrototypes)return;c.push(u)}for(var p=0;n.depth>0&&null!==(s=i.exec(a))&&p=0;--a){var i,s=e[a];if("[]"===s&&n.parseArrays)i=[].concat(o);else{i=n.plainObjects?Object.create(null):{};var u="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,c=parseInt(u,10);n.parseArrays||""!==u?!isNaN(c)&&s!==u&&String(c)===u&&c>=0&&n.parseArrays&&c<=n.arrayLimit?(i=[])[c]=o:"__proto__"!==u&&(i[u]=o):i={0:o}}o=i}return o}(c,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?i.charset:e.charset;return{allowDots:void 0===e.allowDots?i.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:i.comma,decoder:"function"==typeof e.decoder?e.decoder:i.decoder,delimiter:"string"==typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:i.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:i.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var c="string"==typeof e?function(e,t){var n,u={},c=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,p=t.parameterLimit===1/0?void 0:t.parameterLimit,f=c.split(t.delimiter,p),h=-1,d=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(g=a(g)?[g]:g),o.call(u,m)?u[m]=r.combine(u[m],g):u[m]=g}return u}(e,n):e,p=n.plainObjects?Object.create(null):{},f=Object.keys(c),h=0;h{"use strict";var r=n(37478),o=n(12769),a=n(55798),i=Object.prototype.hasOwnProperty,s={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},l=Array.isArray,u=String.prototype.split,c=Array.prototype.push,p=function(e,t){c.apply(e,l(t)?t:[t])},f=Date.prototype.toISOString,h=a.default,d={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:o.encode,encodeValuesOnly:!1,format:h,formatter:a.formatters[h],indices:!1,serializeDate:function(e){return f.call(e)},skipNulls:!1,strictNullHandling:!1},m={},g=function e(t,n,a,i,s,c,f,h,g,y,v,b,w,E,x,_){for(var S,A=t,C=_,k=0,O=!1;void 0!==(C=C.get(m))&&!O;){var j=C.get(t);if(k+=1,void 0!==j){if(j===k)throw new RangeError("Cyclic object value");O=!0}void 0===C.get(m)&&(k=0)}if("function"==typeof h?A=h(n,A):A instanceof Date?A=v(A):"comma"===a&&l(A)&&(A=o.maybeMap(A,(function(e){return e instanceof Date?v(e):e}))),null===A){if(s)return f&&!E?f(n,d.encoder,x,"key",b):n;A=""}if("string"==typeof(S=A)||"number"==typeof S||"boolean"==typeof S||"symbol"==typeof S||"bigint"==typeof S||o.isBuffer(A)){if(f){var T=E?n:f(n,d.encoder,x,"key",b);if("comma"===a&&E){for(var I=u.call(String(A),","),N="",P=0;P0?A.join(",")||null:void 0}];else if(l(h))R=h;else{var D=Object.keys(A);R=g?D.sort(g):D}for(var L=i&&l(A)&&1===A.length?n+"[]":n,B=0;B0?E+w:""}},12769:(e,t,n)=>{"use strict";var r=n(55798),o=Object.prototype.hasOwnProperty,a=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),s=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var r=[],o=0;o=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122||a===r.RFC1738&&(40===c||41===c)?l+=s.charAt(u):c<128?l+=i[c]:c<2048?l+=i[192|c>>6]+i[128|63&c]:c<55296||c>=57344?l+=i[224|c>>12]+i[128|c>>6&63]+i[128|63&c]:(u+=1,c=65536+((1023&c)<<10|1023&s.charCodeAt(u)),l+=i[240|c>>18]+i[128|c>>12&63]+i[128|c>>6&63]+i[128|63&c])}return l},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(a(e)){for(var n=[],r=0;r{"use strict";function t(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,n,r,o){n=n||"&",r=r||"=";var a={};if("string"!=typeof e||0===e.length)return a;var i=/\+/g;e=e.split(n);var s=1e3;o&&"number"==typeof o.maxKeys&&(s=o.maxKeys);var l=e.length;s>0&&l>s&&(l=s);for(var u=0;u=0?(c=d.substr(0,m),p=d.substr(m+1)):(c=d,p=""),f=decodeURIComponent(c),h=decodeURIComponent(p),t(a,f)?Array.isArray(a[f])?a[f].push(h):a[f]=[a[f],h]:a[f]=h}return a}},12361:e=>{"use strict";var t=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,n,r,o){return n=n||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(o){var a=encodeURIComponent(t(o))+r;return Array.isArray(e[o])?e[o].map((function(e){return a+encodeURIComponent(t(e))})).join(n):a+encodeURIComponent(t(e[o]))})).join(n):o?encodeURIComponent(t(o))+r+encodeURIComponent(t(e)):""}},17673:(e,t,n)=>{"use strict";t.decode=t.parse=n(62587),t.encode=t.stringify=n(12361)},57129:(e,t)=>{"use strict";var n=Object.prototype.hasOwnProperty;function r(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(e){return null}}function o(e){try{return encodeURIComponent(e)}catch(e){return null}}t.stringify=function(e,t){t=t||"";var r,a,i=[];for(a in"string"!=typeof t&&(t="?"),e)if(n.call(e,a)){if((r=e[a])||null!=r&&!isNaN(r)||(r=""),a=o(a),r=o(r),null===a||null===r)continue;i.push(a+"="+r)}return i.length?t+i.join("&"):""},t.parse=function(e){for(var t,n=/([^=?#&]+)=?([^&]*)/g,o={};t=n.exec(e);){var a=r(t[1]),i=r(t[2]);null===a||null===i||a in o||(o[a]=i)}return o}},14419:(e,t,n)=>{const r=n(60697),o=n(69450),a=r.types;e.exports=class e{constructor(e,t){if(this._setDefaults(e),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,e=e.source;else{if("string"!=typeof e)throw new Error("Expected a regexp or string");this.ignoreCase=t&&-1!==t.indexOf("i"),this.multiline=t&&-1!==t.indexOf("m")}this.tokens=r(e)}_setDefaults(t){this.max=null!=t.max?t.max:null!=e.prototype.max?e.prototype.max:100,this.defaultRange=t.defaultRange?t.defaultRange:this.defaultRange.clone(),t.randInt&&(this.randInt=t.randInt)}gen(){return this._gen(this.tokens,[])}_gen(e,t){var n,r,o,i,s;switch(e.type){case a.ROOT:case a.GROUP:if(e.followedBy||e.notFollowedBy)return"";for(e.remember&&void 0===e.groupNumber&&(e.groupNumber=t.push(null)-1),r="",i=0,s=(n=e.options?this._randSelect(e.options):e.stack).length;i{"use strict";var r=n(34155),o=65536,a=4294967295;var i=n(89509).Buffer,s=n.g.crypto||n.g.msCrypto;s&&s.getRandomValues?e.exports=function(e,t){if(e>a)throw new RangeError("requested too many random bytes");var n=i.allocUnsafe(e);if(e>0)if(e>o)for(var l=0;l{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CopyToClipboard=void 0;var o=s(n(67294)),a=s(n(20640)),i=["text","onCopy","options","children"];function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e,t){for(var n=0;n{"use strict";var r=n(74300).CopyToClipboard;r.CopyToClipboard=r,e.exports=r},53441:(e,t,n)=>{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.DebounceInput=void 0;var o=s(n(67294)),a=s(n(91296)),i=["element","onChange","value","minLength","debounceTimeout","forceNotifyByEnter","forceNotifyOnBlur","onKeyDown","onBlur","inputRef"];function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=r?t.notify(e):n.length>o.length&&t.notify(c(c({},e),{},{target:c(c({},e.target),{},{value:""})}))}))})),g(d(t),"onKeyDown",(function(e){"Enter"===e.key&&t.forceNotify(e);var n=t.props.onKeyDown;n&&(e.persist(),n(e))})),g(d(t),"onBlur",(function(e){t.forceNotify(e);var n=t.props.onBlur;n&&(e.persist(),n(e))})),g(d(t),"createNotifier",(function(e){if(e<0)t.notify=function(){return null};else if(0===e)t.notify=t.doNotify;else{var n=(0,a.default)((function(e){t.isDebouncing=!1,t.doNotify(e)}),e);t.notify=function(e){t.isDebouncing=!0,n(e)},t.flush=function(){return n.flush()},t.cancel=function(){t.isDebouncing=!1,n.cancel()}}})),g(d(t),"doNotify",(function(){t.props.onChange.apply(void 0,arguments)})),g(d(t),"forceNotify",(function(e){var n=t.props.debounceTimeout;if(t.isDebouncing||!(n>0)){t.cancel&&t.cancel();var r=t.state.value,o=t.props.minLength;r.length>=o?t.doNotify(e):t.doNotify(c(c({},e),{},{target:c(c({},e.target),{},{value:r})}))}})),t.isDebouncing=!1,t.state={value:void 0===e.value||null===e.value?"":e.value};var n=t.props.debounceTimeout;return t.createNotifier(n),t}return t=u,(n=[{key:"componentDidUpdate",value:function(e){if(!this.isDebouncing){var t=this.props,n=t.value,r=t.debounceTimeout,o=e.debounceTimeout,a=e.value,i=this.state.value;void 0!==n&&a!==n&&i!==n&&this.setState({value:n}),r!==o&&this.createNotifier(r)}}},{key:"componentWillUnmount",value:function(){this.flush&&this.flush()}},{key:"render",value:function(){var e,t,n=this.props,r=n.element,a=(n.onChange,n.value,n.minLength,n.debounceTimeout,n.forceNotifyByEnter),s=n.forceNotifyOnBlur,u=n.onKeyDown,p=n.onBlur,f=n.inputRef,h=l(n,i),d=this.state.value;e=a?{onKeyDown:this.onKeyDown}:u?{onKeyDown:u}:{},t=s?{onBlur:this.onBlur}:p?{onBlur:p}:{};var m=f?{ref:f}:{};return o.default.createElement(r,c(c(c(c({},h),{},{onChange:this.onChange,value:d},e),t),m))}}])&&p(t.prototype,n),r&&p(t,r),Object.defineProperty(t,"prototype",{writable:!1}),u}(o.default.PureComponent);t.DebounceInput=y,g(y,"defaultProps",{element:"input",type:"text",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},775:(e,t,n)=>{"use strict";var r=n(53441).DebounceInput;r.DebounceInput=r,e.exports=r},64448:(e,t,n)=>{"use strict";var r=n(67294),o=n(27418),a=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n