diff --git a/package.json b/package.json index ee490e8..7d297bf 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,19 @@ "name": "@api.global/typedserver", "version": "3.0.29", "description": "A TypeScript-based project for easy serving of static files with support for live reloading, compression, and typed requests.", - "main": "dist_ts/index.js", - "typings": "dist_ts/index.d.ts", "type": "module", + "exports": { + ".": "./dist_ts/index.js", + "./ts": "./dist_ts/index.js", + "./ts_web_inject": "./dist_ts_web_inject/index.js", + "./ts_web_serviceworker": "./dist_web_serviceworker", + "./ts_web_serviceworker_client": "./dist_web_serviceworker_client" + }, "scripts": { "test": "npm run build && tstest test/", - "build": "tsbuild --web --allowimplicitany --skiplibcheck && tsbundle --from ./ts_web/index.ts --to ./dist_ts_web/bundle.js", - "buildDocs": "tsdoc" + "build": "tsbuild tsfolders --web --allowimplicitany --skiplibcheck && tsbundle --from ./ts_web/index.ts --to ./dist_ts_web/bundle.js", + "interfaces": "tsbuild interfaces --web --allowimplicitany --skiplibcheck", + "docs": "tsdoc aidoc" }, "repository": { "type": "git", @@ -49,11 +55,12 @@ ], "homepage": "https://github.com/pushrocks/easyserve", "dependencies": { - "@api.global/typedrequest": "^3.0.21", - "@api.global/typedrequest-interfaces": "^3.0.18", + "@api.global/typedrequest": "^3.0.23", + "@api.global/typedrequest-interfaces": "^3.0.19", "@api.global/typedsocket": "^3.0.1", + "@design.estate/dees-comms": "^1.0.24", "@push.rocks/lik": "^6.0.15", - "@push.rocks/smartchok": "^1.0.33", + "@push.rocks/smartchok": "^1.0.34", "@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartenv": "^5.0.12", "@push.rocks/smartfeed": "^1.0.11", @@ -64,13 +71,15 @@ "@push.rocks/smartmanifest": "^2.0.2", "@push.rocks/smartmime": "^1.0.5", "@push.rocks/smartopen": "^2.0.0", - "@push.rocks/smartpath": "^5.0.14", + "@push.rocks/smartpath": "^5.0.18", "@push.rocks/smartpromise": "^4.0.2", "@push.rocks/smartrequest": "^2.0.22", "@push.rocks/smartrx": "^3.0.7", "@push.rocks/smartsitemap": "^2.0.3", - "@push.rocks/smartstream": "^3.0.34", + "@push.rocks/smartstream": "^3.0.35", "@push.rocks/smarttime": "^4.0.6", + "@push.rocks/taskbuffer": "^3.1.7", + "@push.rocks/webrequest": "^3.0.37", "@push.rocks/webstore": "^2.0.14", "@tsclass/tsclass": "^4.0.54", "@types/express": "^4.17.21", @@ -81,12 +90,12 @@ "lit": "^3.1.3" }, "devDependencies": { - "@git.zone/tsbuild": "^2.1.72", + "@git.zone/tsbuild": "^2.1.75", "@git.zone/tsbundle": "^2.0.15", "@git.zone/tsrun": "^1.2.44", "@git.zone/tstest": "^1.0.90", "@push.rocks/tapbundle": "^5.0.23", - "@types/node": "^20.12.7" + "@types/node": "^20.12.11" }, "private": false, "browserslist": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 636b9a3..240ff25 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,20 +6,23 @@ settings: dependencies: '@api.global/typedrequest': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.23 + version: 3.0.23 '@api.global/typedrequest-interfaces': - specifier: ^3.0.18 - version: 3.0.18 + specifier: ^3.0.19 + version: 3.0.19 '@api.global/typedsocket': specifier: ^3.0.1 version: 3.0.1 + '@design.estate/dees-comms': + specifier: ^1.0.24 + version: 1.0.24 '@push.rocks/lik': specifier: ^6.0.15 version: 6.0.15 '@push.rocks/smartchok': - specifier: ^1.0.33 - version: 1.0.33 + specifier: ^1.0.34 + version: 1.0.34 '@push.rocks/smartdelay': specifier: ^3.0.5 version: 3.0.5 @@ -51,8 +54,8 @@ dependencies: specifier: ^2.0.0 version: 2.0.0 '@push.rocks/smartpath': - specifier: ^5.0.14 - version: 5.0.14 + specifier: ^5.0.18 + version: 5.0.18 '@push.rocks/smartpromise': specifier: ^4.0.2 version: 4.0.3 @@ -66,11 +69,17 @@ dependencies: specifier: ^2.0.3 version: 2.0.3 '@push.rocks/smartstream': - specifier: ^3.0.34 - version: 3.0.34 + specifier: ^3.0.35 + version: 3.0.35 '@push.rocks/smarttime': specifier: ^4.0.6 version: 4.0.6 + '@push.rocks/taskbuffer': + specifier: ^3.1.7 + version: 3.1.7 + '@push.rocks/webrequest': + specifier: ^3.0.37 + version: 3.0.37 '@push.rocks/webstore': specifier: ^2.0.14 version: 2.0.14 @@ -98,49 +107,49 @@ dependencies: devDependencies: '@git.zone/tsbuild': - specifier: ^2.1.72 - version: 2.1.72 + specifier: ^2.1.75 + version: 2.1.75 '@git.zone/tsbundle': specifier: ^2.0.15 version: 2.0.15 '@git.zone/tsrun': specifier: ^1.2.44 - version: 1.2.46(@types/node@20.12.7) + version: 1.2.46(@types/node@20.12.11) '@git.zone/tstest': specifier: ^1.0.90 - version: 1.0.90(@types/node@20.12.7) + version: 1.0.90(@types/node@20.12.11) '@push.rocks/tapbundle': specifier: ^5.0.23 version: 5.0.23 '@types/node': - specifier: ^20.12.7 - version: 20.12.7 + specifier: ^20.12.11 + version: 20.12.11 packages: - /@api.global/typedrequest-interfaces@3.0.18: - resolution: {integrity: sha512-O/AdHnk9NDcBfb/Qcpi3Bq/7I6uAJHXfIT5peeKODvLUYysmuxG/c3t9NWQvfSOXQUKnVKb0WrCGjraOL7Pyww==} + /@api.global/typedrequest-interfaces@3.0.19: + resolution: {integrity: sha512-uuHUXJeOy/inWSDrwD0Cwax2rovpxYllDhM2RWh+6mVpQuNmZ3uw6IVg6dA2G1rOe24Ebs+Y9SzEogo+jYN7vw==} - /@api.global/typedrequest@3.0.21: - resolution: {integrity: sha512-iZ0+EzdaeRI6ExlN32RLM8YENCWzVOj26qaSVT5w1o0HbKH/xOOLCohsK2VhwI0nKVnOK4A6AfZV4WwqueIrrw==} + /@api.global/typedrequest@3.0.23: + resolution: {integrity: sha512-F2ph3rLwdVjCYXOvM0xfqD2aLQFL5oQ/n6zvuiunoHcXwJJOlf6VGWMyQIhqRrfUFbsrsqlMrCAqS1j9hYIiaw==} dependencies: - '@api.global/typedrequest-interfaces': 3.0.18 + '@api.global/typedrequest-interfaces': 3.0.19 '@push.rocks/isounique': 1.0.5 '@push.rocks/lik': 6.0.15 - '@push.rocks/smartbuffer': 3.0.2 + '@push.rocks/smartbuffer': 3.0.4 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartpromise': 4.0.3 '@push.rocks/webrequest': 3.0.37 '@push.rocks/webstream': 1.0.8 - /@api.global/typedserver@3.0.27: - resolution: {integrity: sha512-iDQcoVy3CL5NkJa6xHb+EXNxxGtOscl7U163ARHasMHcrab4Nx5Px576G1ZlG6faeRpA1UKlxaT/QepfomLIbw==} + /@api.global/typedserver@3.0.29: + resolution: {integrity: sha512-z6+Ch2NTWstZ9gJr1ArkPu5DgsE83QrrZ3kH0kxdonxU+phR8fGQeK/49jAmQ8TK+8TKkVKtH4jf8T41EX9p6A==} dependencies: - '@api.global/typedrequest': 3.0.21 - '@api.global/typedrequest-interfaces': 3.0.18 + '@api.global/typedrequest': 3.0.23 + '@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedsocket': 3.0.1 '@push.rocks/lik': 6.0.15 - '@push.rocks/smartchok': 1.0.33 + '@push.rocks/smartchok': 1.0.34 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartenv': 5.0.12 '@push.rocks/smartfeed': 1.0.11 @@ -151,12 +160,12 @@ packages: '@push.rocks/smartmanifest': 2.0.2 '@push.rocks/smartmime': 1.0.6 '@push.rocks/smartopen': 2.0.0 - '@push.rocks/smartpath': 5.0.14 + '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartrequest': 2.0.22 '@push.rocks/smartrx': 3.0.7 '@push.rocks/smartsitemap': 2.0.3 - '@push.rocks/smartstream': 3.0.34 + '@push.rocks/smartstream': 3.0.35 '@push.rocks/smarttime': 4.0.6 '@push.rocks/webstore': 2.0.14 '@tsclass/tsclass': 4.0.54 @@ -174,12 +183,12 @@ packages: /@api.global/typedsocket@3.0.1: resolution: {integrity: sha512-xojiAVNXtHoxkpBo8U2HHJG8FrVXXuLvDNndSHXwx4C9VslUwDn5zSCI+PdBl8iAg+ZuBmKjqkpZZ9sL6DC5yQ==} dependencies: - '@api.global/typedrequest': 3.0.21 - '@api.global/typedrequest-interfaces': 3.0.18 + '@api.global/typedrequest': 3.0.23 + '@api.global/typedrequest-interfaces': 3.0.19 '@push.rocks/isohash': 2.0.1 '@push.rocks/smartjson': 5.0.19 '@push.rocks/smartrx': 3.0.7 - '@push.rocks/smartsocket': 2.0.25 + '@push.rocks/smartsocket': 2.0.27 '@push.rocks/smartstring': 4.0.15 '@push.rocks/smarturl': 3.0.7 transitivePeerDependencies: @@ -197,25 +206,32 @@ packages: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.2 + '@babel/highlight': 7.24.5 picocolors: 1.0.0 dev: true - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.5: + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} dev: true - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + /@babel/highlight@7.24.5: + resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 dev: true + /@babel/runtime@7.24.5: + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: false + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -223,6 +239,15 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true + /@design.estate/dees-comms@1.0.24: + resolution: {integrity: sha512-IQrTzQrga8gY17fblRdUmxvWJ64f+xpI9ebj1zYAIsypWYlCS7krREUwH/8iow5fze2FJ1t+gUdMCV1CGqdklg==} + dependencies: + '@api.global/typedrequest': 3.0.23 + '@api.global/typedrequest-interfaces': 3.0.19 + '@push.rocks/smartdelay': 3.0.5 + broadcast-channel: 3.7.0 + dev: false + /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -433,21 +458,21 @@ packages: /@esm-bundle/chai@4.3.4-fix.0: resolution: {integrity: sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw==} dependencies: - '@types/chai': 4.3.14 + '@types/chai': 4.3.16 dev: true - /@git.zone/tsbuild@2.1.72: - resolution: {integrity: sha512-rVWM98chNjkt8pXdF5knGErZjM3GPnRXZYHVGECptxNvvhTol2DliM1OP8k3p3X5UOwEPV2sQVe//XzXs3BcUw==} + /@git.zone/tsbuild@2.1.75: + resolution: {integrity: sha512-UiJ0LrZ+kYR/lHUMcziQXri5nNHLXDJeSgFy2Xxdw0shzBT1/pqwyQGpAQbvfde1HrTgslU+ZG/hmW2/8XUO0Q==} hasBin: true dependencies: '@push.rocks/early': 4.0.4 - '@push.rocks/smartcli': 4.0.8 + '@push.rocks/smartcli': 4.0.10 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartfile': 11.0.14 '@push.rocks/smartlog': 3.0.3 - '@push.rocks/smartpath': 5.0.14 + '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.0.3 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /@git.zone/tsbundle@2.0.15: @@ -455,12 +480,12 @@ packages: hasBin: true dependencies: '@push.rocks/early': 4.0.4 - '@push.rocks/smartcli': 4.0.8 + '@push.rocks/smartcli': 4.0.10 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartfile': 11.0.14 '@push.rocks/smartlog': 3.0.3 - '@push.rocks/smartlog-destination-local': 9.0.1 - '@push.rocks/smartpath': 5.0.14 + '@push.rocks/smartlog-destination-local': 9.0.2 + '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartspawn': 3.0.2 '@types/html-minifier': 4.0.5 @@ -471,13 +496,13 @@ packages: - supports-color dev: true - /@git.zone/tsrun@1.2.46(@types/node@20.12.7): + /@git.zone/tsrun@1.2.46(@types/node@20.12.11): resolution: {integrity: sha512-8miFVBle9Mnjx+uPGI/P+EuWcIOXWjBAkdjN5IYbdp5Ytt4xQODCLh4JSnC9h56UeU1nUxCAxZeJs2e9TXrivA==} hasBin: true dependencies: '@push.rocks/smartfile': 10.0.41 - '@push.rocks/smartshell': 3.0.3 - ts-node: 10.9.1(@types/node@20.12.7)(typescript@5.1.6) + '@push.rocks/smartshell': 3.0.5 + ts-node: 10.9.2(@types/node@20.12.11)(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - '@swc/core' @@ -485,13 +510,13 @@ packages: - '@types/node' dev: true - /@git.zone/tstest@1.0.90(@types/node@20.12.7): + /@git.zone/tstest@1.0.90(@types/node@20.12.11): resolution: {integrity: sha512-McytXK46GiReEps7wHWW6zOHYCFF4sywjj6auHjhGqzOogA2Wju1YtZRL+o+OAUb61kQxNFRras6Xg/4Zth0Bw==} hasBin: true dependencies: - '@api.global/typedserver': 3.0.27 + '@api.global/typedserver': 3.0.29 '@git.zone/tsbundle': 2.0.15 - '@git.zone/tsrun': 1.2.46(@types/node@20.12.7) + '@git.zone/tsrun': 1.2.46(@types/node@20.12.11) '@push.rocks/consolecolor': 2.0.2 '@push.rocks/smartbrowser': 2.0.6 '@push.rocks/smartdelay': 3.0.5 @@ -502,7 +527,7 @@ packages: '@push.rocks/tapbundle': 5.0.23 '@types/ws': 8.5.10 figures: 6.1.0 - ws: 8.16.0 + ws: 8.17.0 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -524,8 +549,8 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: true @@ -536,7 +561,7 @@ packages: /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: true @@ -587,7 +612,7 @@ packages: /@open-wc/semantic-dom-diff@0.20.1: resolution: {integrity: sha512-mPF/RPT2TU7Dw41LEDdaeP6eyTOWBD4z0+AHP4/d0SbgcfJZVRymlIB6DQmtz0fd2CImIS9kszaMmwMt92HBPA==} dependencies: - '@types/chai': 4.3.14 + '@types/chai': 4.3.16 '@web/test-runner-commands': 0.9.0 transitivePeerDependencies: - bufferutil @@ -595,8 +620,8 @@ packages: - utf-8-validate dev: true - /@open-wc/testing-helpers@3.0.0: - resolution: {integrity: sha512-zkR39b7ljH/TqZgzBB9ekHKg1OLvR/JQYCEaW76V0RuASfV/vkgx2xfUQNe8DlEOLOetRZ3agFqssEREF45ClA==} + /@open-wc/testing-helpers@3.0.1: + resolution: {integrity: sha512-hyNysSatbgT2FNxHJsS3rGKcLEo6+HwDFu1UQL6jcSQUabp/tj3PyX7UnXL3H5YGv0lJArdYLSnvjLnjn3O2fw==} dependencies: '@open-wc/scoped-elements': 3.0.5 lit: 3.1.3 @@ -608,7 +633,7 @@ packages: dependencies: '@esm-bundle/chai': 4.3.4-fix.0 '@open-wc/semantic-dom-diff': 0.20.1 - '@open-wc/testing-helpers': 3.0.0 + '@open-wc/testing-helpers': 3.0.1 '@types/chai-dom': 1.11.3 '@types/sinon-chai': 3.2.12 chai-a11y-axe: 1.5.0 @@ -618,6 +643,18 @@ packages: - utf-8-validate dev: true + /@pdf-lib/standard-fonts@1.0.0: + resolution: {integrity: sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==} + dependencies: + pako: 1.0.11 + dev: true + + /@pdf-lib/upng@1.0.1: + resolution: {integrity: sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==} + dependencies: + pako: 1.0.11 + dev: true + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -662,9 +699,9 @@ packages: resolution: {integrity: sha512-Ne+KCVhV/DROc1rHRRw59K6h0+LpQAK9fdOUtgDZ7laLPmB/tmnbUh3IuRDNcIY1iVA9pydoobwjnTjVgio9eQ==} dependencies: '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartpdf': 3.0.17 + '@push.rocks/smartpdf': 3.1.6 '@push.rocks/smartpuppeteer': 2.0.2 - '@push.rocks/smartunique': 3.0.8 + '@push.rocks/smartunique': 3.0.9 transitivePeerDependencies: - bufferutil - encoding @@ -672,8 +709,8 @@ packages: - utf-8-validate dev: true - /@push.rocks/smartbuffer@3.0.2: - resolution: {integrity: sha512-xhhiA62hITxkTXkHsygvRhb8Malgmq9fdCl/kQp7bYC51CQGWy6dxwQmdJYRsdSRMJX9kj4Gv7WHtnBtEXW1Gg==} + /@push.rocks/smartbuffer@3.0.4: + resolution: {integrity: sha512-TLfhx/JD61YC8XGO9TI6Ux6US38R14HaIM84QT8hZZod8axfXrg+h8xA8tMUBpSV8PXsQy9LzxmOq0Il1fmDXw==} dependencies: uint8array-extras: 1.1.0 @@ -686,16 +723,16 @@ packages: '@pushrocks/smartpromise': 3.1.10 '@pushrocks/smarttime': 4.0.1 - /@push.rocks/smartchok@1.0.33: - resolution: {integrity: sha512-6mDqTkNOR5Z0H14Ujmq3ACUZHzeUBNE8EdoLDrmkPzRVE9HP3WcCnDu009Fy0LVKHYHAUirZ0LzCi8zHN84RtA==} + /@push.rocks/smartchok@1.0.34: + resolution: {integrity: sha512-YzFjUbyzYREFDc4khcySObLzB21R98yIRFvpu3cB2kRmhEfVD2IEO6Wzp4aWFMhkq5A/dDBJRNmRPtgMVGNqKA==} dependencies: '@push.rocks/lik': 6.0.15 '@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartrx': 3.0.7 '@tempfix/watcher': 2.3.0 - /@push.rocks/smartcli@4.0.8: - resolution: {integrity: sha512-B4F3nqq7ko8tev1wxGdFnh/zSDDP8Q9LpEOb3wTf0jayyhYetFQ7n6zi4J9fhXYBKPkJSyQEBoOfRmgJyeLHkA==} + /@push.rocks/smartcli@4.0.10: + resolution: {integrity: sha512-rnjLwibIMuikK+5I3w/WtN2twrXbHhq98bsApXFjzULXbEMWDyHqcIJ+yAhZvOXmtqEwejEALGNx6bUgn5pvvQ==} dependencies: '@push.rocks/lik': 6.0.15 '@push.rocks/smartlog': 3.0.3 @@ -751,15 +788,15 @@ packages: '@push.rocks/smarthash': 3.0.4 '@push.rocks/smartjson': 5.0.19 '@push.rocks/smartmime': 1.0.6 - '@push.rocks/smartpath': 5.0.14 + '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartrequest': 2.0.22 '@push.rocks/smartstream': 2.0.8 - '@types/fs-extra': 11.0.3 + '@types/fs-extra': 11.0.4 '@types/glob': 8.1.0 - '@types/js-yaml': 4.0.8 - fs-extra: 11.1.1 - glob: 10.3.10 + '@types/js-yaml': 4.0.9 + fs-extra: 11.2.0 + glob: 10.3.14 js-yaml: 4.1.0 dev: true @@ -772,15 +809,15 @@ packages: '@push.rocks/smarthash': 3.0.4 '@push.rocks/smartjson': 5.0.19 '@push.rocks/smartmime': 1.0.6 - '@push.rocks/smartpath': 5.0.14 + '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartrequest': 2.0.22 - '@push.rocks/smartstream': 3.0.34 + '@push.rocks/smartstream': 3.0.35 '@types/fs-extra': 11.0.4 '@types/glob': 8.1.0 '@types/js-yaml': 4.0.9 fs-extra: 11.2.0 - glob: 10.3.12 + glob: 10.3.14 js-yaml: 4.1.0 /@push.rocks/smarthash@3.0.4: @@ -788,7 +825,7 @@ packages: dependencies: '@push.rocks/smartjson': 5.0.19 '@push.rocks/smartpromise': 4.0.3 - '@types/through2': 2.0.40 + '@types/through2': 2.0.41 through2: 4.0.2 /@push.rocks/smartjson@5.0.19: @@ -804,12 +841,12 @@ packages: dependencies: '@pushrocks/smartlog-interfaces': 2.0.23 - /@push.rocks/smartlog-destination-local@9.0.1: - resolution: {integrity: sha512-JCX73z4ORTI7XEMmWFYp2GkWwpPgXDZzIQBTrBOlo6U+EAERWZhZDpLfVK+qKuZBQ86E0gqTlcUaOl3k1vp1GA==} + /@push.rocks/smartlog-destination-local@9.0.2: + resolution: {integrity: sha512-htzIY+4+hU61Z2J4Oz+IHnAB3RGe+fpS0VKCKnAoppZqzMWnJ3UOgYIyr4djDBy2WtgpXV/16KdisKrOmwuuvw==} dependencies: - '@pushrocks/consolecolor': 2.0.1 - '@pushrocks/smartlog-interfaces': 3.0.0 - '@pushrocks/smartpromise': 4.0.2 + '@push.rocks/consolecolor': 2.0.2 + '@push.rocks/smartlog-interfaces': 3.0.0 + '@push.rocks/smartpromise': 4.0.3 dev: true /@push.rocks/smartlog-interfaces@3.0.0: @@ -834,7 +871,7 @@ packages: /@push.rocks/smartmime@1.0.6: resolution: {integrity: sha512-PHd+I4UcsnOATNg8wjDsSAmmJ4CwQFrQCNzd0HSJMs4ZpiK3Ya91almd6GLpDPU370U4HFh4FaPF4eEAI6vkJQ==} dependencies: - '@types/mime-types': 2.1.3 + '@types/mime-types': 2.1.4 mime-types: 2.1.35 /@push.rocks/smartnetwork@3.0.2: @@ -846,7 +883,7 @@ packages: '@types/default-gateway': 3.0.1 isopen: 1.3.0 public-ip: 6.0.2 - systeminformation: 5.22.7 + systeminformation: 5.22.8 dev: true /@push.rocks/smartopen@2.0.0: @@ -859,27 +896,29 @@ packages: deprecated: deprecated in favour of @push.rocks/smartobject dependencies: '@push.rocks/smartpromise': 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.4 dev: true - /@push.rocks/smartpath@5.0.14: - resolution: {integrity: sha512-/FwGJ7+y1il6joO+bTc45X8z8h/UKUyZqNSvrKMA69zHFn8dl2552OApVcNphuAxhid4OUAOVSnJFVywOdRYyw==} + /@push.rocks/smartpath@5.0.18: + resolution: {integrity: sha512-kIyRTlOoeEth5b4Qp8KPUxNOGNdvhb2aD0hbHfF3oGTQ0xnDdgB1l03/4bIoapHG48OrTgh4uQ5tUorykgdOzw==} - /@push.rocks/smartpdf@3.0.17: - resolution: {integrity: sha512-oymxajeDnwMzg20Ru7GkpYHM4KtNyTrvxt+AwXD3EjzOaJnFtevszDpCdcCruBik8BcG2XiKJIyY5PprPALvaA==} + /@push.rocks/smartpdf@3.1.6: + resolution: {integrity: sha512-mnmqAKykgO10sF4hltQGhES9yoO7H5hoRKvqynPF5JsAK/YpdpdbAdn/KIKvlxoZD150LoCsj+RF3dqCucNoAA==} dependencies: + '@push.rocks/smartbuffer': 3.0.4 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartfile': 10.0.41 + '@push.rocks/smartfile': 11.0.14 '@push.rocks/smartnetwork': 3.0.2 - '@push.rocks/smartpath': 5.0.14 + '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartpuppeteer': 2.0.2 - '@push.rocks/smartunique': 3.0.8 + '@push.rocks/smartunique': 3.0.9 '@tsclass/tsclass': 4.0.54 '@types/express': 4.17.21 express: 4.19.2 - pdf-merger-js: 3.4.0 - pdf2json: 2.1.0 + pdf-lib: 1.17.1 + pdf2json: 3.0.5 + pdf2pic: 3.1.1 transitivePeerDependencies: - bufferutil - encoding @@ -918,17 +957,6 @@ packages: '@push.rocks/smartpromise': 4.0.3 rxjs: 7.8.1 - /@push.rocks/smartshell@3.0.3: - resolution: {integrity: sha512-S4RXI76ltPetdJ8Gv4HlnlhR/hXDV8QmSU7TdhLEe171ZzfouAyt9XZ4MFDCtjk3VQ4Mw+zz4mSDaACXP/QdlQ==} - dependencies: - '@pushrocks/smartdelay': 3.0.1 - '@pushrocks/smartexit': 1.0.20 - '@pushrocks/smartpromise': 4.0.2 - '@types/which': 3.0.1 - tree-kill: 1.2.2 - which: 3.0.1 - dev: true - /@push.rocks/smartshell@3.0.5: resolution: {integrity: sha512-kHh86kpkrXHM/xgftcFQ2psU+DJrINzbeD1gIKR/I6cEXjWyYfs+I6UnFMhY3Bcpx9FdTElpRy5qVsumWURQSw==} dependencies: @@ -947,14 +975,14 @@ packages: '@push.rocks/smartfeed': 1.0.11 '@push.rocks/smartxml': 1.0.8 '@push.rocks/smartyaml': 2.0.5 - '@push.rocks/webrequest': 3.0.34 + '@push.rocks/webrequest': 3.0.37 '@tsclass/tsclass': 4.0.54 - /@push.rocks/smartsocket@2.0.25: - resolution: {integrity: sha512-BctNBapzP5dIbh0Y5de5NJSrtrNZnc6PH5zejiKyDKanf4/w209K8UrM+MObB1uhuFpGaq9B6AvJMTToeHfSyA==} + /@push.rocks/smartsocket@2.0.27: + resolution: {integrity: sha512-planM3EkBvx/+guLLWHLBNnNp4mcWDwp1k9G0It0ul7IhdaBQsSWzKSQJxym3Bx2dypgA2UIeT3/hRvSa5Nqdw==} dependencies: - '@api.global/typedrequest-interfaces': 3.0.18 - '@api.global/typedserver': 3.0.27 + '@api.global/typedrequest-interfaces': 3.0.19 + '@api.global/typedserver': 3.0.29 '@push.rocks/isohash': 2.0.1 '@push.rocks/isounique': 1.0.5 '@push.rocks/lik': 6.0.15 @@ -989,18 +1017,19 @@ packages: dependencies: '@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartrx': 3.0.7 - '@types/from2': 2.3.4 - '@types/through2': 2.0.40 + '@types/from2': 2.3.5 + '@types/through2': 2.0.41 from2: 2.3.0 through2: 4.0.2 dev: true - /@push.rocks/smartstream@3.0.34: - resolution: {integrity: sha512-fiCcIlh3Ydduv7NAjmO5hrslZXzdJ3XQqC59WWnc3T3dqwedj7FoLjl1JfY8pWUJ0bwiikLLpKOTknJ1gSmKhA==} + /@push.rocks/smartstream@3.0.35: + resolution: {integrity: sha512-6mzM65OSVFym7Qz0MTsa4jusgXwJVibj+efw48sTTGEAdNklKasZQG7F/Gww3uDMQThAH9MMmZl12aXu48PXNA==} dependencies: '@push.rocks/lik': 6.0.15 '@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartrx': 3.0.7 + '@push.rocks/webstream': 1.0.8 /@push.rocks/smartstring@4.0.15: resolution: {integrity: sha512-NTNeOjWyg+aHtBTiQEyXamr7oTvYZ3wS1fudHo9ua7CLrykpK+i+RxFyJaLg1zB5x9xQF3NLEQecB14HPFX8Cg==} @@ -1020,18 +1049,17 @@ packages: '@push.rocks/lik': 6.0.15 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartpromise': 4.0.3 - croner: 7.0.4 - dayjs: 1.11.10 + croner: 7.0.7 + dayjs: 1.11.11 is-nan: 1.3.2 pretty-ms: 8.0.0 - /@push.rocks/smartunique@3.0.8: - resolution: {integrity: sha512-5IpG0d3iTwX0q3NoxtVibUla12/QG++xWebDaw31Wg65UTCdkPOJnhrMNeSrx52Ny/zZ23aR5H6iCTqRGR5A7A==} + /@push.rocks/smartunique@3.0.9: + resolution: {integrity: sha512-q6DYQgT7/dqdWi9HusvtWCjdsFzLFXY9LTtaZV6IYNJt6teZOonoygxTdNt9XLn6niBSbLYrHSKvJNTRH/uK+g==} dependencies: '@types/uuid': 9.0.8 nanoid: 4.0.2 uuid: 9.0.1 - dev: true /@push.rocks/smarturl@3.0.7: resolution: {integrity: sha512-nx4EWjQD9JeO7QVbOsxd1PFeDQYoSQOOOYCZ+r7QWXHLJG52iYzgvJDCQyX6p705HDkYMJWozW2ZzhR22qLKbw==} @@ -1039,12 +1067,12 @@ packages: /@push.rocks/smartxml@1.0.8: resolution: {integrity: sha512-idrPsBj9t6oxkLZJZgWtyZK6PnQ5BVDbBErk0UfGanXgSWJc+ZEKNYjVqr850+Na3+y0CT6AQdug7pnaokygwg==} dependencies: - fast-xml-parser: 4.3.2 + fast-xml-parser: 4.3.6 /@push.rocks/smartyaml@2.0.5: resolution: {integrity: sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==} dependencies: - '@types/js-yaml': 3.12.9 + '@types/js-yaml': 3.12.10 js-yaml: 3.14.1 /@push.rocks/tapbundle@5.0.23: @@ -1064,14 +1092,17 @@ packages: - utf-8-validate dev: true - /@push.rocks/webrequest@3.0.34: - resolution: {integrity: sha512-3gqJb58ZukPsOcS26ya2M/nAEOP7lMYyc2Syh45ljgwdM3X8PwHquk5pdc1MMdDWAo1aiYrxReEw6BgMCJUlNQ==} + /@push.rocks/taskbuffer@3.1.7: + resolution: {integrity: sha512-QktGVJPucqQmW/QNGnscf4FAigT1H7JWKFGFdRuDEaOHKFh9qN+PXG3QY7DtZ4jfXdGLxPN4yAufDuPSAJYFnw==} dependencies: + '@push.rocks/lik': 6.0.15 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartenv': 5.0.12 - '@push.rocks/smartjson': 5.0.19 + '@push.rocks/smartlog': 3.0.3 '@push.rocks/smartpromise': 4.0.3 - '@push.rocks/webstore': 2.0.14 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smarttime': 4.0.6 + '@push.rocks/smartunique': 3.0.9 + dev: false /@push.rocks/webrequest@3.0.37: resolution: {integrity: sha512-fLN7kP6GeHFxE4UH4r9C9pjcQb0QkJxHeAMwXvbOqB9hh0MFNKhtGU7GoaTn8SVRGRMPc9UqZVNwo6u5l8Wn0A==} @@ -1099,13 +1130,6 @@ packages: dependencies: '@push.rocks/smartenv': 5.0.12 - /@pushrocks/consolecolor@2.0.1: - resolution: {integrity: sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==} - deprecated: This package has been deprecated in favour of the new package at @push.rocks/consolecolor - dependencies: - ansi-256-colors: 1.1.0 - dev: true - /@pushrocks/isounique@1.0.5: resolution: {integrity: sha512-XYeoKGkmIdsWX64NlPA1fuA41n/1bQ7LdYXytlU/QqYeW7ojgA0ARRhBSh/2phL6o0Jpw6K/7gJ8jc7ab/Tc+w==} deprecated: This package has been deprecated in favour of the new package at @push.rocks/isounique @@ -1146,7 +1170,7 @@ packages: '@pushrocks/smartrx': 3.0.2 '@pushrocks/smarttime': 4.0.1 '@types/minimatch': 5.1.2 - '@types/symbol-tree': 3.2.4 + '@types/symbol-tree': 3.2.5 symbol-tree: 3.2.4 /@pushrocks/smartdelay@2.0.13: @@ -1155,13 +1179,6 @@ packages: dependencies: '@pushrocks/smartpromise': 3.1.10 - /@pushrocks/smartdelay@3.0.1: - resolution: {integrity: sha512-I+i/QhC6kLsXsWyW19UgD1vH2r1YWVxK19VMxt2CEuvxMyC6tuCd0vqud9vv5JxaxsJwxWlOsrURkgL4tXeILQ==} - deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartdelay - dependencies: - '@pushrocks/smartpromise': 4.0.2 - dev: true - /@pushrocks/smartenv@5.0.5: resolution: {integrity: sha512-VWON1OJ4qV2/9hzJbgRquRekaO9am3b8W82tgCwgO6LBg23ea2tanfd+gESVMbRFduxHVoFLvlhSBcDGM5zsLA==} deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartenv @@ -1189,7 +1206,7 @@ packages: dependencies: '@pushrocks/smartjson': 5.0.6 '@pushrocks/smartpromise': 3.1.10 - '@types/through2': 2.0.40 + '@types/through2': 2.0.41 through2: 4.0.2 /@pushrocks/smartjson@5.0.6: @@ -1197,7 +1214,7 @@ packages: deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartjson dependencies: '@pushrocks/smartstring': 4.0.7 - '@types/buffer-json': 2.0.2 + '@types/buffer-json': 2.0.3 buffer-json: 2.0.0 fast-json-stable-stringify: 2.1.0 lodash.clonedeep: 4.5.0 @@ -1208,13 +1225,6 @@ packages: dependencies: '@apiglobal/typedrequest-interfaces': 1.0.20 - /@pushrocks/smartlog-interfaces@3.0.0: - resolution: {integrity: sha512-yjppiLLJHBcrXTJJusDbFTvHq0RTMl3LnhvWAhyyy8U0O4VkJxIls1t5mS6jsEwxogP88+0flQIWknNJeB913A==} - deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartlog-interfaces - dependencies: - '@apiglobal/typedrequest-interfaces': 2.0.1 - dev: true - /@pushrocks/smartmatch@1.0.7: resolution: {integrity: sha512-D+lK5HIKO4Kj1Jm/ycKvy1VzDJ3V6ucHqmf5DMBFdm18BrMj2Zb6M7wN8HUKtkfHvOI7ig85JMuANSEyO7kAPg==} deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartmatch @@ -1277,10 +1287,10 @@ packages: dependencies: '@pushrocks/isounique': 1.0.5 '@pushrocks/smartenv': 5.0.5 - '@types/randomatic': 3.1.4 + '@types/randomatic': 3.1.5 buffer: 6.0.3 crypto-random-string: 5.0.0 - js-base64: 3.7.5 + js-base64: 3.7.7 normalize-newline: 4.1.0 randomatic: 3.1.1 strip-indent: 4.0.0 @@ -1294,7 +1304,7 @@ packages: '@pushrocks/smartdelay': 2.0.13 '@pushrocks/smartpromise': 3.1.10 croner: 4.4.1 - dayjs: 1.11.10 + dayjs: 1.11.11 is-nan: 1.3.2 pretty-ms: 7.0.1 dev: true @@ -1307,23 +1317,17 @@ packages: '@pushrocks/smartdelay': 2.0.13 '@pushrocks/smartpromise': 3.1.10 croner: 5.7.0 - dayjs: 1.11.10 + dayjs: 1.11.11 is-nan: 1.3.2 pretty-ms: 8.0.0 - /@rkusa/linebreak@1.0.0: - resolution: {integrity: sha512-yCSm87XA1aYMgfcABSxcIkk3JtCw3AihNceHY+DnZGLvVP/g2z3UWZbi0xIoYpZWAJEVPr5Zt3QE37Q80wF1pA==} - dependencies: - unicode-trie: 0.3.1 - dev: true - /@sindresorhus/is@5.6.0: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} dev: true - /@socket.io/component-emitter@3.1.1: - resolution: {integrity: sha512-dzJtaDAAoXx4GCOJpbB2eG/Qj8VDpdwkLsWGzGm+0L7E8/434RyMbAHmk9ubXWVAb9nXmc44jUf8GKqVDiKezg==} + /@socket.io/component-emitter@3.1.2: + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} /@szmarczak/http-timer@5.0.1: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} @@ -1345,10 +1349,10 @@ packages: /@tsclass/tsclass@4.0.54: resolution: {integrity: sha512-v+Xc7M0BKNT79/kx7S5Jsc17zj+acUuMDxJtKbQgdU4H8ke3aHAHJr2KicXJeXDTcn41ZEbwJPQ1cc+bjy8bZw==} dependencies: - type-fest: 4.15.0 + type-fest: 4.18.2 - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true /@tsconfig/node12@1.0.11: @@ -1366,7 +1370,7 @@ packages: /@types/accepts@1.3.7: resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 dev: true /@types/babel__code-frame@7.0.6: @@ -1377,39 +1381,39 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.12.7 + '@types/node': 20.12.11 - /@types/buffer-json@2.0.2: - resolution: {integrity: sha512-ypA1MmZb3NBma+R0qOnXryMU8tIQf27+TQ6PLgXaGQy0G0C1WkjmIjzPbKS84RoZJXOz88AV9AQnSEwhY/4PwA==} + /@types/buffer-json@2.0.3: + resolution: {integrity: sha512-ItD4UfF3Q5jA+PEV6ZUWEHvlWaXJbd0rpuBKOIrEebM053FHaJddKsgUf0vy7nLSTs44nqFj3Mh8J3TiT0xv4g==} /@types/chai-dom@1.11.3: resolution: {integrity: sha512-EUEZI7uID4ewzxnU7DJXtyvykhQuwe+etJ1wwOiJyQRTH/ifMWKX+ghiXkxCUvNJ6IQDodf0JXhuP6zZcy2qXQ==} dependencies: - '@types/chai': 4.3.14 + '@types/chai': 4.3.16 dev: true - /@types/chai@4.3.14: - resolution: {integrity: sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w==} + /@types/chai@4.3.16: + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} dev: true /@types/clean-css@4.2.11: resolution: {integrity: sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 source-map: 0.6.1 dev: true /@types/co-body@6.1.3: resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 '@types/qs': 6.9.15 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 /@types/content-disposition@0.5.8: resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} @@ -1428,13 +1432,13 @@ packages: '@types/connect': 3.4.38 '@types/express': 4.17.21 '@types/keygrip': 1.0.6 - '@types/node': 20.12.7 + '@types/node': 20.12.11 dev: true /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 /@types/debounce@1.2.4: resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} @@ -1444,11 +1448,11 @@ packages: resolution: {integrity: sha512-tpu0hp+AOIzwdAHyZPzLE5pCf9uT0pb+xZ76T4S7MrY2YTVq918Q7Q2VQ3KCVQqYxM7nxuCK/SL3X97jBEIeKQ==} dev: true - /@types/express-serve-static-core@4.17.41: - resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} + /@types/express-serve-static-core@4.19.0: + resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} dependencies: - '@types/node': 20.12.7 - '@types/qs': 6.9.11 + '@types/node': 20.12.11 + '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -1456,41 +1460,34 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.41 - '@types/qs': 6.9.11 - '@types/serve-static': 1.15.5 + '@types/express-serve-static-core': 4.19.0 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 - /@types/from2@2.3.4: - resolution: {integrity: sha512-Ofj/U9ytMjG5FIfFlTokSyGQdLgX8js+hbw9/qxZQbsGRjcjQPzoLGZhe6OEzrg7Sd98Il57iyxDtU1ArvCSTw==} + /@types/from2@2.3.5: + resolution: {integrity: sha512-giavnjf3kNlJnE+HpZA1CQ3UKHxgehzsTuIMGda8pGMbOiLYGVNADEskey44OZcADHm/HOoBany8IV+0x28XFw==} dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/fs-extra@11.0.3: - resolution: {integrity: sha512-sF59BlXtUdzEAL1u0MSvuzWd7PdZvZEtnaVkzX5mjpdWTJ8brG0jUqve3jPCzSzvAKKMHTG8F8o/WMQLtleZdQ==} - dependencies: - '@types/jsonfile': 6.1.3 - '@types/node': 20.12.7 + '@types/node': 20.12.11 dev: true /@types/fs-extra@11.0.4: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.12.7 + '@types/node': 20.12.11 /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.12.7 + '@types/node': 20.12.11 /@types/html-minifier@4.0.5: resolution: {integrity: sha512-LfE7f7MFd+YUfZnlBz8W43P4NgSObWiqyKapANsWCj63Aqeqli8/9gVsGP4CwC8jPpTTYlTopKCk9rJSuht/ew==} dependencies: '@types/clean-css': 4.2.11 '@types/relateurl': 0.2.33 - '@types/uglify-js': 3.17.4 + '@types/uglify-js': 3.17.5 dev: true /@types/http-assert@1.5.5: @@ -1520,26 +1517,16 @@ packages: '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/js-yaml@3.12.9: - resolution: {integrity: sha512-s5v3+2RB96nd7AOZXLScwHDRClor83+0E5q+5fzq0fTFXw8spF3QWHAUmHwItmmlr7XnDjpM0FkAgNKHzDTXtg==} - - /@types/js-yaml@4.0.8: - resolution: {integrity: sha512-m6jnPk1VhlYRiLFm3f8X9Uep761f+CK8mHyS65LutH2OhmBF0BeMEjHgg05usH8PLZMWWc/BUR9RPmkvpWnyRA==} - dev: true + /@types/js-yaml@3.12.10: + resolution: {integrity: sha512-/Mtaq/wf+HxXpvhzFYzrzCqNRcA958sW++7JOFC8nPrZcvfi/TrzOaaGbvt27ltJB2NQbHVAg5a1wUCsyMH7NA==} /@types/js-yaml@4.0.9: resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - /@types/jsonfile@6.1.3: - resolution: {integrity: sha512-/yqTk2SZ1wIezK0hiRZD7RuSf4B3whFxFamB1kGStv+8zlWScTMcHanzfc0XKWs5vA1TkHeckBlOyM8jxU8nHA==} - dependencies: - '@types/node': 20.12.7 - dev: true - /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 /@types/keygrip@1.0.6: resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} @@ -1561,18 +1548,15 @@ packages: '@types/http-errors': 2.0.4 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 20.12.7 + '@types/node': 20.12.11 dev: true - /@types/mime-types@2.1.3: - resolution: {integrity: sha512-bvxCbHeeS7quxS7uOJShyoOQj/BfLabhF6mk9Rmr+2MRfW8W1yxyyL/0GTxLFTHen41GrIw4K3D4DrLouhb8vg==} + /@types/mime-types@2.1.4: + resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true @@ -1580,8 +1564,8 @@ packages: /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + /@types/node@20.12.11: + resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} dependencies: undici-types: 5.26.5 @@ -1593,15 +1577,8 @@ packages: resolution: {integrity: sha512-ifvo6w2f5eJYlXm+HiVx67iJe8WZp87sfa683nlqED5Vnt9Z93onkokNoWqOG21EaE8fMxyKPobE+mkPEyxsdw==} dev: true - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} - /@types/qs@6.9.15: resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: true - - /@types/randomatic@3.1.4: - resolution: {integrity: sha512-5rUCiT0eXmwMdlNnpFVBtk7MDZcSREOI0T5ijplCbtMlxIyphW/ftfcK9mRi/tP9CFwYowjpK2m+6sACt/F3BQ==} /@types/randomatic@3.1.5: resolution: {integrity: sha512-VCwCTw6qh1pRRw+5rNTAwqPmf6A+hdrkdM7dBpZVmhl7g+em3ONXlYK/bWPVKqVGMWgP0d1bog8Vc/X6zRwRRQ==} @@ -1617,19 +1594,19 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.12.7 + '@types/node': 20.12.11 - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 - '@types/node': 20.12.7 + '@types/node': 20.12.11 + '@types/send': 0.17.4 /@types/sinon-chai@3.2.12: resolution: {integrity: sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==} dependencies: - '@types/chai': 4.3.14 + '@types/chai': 4.3.16 '@types/sinon': 17.0.3 dev: true @@ -1643,38 +1620,30 @@ packages: resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} dev: true - /@types/symbol-tree@3.2.4: - resolution: {integrity: sha512-j9qIwMi0fGQLssA0/06i8XfqCq9eKsbTu+c9uPx1T9zWisSaFWEE2CwJccn/idKCllXUeHaMSeH/i4HQ6JKEAg==} - /@types/symbol-tree@3.2.5: resolution: {integrity: sha512-zXnnyENt1TYQcS21MkPaJCVjfcPq7p7yc5mo5JACuumXp6sly5jnlS0IokHd+xmmuCbx6V7JqkMBpswR+nZAcw==} - /@types/through2@2.0.40: - resolution: {integrity: sha512-QeEwyeGxvtKjP0I/SR8pHtKMgmqotWTI8V/rNMTjbF3arWZJV/kYtbZXtwQKxUuV/oPSGkUilSspFKkTgCPTpA==} + /@types/through2@2.0.41: + resolution: {integrity: sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 /@types/trusted-types@2.0.7: resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - /@types/uglify-js@3.17.4: - resolution: {integrity: sha512-Hm/T0kV3ywpJyMGNbsItdivRhYNCQQf1IIsYsXnoVPES4t+FMLyDe0/K+Ea7ahWtMtSNb22ZdY7MIyoD9rqARg==} + /@types/uglify-js@3.17.5: + resolution: {integrity: sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==} dependencies: source-map: 0.6.1 dev: true /@types/uuid@9.0.8: resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - dev: true /@types/which@2.0.2: resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} dev: true - /@types/which@3.0.1: - resolution: {integrity: sha512-OJWjr4k8gS1HXuOnCmQbBrQez+xqt/zqfp5PhgbKtsmEFEuojAg23arr+TiTZZ1TORdUF9RKXb/WKEpT1dwgSg==} - dev: true - /@types/which@3.0.3: resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} dev: true @@ -1682,20 +1651,20 @@ packages: /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 dev: true /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 dev: true /@types/yauzl@2.10.3: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 dev: true optional: true @@ -1715,7 +1684,7 @@ packages: '@web/parse5-utils': 2.1.0 chokidar: 3.6.0 clone: 2.1.2 - es-module-lexer: 1.5.0 + es-module-lexer: 1.5.2 get-stream: 6.0.1 is-stream: 2.0.1 isbinaryfile: 5.0.2 @@ -1790,11 +1759,6 @@ packages: - utf-8-validate dev: true - /@xmldom/xmldom@0.8.10: - resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} - engines: {node: '>=10.0.0'} - dev: true - /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -1802,13 +1766,13 @@ packages: mime-types: 2.1.35 negotiator: 0.6.3 - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: true - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -1896,6 +1860,14 @@ packages: /array-flatten@1.1.1: resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} + /array-parallel@0.1.3: + resolution: {integrity: sha512-TDPTwSWW5E4oiFiKmz6RGJ/a80Y91GuLgUYuLd49+XBS75tYo8PNgaT2K/OxuQYqkoI852MDGBorg9OcUSTQ8w==} + dev: true + + /array-series@0.1.5: + resolution: {integrity: sha512-L0XlBwfx9QetHOsbLDrE/vh2t018w9462HM3iaFfxRiK83aJjAt/Ja3NMkOW7FICwWTlQBa3ZbL5FKhuQWkDrg==} + dev: true + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -1909,8 +1881,8 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} - /axe-core@4.9.0: - resolution: {integrity: sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw==} + /axe-core@4.9.1: + resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} engines: {node: '>=4'} dev: true @@ -1924,6 +1896,11 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: false + /binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -1961,7 +1938,6 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -1975,6 +1951,19 @@ packages: fill-range: 7.0.1 dev: true + /broadcast-channel@3.7.0: + resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==} + dependencies: + '@babel/runtime': 7.24.5 + detect-node: 2.1.0 + js-sha3: 0.8.0 + microseconds: 0.2.0 + nano-time: 1.0.0 + oblivious-set: 1.0.0 + rimraf: 3.0.2 + unload: 2.2.0 + dev: false + /buffer-crc32@0.2.13: resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} dev: true @@ -2025,13 +2014,6 @@ packages: responselike: 3.0.0 dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -2041,7 +2023,6 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -2058,7 +2039,7 @@ packages: /chai-a11y-axe@1.5.0: resolution: {integrity: sha512-V/Vg/zJDr9aIkaHJ2KQu7lGTQQm5ZOH4u1k5iTMvIXuSVlSuUo0jcSpSqf9wUn9zl6oQXa4e4E0cqH18KOgKlQ==} dependencies: - axe-core: 4.9.0 + axe-core: 4.9.1 dev: true /chalk@2.4.2: @@ -2164,7 +2145,6 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - dev: true /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} @@ -2222,8 +2202,8 @@ packages: resolution: {integrity: sha512-9pSLe+tDJnmNak2JeMkz6ZmTCXP5p6vCxSd4kvDqrTJkqAP62j2uAEIZjf8cPDZIakStujqVzh5Y5MIWH3yYAw==} engines: {node: '>=6.0'} - /croner@7.0.4: - resolution: {integrity: sha512-P8Zd88km8oQ0xH8Es0u75GtOnFyCNopuAhlFv5kAnbcTuXd0xNvRTgnxnJEs63FicCOsHTL7rpu4BHzY3cMq4w==} + /croner@7.0.7: + resolution: {integrity: sha512-05wALDHKjt9zG1JbpziNnWPCwwv9fUKbNf6q0dWaDMJ/eDxW0394Q2R1VAzKvDgoEZBT9FhWSHHFIcgwLgXjcQ==} engines: {node: '>=6.0'} /cross-fetch@3.1.5: @@ -2234,6 +2214,13 @@ packages: - encoding dev: true + /cross-spawn@4.0.2: + resolution: {integrity: sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=} + dependencies: + lru-cache: 4.1.5 + which: 1.3.1 + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -2248,8 +2235,8 @@ packages: dependencies: type-fest: 2.19.0 - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + /dayjs@1.11.11: + resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} /debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -2303,14 +2290,6 @@ packages: engines: {node: '>=10'} dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -2318,7 +2297,6 @@ packages: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -2328,8 +2306,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 /delayed-stream@1.0.0: @@ -2358,6 +2336,10 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + /devtools-protocol@0.0.1019158: resolution: {integrity: sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==} dev: true @@ -2413,7 +2395,7 @@ packages: /engine.io-client@6.5.3: resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} dependencies: - '@socket.io/component-emitter': 3.1.1 + '@socket.io/component-emitter': 3.1.2 debug: 4.3.4 engine.io-parser: 5.2.2 ws: 8.11.0 @@ -2433,7 +2415,7 @@ packages: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 20.12.7 + '@types/node': 20.12.11 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -2458,15 +2440,13 @@ packages: engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 - dev: true /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - dev: true - /es-module-lexer@1.5.0: - resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} + /es-module-lexer@1.5.2: + resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} dev: true /esbuild@0.19.12: @@ -2611,8 +2591,8 @@ packages: /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - /fast-xml-parser@4.3.2: - resolution: {integrity: sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==} + /fast-xml-parser@4.3.6: + resolution: {integrity: sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==} hasBin: true dependencies: strnum: 1.0.5 @@ -2718,15 +2698,6 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - /fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -2737,7 +2708,6 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -2750,14 +2720,6 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -2767,7 +2729,6 @@ packages: has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} @@ -2788,28 +2749,16 @@ packages: is-glob: 4.0.3 dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 - dev: true - - /glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} + /glob@10.3.14: + resolution: {integrity: sha512-4fkAqu93xe9Mk7le9v0y3VrPDqLKHarNi2s4Pv7f2yOvfhWfhc7hRPHC/JyqMqb8B/Dt/eGS4n7ykwf3fOsl8g==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 + minipass: 7.1.1 + path-scurry: 1.11.0 /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -2820,7 +2769,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -2834,10 +2782,22 @@ packages: slash: 3.0.0 dev: true + /gm@1.25.0: + resolution: {integrity: sha512-4kKdWXTtgQ4biIo7hZA396HT062nDVVHPjQcurNZ3o/voYN+o5FUC5kOwuORbpExp3XbTJ3SU7iRipiIhQtovw==} + engines: {node: '>=14'} + dependencies: + array-parallel: 0.1.3 + array-series: 0.1.5 + cross-spawn: 4.0.2 + debug: 3.2.7 + transitivePeerDependencies: + - supports-color + dev: true + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} @@ -2869,25 +2829,14 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - dependencies: - get-intrinsic: 1.2.2 - /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 - dev: true - - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} /has-proto@1.0.3: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} - dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} @@ -2900,18 +2849,11 @@ packages: has-symbols: 1.0.3 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - /hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - dev: true /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} @@ -3034,7 +2976,6 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.3: resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} @@ -3102,7 +3043,7 @@ packages: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 /is-number@4.0.0: @@ -3191,12 +3132,13 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /js-base64@3.7.5: - resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==} - /js-base64@3.7.7: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: false + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -3408,20 +3350,15 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} - dev: true - - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: - yallist: 4.0.0 + pseudomap: 1.0.2 + yallist: 2.1.2 dev: true /lru-cache@8.0.5: @@ -3440,7 +3377,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.6.0 + semver: 7.6.2 dev: true /make-error-cause@2.3.0: @@ -3491,6 +3428,10 @@ packages: picomatch: 2.3.1 dev: true + /microseconds@0.2.0: + resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} + dev: false + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -3529,14 +3470,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true - - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true /minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} @@ -3544,8 +3477,8 @@ packages: dependencies: brace-expansion: 2.0.1 - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + /minipass@7.1.1: + resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} engines: {node: '>=16 || 14 >=14.17'} /mkdirp-classic@0.5.3: @@ -3567,6 +3500,12 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /nano-time@1.0.0: + resolution: {integrity: sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=} + dependencies: + big-integer: 1.6.52 + dev: false + /nanocolors@0.2.13: resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} dev: true @@ -3581,7 +3520,6 @@ packages: resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} engines: {node: ^14 || ^16 || >=18} hasBin: true - dev: true /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} @@ -3632,6 +3570,10 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + /oblivious-set@1.0.0: + resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} + dev: false + /observable-fns@0.6.1: resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==} dev: true @@ -3646,7 +3588,6 @@ packages: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 - dev: true /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -3667,15 +3608,6 @@ packages: is-docker: 2.2.1 is-wsl: 2.2.0 - /opentype.js@1.3.4: - resolution: {integrity: sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw==} - engines: {node: '>= 8.0.0'} - hasBin: true - dependencies: - string.prototype.codepointat: 0.2.1 - tiny-inflate: 1.0.3 - dev: true - /p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -3700,12 +3632,8 @@ packages: engines: {node: '>=6'} dev: true - /pako@0.2.9: - resolution: {integrity: sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=} - dev: true - - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + /pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true /param-case@2.1.1: @@ -3739,26 +3667,17 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} engines: {node: '>=0.10.0'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + /path-scurry@1.11.0: + resolution: {integrity: sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.1.0 - minipass: 7.0.4 - dev: true - - /path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 + lru-cache: 10.2.2 + minipass: 7.1.1 /path-to-regexp@0.1.7: resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} @@ -3768,32 +3687,30 @@ packages: engines: {node: '>=8'} dev: true - /pdf-merger-js@3.4.0: - resolution: {integrity: sha512-2LkaPYf49cp/QAhjE+n9LEZXVVOzCjZPGlB6fE3a0neW+fers6vz+0A9drQCYNesMbzZ6JttCUF8jJvgwNPHAA==} + /pdf-lib@1.17.1: + resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==} dependencies: - pdfjs: 2.5.3 + '@pdf-lib/standard-fonts': 1.0.0 + '@pdf-lib/upng': 1.0.1 + pako: 1.0.11 + tslib: 1.14.1 dev: true - /pdf2json@2.1.0: - resolution: {integrity: sha512-mXF9AIgnvq1DP/ZM2R28tAfxP2wKZHYa2DjV0R1KCwcqSzm5Iqh1XQq9rdfAt6dp2DuPP0VHZIaCALc2v1cL5A==} - engines: {node: '>=14.18.0', npm: '>=6.14.15'} + /pdf2json@3.0.5: + resolution: {integrity: sha512-Un1yLbSlk/zfwrltgguskExIioXZlFSFwsyXU0cnBorLywbTbcdzmJJEebh+U2cFCtR7y8nDs5lPHAe7ldxjZg==} + engines: {node: '>=18.12.1', npm: '>=8.19.2'} hasBin: true - dependencies: - '@xmldom/xmldom': 0.8.10 dev: true bundledDependencies: - '@xmldom/xmldom' - /pdfjs@2.5.3: - resolution: {integrity: sha512-XSFh7/znM7gJAVABFvrtIkxi6TcHyHUCYpwaRUv1h0ln2ZQel0s8nKgsvmo+D7IKkkXKEQNtMU/hdmF/MUeaHg==} - engines: {node: '>=7'} + /pdf2pic@3.1.1: + resolution: {integrity: sha512-AHXsYi9EcYlSm3uUANz7h5WSktHiyTnUeHqdWmyRdjdMhgq9LgZ8pggl9FOUGuCLVfe+NKxp2k9sEMCH3tHIEg==} + engines: {node: '>=14'} dependencies: - '@rkusa/linebreak': 1.0.0 - opentype.js: 1.3.4 - pako: 2.1.0 - readable-stream: 3.6.2 - unorm: 1.6.0 - uuid: 8.3.2 + gm: 1.25.0 + transitivePeerDependencies: + - supports-color dev: true /pend@1.2.0: @@ -3854,6 +3771,10 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true + /pseudomap@1.0.2: + resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} + dev: true + /public-ip@6.0.2: resolution: {integrity: sha512-+6bkjnf0yQ4+tZV0zJv1017DiIF7y6R4yg17Mrhhkc25L7dtQtXWHgSCrz9BbLL4OeTFbPK4EALXqJUrwCIWXw==} engines: {node: '>=14.16'} @@ -3902,20 +3823,13 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 - - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 + side-channel: 1.0.6 /qs@6.12.1: resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 - dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -3974,6 +3888,10 @@ packages: picomatch: 2.3.1 dev: true + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: false + /relateurl@0.2.7: resolution: {integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=} engines: {node: '>= 0.10'} @@ -4020,7 +3938,6 @@ packages: hasBin: true dependencies: glob: 7.2.3 - dev: true /rss-parser@3.13.0: resolution: {integrity: sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==} @@ -4057,12 +3974,10 @@ packages: hasBin: true dev: true - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: true /send@0.18.0: @@ -4096,15 +4011,6 @@ packages: transitivePeerDependencies: - supports-color - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - /set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4115,7 +4021,6 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true /setprototypeof@1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} @@ -4134,13 +4039,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 - /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -4149,7 +4047,6 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -4187,7 +4084,7 @@ packages: resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} engines: {node: '>=10.0.0'} dependencies: - '@socket.io/component-emitter': 3.1.1 + '@socket.io/component-emitter': 3.1.2 debug: 4.3.4 engine.io-client: 6.5.3 socket.io-parser: 4.2.4 @@ -4200,7 +4097,7 @@ packages: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} dependencies: - '@socket.io/component-emitter': 3.1.1 + '@socket.io/component-emitter': 3.1.2 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -4271,10 +4168,6 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.codepointat@0.2.1: - resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} - dev: true - /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -4327,8 +4220,8 @@ packages: /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - /systeminformation@5.22.7: - resolution: {integrity: sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==} + /systeminformation@5.22.8: + resolution: {integrity: sha512-F1iWQ+PSfOzvLMGh2UXASaWLDq5o+1h1db13Kddl6ojcQ47rsJhpMtRrmBXfTA5QJgutC4KV67YRmXLuroIxrA==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true @@ -4376,10 +4269,6 @@ packages: resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} dev: true - /tiny-inflate@1.0.3: - resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - dev: true - /tiny-worker@2.3.0: resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==} dependencies: @@ -4406,8 +4295,8 @@ packages: hasBin: true dev: true - /ts-node@10.9.1(@types/node@20.12.7)(typescript@5.1.6): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@20.12.11)(typescript@5.1.6): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -4421,13 +4310,13 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.7 - acorn: 8.10.0 - acorn-walk: 8.2.0 + '@types/node': 20.12.11 + acorn: 8.11.3 + acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -4437,6 +4326,10 @@ packages: yn: 3.1.1 dev: true + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -4454,8 +4347,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - /type-fest@4.15.0: - resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} + /type-fest@4.18.2: + resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} engines: {node: '>=16'} /type-is@1.6.18: @@ -4477,6 +4370,12 @@ packages: hasBin: true dev: true + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -4497,21 +4396,16 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /unicode-trie@0.3.1: - resolution: {integrity: sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=} - dependencies: - pako: 0.2.9 - tiny-inflate: 1.0.3 - dev: true - /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - /unorm@1.6.0: - resolution: {integrity: sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==} - engines: {node: '>= 0.4.0'} - dev: true + /unload@2.2.0: + resolution: {integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==} + dependencies: + '@babel/runtime': 7.24.5 + detect-node: 2.1.0 + dev: false /unpipe@1.0.0: resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} @@ -4525,7 +4419,7 @@ packages: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 - qs: 6.11.2 + qs: 6.12.1 /util-deprecate@1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} @@ -4534,15 +4428,9 @@ packages: resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} engines: {node: '>= 0.4.0'} - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - dev: true /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -4563,6 +4451,13 @@ packages: webidl-conversions: 3.0.1 dev: true + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4570,14 +4465,6 @@ packages: dependencies: isexe: 2.0.0 - /which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /which@4.0.0: resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} engines: {node: ^16.13.0 || >=18.0.0} @@ -4613,7 +4500,6 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: true /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} @@ -4640,8 +4526,8 @@ packages: utf-8-validate: optional: true - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + /ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4687,8 +4573,8 @@ packages: resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} engines: {node: '>=0.4.0'} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yallist@2.1.2: + resolution: {integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=} dev: true /yargs-parser@21.1.1: diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 68cac1e..6739884 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@api.global/typedserver', - version: '3.0.29', + version: '3.0.30', description: 'A TypeScript-based project for easy serving of static files with support for live reloading, compression, and typed requests.' } diff --git a/ts/paths.ts b/ts/paths.ts new file mode 100644 index 0000000..e4df1d8 --- /dev/null +++ b/ts/paths.ts @@ -0,0 +1,7 @@ +import * as plugins from './plugins.js'; + +export const packageDir = plugins.path.join( + plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), + '../' +); +export const distBundleDir = plugins.path.join(packageDir, './dist_bundle'); diff --git a/ts/servertools/classes.handlerproxy.ts b/ts/servertools/classes.handlerproxy.ts index b053061..b568567 100644 --- a/ts/servertools/classes.handlerproxy.ts +++ b/ts/servertools/classes.handlerproxy.ts @@ -1,7 +1,7 @@ import * as plugins from '../plugins.js'; import { Handler } from './classes.handler.js'; -import * as interfaces from '../interfaces/index.js'; +import * as interfaces from '../../dist_ts_interfaces/index.js'; export class HandlerProxy extends Handler { /** diff --git a/ts/servertools/classes.handlerstatic.ts b/ts/servertools/classes.handlerstatic.ts index 8017165..4757d87 100644 --- a/ts/servertools/classes.handlerstatic.ts +++ b/ts/servertools/classes.handlerstatic.ts @@ -1,5 +1,5 @@ import * as plugins from '../plugins.js'; -import * as interfaces from '../interfaces/index.js'; +import * as interfaces from '../../dist_ts_interfaces/index.js'; import { Handler } from './classes.handler.js'; import { Compressor, type TCompressionMethod, type ICompressionResult } from './classes.compressor.js'; diff --git a/ts/servertools/classes.handlertypedrouter.ts b/ts/servertools/classes.handlertypedrouter.ts index 5c44b4d..db55dc5 100644 --- a/ts/servertools/classes.handlertypedrouter.ts +++ b/ts/servertools/classes.handlertypedrouter.ts @@ -1,7 +1,7 @@ import * as plugins from '../plugins.js'; import { Handler } from './classes.handler.js'; -import * as interfaces from '../interfaces/index.js'; +import * as interfaces from '../../dist_ts_interfaces/index.js'; export class HandlerTypedRouter extends Handler { /** diff --git a/ts/servertools/tools.serviceworker.ts b/ts/servertools/tools.serviceworker.ts new file mode 100644 index 0000000..8df123c --- /dev/null +++ b/ts/servertools/tools.serviceworker.ts @@ -0,0 +1,60 @@ +import * as plugins from '../plugins.js'; +import * as paths from '../paths.js'; + +import * as interfaces from '../../dist_ts_interfaces/index.js' +import { Handler } from './classes.handler.js'; +import type { TypedServer } from '../typedserver.classes.typedserver.js'; +import { HandlerTypedRouter } from './classes.handlertypedrouter.js'; + +const lswJS: string = plugins.smartfile.fs.toStringSync( + plugins.path.join(paths.distBundleDir, './lsw.js') +); +const lswJSMeta: string = plugins.smartfile.fs.toStringSync( + plugins.path.join(paths.distBundleDir, './lsw.js.map') +); +let lswVersionInfo: interfaces.serviceworker.IRequest_Serviceworker_Backend_VersionInfo['response'] = + null; +const serviceworkerHandler = new Handler( + 'GET', + async (req, res) => { + if (req.path === '/lsw.js') { + res.status(200); + res.set('Content-Type', 'text/javascript'); + res.write(lswJS + '\n' + `/** appSemVer: ${lswVersionInfo?.appSemVer || 'not set'} */`); + } else if (req.path === '/lsw.js.map') { + res.status(200); + res.set('Content-Type', 'application/json'); + res.write(lswJSMeta); + } + res.end(); + } +); + +export const addServiceWorkerRoute = ( + typedserverInstance: TypedServer, + lswData: () => interfaces.serviceworker.IRequest_Serviceworker_Backend_VersionInfo['response'] +) => { + // lets the version info as unique string; + lswVersionInfo = lswData(); + + // the basic stuff + typedserverInstance.server.addRoute('/lsw.js*', serviceworkerHandler); + + // the typed stuff + const typedrouter = new plugins.typedrequest.TypedRouter(); + + typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'serviceworker_versionInfo', + async (req) => { + const versionInfoResponse = lswData(); + return versionInfoResponse; + } + ) + ); + + typedserverInstance.server.addRoute( + '/lsw-typedrequest', + new HandlerTypedRouter(typedrouter) + ); +}; diff --git a/ts/typedserver.classes.typedserver.ts b/ts/typedserver.classes.typedserver.ts index 3402ab3..1223b13 100644 --- a/ts/typedserver.classes.typedserver.ts +++ b/ts/typedserver.classes.typedserver.ts @@ -1,6 +1,6 @@ import * as plugins from './plugins.js'; import * as paths from './typedserver.paths.js'; -import * as interfaces from './interfaces/index.js'; +import * as interfaces from '../dist_ts_interfaces/index.js'; import * as servertools from './servertools/index.js'; import { type TCompressionMethod } from './servertools/classes.compressor.js'; diff --git a/ts/interfaces/index.ts b/ts_interfaces/index.ts similarity index 57% rename from ts/interfaces/index.ts rename to ts_interfaces/index.ts index 2186c5d..453bbc3 100644 --- a/ts/interfaces/index.ts +++ b/ts_interfaces/index.ts @@ -1,3 +1,9 @@ export * from './requestmodifier.js'; export * from './responsemodifier.js'; export * from './typedrequests.js'; + +import * as serviceworker from './serviceworker.js'; + +export { + serviceworker, +} diff --git a/ts_interfaces/plugins.ts b/ts_interfaces/plugins.ts new file mode 100644 index 0000000..94d7ffc --- /dev/null +++ b/ts_interfaces/plugins.ts @@ -0,0 +1,5 @@ +import * as typedrequestInterfaces from '@api.global/typedrequest-interfaces'; + +export { + typedrequestInterfaces, +} \ No newline at end of file diff --git a/ts/interfaces/requestmodifier.ts b/ts_interfaces/requestmodifier.ts similarity index 100% rename from ts/interfaces/requestmodifier.ts rename to ts_interfaces/requestmodifier.ts diff --git a/ts/interfaces/responsemodifier.ts b/ts_interfaces/responsemodifier.ts similarity index 100% rename from ts/interfaces/responsemodifier.ts rename to ts_interfaces/responsemodifier.ts diff --git a/ts_interfaces/serviceworker.ts b/ts_interfaces/serviceworker.ts new file mode 100644 index 0000000..2fe305f --- /dev/null +++ b/ts_interfaces/serviceworker.ts @@ -0,0 +1,127 @@ +import * as plugins from './plugins.js'; + +export interface CacheStorage { + keys: () => Promise; + match: any; + open: any; + delete: any; +} +export declare var caches: CacheStorage; + + +// ============================= +// Interfaces for communication +// ============================= + +export interface IMessage_Serviceworker_Client_UpdateInfo + extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IMessage_Serviceworker_Client_UpdateInfo + > { + method: 'serviceworker_newVersion'; + request: { + appVersion: string; + appHash: string; + }; + response: {}; +} + +export interface IMessage_Serviceworker_Client_RequestReload + extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IMessage_Serviceworker_Client_RequestReload + > { + method: 'serviceworker_requestReload'; + request: {}; + response: {}; +} + +export interface IRequest_Serviceworker_Backend_VersionInfo + extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IRequest_Serviceworker_Backend_VersionInfo + > { + method: 'serviceworker_versionInfo'; + request: {}; + response: { + appHash: string; + appSemVer: string; + }; +} + +// =============== +// web +// =============== +/** + * purges the service workers cache + */ +export interface IRequest_PurgeServiceWorkerCache extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IRequest_PurgeServiceWorkerCache +> { + method: 'purgeServiceWorkerCache'; + request: {}; + response: {}; +} + +/** + * updates the info in all connected tabs + */ +export interface IMessage_Serviceworker_Client_UpdateInfo + extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IMessage_Serviceworker_Client_UpdateInfo + > { + method: 'serviceworker_newVersion'; + request: { + appVersion: string; + appHash: string; + }; + response: {}; +} + +/** + * requests all clients to reload + */ +export interface IMessage_Serviceworker_Client_RequestReload + extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IMessage_Serviceworker_Client_RequestReload + > { + method: 'serviceworker_requestReload'; + request: {}; + response: {}; +} + +/** + * updates version infos + */ +export interface IRequest_Serviceworker_Backend_VersionInfo + extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IRequest_Serviceworker_Backend_VersionInfo + > { + method: 'serviceworker_versionInfo'; + request: {}; + response: { + appHash: string; + appSemVer: string; + }; +} + +/** + * ensures a stable connection between clients and the serviceworker + */ +export interface IRequest_Client_Serviceworker_ConnectionPolling + extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IRequest_Client_Serviceworker_ConnectionPolling + > { + method: 'broadcastConnectionPolling', + request: { + tabId: string; + }, + response: { + serviceworkerId: string; + } +} \ No newline at end of file diff --git a/ts/interfaces/typedrequests.ts b/ts_interfaces/typedrequests.ts similarity index 100% rename from ts/interfaces/typedrequests.ts rename to ts_interfaces/typedrequests.ts diff --git a/ts_web/00_commitinfo_data.ts b/ts_web_inject/00_commitinfo_data.ts similarity index 100% rename from ts_web/00_commitinfo_data.ts rename to ts_web_inject/00_commitinfo_data.ts diff --git a/ts_web/index.ts b/ts_web_inject/index.ts similarity index 98% rename from ts_web/index.ts rename to ts_web_inject/index.ts index 566dc25..0b9661b 100644 --- a/ts_web/index.ts +++ b/ts_web_inject/index.ts @@ -1,5 +1,5 @@ import * as plugins from './typedserver_web.plugins.js'; -import * as interfaces from '../ts/interfaces/index.js'; +import * as interfaces from '../ts_interfaces/index.js'; import { logger } from './typedserver_web.logger.js'; logger.log('info', `TypedServer-Devtools initialized!`); diff --git a/ts_web/typedserver_web.infoscreen.ts b/ts_web_inject/typedserver_web.infoscreen.ts similarity index 100% rename from ts_web/typedserver_web.infoscreen.ts rename to ts_web_inject/typedserver_web.infoscreen.ts diff --git a/ts_web/typedserver_web.logger.ts b/ts_web_inject/typedserver_web.logger.ts similarity index 100% rename from ts_web/typedserver_web.logger.ts rename to ts_web_inject/typedserver_web.logger.ts diff --git a/ts_web/typedserver_web.plugins.ts b/ts_web_inject/typedserver_web.plugins.ts similarity index 100% rename from ts_web/typedserver_web.plugins.ts rename to ts_web_inject/typedserver_web.plugins.ts diff --git a/ts_web_serviceworker/00_commitinfo_data.ts b/ts_web_serviceworker/00_commitinfo_data.ts new file mode 100644 index 0000000..c58bd34 --- /dev/null +++ b/ts_web_serviceworker/00_commitinfo_data.ts @@ -0,0 +1,8 @@ +/** + * autocreated commitinfo by @pushrocks/commitinfo + */ +export const commitinfo = { + name: '@losslessone_private/lole-serviceworker', + version: '1.0.206', + description: 'serviceworker implementation for lossless websites' +} diff --git a/ts_web_serviceworker/classes.backend.ts b/ts_web_serviceworker/classes.backend.ts new file mode 100644 index 0000000..ed1733d --- /dev/null +++ b/ts_web_serviceworker/classes.backend.ts @@ -0,0 +1,53 @@ +import * as plugins from './plugins.js'; +import * as interfaces from '../dist_ts_interfaces/index.js'; + +/** + * This class is meant to be used only on the backend side + */ +export class ServiceworkerBackend { + public deesComms = new plugins.deesComms.DeesComms(); + + constructor(optionsArg: { + self: any; + purgeCache: (reqArg: interfaces.serviceworker.IRequest_PurgeServiceWorkerCache['request']) => Promise; + }) { + + // lets handle wakestuff + optionsArg.self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'wakeUpCall') { + console.log('sw-backend: got wake up call'); + } + }); + this.deesComms.createTypedHandler('broadcastConnectionPolling', async reqArg => { + return { + serviceworkerId: '123' + }; + }) + + this.deesComms.createTypedHandler('purgeServiceWorkerCache', async reqArg => { + console.log(`Executing purge cache in serviceworker backend.`) + return await optionsArg.purgeCache?.(reqArg); + }); + } + + /** + * reloads all clients + */ + public async triggerReloadAll() { + + } + + /** + * display notification + */ + public async addNotification(notificationArg: { + title: string; + body: string; + }) { + + } + + public async alert(alertText: string) { + + } +} \ No newline at end of file diff --git a/ts_web_serviceworker/env.ts b/ts_web_serviceworker/env.ts new file mode 100644 index 0000000..66216f2 --- /dev/null +++ b/ts_web_serviceworker/env.ts @@ -0,0 +1,20 @@ +export * from '../dist_ts_interfaces/index.js'; + +// ============================= +// Interfaces for the service worker +// ============================= +// tslint:disable-next-line: interface-name +export interface ServiceEvent extends Event { + request: any; + respondWith: any; + waitUntil: any; +} + +// tslint:disable-next-line: interface-name +export interface ServiceWindow extends Window { + addEventListener: any; + location: any; + skipWaiting: any; + clients: any; +} +declare var self: Window; \ No newline at end of file diff --git a/ts_web_serviceworker/index.ts b/ts_web_serviceworker/index.ts new file mode 100644 index 0000000..8a27e60 --- /dev/null +++ b/ts_web_serviceworker/index.ts @@ -0,0 +1,8 @@ +// TypeScript declatations +import * as env from './env.js'; +declare var self: env.ServiceWindow; + +import { LosslessServiceWorker } from './serviceworker.classes.serviceworker.js'; + +const losslessServiceWorkerInstance = new LosslessServiceWorker(self); + diff --git a/ts_web_serviceworker/plugins.ts b/ts_web_serviceworker/plugins.ts new file mode 100644 index 0000000..fd6a221 --- /dev/null +++ b/ts_web_serviceworker/plugins.ts @@ -0,0 +1,25 @@ +// @losslessone_private scope +import * as interfaces from '../dist_ts_interfaces/index.js'; + +export { interfaces }; + +// @apiglobal scope +import * as typedrequest from '@api.global/typedrequest'; + +export { typedrequest }; + +// @pushrocks scope +import * as smartdelay from '@push.rocks/smartdelay'; +import * as smartpromise from '@push.rocks/smartpromise'; +import * as webrequest from '@push.rocks/webrequest'; +import * as webstore from '@push.rocks/webstore'; +import * as taskbuffer from '@push.rocks/taskbuffer'; + +export { smartdelay, smartpromise, webrequest, webstore, taskbuffer }; + +// @design.estate scope +import * as deesComms from '@design.estate/dees-comms'; + +export { + deesComms, +} \ No newline at end of file diff --git a/ts_web_serviceworker/serviceworker.classes.cachemanager.ts b/ts_web_serviceworker/serviceworker.classes.cachemanager.ts new file mode 100644 index 0000000..4ceba41 --- /dev/null +++ b/ts_web_serviceworker/serviceworker.classes.cachemanager.ts @@ -0,0 +1,224 @@ +import * as plugins from './plugins.js'; +import * as interfaces from './env.js'; +import { logger } from './serviceworker.logging.js'; +import { LosslessServiceWorker } from './serviceworker.classes.serviceworker.js'; + +export class CacheManager { + public losslessServiceWorkerRef: LosslessServiceWorker; + + public usedCacheNames = { + runtimeCacheName: 'runtime' + }; + + constructor(losslessServiceWorkerRefArg: LosslessServiceWorker) { + this.losslessServiceWorkerRef = losslessServiceWorkerRefArg; + this._setupCache(); + } + + private _setupCache = () => { + const createMatchRequest = (requestArg: Request) => { + // lets create a matchRequest + let matchRequest: Request; + if (requestArg.url.startsWith(this.losslessServiceWorkerRef.serviceWindowRef.location.origin)) { + // internal request + matchRequest = requestArg; + } else { + matchRequest = new Request(requestArg.url, { + ...requestArg.clone(), + mode: 'cors' + }); + } + return matchRequest; + }; + + /** + * creates a 500 response + */ + const create500Response = async (requestArg: Request, responseArg: Response) => { + return new Response( + ` + + + + + + +
+ serviceworker running, but status 500
+
+ serviceworker is unable to fetch this request
+ Here is some info about the request/response pair:
+
+ requestUrl: ${requestArg.url}
+ responseType: ${responseArg.type}
+ responseBody: ${await responseArg.clone().text()}
+ + + `, + { + headers: { + "Content-Type": "text/html" + }, + status: 500 + } + ); + }; + + // A list of local resources we always want to be cached. + this.losslessServiceWorkerRef.serviceWindowRef.addEventListener('fetch', async (fetchEventArg: any) => { + // Lets block scopes we don't want to be passing through the serviceworker + const parsedUrl = new URL(fetchEventArg.request.url) + if ( + parsedUrl.hostname.includes('paddle.com') + || parsedUrl.hostname.includes('paypal.com') + || parsedUrl.hostname.includes('reception.lossless.one') + || parsedUrl.pathname.startsWith('/socket.io') + ) { + logger.log('note',`serviceworker not active for ${parsedUrl.toString()}`); + return; + } + + // lets continue for the rest + const done = plugins.smartpromise.defer(); + fetchEventArg.respondWith(done.promise); + const originalRequest: Request = fetchEventArg.request; + + if ( + (originalRequest.method === 'GET' && + (originalRequest.url.startsWith(this.losslessServiceWorkerRef.serviceWindowRef.location.origin) && + !originalRequest.url.includes('/api/') && + !originalRequest.url.includes('smartserve/reloadcheck'))) || + originalRequest.url.includes('https://assetbroker.lossless.one/public') || + originalRequest.url.includes('https://assetbroker.lossless.one/brandfiles') || + originalRequest.url.includes('https://assetbroker.lossless.one/websites') || + originalRequest.url.includes('https://unpkg.com') || + originalRequest.url.includes('https://fonts.googleapis.com') || + originalRequest.url.includes('https://fonts.gstatic.com') + ) { + + // lets see if things need to be updated + // not waiting here + this.losslessServiceWorkerRef.updateManager.checkUpdate(this); + + // this code block is executed for local requests + const matchRequest = createMatchRequest(originalRequest); + const cachedResponse = await caches.match(matchRequest); + if (cachedResponse) { + logger.log('ok', `CACHED: found cached response for ${matchRequest.url}`); + done.resolve(cachedResponse); + return; + } + + // in case there is no cached response + logger.log('info', `NOTYETCACHED: trying to cache ${matchRequest.url}`); + const newResponse: Response = await fetch(matchRequest).catch(async err => { + return await create500Response(matchRequest, new Response(err.message)); + }); + + // fill cache + // Put a copy of the response in the runtime cache. + if (newResponse.status > 299 || newResponse.type === 'opaque') { + logger.log( + 'error', + `NOTCACHED: can't cache response for ${matchRequest.url} due to status ${ + newResponse.status + } and type ${newResponse.type}` + ); + done.resolve(await create500Response(matchRequest, newResponse)); + } else { + const cache = await caches.open(this.usedCacheNames.runtimeCacheName); + const responseToPutToCache = newResponse.clone(); + const headers = new Headers(); + responseToPutToCache.headers.forEach((value, key) => { + if ( + value !== 'Cache-Control' + && value !== 'cache-control' + && value !== 'Expires' + && value !== 'expires' + && value !== 'Pragma' + && value !== 'pragma' + ) { + headers.set(key, value); + } + }); + headers.set('Cache-Control', 'no-cache, no-store, must-revalidate'); + headers.set('Pragma', 'no-cache'); + headers.set('Expires', '0'); + await cache.put(matchRequest, new Response(responseToPutToCache.body, { + ...responseToPutToCache, + headers + })); + logger.log( + 'ok', + `NOWCACHED: cached response for ${matchRequest.url} for subsequent requests!` + ); + done.resolve(newResponse); + } + } else { + // this code block is executed for remote requests + logger.log( + 'ok', + `NOTCACHED: not caching any responses for ${ + originalRequest.url + }. Fetching from origin now...` + ); + done.resolve( + await fetch(originalRequest).catch(async err => { + return await create500Response(originalRequest, new Response(err.message)); + }) + ); + } + }); + } + + /** + * update caches + * @param reasonArg + */ + + /** + * cleans all caches + * should only be run when running a new service worker + * @param reasonArg + */ + public cleanCaches = async (reasonArg = 'no reason given') => { + logger.log('info', `MAJOR CACHEEVENT: cleaning caches now! Reason: ${reasonArg}`); + const cacheNames = await caches.keys(); + + const deletePromises = cacheNames.map(cacheToDelete => { + const deletePromise = caches.delete(cacheToDelete); + deletePromise.then(() => { + logger.log('ok', `Deleted cache ${cacheToDelete}`); + }); + return deletePromise; + }); + await Promise.all(deletePromises); + } + + /** + * revalidate cache + */ + public async revalidateCache() { + const runtimeCache = await caches.open(this.usedCacheNames.runtimeCacheName); + const cacheKeys = await runtimeCache.keys(); + for (const requestArg of cacheKeys) { + const cachedResponse = runtimeCache.match(requestArg); + + // lets get a new response for comparison + const clonedRequest = requestArg.clone(); + const response = await plugins.smartpromise.timeoutWrap(fetch(clonedRequest), 1000); + if (response && response.status >= 200 && response.status < 300) { + await runtimeCache.delete(requestArg); + await runtimeCache.put(requestArg, response); + } + } + } +} diff --git a/ts_web_serviceworker/serviceworker.classes.networkmanager.ts b/ts_web_serviceworker/serviceworker.classes.networkmanager.ts new file mode 100644 index 0000000..8b5cdd8 --- /dev/null +++ b/ts_web_serviceworker/serviceworker.classes.networkmanager.ts @@ -0,0 +1,33 @@ +import * as plugins from './plugins.js'; +import { LosslessServiceWorker } from './serviceworker.classes.serviceworker.js'; + +export class NetworkManager { + public serviceWorkerRef: LosslessServiceWorker; + public webRequest: plugins.webrequest.WebRequest; + + public previousState: string; + + constructor(serviceWorkerRefArg: LosslessServiceWorker) { + this.serviceWorkerRef = serviceWorkerRefArg; + this.webRequest = new plugins.webrequest.WebRequest(); + this.getConnection()?.addEventListener('change', () => { + this.updateConnectionStatus(); + }); + } + + /** + * gets the connection + */ + public getConnection() { + const navigatorLocal: any = self.navigator; + return navigatorLocal?.connection; + } + + public getEffectiveType() { + return this.getConnection()?.effectiveType || '4g'; + } + + public updateConnectionStatus() { + console.log(`Connection type changed from ${this.previousState} to ${this.getEffectiveType()}`); + } +} diff --git a/ts_web_serviceworker/serviceworker.classes.serviceworker.ts b/ts_web_serviceworker/serviceworker.classes.serviceworker.ts new file mode 100644 index 0000000..fc1532d --- /dev/null +++ b/ts_web_serviceworker/serviceworker.classes.serviceworker.ts @@ -0,0 +1,75 @@ +import * as plugins from './plugins.js'; +import * as interfaces from './env.js'; + +// imports +import { CacheManager } from './serviceworker.classes.cachemanager.js'; +import { Deferred } from '@push.rocks/smartpromise'; + +import { logger } from './serviceworker.logging.js'; + +// imported classes +import { UpdateManager } from './serviceworker.classes.updatemanager.js'; +import { NetworkManager } from './serviceworker.classes.networkmanager.js'; +import { TaskManager } from './serviceworker.classes.taskmanager.js'; + +export class LosslessServiceWorker { + // STATIC + + // INSTANCE + public serviceWindowRef: interfaces.ServiceWindow; + public leleServiceWorkerBackend: plugins.leleServiceworker.LosslessServiceworkerBackend; + + public cacheManager: CacheManager; + + public updateManager: UpdateManager; + public networkManager: NetworkManager; + public taskManager: TaskManager; + public store: plugins.webstore.WebStore; + + constructor(selfArg: interfaces.ServiceWindow) { + logger.log('info', `Service worker instantiating at ${Date.now()}`); + this.serviceWindowRef = selfArg; + this.leleServiceWorkerBackend = plugins.leleServiceworker.getServiceWorkerBackend({ + self: selfArg, + purgeCache: async (reqArg) => { + await this.cacheManager.cleanCaches(), + logger.log('info', `cleaned caches in serviceworker as per request from frontend.`); + return {} + } + }); + + this.updateManager = new UpdateManager(this); + this.networkManager = new NetworkManager(this); + this.taskManager = new TaskManager(this); + + this.cacheManager = new CacheManager(this); + + this.store = new plugins.webstore.WebStore({ + dbName: 'losslessServiceworker', + storeName: 'losslessServiceworker', + }); + + // ================================= + // Installation and Activation + // ================================= + this.serviceWindowRef.addEventListener('install', async (event: interfaces.ServiceEvent) => { + const done = new Deferred(); + event.waitUntil(done.promise); + // its important to not go async before event.waitUntil + done.resolve(); + logger.log('success', `service worker installed! TimeStamp = ${new Date().toISOString()}`); + selfArg.skipWaiting(); + logger.log('note', `Called skip waiting!`); + }); + + this.serviceWindowRef.addEventListener('activate', async (event: interfaces.ServiceEvent) => { + const done = new Deferred(); + event.waitUntil(done.promise); + + // its important to not go async before event.waitUntil + await selfArg.clients.claim(); + await this.cacheManager.cleanCaches('new service worker loaded! :)'); + done.resolve(); + }); + } +} diff --git a/ts_web_serviceworker/serviceworker.classes.taskmanager.ts b/ts_web_serviceworker/serviceworker.classes.taskmanager.ts new file mode 100644 index 0000000..aec4e0f --- /dev/null +++ b/ts_web_serviceworker/serviceworker.classes.taskmanager.ts @@ -0,0 +1,15 @@ +import * as plugins from './plugins.js'; +import { LosslessServiceWorker } from './serviceworker.classes.serviceworker.js'; + +/** + * Taskmanager + * should use times allocated by browser + */ +export class TaskManager { + public serviceworkerRef: LosslessServiceWorker; + + constructor(serviceWorkerRefArg: LosslessServiceWorker) { + this.serviceworkerRef = serviceWorkerRefArg; + } + +} \ No newline at end of file diff --git a/ts_web_serviceworker/serviceworker.classes.typedrequestmanager.ts b/ts_web_serviceworker/serviceworker.classes.typedrequestmanager.ts new file mode 100644 index 0000000..a6fb11e --- /dev/null +++ b/ts_web_serviceworker/serviceworker.classes.typedrequestmanager.ts @@ -0,0 +1 @@ +import * as plugins from './plugins.js'; \ No newline at end of file diff --git a/ts_web_serviceworker/serviceworker.classes.updatemanager.ts b/ts_web_serviceworker/serviceworker.classes.updatemanager.ts new file mode 100644 index 0000000..95d7183 --- /dev/null +++ b/ts_web_serviceworker/serviceworker.classes.updatemanager.ts @@ -0,0 +1,90 @@ +import * as plugins from './plugins.js'; +import { LosslessServiceWorker } from './serviceworker.classes.serviceworker.js'; +import { logger } from './serviceworker.logging.js'; +import { CacheManager } from './serviceworker.classes.cachemanager.js'; + +export class UpdateManager { + public lastUpdateCheck: number = 0; + public lastVersionInfo: plugins.lointServiceworker.IRequest_Serviceworker_Backend_VersionInfo['response']; + + public serviceworkerRef: LosslessServiceWorker; + + constructor(serviceWorkerRefArg: LosslessServiceWorker) { + this.serviceworkerRef = serviceWorkerRefArg; + } + + /** + * checks wether an update is needed + */ + public async checkUpdate(cacheManager: CacheManager): Promise { + const lswVersionInfoKey = 'versionInfo'; + if (!this.lastVersionInfo && !(await this.serviceworkerRef.store.check(lswVersionInfoKey))) { + this.lastVersionInfo = { + appHash: '', + appSemVer: 'v0.0.0', + }; + } else if ( + !this.lastVersionInfo && + (await this.serviceworkerRef.store.check(lswVersionInfoKey)) + ) { + this.lastVersionInfo = await this.serviceworkerRef.store.get(lswVersionInfoKey); + } + + const now = Date.now(); + const millisSinceLastCheck = now - this.lastUpdateCheck; + if (millisSinceLastCheck < 100000) { + // TODO account for being offline + return false; + } + logger.log('info', 'checking for update of the app by comparing app hashes...'); + this.lastUpdateCheck = now; + const currentVersionInfo = await this.getVersionInfoFromServer(); + logger.log('info', `old versionInfo: ${JSON.stringify(this.lastVersionInfo)}`); + logger.log('info', `current versionInfo: ${JSON.stringify(currentVersionInfo)}`); + const needsUpdate = this.lastVersionInfo.appHash !== currentVersionInfo.appHash ? true : false; + if (needsUpdate) { + logger.log('info', 'Caches need to be updated'); + logger.log('info', 'starting a debounced update task'); + this.performAsyncUpdateDebouncedTask.trigger(); + this.lastVersionInfo = currentVersionInfo; + await this.serviceworkerRef.store.set(lswVersionInfoKey, this.lastVersionInfo); + } else { + logger.log('ok', 'caches are still valid, performing revalidation in a bit...'); + this.performAsyncCacheRevalidationDebouncedTask.trigger(); + } + } + + /** + * gets the apphash from the server + */ + public async getVersionInfoFromServer() { + const getAppHashRequest = new plugins.typedrequest.TypedRequest< + plugins.lointServiceworker.IRequest_Serviceworker_Backend_VersionInfo + >('/lsw-typedrequest', 'serviceworker_versionInfo'); + const result = await getAppHashRequest.fire({}); + return result; + } + + // tasks + /** + * this task is executed once we know that there is a new version available + */ + public performAsyncUpdateDebouncedTask = new plugins.taskbuffer.TaskDebounced({ + name: 'performAsyncUpdate', + taskFunction: async () => { + logger.log('info', 'trying to update PWA with serviceworker'); + await this.serviceworkerRef.cacheManager.cleanCaches('a new app version has been communicated by the server.'); + // lets notify all current clients about the update + await this.serviceworkerRef.leleServiceWorkerBackend.triggerReloadAll(); + }, + debounceTimeInMillis: 2000, + }); + + public performAsyncCacheRevalidationDebouncedTask = new plugins.taskbuffer.TaskDebounced({ + name: 'performAsyncCacheRevalidation', + taskFunction: async () => { + await this.serviceworkerRef.cacheManager.revalidateCache(); + }, + debounceTimeInMillis: 6000 + }); +} diff --git a/ts_web_serviceworker/serviceworker.logging.ts b/ts_web_serviceworker/serviceworker.logging.ts new file mode 100644 index 0000000..959ec35 --- /dev/null +++ b/ts_web_serviceworker/serviceworker.logging.ts @@ -0,0 +1,17 @@ +import * as smartlog from '@push.rocks/smartlog'; +import { SmartlogDestinationDevtools } from '@push.rocks/smartlog-destination-devtools'; + +export const logger = new smartlog.Smartlog({ + logContext: { + company: 'Lossless GmbH', + companyunit: 'Lossless Cloud', + containerName: 'web', + environment: 'production', + runtime: 'chrome', + zone: 'servezone' + }, + minimumLogLevel: 'info' +}); + +logger.addLogDestination(new SmartlogDestinationDevtools()); +logger.log('note', 'serviceworker console initialized!'); diff --git a/ts_web_serviceworker_client/00_commitinfo_data.ts b/ts_web_serviceworker_client/00_commitinfo_data.ts new file mode 100644 index 0000000..bec7f9a --- /dev/null +++ b/ts_web_serviceworker_client/00_commitinfo_data.ts @@ -0,0 +1,8 @@ +/** + * autocreated commitinfo by @pushrocks/commitinfo + */ +export const commitinfo = { + name: '@losslessone_private/lele-serviceworker', + version: '1.0.58', + description: 'the mainthread of the serviceworker' +} diff --git a/ts_web_serviceworker_client/index.ts b/ts_web_serviceworker_client/index.ts new file mode 100644 index 0000000..b311f64 --- /dev/null +++ b/ts_web_serviceworker_client/index.ts @@ -0,0 +1,24 @@ +// types +import type * as interfaces from './interfaces/index.js'; +export type { + interfaces +} + +// ==================================== +// imports +// ==================================== + +import { logger } from './serviceworker.logging.js'; +logger.log('note', 'mainthread console initialized!'); + +import { LosslessServiceworker } from './lele-serviceworker.classes.serviceworker.js'; + +export type { + LosslessServiceworker +} + +export const getServiceWorker = async () => { + const losslessServiceWorkerInstance = await LosslessServiceworker.createServiceWorker(); // lets setup the service worker + logger.log('ok', 'service worker ready!'); // and wait for it to be ready + return losslessServiceWorkerInstance; +}; diff --git a/ts_web_serviceworker_client/interfaces/index.ts b/ts_web_serviceworker_client/interfaces/index.ts new file mode 100644 index 0000000..fe62391 --- /dev/null +++ b/ts_web_serviceworker_client/interfaces/index.ts @@ -0,0 +1,2 @@ +import * as plugins from '../lele-serviceworker.plugins.js'; + diff --git a/ts_web_serviceworker_client/lele-serviceworker.classes.actionmanager.ts b/ts_web_serviceworker_client/lele-serviceworker.classes.actionmanager.ts new file mode 100644 index 0000000..0311ad5 --- /dev/null +++ b/ts_web_serviceworker_client/lele-serviceworker.classes.actionmanager.ts @@ -0,0 +1,58 @@ +import * as plugins from './lele-serviceworker.plugins.js'; +import * as interfaces from './interfaces/index.js'; +import { logger } from './serviceworker.logging.js'; + +/** + * MessageManager implements two ways of serviceworker communication + * * the serviceWorker method + * * the deesComms method using BroadcastChannel + */ +export class ActionManager { + public deesComms = new plugins.deesComms.DeesComms(); + + constructor() { + // lets define handlers on the client/tab side + this.deesComms.createTypedHandler('serviceworker_newVersion', async req => { + setTimeout(() => { + window.location.reload(); + }, 200); + return {}; + }); + } + + public async waitForServiceWorkerConnection () { + console.log('waiting for service worker connection...') + const tr = this.deesComms.createTypedRequest('broadcastConnectionPolling'); + let connected = false; + while (!connected) { + tr.fire({ + tabId: '123' + }).then(response => { + if (response.serviceworkerId) { + console.log('connected to serviceworker!'); + connected = true; + } + }).catch(); + await plugins.smartdelay.delayFor(777); + if (!connected) { + // lets wake it up. + navigator.serviceWorker.controller.postMessage({ + type: 'wakeUpCall', + }); + } + } + console.log('ok, got serviceworker connection.') + } + + public async purgeServiceWorkerCache () { + const tr = this.deesComms.createTypedRequest('purgeServiceWorkerCache'); + const response = await tr.fire({}); + return response; + } + + public async getVersionInfo () { + const tr = this.deesComms.createTypedRequest('serviceworker_versionInfo'); + const response = await tr.fire({}); + return response; + } +} diff --git a/ts_web_serviceworker_client/lele-serviceworker.classes.globalsw.ts b/ts_web_serviceworker_client/lele-serviceworker.classes.globalsw.ts new file mode 100644 index 0000000..567dfdb --- /dev/null +++ b/ts_web_serviceworker_client/lele-serviceworker.classes.globalsw.ts @@ -0,0 +1,29 @@ +import * as plugins from './lele-serviceworker.plugins.js'; +import { LosslessServiceworker } from './lele-serviceworker.classes.serviceworker.js'; + +export class GlobalSW { + losslessSw: LosslessServiceworker; + constructor(losslessServiceWorkerInstanceArg: LosslessServiceworker) { + this.losslessSw = losslessServiceWorkerInstanceArg; + globalThis.globalSw = this; + }; + + /** + * purges the cache of the app's serviceworker + * @returns + */ + public async purgeCache() { + await this.losslessSw.actionManager.waitForServiceWorkerConnection(); + console.log(`purgeCache() was executed via globalThis.globalSw`); + const result = await this.losslessSw.actionManager.purgeServiceWorkerCache(); + return result; + } + + /** + * attempts to reload the app + */ + public async reloadApp() { + await this.purgeCache(); + window.location.reload(); + } +} \ No newline at end of file diff --git a/ts_web_serviceworker_client/lele-serviceworker.classes.notificationmanager.ts b/ts_web_serviceworker_client/lele-serviceworker.classes.notificationmanager.ts new file mode 100644 index 0000000..1c0e023 --- /dev/null +++ b/ts_web_serviceworker_client/lele-serviceworker.classes.notificationmanager.ts @@ -0,0 +1,16 @@ +import * as plugins from './lele-serviceworker.plugins.js'; +import * as interfaces from './interfaces/index.js'; +import { logger } from "./serviceworker.logging.js"; + +export class NotificationManager { + + constructor() { + // this.askPermission(); + } + + public askPermission () { + Notification.requestPermission((status) => { + console.log('Notification permission status:', status); + }); + } +} \ No newline at end of file diff --git a/ts_web_serviceworker_client/lele-serviceworker.classes.serviceworker.ts b/ts_web_serviceworker_client/lele-serviceworker.classes.serviceworker.ts new file mode 100644 index 0000000..f561fac --- /dev/null +++ b/ts_web_serviceworker_client/lele-serviceworker.classes.serviceworker.ts @@ -0,0 +1,69 @@ +import * as plugins from './lele-serviceworker.plugins.js'; +import * as interfaces from './interfaces/index.js'; +import { logger } from "./serviceworker.logging.js"; +import { NotificationManager } from './lele-serviceworker.classes.notificationmanager.js'; +import { ActionManager } from './lele-serviceworker.classes.actionmanager.js'; +import { GlobalSW } from './lele-serviceworker.classes.globalsw.js' + +export class LosslessServiceworker { + // STATIC + public static async createServiceWorker(): Promise { + if ('serviceWorker' in navigator) { + try { + logger.log('info', 'trying to register serviceworker'); + // this is some magic for Parcel to not pick up the serviceworker + const serviceworkerInNavigator: ServiceWorkerContainer = navigator.serviceWorker; + const swRegistration: ServiceWorkerRegistration = await serviceworkerInNavigator.register('/lsw.js', { + scope: '/', + updateViaCache: 'none' + }); + plugins.smartdelay.delayFor(2000).then(async () => { + swRegistration.onupdatefound = () => { + logger.log('info', 'update found for service worker!'); + logger.log('warn', 'trying to find convenient time to update'); + }; + while(true) { + await plugins.smartdelay.delayFor(60000); + swRegistration.update(); + } + }); + logger.log('ok', 'serviceworker registered'); + await navigator.serviceWorker.ready; + logger.log('ok', 'serviceworker is ready!'); + await this.waitForController(); + const losslessServiceWorkerInstance = new LosslessServiceworker(); + return losslessServiceWorkerInstance; + } catch (err) { + // sentry integration here + console.log(err); + console.log(err.stack); + } + } + } + + private static async waitForController() { + const done = new plugins.smartpromise.Deferred(); + const checkReady = () => { + if(navigator.serviceWorker.controller) { + logger.log('ok', 'controller is ready'); + done.resolve(); + } else { + logger.log('warn', 'controller not ready'); + } + }; + navigator.serviceWorker.oncontrollerchange = checkReady; + checkReady(); + await done.promise; + } + + // INSTANCE + public notificationManager: NotificationManager; + public actionManager: ActionManager; + public globalSw: GlobalSW; + + constructor() { + this.notificationManager = new NotificationManager(); + this.actionManager = new ActionManager(); + this.globalSw = new GlobalSW(this); + } +} \ No newline at end of file diff --git a/ts_web_serviceworker_client/lele-serviceworker.classes.serviceworkerbackend.ts b/ts_web_serviceworker_client/lele-serviceworker.classes.serviceworkerbackend.ts new file mode 100644 index 0000000..e69de29 diff --git a/ts_web_serviceworker_client/lele-serviceworker.plugins.ts b/ts_web_serviceworker_client/lele-serviceworker.plugins.ts new file mode 100644 index 0000000..e8e5309 --- /dev/null +++ b/ts_web_serviceworker_client/lele-serviceworker.plugins.ts @@ -0,0 +1,22 @@ +// @apiglobal scope +import * as typedrequestInterfaces from '@api.global/typedrequest-interfaces'; + +export { typedrequestInterfaces }; + +// designestate +import * as deesComms from '@design.estate/dees-comms'; + +export { + deesComms +}; + +// @pushrocks scope +import * as smartdelay from '@push.rocks/smartdelay'; +import * as smartpromise from '@push.rocks/smartpromise'; +import * as webstore from '@push.rocks/webstore'; + +export { + smartdelay, + smartpromise, + webstore +}; \ No newline at end of file diff --git a/ts_web_serviceworker_client/serviceworker.logging.ts b/ts_web_serviceworker_client/serviceworker.logging.ts new file mode 100644 index 0000000..f7e4165 --- /dev/null +++ b/ts_web_serviceworker_client/serviceworker.logging.ts @@ -0,0 +1,16 @@ +import * as smartlog from '@push.rocks/smartlog'; +import { SmartlogDestinationDevtools } from '@push.rocks/smartlog-destination-devtools'; + +export const logger = new smartlog.Smartlog({ + logContext: { + company: 'Lossless GmbH', + companyunit: 'Lossless Cloud', + containerName: 'web', + environment: 'production', + runtime: 'chrome', + zone: 'servezone' + }, + minimumLogLevel: 'info' +}); + +logger.addLogDestination(new SmartlogDestinationDevtools());