├── simple-server
├── .dockerignore
├── Comfortaa-Regular.ttf
├── template-beer-css.html
├── package.json
├── Dockerfile
├── src
│ └── simple-server.ts
├── template-test-reporter.svg
├── tsconfig.json
└── package-lock.json
├── .commit-template
├── commitlint.config.js
├── Comfortaa-Regular.ttf
├── src
├── __image_snapshots__
│ ├── image-maker-spec-ts-image-maker-should-generate-changelog-from-html-template-1-snap.png
│ ├── image-maker-spec-ts-image-maker-should-generate-changelog-from-html-template-2-snap.png
│ ├── image-maker-spec-ts-image-maker-should-generate-a-coverage-image-from-template-1-snap.png
│ ├── image-maker-spec-ts-image-maker-should-generate-a-coverage-image-from-template-2-snap.png
│ └── image-maker-spec-ts-image-maker-should-generate-image-from-html-template-with-external-template-1-snap.png
├── image-maker.ts
└── image-maker.spec.ts
├── test-assets
└── my-template
│ ├── style.css
│ └── index.html
├── .vscode
├── extensions.json
└── settings.json
├── tsconfig.json
├── .travis.yml
├── LICENSE
├── .github
└── workflows
│ └── release.yml
├── templates
├── style-changelog-template.css
├── changelog-template.html
└── template-test-reporter.svg
├── .gitignore
├── tslint.json
├── README.md
├── docs
└── CHANGELOG.md
├── package.json
└── hologram.svg
/simple-server/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/.commit-template:
--------------------------------------------------------------------------------
1 | type(scope): subject
2 |
3 | description
4 |
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {extends: ['@commitlint/config-conventional']}
2 |
--------------------------------------------------------------------------------
/Comfortaa-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kibibit/kb-hologram/next/Comfortaa-Regular.ttf
--------------------------------------------------------------------------------
/simple-server/Comfortaa-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kibibit/kb-hologram/next/simple-server/Comfortaa-Regular.ttf
--------------------------------------------------------------------------------
/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-changelog-from-html-template-1-snap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kibibit/kb-hologram/next/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-changelog-from-html-template-1-snap.png
--------------------------------------------------------------------------------
/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-changelog-from-html-template-2-snap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kibibit/kb-hologram/next/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-changelog-from-html-template-2-snap.png
--------------------------------------------------------------------------------
/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-a-coverage-image-from-template-1-snap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kibibit/kb-hologram/next/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-a-coverage-image-from-template-1-snap.png
--------------------------------------------------------------------------------
/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-a-coverage-image-from-template-2-snap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kibibit/kb-hologram/next/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-a-coverage-image-from-template-2-snap.png
--------------------------------------------------------------------------------
/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-image-from-html-template-with-external-template-1-snap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kibibit/kb-hologram/next/src/__image_snapshots__/image-maker-spec-ts-image-maker-should-generate-image-from-html-template-with-external-template-1-snap.png
--------------------------------------------------------------------------------
/test-assets/my-template/style.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 0;
4 | }
5 |
6 | body {
7 | width: 100vw;
8 | height: 100vh;
9 | display: flex;
10 | background: #212121;
11 | }
12 |
13 | img {
14 | height: 100%;
15 | width: 100%;
16 | object-fit: cover;
17 | }
18 |
19 | .side {
20 | width: 10%;
21 | background: pink;
22 | }
23 |
24 | .main {
25 | width: 40%;
26 | background: green;
27 | }
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "dbaeumer.vscode-eslint",
4 | "msjsdiag.debugger-for-chrome",
5 | "formulahendry.auto-close-tag",
6 | "formulahendry.auto-rename-tag",
7 | "eamodio.gitlens",
8 | "wix.vscode-import-cost",
9 | "Orta.vscode-jest",
10 | "wayou.vscode-todo-highlight",
11 | "MS-vsliveshare.vsliveshare",
12 | "vscode-icons-team.vscode-icons",
13 | "EliverLara.andromeda",
14 | "github.vscode-pull-request-github",
15 | "coenraads.bracket-pair-colorizer"
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "declaration": true,
5 | "removeComments": true,
6 | "emitDecoratorMetadata": true,
7 | "experimentalDecorators": true,
8 | "skipLibCheck": true,
9 | "esModuleInterop": true,
10 | "target": "es2017",
11 | "sourceMap": true,
12 | "outDir": "./lib",
13 | "incremental": true,
14 | "baseUrl": "./",
15 | "paths": {}
16 | },
17 | "exclude": [
18 | "node_modules",
19 | "lib",
20 | "**/*.spec.ts",
21 | "simple-server"
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: false
2 | language: node_js
3 | cache:
4 | directories:
5 | - ~/.npm
6 | node_js:
7 | - "8.3"
8 | notifications:
9 | email: false
10 | jobs:
11 | include:
12 | - stage: test
13 | node_js: lts/*
14 | script:
15 | - npm run build
16 | - npm run test:cov
17 | - npm run deploy-test-results
18 | - npm run coveralls
19 | - stage: release
20 | node_js: lts/*
21 | script:
22 | - npm run build
23 | - npm run semantic-release
24 | branches:
25 | except:
26 | - /^v\d+\.\d+\.\d+$/
27 |
--------------------------------------------------------------------------------
/simple-server/template-beer-css.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | beer css template
9 |
10 |
11 |
12 |
13 |
14 |
15 | {{ content }}
16 |
17 |
18 |
19 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/simple-server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "simple-server",
3 | "version": "1.0.0",
4 | "main": "simple-server.js",
5 | "scripts": {
6 | "build": "tsc",
7 | "start": "node dist/simple-server.js",
8 | "start:dev": "ts-node src/simple-server.ts",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "author": "",
12 | "license": "ISC",
13 | "description": "",
14 | "devDependencies": {
15 | "@types/express": "^5.0.0",
16 | "@types/node": "^22.9.0",
17 | "ts-node": "^10.9.2",
18 | "typescript": "^5.6.3"
19 | },
20 | "dependencies": {
21 | "@kibibit/kb-hologram": "^2.1.0-next.4",
22 | "body-parser": "^1.20.3",
23 | "cache-manager": "^6.1.3",
24 | "cacheable": "^1.8.4",
25 | "express": "^4.21.1",
26 | "handlebars": "^4.7.8",
27 | "keyv": "^5.2.1"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/test-assets/my-template/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CodePen - 3dboxtemplate
6 |
7 |
8 |
9 |
10 |
11 |
12 |

13 |
14 |
15 |

16 |
17 |
18 |

19 |
20 |
21 |

22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 kibibit
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/simple-server/Dockerfile:
--------------------------------------------------------------------------------
1 | # Use a Node.js base image
2 | FROM node:20
3 |
4 | # Set the working directory inside the container
5 | WORKDIR /usr/src/app
6 |
7 | # Install Chromium dependencies and Chromium
8 | RUN apt-get update && apt-get install -y \
9 | chromium \
10 | ca-certificates \
11 | fonts-liberation \
12 | libappindicator3-1 \
13 | libasound2 \
14 | libatk-bridge2.0-0 \
15 | libatk1.0-0 \
16 | libcups2 \
17 | libdbus-1-3 \
18 | libgbm1 \
19 | libnspr4 \
20 | libnss3 \
21 | libxcomposite1 \
22 | libxrandr2 \
23 | libxshmfence1 \
24 | xdg-utils \
25 | --no-install-recommends && \
26 | apt-get clean && rm -rf /var/lib/apt/lists/*
27 |
28 | # Set environment variable to skip Chromium download
29 | ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
30 |
31 | # Copy the application files to the container
32 | COPY package*.json ./
33 |
34 | # Install application dependencies
35 | RUN npm install
36 |
37 | # Copy the rest of the application files
38 | COPY . .
39 |
40 | # Build the application
41 | RUN npm run build
42 |
43 | # Expose the API port
44 | EXPOSE 3000
45 |
46 | # Run the server
47 | CMD ["node", "dist/simple-server.js"]
48 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 | on:
3 | push:
4 | branches:
5 | - master
6 | - next
7 | jobs:
8 | release:
9 | name: Release
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout Commit
13 | uses: actions/checkout@v3
14 | with:
15 | fetch-depth: 0
16 | token: ${{ secrets.BOT_TOKEN }}
17 | - name: Setup Node.js
18 | uses: actions/setup-node@v3
19 | with:
20 | node-version: 20
21 | - name: Cache node modules
22 | uses: actions/cache@v3
23 | env:
24 | cache-name: cache-node-modules
25 | with:
26 | path: "**/node_modules"
27 | key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
28 | restore-keys: ${{ runner.os }}-modules-${{ hashFiles('**/package-lock.lock') }}
29 | - name: Install Dependencies
30 | if: steps.cache-node-modules.outputs.cache-hit != 'true'
31 | run: npm ci
32 | env:
33 | NODE_AUTH_TOKEN: ${{ secrets.BOT_TOKEN }}
34 | - name: Build
35 | run: npm run build --if-present
36 | - name: Release
37 | env:
38 | GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
39 | GIT_AUTHOR_NAME: k1b1b0t
40 | GIT_AUTHOR_EMAIL: k1b1b0t@kibibit.io
41 | GIT_COMMITTER_NAME: k1b1b0t
42 | GIT_COMMITTER_EMAIL: k1b1b0t@kibibit.io
43 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
44 | NODE_AUTH_TOKEN: ${{ secrets.BOT_TOKEN }}
45 | run: npm run semantic-release
46 |
--------------------------------------------------------------------------------
/templates/style-changelog-template.css:
--------------------------------------------------------------------------------
1 | html {
2 | box-sizing: border-box;
3 | }
4 |
5 | *,
6 | *:before,
7 | *:after {
8 | box-sizing: inherit;
9 | font-smoothing: antialiased;
10 | -webkit-font-smoothing: antialiased;
11 | }
12 |
13 | body {
14 | font-family: 'Comfortaa', cursive;
15 | height: 100vh;
16 | display: flex;
17 | flex-direction: column;
18 | }
19 |
20 | .kb-title {
21 | display: flex;
22 | align-items: center;
23 | justify-content: center;
24 | height: 20%;
25 | }
26 |
27 | .kb-body .kb-hero {
28 | height: 15%;
29 | }
30 |
31 | .kb-body .kb-hero .hero-body {
32 | display: flex;
33 | align-items: center;
34 | }
35 |
36 | .kb-title img {
37 | height: 45%;
38 | margin: 0 2em 0 0;
39 | }
40 |
41 | .kb-title .title {
42 | font-size: 3.5vw;
43 | }
44 |
45 | #img-container {
46 | height: 100%;
47 | display: flex;
48 | align-items: center;
49 | justify-content: center;
50 | }
51 |
52 | .kb-body #container ul li {
53 | font-size: 2.11vw;
54 | }
55 |
56 | .kb-powered {
57 | display: none;
58 | }
59 |
60 | .hero-body {
61 | padding: 1.5rem;
62 | }
63 |
64 | .hero-body .title {
65 | display: flex;
66 | align-items: center;
67 | justify-content: center;
68 | font-size: 2.5vw;
69 | }
70 |
71 | .kb-list {
72 | padding: 3em;
73 | columns: 2;
74 | -webkit-columns: 2;
75 | -moz-columns: 2;
76 | }
77 |
78 | #container {
79 | padding: 2em;
80 | display: flex;
81 | flex-flow: row nowrap;
82 | justify-content: center;
83 | flex-grow: 1;
84 | align-items: center;
85 | /* it will calculate automatically, try space-between too */
86 | }
87 |
88 | #container ul {
89 | max-width: 50%;
90 | list-style: square inside;
91 | margin: 0 1em;
92 | }
93 |
94 | #container ul li {
95 | font-size: 1.4em;
96 | padding-bottom: 0.2em;
97 | }
98 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
106 | .DS_Store
107 |
108 | # kibibit
109 | test-results
110 | __diff_output__
111 | lib
--------------------------------------------------------------------------------
/templates/changelog-template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
10 |
12 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |

24 |
25 |
26 |
27 |
28 |
30 | Visual Studio Code
31 |
32 |
33 |
34 |
35 |
36 |
38 | November Update [1.41] - Released
39 |
40 |
41 |
42 |
43 |
47 |
48 |
49 |
50 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | // Editor
3 | "editor.detectIndentation": false,
4 | "editor.insertSpaces": true,
5 | "editor.tabSize": 2,
6 | "editor.rulers": [80],
7 | "editor.fontFamily": "Hack, Menlo, Monaco, 'Courier New', monospace",
8 | "editor.matchBrackets": "always",
9 | // Terminal
10 | "terminal.integrated.fontFamily": "Hack, Menlo, Monaco, 'Courier New', monospace",
11 | "terminal.integrated.fontSize": 12,
12 | // Workbench
13 | "workbench.colorTheme": "Andromeda",
14 | "workbench.editor.showIcons": true,
15 | "workbench.iconTheme": "vs-seti",
16 | // Bracket Pair Colorizer
17 | "bracketPairColorizer.colorMode": "Consecutive",
18 | "bracketPairColorizer.forceUniqueOpeningColor": true,
19 | "bracketPairColorizer.showBracketsInGutter": true,
20 | // Misc
21 | "files.insertFinalNewline": true,
22 | "githubPullRequests.includeRemotes": "all",
23 | "eslint.enable": true,
24 | "eslint.autoFixOnSave": true,
25 | "eslint.alwaysShowStatus": true,
26 | "editor.formatOnSave": true,
27 | "[javascript]": {
28 | "editor.formatOnSave": false
29 | },
30 | "jshint.enable": false,
31 | "cSpell.enabled": false,
32 | // Jest
33 | "jest.autoEnable": true,
34 | "jest.coverageFormatter": "DefaultFormatter",
35 | "jest.debugCodeLens.showWhenTestStateIn": [
36 | "fail",
37 | "unknown"
38 | ],
39 | "jest.debugMode": false,
40 | "jest.enableCodeLens": true,
41 | "jest.enableInlineErrorMessages": true,
42 | "jest.enableSnapshotPreviews": true,
43 | "jest.enableSnapshotUpdateMessages": true,
44 | "jest.pathToConfig": "",
45 | "jest.pathToJest": "npm test --",
46 | "jest.restartJestOnSnapshotUpdate": false,
47 | "jest.rootPath": "",
48 | "jest.runAllTestsFirst": true,
49 | "jest.showCoverageOnLoad": true,
50 | // Todo Highlight
51 | "todohighlight.isEnable": true,
52 | "todohighlight.keywords": [
53 | "TODO",
54 | "NOTE",
55 | {
56 | "text": "BEWARE",
57 | "color": "#ff3860",
58 | "backgroundColor": "rgba(255, 221, 87, 1)",
59 | "overviewRulerColor": "grey"
60 | }
61 | ],
62 | "todohighlight.isCaseSensitive": true,
63 | "todohighlight.defaultStyle": {
64 | "color": "#ffdd57",
65 | "backgroundColor": "rgba(128,0,128, 1)",
66 | "overviewRulerColor": "rgba(128,0,128, 1)",
67 | "borderRadius": "2px",
68 | "isWholeLine": true,
69 | },
70 | "window.title": "${activeEditorShort}${separator}${rootName} [kibibit]",
71 | "workbench.colorCustomizations": {
72 | "titleBar.activeForeground": "#ffdd57"
73 | },
74 | "typescriptHero.imports.stringQuoteStyle": "'",
75 | "typescriptHero.imports.grouping": [
76 | "Plains",
77 | "Modules",
78 | "/^@kb-/",
79 | "Workspace"
80 |
81 | ],
82 | "typescriptHero.imports.organizeOnSave": true,
83 | "typescriptHero.imports.multiLineTrailingComma": false,
84 | "tslint.autoFixOnSave": true,
85 | "editor.codeActionsOnSave": {
86 | "source.fixAll.eslint": true
87 | },
88 | "svg.preview.background": "black"
89 | }
90 |
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "defaultSeverity": "error",
3 | "extends": ["tslint:recommended"],
4 | "linterOptions": {
5 | "exclude": [
6 | "node_modules"
7 | ]
8 | },
9 | "jsRules": {
10 | "no-unused-expression": true
11 | },
12 | "rules": {
13 | "arrow-return-shorthand": true,
14 | "callable-types": true,
15 | "class-name": true,
16 | "comment-format": [
17 | true,
18 | "check-space"
19 | ],
20 | "curly": true,
21 | "deprecation": {
22 | "severity": "warn"
23 | },
24 | "eofline": true,
25 | "forin": true,
26 | "import-blacklist": [
27 | true,
28 | "rxjs/Rx"
29 | ],
30 | "import-spacing": true,
31 | "indent": [
32 | true,
33 | "spaces"
34 | ],
35 | "interface-over-type-literal": true,
36 | "label-position": true,
37 | "max-line-length": [
38 | true,
39 | 140
40 | ],
41 | "member-access": false,
42 | "member-ordering": [
43 | true,
44 | {
45 | "order": [
46 | "static-field",
47 | "instance-field",
48 | "static-method",
49 | "instance-method"
50 | ]
51 | }
52 | ],
53 | "no-arg": true,
54 | "no-bitwise": true,
55 | "no-console": [
56 | true,
57 | "debug",
58 | "info",
59 | "time",
60 | "timeEnd",
61 | "trace"
62 | ],
63 | "no-construct": true,
64 | "no-debugger": true,
65 | "no-duplicate-super": true,
66 | "no-empty": false,
67 | "no-empty-interface": true,
68 | "no-eval": true,
69 | "no-inferrable-types": [
70 | true,
71 | "ignore-params"
72 | ],
73 | "no-misused-new": true,
74 | "no-non-null-assertion": true,
75 | "no-redundant-jsdoc": true,
76 | "no-shadowed-variable": true,
77 | "no-string-literal": false,
78 | "no-string-throw": true,
79 | "no-switch-case-fall-through": true,
80 | "no-trailing-whitespace": true,
81 | "no-unnecessary-initializer": true,
82 | "no-unused-expression": true,
83 | "no-use-before-declare": true,
84 | "no-var-keyword": true,
85 | "object-literal-sort-keys": false,
86 | "one-line": [
87 | true,
88 | "check-open-brace",
89 | "check-catch",
90 | "check-else",
91 | "check-whitespace"
92 | ],
93 | "prefer-const": true,
94 | "quotemark": [
95 | true,
96 | "single"
97 | ],
98 | "radix": true,
99 | "semicolon": [
100 | true,
101 | "always"
102 | ],
103 | "triple-equals": [
104 | true,
105 | "allow-null-check"
106 | ],
107 | "typedef-whitespace": [
108 | true,
109 | {
110 | "call-signature": "nospace",
111 | "index-signature": "nospace",
112 | "parameter": "nospace",
113 | "property-declaration": "nospace",
114 | "variable-declaration": "nospace"
115 | }
116 | ],
117 | "unified-signatures": true,
118 | "variable-name": false,
119 | "whitespace": [
120 | true,
121 | "check-branch",
122 | "check-decl",
123 | "check-operator",
124 | "check-separator",
125 | "check-type"
126 | ],
127 | "trailing-comma": [true, {
128 | "multiline": "never",
129 | "singleline": "never"
130 | }]
131 | },
132 | "rulesDirectory": []
133 | }
134 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | @kibibit/kb-hologram
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Create images from templates and data
25 |
26 |
27 |
28 | ## how to use
29 |
30 | ### Installation
31 |
32 | ```bash
33 | $ npm install --save @kibibit/kb-hologram
34 | ```
35 |
36 | ### Usage
37 |
38 | ```javascript
39 | import { KbHologram, KbHologramResultType } from "@kibibit/kb-hologram";
40 |
41 | const kbHologram = new KbHologram({
42 | fontName: "../Comfortaa-Regular.ttf",
43 | templateName: "changelog-template",
44 | height: 534 * 2,
45 | width: 1069 * 2,
46 | data: {
47 | columnOne: [
48 | "Compact folders in Explorer",
49 | "Edit both files in diff view",
50 | "Search results update while typing",
51 | "Problems panel filtering by type",
52 | "Minimap highlights errors, changes",
53 | "Terminal minimum contrast ratio",
54 | ],
55 | columnTwo: [
56 | "Mirror cursor in HTML tags",
57 | "Optional chaining support in JS\\TS",
58 | "Extract to interface TS refactoring",
59 | "Sass module support for @use",
60 | "Remote - Containers improvements",
61 | "Visual Studio Online preview",
62 | ],
63 | title: "achievibit",
64 | subtitle: "v2.1.4 - CHANGELOG",
65 | logo: {
66 | url: "data:image/png;base64,",
67 | alt: "kibibit",
68 | },
69 | },
70 | type: "html",
71 | });
72 |
73 | const pngBuffer = await kbHologram.render(KbHologramResultType.PngBuffer);
74 | ```
75 |
76 | Which will return a **png buffer** for the following image:
77 | 
78 |
79 | ### Test
80 |
81 | ```bash
82 | # unit tests
83 | $ npm run test
84 |
85 | # e2e tests
86 | $ npm run test:e2e
87 |
88 | # test coverage
89 | $ npm run test:cov
90 | ```
91 |
92 | ## Stay in touch
93 |
94 | - Author - [Neil Kalman](https://github.com/thatkookooguy)
95 |
96 | ## Contributors
97 |
98 | Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for [contributing](CONTRIBUTING.MD).
99 |
100 | You can check out some easy to start with issues in the [Easy Pick](https://github.com/Kibibit/kb-hologram/labels/Easy%20Pick).
101 |
102 | ## Contributor Code of Conduct
103 |
104 | Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md).
105 |
106 | By participating in this project you agree to abide by its terms.
107 |
108 | ## License
109 |
110 | [MIT License](LICENSE)
111 |
112 | Copyright (c) 2020 Neil Kalman <neilkalman@gmail.com>
113 |
114 |
115 |
--------------------------------------------------------------------------------
/docs/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # [2.1.0-next.5](https://github.com/Kibibit/kb-hologram/compare/v2.1.0-next.4...v2.1.0-next.5) (2024-11-27)
2 |
3 |
4 | ### Features
5 |
6 | * **server:** add beer css template ([a25ce31](https://github.com/Kibibit/kb-hologram/commit/a25ce3196249d8aea84b01fb4d1b00f116122ecd))
7 | * **server:** add get for generate images ([89ad7e1](https://github.com/Kibibit/kb-hologram/commit/89ad7e1c9d105e5e8e6ad6cb7f915d6ba1cd3d27))
8 |
9 | # [2.1.0-next.4](https://github.com/Kibibit/kb-hologram/compare/v2.1.0-next.3...v2.1.0-next.4) (2024-11-17)
10 |
11 |
12 | ### Features
13 |
14 | * **render:** add no-sandbox if path is given ([b8b3aa9](https://github.com/Kibibit/kb-hologram/commit/b8b3aa92918013c7bdd6ad6d3d438c9e0d8df595))
15 | * **server:** update dockerfile ([fdc978d](https://github.com/Kibibit/kb-hologram/commit/fdc978da305c9224010dca70e22f3a6d47fd2231))
16 |
17 | # [2.1.0-next.3](https://github.com/Kibibit/kb-hologram/compare/v2.1.0-next.2...v2.1.0-next.3) (2024-11-17)
18 |
19 |
20 | ### Features
21 |
22 | * **render:** optional executable path configuration ([8da4f07](https://github.com/Kibibit/kb-hologram/commit/8da4f071b408cc740e28f96ca24084b3c55fd187))
23 |
24 | # [2.1.0-next.2](https://github.com/Kibibit/kb-hologram/compare/v2.1.0-next.1...v2.1.0-next.2) (2024-11-17)
25 |
26 |
27 | ### Features
28 |
29 | * **render:** remove dep svg2png ([d8c3354](https://github.com/Kibibit/kb-hologram/commit/d8c33548851fa31fe604d4c39a3a0f07edf83ca4))
30 | * **server:** build app before running ([407f0dc](https://github.com/Kibibit/kb-hologram/commit/407f0dc41ee957e3dbafec92718cafb200fd38c1))
31 |
32 | # [2.1.0-next.1](https://github.com/Kibibit/kb-hologram/compare/v2.0.0...v2.1.0-next.1) (2024-11-17)
33 |
34 |
35 | ### Bug Fixes
36 |
37 | * **ts:** exclude server from kb-hologram build ([93f0f7e](https://github.com/Kibibit/kb-hologram/commit/93f0f7eea85394a7ebc71b466905247b1319d3ea))
38 |
39 |
40 | ### Features
41 |
42 | * **deps:** update dependencies and devDependencies to latest versions ([5fe1cf7](https://github.com/Kibibit/kb-hologram/commit/5fe1cf7ea399018795106065bd66a836ef213476))
43 | * **render:** fix code and tests after deps upgrade ([5df26ad](https://github.com/Kibibit/kb-hologram/commit/5df26ad8a75c4885e34d32251ec4c76b253327ab))
44 | * **server:** add simple server for deploying ([6919708](https://github.com/Kibibit/kb-hologram/commit/691970838dda3ee50db8986a34f8acb94c7d50e9))
45 |
46 | # [2.0.0](https://github.com/Kibibit/kb-hologram/compare/v1.1.0...v2.0.0) (2023-10-21)
47 |
48 |
49 | ### Bug Fixes
50 |
51 | * **deps:** update module to latest deps ([7b06999](https://github.com/Kibibit/kb-hologram/commit/7b069990000ee6cac51d389ec53e20b94482bb7a))
52 | * **release:** change main branches ([9c0b778](https://github.com/Kibibit/kb-hologram/commit/9c0b778cd956836eea50a79705f0f75c54bce2c1))
53 | * **release:** missing details for semantic release ([557d21d](https://github.com/Kibibit/kb-hologram/commit/557d21d8d092123e58b940aa3383478fb8372948))
54 | * **template-file:** fix passing template file to generate image ([eb917a8](https://github.com/Kibibit/kb-hologram/commit/eb917a8ea938d93267f0781ebe41a96e1245e241))
55 |
56 |
57 | ### Features
58 |
59 | * **app:** rename main class to KbHologram ([8a8f2b3](https://github.com/Kibibit/kb-hologram/commit/8a8f2b345f784af6796c266d02e2dbf3d246faef))
60 |
61 |
62 | ### BREAKING CHANGES
63 |
64 | * **app:** main class name has been changed
65 |
66 | # [1.0.0-next.5](https://github.com/Kibibit/kb-hologram/compare/v1.0.0-next.4...v1.0.0-next.5) (2023-10-21)
67 |
68 |
69 | ### Features
70 |
71 | * **app:** rename main class to KbHologram ([8a8f2b3](https://github.com/Kibibit/kb-hologram/commit/8a8f2b345f784af6796c266d02e2dbf3d246faef))
72 |
73 |
74 | ### BREAKING CHANGES
75 |
76 | * **app:** main class name has been changed
77 |
78 | # [1.0.0-next.4](https://github.com/Kibibit/kb-hologram/compare/v1.0.0-next.3...v1.0.0-next.4) (2023-10-20)
79 |
80 |
81 | ### Bug Fixes
82 |
83 | * **template-file:** fix passing template file to generate image ([eb917a8](https://github.com/Kibibit/kb-hologram/commit/eb917a8ea938d93267f0781ebe41a96e1245e241))
84 |
85 | # [1.0.0-next.3](https://github.com/Kibibit/kb-hologram/compare/v1.0.0-next.2...v1.0.0-next.3) (2023-10-20)
86 |
87 |
88 | ### Bug Fixes
89 |
90 | * **deps:** update module to latest deps ([7b06999](https://github.com/Kibibit/kb-hologram/commit/7b069990000ee6cac51d389ec53e20b94482bb7a))
91 | * **release:** change main branches ([9c0b778](https://github.com/Kibibit/kb-hologram/commit/9c0b778cd956836eea50a79705f0f75c54bce2c1))
92 | * **release:** missing details for semantic release ([557d21d](https://github.com/Kibibit/kb-hologram/commit/557d21d8d092123e58b940aa3383478fb8372948))
93 |
94 | # [1.0.0-next.2](https://github.com/Kibibit/kb-hologram/compare/v1.0.0-next.1...v1.0.0-next.2) (2019-12-25)
95 |
96 |
97 | ### Bug Fixes
98 |
99 | * **changelog:** add dependency on @semantic-release/changelog ([060a30d](https://github.com/Kibibit/kb-hologram/commit/060a30dff8f23ad8c58fa23f83e1ec1ea2485d3a))
100 |
101 |
102 | ### Features
103 |
104 | * **docs:** generate automatic changelog file ([a984c3c](https://github.com/Kibibit/kb-hologram/commit/a984c3c1812407d867992f72f2cc2241e8826d45))
105 |
--------------------------------------------------------------------------------
/simple-server/src/simple-server.ts:
--------------------------------------------------------------------------------
1 | import { IKbHologramBaseOptions, KbHologram, KbHologramResultType } from "@kibibit/kb-hologram";
2 | import express, { Request, Response } from 'express';
3 | import bodyParser from "body-parser";
4 | import { join } from "path";
5 | import { createCache } from "cache-manager";
6 | import { CacheableMemory } from "cacheable";
7 | import { Keyv } from 'keyv';
8 |
9 | const app = express();
10 | const port = 3000;
11 |
12 | // parse application/x-www-form-urlencoded
13 | app.use(bodyParser.urlencoded());
14 |
15 | // parse application/json
16 | app.use(bodyParser.json());
17 | // parse query params
18 | app.use(bodyParser.urlencoded({ extended: true }));
19 |
20 | // Create a memory cache with a TTL of 1 week
21 | const memoryCache = createCache({
22 | stores: [
23 | new Keyv({
24 | store: new CacheableMemory({ ttl: 7 * 24 * 60 * 60, lruSize: 5000 }),
25 | })
26 | ],
27 | ttl: 7 * 24 * 60 * 60 // TTL in seconds (1 week)
28 | });
29 |
30 | app.get('/', async (req: Request, res: Response) => {
31 | // if got query param with data- prefix, put it inside data object
32 | if (req.query) {
33 | const dataKeys = Object.keys(req.query).filter(key => key.startsWith('data-'));
34 | if (dataKeys.length > 0) {
35 | req.query.data = dataKeys.reduce((acc, key) => {
36 | const dataKey = key.replace('data-', '');
37 | acc[dataKey] = req.query[key];
38 | return acc;
39 | }, {} as Record);
40 | }
41 | }
42 |
43 | const cacheKey = JSON.stringify(req.query);
44 |
45 | try {
46 | // Check if the image is cached
47 | const cachedImage: Buffer | null = await memoryCache.get(cacheKey);
48 |
49 | if (cachedImage) {
50 | console.log('Cache hit');
51 | res.writeHead(200, {
52 | 'Content-Type': 'image/png',
53 | 'Content-Length': cachedImage.length
54 | });
55 |
56 | res.end(cachedImage);
57 |
58 | return;
59 | }
60 |
61 | console.log('Cache miss');
62 | // Generate a new image if not cached
63 | const kbHologramOptions = getKbHologramOptions(req.query);
64 | const kbHologram = new KbHologram(kbHologramOptions);
65 | const pngBuffer = await kbHologram.render(KbHologramResultType.PngBuffer);
66 |
67 | // Cache the generated image
68 | await memoryCache.set(cacheKey, pngBuffer);
69 |
70 | res.writeHead(200, {
71 | 'Content-Type': 'image/png',
72 | 'Content-Length': pngBuffer.length
73 | });
74 | res.end(pngBuffer);
75 |
76 | } catch (error) {
77 | console.error('Error generating image:', error);
78 | res.status(500).send('Error generating image');
79 | }
80 | });
81 |
82 | app.post('/', async (req: Request, res: Response) => {
83 | const cacheKey = JSON.stringify(req.body);
84 |
85 | try {
86 | // Check if the image is cached
87 | const cachedImage: Buffer | null = await memoryCache.get(cacheKey);
88 |
89 | if (cachedImage) {
90 | console.log('Cache hit');
91 | res.writeHead(200, {
92 | 'Content-Type': 'image/png',
93 | 'Content-Length': cachedImage.length
94 | });
95 |
96 | res.end(cachedImage);
97 |
98 | return;
99 | }
100 |
101 | console.log('Cache miss');
102 | // Generate a new image if not cached
103 | const kbHologramOptions = getKbHologramOptions(req.body);
104 | const kbHologram = new KbHologram(kbHologramOptions);
105 | const pngBuffer = await kbHologram.render(KbHologramResultType.PngBuffer);
106 |
107 | // Cache the generated image
108 | await memoryCache.set(cacheKey, pngBuffer);
109 |
110 | res.writeHead(200, {
111 | 'Content-Type': 'image/png',
112 | 'Content-Length': pngBuffer.length
113 | });
114 | res.end(pngBuffer);
115 |
116 | } catch (error) {
117 | console.error('Error generating image:', error);
118 | res.status(500).send('Error generating image');
119 | }
120 | });
121 |
122 | app.listen(port, () => {
123 | console.log(`kb-hologram server listening on port ${port}`);
124 | });
125 |
126 | function getKbHologramOptions(
127 | body: Record = {}
128 | ): IKbHologramBaseOptions {
129 | const {
130 | templateName,
131 | templateFile,
132 | height,
133 | width,
134 | data
135 | } = body || {};
136 |
137 | // same as IKbHologramBaseOptions but without the templateName or templateFile
138 | // properties
139 | const baseOptions: Omit = {
140 | fontName: "../Comfortaa-Regular.ttf",
141 | height: height || Math.floor(534),
142 | width: width || Math.floor(1069),
143 | data: data || {
144 | apiStatus: 'FAILED',
145 | e2eStatus: 'PASSED'
146 | },
147 | type: "svg",
148 | executablePath: '/usr/bin/chromium'
149 | };
150 |
151 | if (templateName) {
152 | const fullOptions: IKbHologramBaseOptions = {
153 | ...baseOptions,
154 | templateName
155 | };
156 |
157 | return fullOptions;
158 | }
159 |
160 | if (templateFile) {
161 | const fullOptions: IKbHologramBaseOptions = {
162 | ...baseOptions,
163 | templateFile
164 | };
165 |
166 | return fullOptions;
167 | }
168 |
169 | return {
170 | ...baseOptions,
171 | templateFile: join(__dirname, '../template-test-reporter.svg')
172 | };
173 | }
174 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@kibibit/kb-hologram",
3 | "version": "2.1.0-next.5",
4 | "description": "create images from templates and data",
5 | "types": "lib/image-maker.d.ts",
6 | "main": "lib/image-maker.js",
7 | "files": [
8 | "/lib",
9 | "/bin",
10 | "/templates",
11 | "Comfortaa-Regular.ttf"
12 | ],
13 | "scripts": {
14 | "build": "tsc",
15 | "generate-barrels": "barrelsby --delete -d ./src -l below -q",
16 | "coveralls": "cat ./test-results/coverage/lcov.info | coveralls",
17 | "commit": "npx git-cz",
18 | "lint": "tslint -p tsconfig.json -c tslint.json",
19 | "test": "jest --coverage",
20 | "test:watch": "jest --watch",
21 | "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
22 | "test:e2e": "jest --config ./test/jest-e2e.json",
23 | "semantic-release": "semantic-release",
24 | "deploy-test-results": "kb-reporter"
25 | },
26 | "repository": {
27 | "type": "git",
28 | "url": "https://github.com/Kibibit/kb-hologram.git"
29 | },
30 | "author": "",
31 | "license": "ISC",
32 | "bugs": {
33 | "url": "https://github.com/Kibibit/kb-hologram/issues"
34 | },
35 | "homepage": "https://github.com/Kibibit/kb-hologram#readme",
36 | "dependencies": {
37 | "class-transformer": "^0.5.1",
38 | "class-validator": "^0.14.1",
39 | "file-type": "^16.5.4",
40 | "fs-extra": "^11.2.0",
41 | "jsdom": "^25.0.1",
42 | "lodash": "^4.17.21",
43 | "moment": "^2.30.1",
44 | "puppeteer": "^23.8.0"
45 | },
46 | "devDependencies": {
47 | "@commitlint/cli": "^19.5.0",
48 | "@commitlint/config-conventional": "^19.5.0",
49 | "@kibibit/test-report-now": "^1.0.0",
50 | "@semantic-release/changelog": "^6.0.3",
51 | "@semantic-release/commit-analyzer": "^13.0.0",
52 | "@semantic-release/exec": "^6.0.3",
53 | "@semantic-release/git": "^10.0.1",
54 | "@semantic-release/github": "^11.0.1",
55 | "@semantic-release/npm": "^12.0.1",
56 | "@semantic-release/release-notes-generator": "^14.0.1",
57 | "@types/fs-extra": "^11.0.4",
58 | "@types/jest-image-snapshot": "^6.4.0",
59 | "@types/jsdom": "^21.1.7",
60 | "@types/lodash": "^4.17.13",
61 | "@types/node": "^22.9.0",
62 | "@types/semantic-release": "^20.0.6",
63 | "@types/svg2png": "^4.1.5",
64 | "barrelsby": "^2.8.1",
65 | "commitizen": "^4.3.1",
66 | "coveralls": "^3.1.1",
67 | "cz-conventional-changelog": "^3.3.0",
68 | "depcheck": "^1.4.7",
69 | "husky": "^9.1.6",
70 | "jest": "^29.7.0",
71 | "jest-github-reporter": "^1.1.1",
72 | "jest-image-snapshot": "^6.4.0",
73 | "jest-stare": "^2.5.2",
74 | "semantic-release": "24.2.0",
75 | "semantic-release-cli": "^5.4.6",
76 | "supertest": "^7.0.0",
77 | "ts-jest": "^29.2.5",
78 | "ts-loader": "^9.5.1",
79 | "ts-node": "^10.9.2",
80 | "tsconfig-paths": "^4.2.0",
81 | "typescript": "^5.6.3"
82 | },
83 | "jest": {
84 | "coverageReporters": [
85 | "json",
86 | "lcov",
87 | "text",
88 | "clover",
89 | "html"
90 | ],
91 | "verbose": true,
92 | "reporters": [
93 | "default",
94 | "jest-stare",
95 | "jest-github-reporter"
96 | ],
97 | "testResultsProcessor": "./node_modules/jest-stare",
98 | "watchPathIgnorePatterns": [
99 | ".*test-results.*\\.js"
100 | ],
101 | "collectCoverageFrom": [
102 | "src/**/*.ts",
103 | "!src/**/index.ts"
104 | ],
105 | "moduleFileExtensions": [
106 | "js",
107 | "json",
108 | "ts"
109 | ],
110 | "rootDir": ".",
111 | "testRegex": "\\.spec\\.ts$",
112 | "transform": {
113 | "^.+\\.(t|j)s$": "ts-jest"
114 | },
115 | "coverageDirectory": "./test-results/coverage",
116 | "testEnvironment": "node",
117 | "moduleNameMapper": {}
118 | },
119 | "jest-stare": {
120 | "resultDir": "test-results/",
121 | "coverageLink": "./coverage/index.html"
122 | },
123 | "husky": {
124 | "hooks": {
125 | "prepare-commit-msg": "exec < /dev/tty && (npm run commit -- --hook) || true",
126 | "commit-msg": "commitlint -E HUSKY_GIT_PARAMS || (git config commit.template .commit-template && false)"
127 | }
128 | },
129 | "config": {
130 | "commitizen": {
131 | "path": "./node_modules/cz-conventional-changelog"
132 | }
133 | },
134 | "release": {
135 | "branches": [
136 | "master",
137 | {
138 | "name": "next",
139 | "prerelease": true
140 | }
141 | ],
142 | "npmPublish": true,
143 | "analyzeCommits": [
144 | "@semantic-release/commit-analyzer"
145 | ],
146 | "verifyConditions": [
147 | "@semantic-release/npm",
148 | "@semantic-release/git",
149 | "@semantic-release/github"
150 | ],
151 | "prepare": [
152 | "@semantic-release/npm",
153 | [
154 | "@semantic-release/changelog",
155 | {
156 | "changelogFile": "docs/CHANGELOG.md"
157 | }
158 | ],
159 | {
160 | "path": "@semantic-release/git",
161 | "assets": [
162 | "package.json",
163 | "docs/CHANGELOG.md"
164 | ],
165 | "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
166 | }
167 | ],
168 | "publish": [
169 | "@semantic-release/npm",
170 | "@semantic-release/github"
171 | ],
172 | "success": [
173 | "@semantic-release/github"
174 | ],
175 | "fail": [
176 | "@semantic-release/github"
177 | ]
178 | }
179 | }
180 |
--------------------------------------------------------------------------------
/simple-server/template-test-reporter.svg:
--------------------------------------------------------------------------------
1 |
133 |
--------------------------------------------------------------------------------
/templates/template-test-reporter.svg:
--------------------------------------------------------------------------------
1 |
133 |
--------------------------------------------------------------------------------
/src/image-maker.ts:
--------------------------------------------------------------------------------
1 | import fileType from "file-type";
2 | import fs from "fs-extra";
3 | import { compile } from "handlebars";
4 | import { isString, startsWith } from "lodash";
5 | import { join } from "path";
6 | import puppeteer from "puppeteer";
7 |
8 | export enum KbHologramResultType {
9 | Base64Png = "Base64Png",
10 | Base64Svg = "Base64Svg",
11 | SvgString = "SvgString",
12 | SvgBuffer = "SvgBuffer",
13 | PngBuffer = "PngBuffer",
14 | }
15 |
16 | export type StringReturnInputs =
17 | | KbHologramResultType.Base64Png
18 | | KbHologramResultType.Base64Svg
19 | | KbHologramResultType.SvgString;
20 |
21 | export type BufferReturnInputs =
22 | | KbHologramResultType.SvgBuffer
23 | | KbHologramResultType.PngBuffer;
24 |
25 | export interface IKbHologramBaseOptions {
26 | templateName?: string;
27 | templateFile?: string | Buffer;
28 | templateString?: string;
29 | fontName?: string;
30 | width: number;
31 | height: number;
32 | data: {
33 | [key: string]: any;
34 | };
35 | type?: "svg" | "html";
36 | executablePath?: string;
37 | }
38 |
39 | export class KbHologram {
40 | private templateFilePath = "";
41 | constructor(public options: IKbHologramBaseOptions) { }
42 |
43 | async render(resultType: StringReturnInputs): Promise;
44 | async render(resultType: BufferReturnInputs): Promise;
45 | async render(
46 | resultType: KbHologramResultType = KbHologramResultType.SvgString
47 | ): Promise {
48 | try {
49 | const template = await this.getTemplateAsString();
50 |
51 | const handlebarsTemplate = compile(template);
52 | const fontBase64 = this.options.fontName
53 | ? await this.convertFontToBase64String(
54 | join(__dirname, this.options.fontName)
55 | )
56 | : undefined;
57 |
58 | const data = {
59 | ...this.options.data,
60 | fontBase64,
61 | width: this.options.width,
62 | height: this.options.height,
63 | };
64 |
65 | const svgString = handlebarsTemplate(data);
66 |
67 | if (this.options.type === "html") {
68 | this.templateFilePath =
69 | this.templateFilePath || (this.options.templateFile as string);
70 | const browser = await puppeteer.launch({
71 | headless: true,
72 | timeout: 0,
73 | executablePath: this.options.executablePath,
74 | args: this.options.executablePath ?
75 | ['--no-sandbox', '--disable-setuid-sandbox'] :
76 | []
77 | });
78 | const page = await browser.newPage();
79 | await page.setViewport({
80 | height: this.options.height,
81 | width: this.options.width,
82 | });
83 | await page.goto("file://" + this.templateFilePath, {
84 | waitUntil: "networkidle0",
85 | timeout: 0,
86 | });
87 | await page.addScriptTag({
88 | content: `
89 | activate(${JSON.stringify(this.options.data)})
90 | `,
91 | });
92 | const imageBuffer = await page.screenshot({
93 | omitBackground: true,
94 | encoding: "binary",
95 | });
96 |
97 | await browser.close();
98 |
99 | const bufferImage = Buffer.from(imageBuffer);
100 |
101 | if (resultType === KbHologramResultType.Base64Png) {
102 | return await this.bufferToBase64String(bufferImage);
103 | }
104 |
105 | return bufferImage;
106 | } else {
107 | if (resultType === KbHologramResultType.SvgString) {
108 | return svgString;
109 | }
110 |
111 | const svgBuffer = Buffer.from(svgString, "utf8");
112 |
113 | if (resultType === KbHologramResultType.SvgBuffer) {
114 | return svgBuffer;
115 | }
116 |
117 | if (resultType === KbHologramResultType.Base64Svg) {
118 | return await this.bufferToBase64String(svgBuffer, {
119 | mime: "image/svg+xml",
120 | ext: "svg",
121 | });
122 | }
123 |
124 | // Use Puppeteer to render the SVG and take a screenshot
125 | const browser = await puppeteer.launch({
126 | headless: true,
127 | timeout: 0,
128 | executablePath: this.options.executablePath,
129 | args: this.options.executablePath ?
130 | ['--no-sandbox', '--disable-setuid-sandbox'] :
131 | []
132 | });
133 | const page = await browser.newPage();
134 | await page.setViewport({
135 | width: this.options.width,
136 | height: this.options.height,
137 | });
138 | await page.setContent(svgString);
139 | const imageBuffer = await page.screenshot({
140 | omitBackground: true,
141 | encoding: "binary",
142 | });
143 | await browser.close();
144 |
145 | const pngBuffer = Buffer.from(imageBuffer);
146 |
147 | if (resultType === KbHologramResultType.PngBuffer) {
148 | return pngBuffer;
149 | }
150 |
151 | // Default to Base64Png if resultType is not specified
152 | return await this.bufferToBase64String(pngBuffer);
153 | }
154 | } catch (err) {
155 | console.error(err);
156 | throw err;
157 | }
158 | }
159 |
160 | async convertFontToBase64String(fontFile: string): Promise {
161 | const data = await fs.readFile(fontFile);
162 | const buff = Buffer.from(data);
163 | const filetype = await this.fileType(buff);
164 |
165 | const base64data = buff.toString("base64");
166 |
167 | return `data:${filetype.mime};base64,${base64data}`;
168 | }
169 |
170 | async bufferToBase64String(
171 | buff: Buffer,
172 | filetype?: { mime: string; ext: string }
173 | ): Promise {
174 | if (!filetype) {
175 | const detectedFileType = await this.fileType(buff);
176 | filetype = { mime: detectedFileType.mime, ext: detectedFileType.ext };
177 | }
178 | return `data:${filetype.mime};base64,${buff.toString("base64")}`;
179 | }
180 |
181 | async fileType(buff: Buffer): Promise {
182 | const filetype = await fileType.fromBuffer(buff);
183 |
184 | if (!filetype) {
185 | throw new Error("filetype returned undefined");
186 | }
187 |
188 | return filetype;
189 | }
190 |
191 | async getTemplateAsString(): Promise {
192 | let template = "";
193 |
194 | if (isString(this.options.templateName)) {
195 | const allTemplates = await fs.readdir(join(__dirname, "../templates"));
196 |
197 | const templateFilename = allTemplates.find((templateFilename) =>
198 | startsWith(templateFilename, this.options.templateName)
199 | );
200 |
201 | if (!templateFilename) {
202 | throw new Error("template filename not found");
203 | }
204 |
205 | this.templateFilePath = join(__dirname, "../templates", templateFilename);
206 |
207 | const filePath = join(__dirname, "../templates", `/${templateFilename}`);
208 | template = await fs.readFile(filePath, { encoding: "utf8" });
209 | } else if (this.options.templateFile) {
210 | template = isString(this.options.templateFile)
211 | ? await fs.readFile(this.options.templateFile as string, {
212 | encoding: "utf8",
213 | })
214 | : this.options.templateFile.toString();
215 | } else if (this.options.templateString) {
216 | template = this.options.templateString;
217 | }
218 |
219 | return template;
220 | }
221 | }
222 |
--------------------------------------------------------------------------------
/simple-server/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig to read more about this file */
4 | /* Projects */
5 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
6 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
7 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
8 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
9 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
10 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
11 | /* Language and Environment */
12 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
13 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
14 | // "jsx": "preserve", /* Specify what JSX code is generated. */
15 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
16 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
17 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
18 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
19 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
20 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
21 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
22 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
23 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
24 | /* Modules */
25 | "module": "commonjs", /* Specify what module code is generated. */
26 | // "rootDir": "./", /* Specify the root folder within your source files. */
27 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
28 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
29 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
30 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
31 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
32 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */
33 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
34 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
35 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
36 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
37 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
38 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
39 | // "noUncheckedSideEffectImports": true, /* Check side effect imports. */
40 | // "resolveJsonModule": true, /* Enable importing .json files. */
41 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
42 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
43 | /* JavaScript Support */
44 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
45 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
46 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
47 | /* Emit */
48 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
49 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */
50 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
51 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
52 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
53 | // "noEmit": true, /* Disable emitting files from a compilation. */
54 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
55 | "outDir": "./dist", /* Specify an output folder for all emitted files. */
56 | // "removeComments": true, /* Disable emitting comments. */
57 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
58 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
59 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
60 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
63 | // "newLine": "crlf", /* Set the newline character for emitting files. */
64 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
67 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
69 | /* Interop Constraints */
70 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
71 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
72 | // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
74 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
76 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
77 | /* Type Checking */
78 | "strict": true, /* Enable all strict type-checking options. */
79 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
80 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
81 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
82 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
83 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
84 | // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
85 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
86 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
87 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
88 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
89 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
90 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
91 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
92 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
93 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
94 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
95 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
96 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
97 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
98 | /* Completeness */
99 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
100 | "skipLibCheck": true /* Skip type checking all .d.ts files. */
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/hologram.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/image-maker.spec.ts:
--------------------------------------------------------------------------------
1 | import { toMatchImageSnapshot } from "jest-image-snapshot";
2 |
3 | import { KbHologram, KbHologramResultType } from "./image-maker";
4 | import { join } from "path";
5 |
6 | // const toMatchImageSnapshot = configureToMatchImageSnapshot();
7 |
8 | expect.extend({ toMatchImageSnapshot });
9 |
10 | const FONT_PATH = "../Comfortaa-Regular.ttf";
11 | const HEIGHT = 534;
12 | const WIDTH = 1069;
13 |
14 | const customConfig = {
15 | customDiffConfig: { threshold: 0.5 },
16 | failureThreshold: 0.02,
17 | failureThresholdType: "percent",
18 | };
19 |
20 | describe("image maker", () => {
21 | it("should generate svg string with params", async () => {
22 | const kbHologram = new KbHologram({
23 | fontName: FONT_PATH,
24 | templateName: "template-test-reporter",
25 | height: HEIGHT,
26 | width: WIDTH,
27 | data: {
28 | unitCoverage: 666,
29 | e2eCoverage: 333,
30 | },
31 | });
32 |
33 | const svgString = await kbHologram.render(KbHologramResultType.SvgString);
34 |
35 | expect(svgString).toContain("666");
36 | expect(svgString).toContain("333");
37 | expect(svgString).toMatchSnapshot();
38 | });
39 |
40 | it("should generate svg buffer", async () => {
41 | const kbHologram = new KbHologram({
42 | fontName: FONT_PATH,
43 | templateName: "template-test-reporter",
44 | height: HEIGHT,
45 | width: WIDTH,
46 | data: {
47 | unitCoverage: 666,
48 | e2eCoverage: 333,
49 | },
50 | });
51 |
52 | const svgBuffer = await kbHologram.render(KbHologramResultType.SvgBuffer);
53 |
54 | expect(svgBuffer).toBeInstanceOf(Buffer);
55 | expect(svgBuffer.toString("base64")).toMatchSnapshot();
56 | });
57 |
58 | it("should generate svg Base64 string", async () => {
59 | const kbHologram = new KbHologram({
60 | fontName: FONT_PATH,
61 | templateName: "template-test-reporter",
62 | height: HEIGHT,
63 | width: WIDTH,
64 | data: {
65 | unitCoverage: 666,
66 | e2eCoverage: 333,
67 | },
68 | });
69 |
70 | const svgB64String = await kbHologram.render(
71 | KbHologramResultType.Base64Svg
72 | );
73 |
74 | expect(svgB64String).toMatchSnapshot();
75 | });
76 |
77 | it("should generate a coverage image from template", async () => {
78 | const kbHologram = new KbHologram({
79 | fontName: FONT_PATH,
80 | templateName: "template-test-reporter",
81 | height: HEIGHT,
82 | width: WIDTH,
83 | data: {
84 | unitCoverage: 666,
85 | e2eCoverage: 333,
86 | },
87 | });
88 |
89 | const pngBuffer = await kbHologram.render(KbHologramResultType.PngBuffer);
90 |
91 | // writeFile('na.png', pngBuffer);
92 |
93 | (expect(pngBuffer) as any).toMatchImageSnapshot(customConfig);
94 | }, 10000);
95 |
96 | it("should generate changelog from html template", async () => {
97 | const kbHologram = new KbHologram({
98 | fontName: "../Comfortaa-Regular.ttf",
99 | templateName: "changelog-template",
100 | height: 534 * 2,
101 | width: 1069 * 2,
102 | data: {
103 | columnOne: [
104 | "Compact folders in Explorer",
105 | "Edit both files in diff view",
106 | "Search results update while typing",
107 | "Problems panel filtering by type",
108 | "Minimap highlights errors, changes",
109 | "Terminal minimum contrast ratio",
110 | ],
111 | columnTwo: [
112 | "Mirror cursor in HTML tags",
113 | "Optional chaining support in JS\\TS",
114 | "Extract to interface TS refactoring",
115 | "Sass module support for @use",
116 | "Remote - Containers improvements",
117 | "Visual Studio Online preview",
118 | ],
119 | title: "achievibit",
120 | subtitle: "v2.1.4 - CHANGELOG",
121 | logo: {
122 | url: "data:image/png;base64,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",
123 | alt: "kibibit",
124 | },
125 | },
126 | type: "html",
127 | });
128 |
129 | const pngBuffer = await kbHologram.render(KbHologramResultType.PngBuffer);
130 |
131 | // await writeFile('nice.svg', pngBuffer);
132 |
133 | (expect(pngBuffer) as any).toMatchImageSnapshot(customConfig);
134 | }, 20000);
135 |
136 | it("should generate image from html template with external template", async () => {
137 | const kbHologram = new KbHologram({
138 | fontName: "../Comfortaa-Regular.ttf",
139 | templateFile: join(
140 | __dirname,
141 | "..",
142 | "test-assets",
143 | "my-template",
144 | "index.html"
145 | ),
146 | height: 534 * 2,
147 | width: 1069 * 2,
148 | data: {
149 | title: "achievibit",
150 | subtitle: "v2.1.4 - CHANGELOG",
151 | logo: {
152 | url: "data:image/png;base64,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",
153 | alt: "kibibit",
154 | },
155 | },
156 | type: "html",
157 | });
158 |
159 | const pngBuffer = await kbHologram.render(KbHologramResultType.PngBuffer);
160 |
161 | // await writeFile('nice.svg', pngBuffer);
162 |
163 | (expect(pngBuffer) as any).toMatchImageSnapshot(customConfig);
164 | }, 10000000);
165 | });
166 |
--------------------------------------------------------------------------------
/simple-server/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "simple-server",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "simple-server",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "@kibibit/kb-hologram": "^2.1.0-next.4",
13 | "body-parser": "^1.20.3",
14 | "cache-manager": "^6.1.3",
15 | "cacheable": "^1.8.4",
16 | "express": "^4.21.1",
17 | "handlebars": "^4.7.8",
18 | "keyv": "^5.2.1"
19 | },
20 | "devDependencies": {
21 | "@types/express": "^5.0.0",
22 | "@types/node": "^22.9.0",
23 | "ts-node": "^10.9.2",
24 | "typescript": "^5.6.3"
25 | }
26 | },
27 | "node_modules/@babel/code-frame": {
28 | "version": "7.26.2",
29 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
30 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
31 | "dependencies": {
32 | "@babel/helper-validator-identifier": "^7.25.9",
33 | "js-tokens": "^4.0.0",
34 | "picocolors": "^1.0.0"
35 | },
36 | "engines": {
37 | "node": ">=6.9.0"
38 | }
39 | },
40 | "node_modules/@babel/helper-validator-identifier": {
41 | "version": "7.25.9",
42 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
43 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
44 | "engines": {
45 | "node": ">=6.9.0"
46 | }
47 | },
48 | "node_modules/@cspotcode/source-map-support": {
49 | "version": "0.8.1",
50 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
51 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
52 | "dev": true,
53 | "dependencies": {
54 | "@jridgewell/trace-mapping": "0.3.9"
55 | },
56 | "engines": {
57 | "node": ">=12"
58 | }
59 | },
60 | "node_modules/@jridgewell/resolve-uri": {
61 | "version": "3.1.2",
62 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
63 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
64 | "dev": true,
65 | "engines": {
66 | "node": ">=6.0.0"
67 | }
68 | },
69 | "node_modules/@jridgewell/sourcemap-codec": {
70 | "version": "1.5.0",
71 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
72 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
73 | "dev": true
74 | },
75 | "node_modules/@jridgewell/trace-mapping": {
76 | "version": "0.3.9",
77 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
78 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
79 | "dev": true,
80 | "dependencies": {
81 | "@jridgewell/resolve-uri": "^3.0.3",
82 | "@jridgewell/sourcemap-codec": "^1.4.10"
83 | }
84 | },
85 | "node_modules/@keyv/serialize": {
86 | "version": "1.0.1",
87 | "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.1.tgz",
88 | "integrity": "sha512-kKXeynfORDGPUEEl2PvTExM2zs+IldC6ZD8jPcfvI351MDNtfMlw9V9s4XZXuJNDK2qR5gbEKxRyoYx3quHUVQ==",
89 | "dependencies": {
90 | "buffer": "^6.0.3"
91 | }
92 | },
93 | "node_modules/@keyv/serialize/node_modules/buffer": {
94 | "version": "6.0.3",
95 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
96 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
97 | "funding": [
98 | {
99 | "type": "github",
100 | "url": "https://github.com/sponsors/feross"
101 | },
102 | {
103 | "type": "patreon",
104 | "url": "https://www.patreon.com/feross"
105 | },
106 | {
107 | "type": "consulting",
108 | "url": "https://feross.org/support"
109 | }
110 | ],
111 | "dependencies": {
112 | "base64-js": "^1.3.1",
113 | "ieee754": "^1.2.1"
114 | }
115 | },
116 | "node_modules/@kibibit/kb-hologram": {
117 | "version": "2.1.0-next.4",
118 | "resolved": "https://registry.npmjs.org/@kibibit/kb-hologram/-/kb-hologram-2.1.0-next.4.tgz",
119 | "integrity": "sha512-4VX+PnAJLXDFRtzC9JBuZDtrWFVS/Rbt/ttCYkHQKlV6Xd1Uzw4C6N29LtBoqNyYgLkL84dJLOzAUJw6QtV+ew==",
120 | "dependencies": {
121 | "class-transformer": "^0.5.1",
122 | "class-validator": "^0.14.1",
123 | "file-type": "^16.5.4",
124 | "fs-extra": "^11.2.0",
125 | "jsdom": "^25.0.1",
126 | "lodash": "^4.17.21",
127 | "moment": "^2.30.1",
128 | "puppeteer": "^23.8.0"
129 | }
130 | },
131 | "node_modules/@puppeteer/browsers": {
132 | "version": "2.4.1",
133 | "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.1.tgz",
134 | "integrity": "sha512-0kdAbmic3J09I6dT8e9vE2JOCSt13wHCW5x/ly8TSt2bDtuIWe2TgLZZDHdcziw9AVCzflMAXCrVyRIhIs44Ng==",
135 | "dependencies": {
136 | "debug": "^4.3.7",
137 | "extract-zip": "^2.0.1",
138 | "progress": "^2.0.3",
139 | "proxy-agent": "^6.4.0",
140 | "semver": "^7.6.3",
141 | "tar-fs": "^3.0.6",
142 | "unbzip2-stream": "^1.4.3",
143 | "yargs": "^17.7.2"
144 | },
145 | "bin": {
146 | "browsers": "lib/cjs/main-cli.js"
147 | },
148 | "engines": {
149 | "node": ">=18"
150 | }
151 | },
152 | "node_modules/@puppeteer/browsers/node_modules/debug": {
153 | "version": "4.3.7",
154 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
155 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
156 | "dependencies": {
157 | "ms": "^2.1.3"
158 | },
159 | "engines": {
160 | "node": ">=6.0"
161 | },
162 | "peerDependenciesMeta": {
163 | "supports-color": {
164 | "optional": true
165 | }
166 | }
167 | },
168 | "node_modules/@puppeteer/browsers/node_modules/ms": {
169 | "version": "2.1.3",
170 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
171 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
172 | },
173 | "node_modules/@puppeteer/browsers/node_modules/semver": {
174 | "version": "7.6.3",
175 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
176 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
177 | "bin": {
178 | "semver": "bin/semver.js"
179 | },
180 | "engines": {
181 | "node": ">=10"
182 | }
183 | },
184 | "node_modules/@tokenizer/token": {
185 | "version": "0.3.0",
186 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
187 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
188 | },
189 | "node_modules/@tootallnate/quickjs-emscripten": {
190 | "version": "0.23.0",
191 | "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
192 | "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="
193 | },
194 | "node_modules/@tsconfig/node10": {
195 | "version": "1.0.11",
196 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
197 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
198 | "dev": true
199 | },
200 | "node_modules/@tsconfig/node12": {
201 | "version": "1.0.11",
202 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
203 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
204 | "dev": true
205 | },
206 | "node_modules/@tsconfig/node14": {
207 | "version": "1.0.3",
208 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
209 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
210 | "dev": true
211 | },
212 | "node_modules/@tsconfig/node16": {
213 | "version": "1.0.4",
214 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
215 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
216 | "dev": true
217 | },
218 | "node_modules/@types/body-parser": {
219 | "version": "1.19.5",
220 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
221 | "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
222 | "dev": true,
223 | "dependencies": {
224 | "@types/connect": "*",
225 | "@types/node": "*"
226 | }
227 | },
228 | "node_modules/@types/connect": {
229 | "version": "3.4.38",
230 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
231 | "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
232 | "dev": true,
233 | "dependencies": {
234 | "@types/node": "*"
235 | }
236 | },
237 | "node_modules/@types/express": {
238 | "version": "5.0.0",
239 | "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz",
240 | "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==",
241 | "dev": true,
242 | "dependencies": {
243 | "@types/body-parser": "*",
244 | "@types/express-serve-static-core": "^5.0.0",
245 | "@types/qs": "*",
246 | "@types/serve-static": "*"
247 | }
248 | },
249 | "node_modules/@types/express-serve-static-core": {
250 | "version": "5.0.1",
251 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz",
252 | "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==",
253 | "dev": true,
254 | "dependencies": {
255 | "@types/node": "*",
256 | "@types/qs": "*",
257 | "@types/range-parser": "*",
258 | "@types/send": "*"
259 | }
260 | },
261 | "node_modules/@types/http-errors": {
262 | "version": "2.0.4",
263 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
264 | "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
265 | "dev": true
266 | },
267 | "node_modules/@types/mime": {
268 | "version": "1.3.5",
269 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
270 | "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
271 | "dev": true
272 | },
273 | "node_modules/@types/node": {
274 | "version": "22.9.0",
275 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
276 | "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
277 | "devOptional": true,
278 | "dependencies": {
279 | "undici-types": "~6.19.8"
280 | }
281 | },
282 | "node_modules/@types/qs": {
283 | "version": "6.9.17",
284 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz",
285 | "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==",
286 | "dev": true
287 | },
288 | "node_modules/@types/range-parser": {
289 | "version": "1.2.7",
290 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
291 | "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
292 | "dev": true
293 | },
294 | "node_modules/@types/send": {
295 | "version": "0.17.4",
296 | "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
297 | "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
298 | "dev": true,
299 | "dependencies": {
300 | "@types/mime": "^1",
301 | "@types/node": "*"
302 | }
303 | },
304 | "node_modules/@types/serve-static": {
305 | "version": "1.15.7",
306 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
307 | "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
308 | "dev": true,
309 | "dependencies": {
310 | "@types/http-errors": "*",
311 | "@types/node": "*",
312 | "@types/send": "*"
313 | }
314 | },
315 | "node_modules/@types/validator": {
316 | "version": "13.12.2",
317 | "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.2.tgz",
318 | "integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA=="
319 | },
320 | "node_modules/@types/yauzl": {
321 | "version": "2.10.3",
322 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
323 | "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
324 | "optional": true,
325 | "dependencies": {
326 | "@types/node": "*"
327 | }
328 | },
329 | "node_modules/accepts": {
330 | "version": "1.3.8",
331 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
332 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
333 | "dependencies": {
334 | "mime-types": "~2.1.34",
335 | "negotiator": "0.6.3"
336 | },
337 | "engines": {
338 | "node": ">= 0.6"
339 | }
340 | },
341 | "node_modules/acorn": {
342 | "version": "8.14.0",
343 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
344 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
345 | "dev": true,
346 | "bin": {
347 | "acorn": "bin/acorn"
348 | },
349 | "engines": {
350 | "node": ">=0.4.0"
351 | }
352 | },
353 | "node_modules/acorn-walk": {
354 | "version": "8.3.4",
355 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
356 | "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
357 | "dev": true,
358 | "dependencies": {
359 | "acorn": "^8.11.0"
360 | },
361 | "engines": {
362 | "node": ">=0.4.0"
363 | }
364 | },
365 | "node_modules/agent-base": {
366 | "version": "7.1.1",
367 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
368 | "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
369 | "dependencies": {
370 | "debug": "^4.3.4"
371 | },
372 | "engines": {
373 | "node": ">= 14"
374 | }
375 | },
376 | "node_modules/agent-base/node_modules/debug": {
377 | "version": "4.3.7",
378 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
379 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
380 | "dependencies": {
381 | "ms": "^2.1.3"
382 | },
383 | "engines": {
384 | "node": ">=6.0"
385 | },
386 | "peerDependenciesMeta": {
387 | "supports-color": {
388 | "optional": true
389 | }
390 | }
391 | },
392 | "node_modules/agent-base/node_modules/ms": {
393 | "version": "2.1.3",
394 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
395 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
396 | },
397 | "node_modules/ansi-regex": {
398 | "version": "5.0.1",
399 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
400 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
401 | "engines": {
402 | "node": ">=8"
403 | }
404 | },
405 | "node_modules/ansi-styles": {
406 | "version": "4.3.0",
407 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
408 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
409 | "dependencies": {
410 | "color-convert": "^2.0.1"
411 | },
412 | "engines": {
413 | "node": ">=8"
414 | },
415 | "funding": {
416 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
417 | }
418 | },
419 | "node_modules/arg": {
420 | "version": "4.1.3",
421 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
422 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
423 | "dev": true
424 | },
425 | "node_modules/argparse": {
426 | "version": "2.0.1",
427 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
428 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
429 | },
430 | "node_modules/array-flatten": {
431 | "version": "1.1.1",
432 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
433 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
434 | },
435 | "node_modules/ast-types": {
436 | "version": "0.13.4",
437 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
438 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
439 | "dependencies": {
440 | "tslib": "^2.0.1"
441 | },
442 | "engines": {
443 | "node": ">=4"
444 | }
445 | },
446 | "node_modules/asynckit": {
447 | "version": "0.4.0",
448 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
449 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
450 | },
451 | "node_modules/b4a": {
452 | "version": "1.6.7",
453 | "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
454 | "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="
455 | },
456 | "node_modules/bare-events": {
457 | "version": "2.5.0",
458 | "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz",
459 | "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==",
460 | "optional": true
461 | },
462 | "node_modules/bare-fs": {
463 | "version": "2.3.5",
464 | "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz",
465 | "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==",
466 | "optional": true,
467 | "dependencies": {
468 | "bare-events": "^2.0.0",
469 | "bare-path": "^2.0.0",
470 | "bare-stream": "^2.0.0"
471 | }
472 | },
473 | "node_modules/bare-os": {
474 | "version": "2.4.4",
475 | "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz",
476 | "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==",
477 | "optional": true
478 | },
479 | "node_modules/bare-path": {
480 | "version": "2.1.3",
481 | "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz",
482 | "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==",
483 | "optional": true,
484 | "dependencies": {
485 | "bare-os": "^2.1.0"
486 | }
487 | },
488 | "node_modules/bare-stream": {
489 | "version": "2.3.2",
490 | "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.2.tgz",
491 | "integrity": "sha512-EFZHSIBkDgSHIwj2l2QZfP4U5OcD4xFAOwhSb/vlr9PIqyGJGvB/nfClJbcnh3EY4jtPE4zsb5ztae96bVF79A==",
492 | "optional": true,
493 | "dependencies": {
494 | "streamx": "^2.20.0"
495 | }
496 | },
497 | "node_modules/base64-js": {
498 | "version": "1.5.1",
499 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
500 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
501 | "funding": [
502 | {
503 | "type": "github",
504 | "url": "https://github.com/sponsors/feross"
505 | },
506 | {
507 | "type": "patreon",
508 | "url": "https://www.patreon.com/feross"
509 | },
510 | {
511 | "type": "consulting",
512 | "url": "https://feross.org/support"
513 | }
514 | ]
515 | },
516 | "node_modules/basic-ftp": {
517 | "version": "5.0.5",
518 | "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
519 | "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
520 | "engines": {
521 | "node": ">=10.0.0"
522 | }
523 | },
524 | "node_modules/body-parser": {
525 | "version": "1.20.3",
526 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
527 | "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
528 | "dependencies": {
529 | "bytes": "3.1.2",
530 | "content-type": "~1.0.5",
531 | "debug": "2.6.9",
532 | "depd": "2.0.0",
533 | "destroy": "1.2.0",
534 | "http-errors": "2.0.0",
535 | "iconv-lite": "0.4.24",
536 | "on-finished": "2.4.1",
537 | "qs": "6.13.0",
538 | "raw-body": "2.5.2",
539 | "type-is": "~1.6.18",
540 | "unpipe": "1.0.0"
541 | },
542 | "engines": {
543 | "node": ">= 0.8",
544 | "npm": "1.2.8000 || >= 1.4.16"
545 | }
546 | },
547 | "node_modules/buffer": {
548 | "version": "5.7.1",
549 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
550 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
551 | "funding": [
552 | {
553 | "type": "github",
554 | "url": "https://github.com/sponsors/feross"
555 | },
556 | {
557 | "type": "patreon",
558 | "url": "https://www.patreon.com/feross"
559 | },
560 | {
561 | "type": "consulting",
562 | "url": "https://feross.org/support"
563 | }
564 | ],
565 | "dependencies": {
566 | "base64-js": "^1.3.1",
567 | "ieee754": "^1.1.13"
568 | }
569 | },
570 | "node_modules/buffer-crc32": {
571 | "version": "0.2.13",
572 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
573 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
574 | "engines": {
575 | "node": "*"
576 | }
577 | },
578 | "node_modules/bytes": {
579 | "version": "3.1.2",
580 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
581 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
582 | "engines": {
583 | "node": ">= 0.8"
584 | }
585 | },
586 | "node_modules/cache-manager": {
587 | "version": "6.1.3",
588 | "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-6.1.3.tgz",
589 | "integrity": "sha512-IcBseSv1GquLxlTb1nH5KhOQQwwOjMC5hkBras+8zTYD/bRSCgT9bIah1DZ+4eKc3vcqqYtfUCI5pYvOHmDXtw==",
590 | "dependencies": {
591 | "keyv": "^5.2.1"
592 | }
593 | },
594 | "node_modules/cacheable": {
595 | "version": "1.8.4",
596 | "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.4.tgz",
597 | "integrity": "sha512-eqcPwJIM8hcx2mQIZtgrBQ7BmOf2pkL+1URswJaKRikCDw5of/lGpBTxODL1z1VuVVuxZHTuTejAMd9vyAUpLg==",
598 | "dependencies": {
599 | "hookified": "^1.5.0",
600 | "keyv": "^5.2.1"
601 | }
602 | },
603 | "node_modules/call-bind": {
604 | "version": "1.0.7",
605 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
606 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
607 | "dependencies": {
608 | "es-define-property": "^1.0.0",
609 | "es-errors": "^1.3.0",
610 | "function-bind": "^1.1.2",
611 | "get-intrinsic": "^1.2.4",
612 | "set-function-length": "^1.2.1"
613 | },
614 | "engines": {
615 | "node": ">= 0.4"
616 | },
617 | "funding": {
618 | "url": "https://github.com/sponsors/ljharb"
619 | }
620 | },
621 | "node_modules/callsites": {
622 | "version": "3.1.0",
623 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
624 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
625 | "engines": {
626 | "node": ">=6"
627 | }
628 | },
629 | "node_modules/chromium-bidi": {
630 | "version": "0.8.0",
631 | "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz",
632 | "integrity": "sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug==",
633 | "dependencies": {
634 | "mitt": "3.0.1",
635 | "urlpattern-polyfill": "10.0.0",
636 | "zod": "3.23.8"
637 | },
638 | "peerDependencies": {
639 | "devtools-protocol": "*"
640 | }
641 | },
642 | "node_modules/class-transformer": {
643 | "version": "0.5.1",
644 | "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
645 | "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
646 | },
647 | "node_modules/class-validator": {
648 | "version": "0.14.1",
649 | "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz",
650 | "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==",
651 | "dependencies": {
652 | "@types/validator": "^13.11.8",
653 | "libphonenumber-js": "^1.10.53",
654 | "validator": "^13.9.0"
655 | }
656 | },
657 | "node_modules/cliui": {
658 | "version": "8.0.1",
659 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
660 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
661 | "dependencies": {
662 | "string-width": "^4.2.0",
663 | "strip-ansi": "^6.0.1",
664 | "wrap-ansi": "^7.0.0"
665 | },
666 | "engines": {
667 | "node": ">=12"
668 | }
669 | },
670 | "node_modules/color-convert": {
671 | "version": "2.0.1",
672 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
673 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
674 | "dependencies": {
675 | "color-name": "~1.1.4"
676 | },
677 | "engines": {
678 | "node": ">=7.0.0"
679 | }
680 | },
681 | "node_modules/color-name": {
682 | "version": "1.1.4",
683 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
684 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
685 | },
686 | "node_modules/combined-stream": {
687 | "version": "1.0.8",
688 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
689 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
690 | "dependencies": {
691 | "delayed-stream": "~1.0.0"
692 | },
693 | "engines": {
694 | "node": ">= 0.8"
695 | }
696 | },
697 | "node_modules/content-disposition": {
698 | "version": "0.5.4",
699 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
700 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
701 | "dependencies": {
702 | "safe-buffer": "5.2.1"
703 | },
704 | "engines": {
705 | "node": ">= 0.6"
706 | }
707 | },
708 | "node_modules/content-type": {
709 | "version": "1.0.5",
710 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
711 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
712 | "engines": {
713 | "node": ">= 0.6"
714 | }
715 | },
716 | "node_modules/cookie": {
717 | "version": "0.7.1",
718 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
719 | "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
720 | "engines": {
721 | "node": ">= 0.6"
722 | }
723 | },
724 | "node_modules/cookie-signature": {
725 | "version": "1.0.6",
726 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
727 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
728 | },
729 | "node_modules/cosmiconfig": {
730 | "version": "9.0.0",
731 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
732 | "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
733 | "dependencies": {
734 | "env-paths": "^2.2.1",
735 | "import-fresh": "^3.3.0",
736 | "js-yaml": "^4.1.0",
737 | "parse-json": "^5.2.0"
738 | },
739 | "engines": {
740 | "node": ">=14"
741 | },
742 | "funding": {
743 | "url": "https://github.com/sponsors/d-fischer"
744 | },
745 | "peerDependencies": {
746 | "typescript": ">=4.9.5"
747 | },
748 | "peerDependenciesMeta": {
749 | "typescript": {
750 | "optional": true
751 | }
752 | }
753 | },
754 | "node_modules/create-require": {
755 | "version": "1.1.1",
756 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
757 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
758 | "dev": true
759 | },
760 | "node_modules/cssstyle": {
761 | "version": "4.1.0",
762 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
763 | "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
764 | "dependencies": {
765 | "rrweb-cssom": "^0.7.1"
766 | },
767 | "engines": {
768 | "node": ">=18"
769 | }
770 | },
771 | "node_modules/data-uri-to-buffer": {
772 | "version": "6.0.2",
773 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
774 | "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
775 | "engines": {
776 | "node": ">= 14"
777 | }
778 | },
779 | "node_modules/data-urls": {
780 | "version": "5.0.0",
781 | "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
782 | "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
783 | "dependencies": {
784 | "whatwg-mimetype": "^4.0.0",
785 | "whatwg-url": "^14.0.0"
786 | },
787 | "engines": {
788 | "node": ">=18"
789 | }
790 | },
791 | "node_modules/debug": {
792 | "version": "2.6.9",
793 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
794 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
795 | "dependencies": {
796 | "ms": "2.0.0"
797 | }
798 | },
799 | "node_modules/decimal.js": {
800 | "version": "10.4.3",
801 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
802 | "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
803 | },
804 | "node_modules/define-data-property": {
805 | "version": "1.1.4",
806 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
807 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
808 | "dependencies": {
809 | "es-define-property": "^1.0.0",
810 | "es-errors": "^1.3.0",
811 | "gopd": "^1.0.1"
812 | },
813 | "engines": {
814 | "node": ">= 0.4"
815 | },
816 | "funding": {
817 | "url": "https://github.com/sponsors/ljharb"
818 | }
819 | },
820 | "node_modules/degenerator": {
821 | "version": "5.0.1",
822 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
823 | "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
824 | "dependencies": {
825 | "ast-types": "^0.13.4",
826 | "escodegen": "^2.1.0",
827 | "esprima": "^4.0.1"
828 | },
829 | "engines": {
830 | "node": ">= 14"
831 | }
832 | },
833 | "node_modules/delayed-stream": {
834 | "version": "1.0.0",
835 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
836 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
837 | "engines": {
838 | "node": ">=0.4.0"
839 | }
840 | },
841 | "node_modules/depd": {
842 | "version": "2.0.0",
843 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
844 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
845 | "engines": {
846 | "node": ">= 0.8"
847 | }
848 | },
849 | "node_modules/destroy": {
850 | "version": "1.2.0",
851 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
852 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
853 | "engines": {
854 | "node": ">= 0.8",
855 | "npm": "1.2.8000 || >= 1.4.16"
856 | }
857 | },
858 | "node_modules/devtools-protocol": {
859 | "version": "0.0.1367902",
860 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz",
861 | "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg=="
862 | },
863 | "node_modules/diff": {
864 | "version": "4.0.2",
865 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
866 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
867 | "dev": true,
868 | "engines": {
869 | "node": ">=0.3.1"
870 | }
871 | },
872 | "node_modules/ee-first": {
873 | "version": "1.1.1",
874 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
875 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
876 | },
877 | "node_modules/emoji-regex": {
878 | "version": "8.0.0",
879 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
880 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
881 | },
882 | "node_modules/encodeurl": {
883 | "version": "2.0.0",
884 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
885 | "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
886 | "engines": {
887 | "node": ">= 0.8"
888 | }
889 | },
890 | "node_modules/end-of-stream": {
891 | "version": "1.4.4",
892 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
893 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
894 | "dependencies": {
895 | "once": "^1.4.0"
896 | }
897 | },
898 | "node_modules/entities": {
899 | "version": "4.5.0",
900 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
901 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
902 | "engines": {
903 | "node": ">=0.12"
904 | },
905 | "funding": {
906 | "url": "https://github.com/fb55/entities?sponsor=1"
907 | }
908 | },
909 | "node_modules/env-paths": {
910 | "version": "2.2.1",
911 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
912 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
913 | "engines": {
914 | "node": ">=6"
915 | }
916 | },
917 | "node_modules/error-ex": {
918 | "version": "1.3.2",
919 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
920 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
921 | "dependencies": {
922 | "is-arrayish": "^0.2.1"
923 | }
924 | },
925 | "node_modules/es-define-property": {
926 | "version": "1.0.0",
927 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
928 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
929 | "dependencies": {
930 | "get-intrinsic": "^1.2.4"
931 | },
932 | "engines": {
933 | "node": ">= 0.4"
934 | }
935 | },
936 | "node_modules/es-errors": {
937 | "version": "1.3.0",
938 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
939 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
940 | "engines": {
941 | "node": ">= 0.4"
942 | }
943 | },
944 | "node_modules/escalade": {
945 | "version": "3.2.0",
946 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
947 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
948 | "engines": {
949 | "node": ">=6"
950 | }
951 | },
952 | "node_modules/escape-html": {
953 | "version": "1.0.3",
954 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
955 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
956 | },
957 | "node_modules/escodegen": {
958 | "version": "2.1.0",
959 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
960 | "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
961 | "dependencies": {
962 | "esprima": "^4.0.1",
963 | "estraverse": "^5.2.0",
964 | "esutils": "^2.0.2"
965 | },
966 | "bin": {
967 | "escodegen": "bin/escodegen.js",
968 | "esgenerate": "bin/esgenerate.js"
969 | },
970 | "engines": {
971 | "node": ">=6.0"
972 | },
973 | "optionalDependencies": {
974 | "source-map": "~0.6.1"
975 | }
976 | },
977 | "node_modules/esprima": {
978 | "version": "4.0.1",
979 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
980 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
981 | "bin": {
982 | "esparse": "bin/esparse.js",
983 | "esvalidate": "bin/esvalidate.js"
984 | },
985 | "engines": {
986 | "node": ">=4"
987 | }
988 | },
989 | "node_modules/estraverse": {
990 | "version": "5.3.0",
991 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
992 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
993 | "engines": {
994 | "node": ">=4.0"
995 | }
996 | },
997 | "node_modules/esutils": {
998 | "version": "2.0.3",
999 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1000 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1001 | "engines": {
1002 | "node": ">=0.10.0"
1003 | }
1004 | },
1005 | "node_modules/etag": {
1006 | "version": "1.8.1",
1007 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1008 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
1009 | "engines": {
1010 | "node": ">= 0.6"
1011 | }
1012 | },
1013 | "node_modules/express": {
1014 | "version": "4.21.1",
1015 | "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
1016 | "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
1017 | "dependencies": {
1018 | "accepts": "~1.3.8",
1019 | "array-flatten": "1.1.1",
1020 | "body-parser": "1.20.3",
1021 | "content-disposition": "0.5.4",
1022 | "content-type": "~1.0.4",
1023 | "cookie": "0.7.1",
1024 | "cookie-signature": "1.0.6",
1025 | "debug": "2.6.9",
1026 | "depd": "2.0.0",
1027 | "encodeurl": "~2.0.0",
1028 | "escape-html": "~1.0.3",
1029 | "etag": "~1.8.1",
1030 | "finalhandler": "1.3.1",
1031 | "fresh": "0.5.2",
1032 | "http-errors": "2.0.0",
1033 | "merge-descriptors": "1.0.3",
1034 | "methods": "~1.1.2",
1035 | "on-finished": "2.4.1",
1036 | "parseurl": "~1.3.3",
1037 | "path-to-regexp": "0.1.10",
1038 | "proxy-addr": "~2.0.7",
1039 | "qs": "6.13.0",
1040 | "range-parser": "~1.2.1",
1041 | "safe-buffer": "5.2.1",
1042 | "send": "0.19.0",
1043 | "serve-static": "1.16.2",
1044 | "setprototypeof": "1.2.0",
1045 | "statuses": "2.0.1",
1046 | "type-is": "~1.6.18",
1047 | "utils-merge": "1.0.1",
1048 | "vary": "~1.1.2"
1049 | },
1050 | "engines": {
1051 | "node": ">= 0.10.0"
1052 | }
1053 | },
1054 | "node_modules/extract-zip": {
1055 | "version": "2.0.1",
1056 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
1057 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
1058 | "dependencies": {
1059 | "debug": "^4.1.1",
1060 | "get-stream": "^5.1.0",
1061 | "yauzl": "^2.10.0"
1062 | },
1063 | "bin": {
1064 | "extract-zip": "cli.js"
1065 | },
1066 | "engines": {
1067 | "node": ">= 10.17.0"
1068 | },
1069 | "optionalDependencies": {
1070 | "@types/yauzl": "^2.9.1"
1071 | }
1072 | },
1073 | "node_modules/extract-zip/node_modules/debug": {
1074 | "version": "4.3.7",
1075 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1076 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1077 | "dependencies": {
1078 | "ms": "^2.1.3"
1079 | },
1080 | "engines": {
1081 | "node": ">=6.0"
1082 | },
1083 | "peerDependenciesMeta": {
1084 | "supports-color": {
1085 | "optional": true
1086 | }
1087 | }
1088 | },
1089 | "node_modules/extract-zip/node_modules/ms": {
1090 | "version": "2.1.3",
1091 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1092 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1093 | },
1094 | "node_modules/fast-fifo": {
1095 | "version": "1.3.2",
1096 | "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
1097 | "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
1098 | },
1099 | "node_modules/fd-slicer": {
1100 | "version": "1.1.0",
1101 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
1102 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
1103 | "dependencies": {
1104 | "pend": "~1.2.0"
1105 | }
1106 | },
1107 | "node_modules/file-type": {
1108 | "version": "16.5.4",
1109 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
1110 | "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
1111 | "dependencies": {
1112 | "readable-web-to-node-stream": "^3.0.0",
1113 | "strtok3": "^6.2.4",
1114 | "token-types": "^4.1.1"
1115 | },
1116 | "engines": {
1117 | "node": ">=10"
1118 | },
1119 | "funding": {
1120 | "url": "https://github.com/sindresorhus/file-type?sponsor=1"
1121 | }
1122 | },
1123 | "node_modules/finalhandler": {
1124 | "version": "1.3.1",
1125 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
1126 | "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
1127 | "dependencies": {
1128 | "debug": "2.6.9",
1129 | "encodeurl": "~2.0.0",
1130 | "escape-html": "~1.0.3",
1131 | "on-finished": "2.4.1",
1132 | "parseurl": "~1.3.3",
1133 | "statuses": "2.0.1",
1134 | "unpipe": "~1.0.0"
1135 | },
1136 | "engines": {
1137 | "node": ">= 0.8"
1138 | }
1139 | },
1140 | "node_modules/form-data": {
1141 | "version": "4.0.1",
1142 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
1143 | "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
1144 | "dependencies": {
1145 | "asynckit": "^0.4.0",
1146 | "combined-stream": "^1.0.8",
1147 | "mime-types": "^2.1.12"
1148 | },
1149 | "engines": {
1150 | "node": ">= 6"
1151 | }
1152 | },
1153 | "node_modules/forwarded": {
1154 | "version": "0.2.0",
1155 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1156 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
1157 | "engines": {
1158 | "node": ">= 0.6"
1159 | }
1160 | },
1161 | "node_modules/fresh": {
1162 | "version": "0.5.2",
1163 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1164 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
1165 | "engines": {
1166 | "node": ">= 0.6"
1167 | }
1168 | },
1169 | "node_modules/fs-extra": {
1170 | "version": "11.2.0",
1171 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
1172 | "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
1173 | "dependencies": {
1174 | "graceful-fs": "^4.2.0",
1175 | "jsonfile": "^6.0.1",
1176 | "universalify": "^2.0.0"
1177 | },
1178 | "engines": {
1179 | "node": ">=14.14"
1180 | }
1181 | },
1182 | "node_modules/function-bind": {
1183 | "version": "1.1.2",
1184 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1185 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1186 | "funding": {
1187 | "url": "https://github.com/sponsors/ljharb"
1188 | }
1189 | },
1190 | "node_modules/get-caller-file": {
1191 | "version": "2.0.5",
1192 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1193 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1194 | "engines": {
1195 | "node": "6.* || 8.* || >= 10.*"
1196 | }
1197 | },
1198 | "node_modules/get-intrinsic": {
1199 | "version": "1.2.4",
1200 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
1201 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
1202 | "dependencies": {
1203 | "es-errors": "^1.3.0",
1204 | "function-bind": "^1.1.2",
1205 | "has-proto": "^1.0.1",
1206 | "has-symbols": "^1.0.3",
1207 | "hasown": "^2.0.0"
1208 | },
1209 | "engines": {
1210 | "node": ">= 0.4"
1211 | },
1212 | "funding": {
1213 | "url": "https://github.com/sponsors/ljharb"
1214 | }
1215 | },
1216 | "node_modules/get-stream": {
1217 | "version": "5.2.0",
1218 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
1219 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
1220 | "dependencies": {
1221 | "pump": "^3.0.0"
1222 | },
1223 | "engines": {
1224 | "node": ">=8"
1225 | },
1226 | "funding": {
1227 | "url": "https://github.com/sponsors/sindresorhus"
1228 | }
1229 | },
1230 | "node_modules/get-uri": {
1231 | "version": "6.0.3",
1232 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz",
1233 | "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==",
1234 | "dependencies": {
1235 | "basic-ftp": "^5.0.2",
1236 | "data-uri-to-buffer": "^6.0.2",
1237 | "debug": "^4.3.4",
1238 | "fs-extra": "^11.2.0"
1239 | },
1240 | "engines": {
1241 | "node": ">= 14"
1242 | }
1243 | },
1244 | "node_modules/get-uri/node_modules/debug": {
1245 | "version": "4.3.7",
1246 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1247 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1248 | "dependencies": {
1249 | "ms": "^2.1.3"
1250 | },
1251 | "engines": {
1252 | "node": ">=6.0"
1253 | },
1254 | "peerDependenciesMeta": {
1255 | "supports-color": {
1256 | "optional": true
1257 | }
1258 | }
1259 | },
1260 | "node_modules/get-uri/node_modules/ms": {
1261 | "version": "2.1.3",
1262 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1263 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1264 | },
1265 | "node_modules/gopd": {
1266 | "version": "1.0.1",
1267 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
1268 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
1269 | "dependencies": {
1270 | "get-intrinsic": "^1.1.3"
1271 | },
1272 | "funding": {
1273 | "url": "https://github.com/sponsors/ljharb"
1274 | }
1275 | },
1276 | "node_modules/graceful-fs": {
1277 | "version": "4.2.11",
1278 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1279 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
1280 | },
1281 | "node_modules/handlebars": {
1282 | "version": "4.7.8",
1283 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
1284 | "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
1285 | "dependencies": {
1286 | "minimist": "^1.2.5",
1287 | "neo-async": "^2.6.2",
1288 | "source-map": "^0.6.1",
1289 | "wordwrap": "^1.0.0"
1290 | },
1291 | "bin": {
1292 | "handlebars": "bin/handlebars"
1293 | },
1294 | "engines": {
1295 | "node": ">=0.4.7"
1296 | },
1297 | "optionalDependencies": {
1298 | "uglify-js": "^3.1.4"
1299 | }
1300 | },
1301 | "node_modules/has-property-descriptors": {
1302 | "version": "1.0.2",
1303 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
1304 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
1305 | "dependencies": {
1306 | "es-define-property": "^1.0.0"
1307 | },
1308 | "funding": {
1309 | "url": "https://github.com/sponsors/ljharb"
1310 | }
1311 | },
1312 | "node_modules/has-proto": {
1313 | "version": "1.0.3",
1314 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
1315 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
1316 | "engines": {
1317 | "node": ">= 0.4"
1318 | },
1319 | "funding": {
1320 | "url": "https://github.com/sponsors/ljharb"
1321 | }
1322 | },
1323 | "node_modules/has-symbols": {
1324 | "version": "1.0.3",
1325 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1326 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
1327 | "engines": {
1328 | "node": ">= 0.4"
1329 | },
1330 | "funding": {
1331 | "url": "https://github.com/sponsors/ljharb"
1332 | }
1333 | },
1334 | "node_modules/hasown": {
1335 | "version": "2.0.2",
1336 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1337 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1338 | "dependencies": {
1339 | "function-bind": "^1.1.2"
1340 | },
1341 | "engines": {
1342 | "node": ">= 0.4"
1343 | }
1344 | },
1345 | "node_modules/hookified": {
1346 | "version": "1.5.0",
1347 | "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.5.0.tgz",
1348 | "integrity": "sha512-4U0zw2ibOws7kfGdNCIL6oRg+t6ITxkgi9kUaJ71IDp0ZATHjvY6o7l90RBa/R8H2qOKl47SZISA5a3hNnei1g=="
1349 | },
1350 | "node_modules/html-encoding-sniffer": {
1351 | "version": "4.0.0",
1352 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
1353 | "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
1354 | "dependencies": {
1355 | "whatwg-encoding": "^3.1.1"
1356 | },
1357 | "engines": {
1358 | "node": ">=18"
1359 | }
1360 | },
1361 | "node_modules/http-errors": {
1362 | "version": "2.0.0",
1363 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1364 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1365 | "dependencies": {
1366 | "depd": "2.0.0",
1367 | "inherits": "2.0.4",
1368 | "setprototypeof": "1.2.0",
1369 | "statuses": "2.0.1",
1370 | "toidentifier": "1.0.1"
1371 | },
1372 | "engines": {
1373 | "node": ">= 0.8"
1374 | }
1375 | },
1376 | "node_modules/http-proxy-agent": {
1377 | "version": "7.0.2",
1378 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
1379 | "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
1380 | "dependencies": {
1381 | "agent-base": "^7.1.0",
1382 | "debug": "^4.3.4"
1383 | },
1384 | "engines": {
1385 | "node": ">= 14"
1386 | }
1387 | },
1388 | "node_modules/http-proxy-agent/node_modules/debug": {
1389 | "version": "4.3.7",
1390 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1391 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1392 | "dependencies": {
1393 | "ms": "^2.1.3"
1394 | },
1395 | "engines": {
1396 | "node": ">=6.0"
1397 | },
1398 | "peerDependenciesMeta": {
1399 | "supports-color": {
1400 | "optional": true
1401 | }
1402 | }
1403 | },
1404 | "node_modules/http-proxy-agent/node_modules/ms": {
1405 | "version": "2.1.3",
1406 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1407 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1408 | },
1409 | "node_modules/https-proxy-agent": {
1410 | "version": "7.0.5",
1411 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
1412 | "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
1413 | "dependencies": {
1414 | "agent-base": "^7.0.2",
1415 | "debug": "4"
1416 | },
1417 | "engines": {
1418 | "node": ">= 14"
1419 | }
1420 | },
1421 | "node_modules/https-proxy-agent/node_modules/debug": {
1422 | "version": "4.3.7",
1423 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1424 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1425 | "dependencies": {
1426 | "ms": "^2.1.3"
1427 | },
1428 | "engines": {
1429 | "node": ">=6.0"
1430 | },
1431 | "peerDependenciesMeta": {
1432 | "supports-color": {
1433 | "optional": true
1434 | }
1435 | }
1436 | },
1437 | "node_modules/https-proxy-agent/node_modules/ms": {
1438 | "version": "2.1.3",
1439 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1440 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1441 | },
1442 | "node_modules/iconv-lite": {
1443 | "version": "0.4.24",
1444 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1445 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1446 | "dependencies": {
1447 | "safer-buffer": ">= 2.1.2 < 3"
1448 | },
1449 | "engines": {
1450 | "node": ">=0.10.0"
1451 | }
1452 | },
1453 | "node_modules/ieee754": {
1454 | "version": "1.2.1",
1455 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
1456 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
1457 | "funding": [
1458 | {
1459 | "type": "github",
1460 | "url": "https://github.com/sponsors/feross"
1461 | },
1462 | {
1463 | "type": "patreon",
1464 | "url": "https://www.patreon.com/feross"
1465 | },
1466 | {
1467 | "type": "consulting",
1468 | "url": "https://feross.org/support"
1469 | }
1470 | ]
1471 | },
1472 | "node_modules/import-fresh": {
1473 | "version": "3.3.0",
1474 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1475 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1476 | "dependencies": {
1477 | "parent-module": "^1.0.0",
1478 | "resolve-from": "^4.0.0"
1479 | },
1480 | "engines": {
1481 | "node": ">=6"
1482 | },
1483 | "funding": {
1484 | "url": "https://github.com/sponsors/sindresorhus"
1485 | }
1486 | },
1487 | "node_modules/inherits": {
1488 | "version": "2.0.4",
1489 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1490 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1491 | },
1492 | "node_modules/ip-address": {
1493 | "version": "9.0.5",
1494 | "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
1495 | "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
1496 | "dependencies": {
1497 | "jsbn": "1.1.0",
1498 | "sprintf-js": "^1.1.3"
1499 | },
1500 | "engines": {
1501 | "node": ">= 12"
1502 | }
1503 | },
1504 | "node_modules/ipaddr.js": {
1505 | "version": "1.9.1",
1506 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1507 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
1508 | "engines": {
1509 | "node": ">= 0.10"
1510 | }
1511 | },
1512 | "node_modules/is-arrayish": {
1513 | "version": "0.2.1",
1514 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1515 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
1516 | },
1517 | "node_modules/is-fullwidth-code-point": {
1518 | "version": "3.0.0",
1519 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1520 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1521 | "engines": {
1522 | "node": ">=8"
1523 | }
1524 | },
1525 | "node_modules/is-potential-custom-element-name": {
1526 | "version": "1.0.1",
1527 | "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
1528 | "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
1529 | },
1530 | "node_modules/js-tokens": {
1531 | "version": "4.0.0",
1532 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1533 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1534 | },
1535 | "node_modules/js-yaml": {
1536 | "version": "4.1.0",
1537 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1538 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1539 | "dependencies": {
1540 | "argparse": "^2.0.1"
1541 | },
1542 | "bin": {
1543 | "js-yaml": "bin/js-yaml.js"
1544 | }
1545 | },
1546 | "node_modules/jsbn": {
1547 | "version": "1.1.0",
1548 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
1549 | "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
1550 | },
1551 | "node_modules/jsdom": {
1552 | "version": "25.0.1",
1553 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
1554 | "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
1555 | "dependencies": {
1556 | "cssstyle": "^4.1.0",
1557 | "data-urls": "^5.0.0",
1558 | "decimal.js": "^10.4.3",
1559 | "form-data": "^4.0.0",
1560 | "html-encoding-sniffer": "^4.0.0",
1561 | "http-proxy-agent": "^7.0.2",
1562 | "https-proxy-agent": "^7.0.5",
1563 | "is-potential-custom-element-name": "^1.0.1",
1564 | "nwsapi": "^2.2.12",
1565 | "parse5": "^7.1.2",
1566 | "rrweb-cssom": "^0.7.1",
1567 | "saxes": "^6.0.0",
1568 | "symbol-tree": "^3.2.4",
1569 | "tough-cookie": "^5.0.0",
1570 | "w3c-xmlserializer": "^5.0.0",
1571 | "webidl-conversions": "^7.0.0",
1572 | "whatwg-encoding": "^3.1.1",
1573 | "whatwg-mimetype": "^4.0.0",
1574 | "whatwg-url": "^14.0.0",
1575 | "ws": "^8.18.0",
1576 | "xml-name-validator": "^5.0.0"
1577 | },
1578 | "engines": {
1579 | "node": ">=18"
1580 | },
1581 | "peerDependencies": {
1582 | "canvas": "^2.11.2"
1583 | },
1584 | "peerDependenciesMeta": {
1585 | "canvas": {
1586 | "optional": true
1587 | }
1588 | }
1589 | },
1590 | "node_modules/json-parse-even-better-errors": {
1591 | "version": "2.3.1",
1592 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
1593 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
1594 | },
1595 | "node_modules/jsonfile": {
1596 | "version": "6.1.0",
1597 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
1598 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
1599 | "dependencies": {
1600 | "universalify": "^2.0.0"
1601 | },
1602 | "optionalDependencies": {
1603 | "graceful-fs": "^4.1.6"
1604 | }
1605 | },
1606 | "node_modules/keyv": {
1607 | "version": "5.2.1",
1608 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.2.1.tgz",
1609 | "integrity": "sha512-tpIgCaY02VCW2Pz0zAn4guyct+IeH6Mb5wZdOvpe4oqXeQOJO0C3Wo8fTnf7P3ZD83Vr9kghbkNmzG3lTOhy/A==",
1610 | "dependencies": {
1611 | "@keyv/serialize": "*"
1612 | }
1613 | },
1614 | "node_modules/libphonenumber-js": {
1615 | "version": "1.11.14",
1616 | "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.14.tgz",
1617 | "integrity": "sha512-sexvAfwcW1Lqws4zFp8heAtAEXbEDnvkYCEGzvOoMgZR7JhXo/IkE9MkkGACgBed5fWqh3ShBGnJBdDnU9N8EQ=="
1618 | },
1619 | "node_modules/lines-and-columns": {
1620 | "version": "1.2.4",
1621 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1622 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
1623 | },
1624 | "node_modules/lodash": {
1625 | "version": "4.17.21",
1626 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1627 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
1628 | },
1629 | "node_modules/lru-cache": {
1630 | "version": "7.18.3",
1631 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
1632 | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
1633 | "engines": {
1634 | "node": ">=12"
1635 | }
1636 | },
1637 | "node_modules/make-error": {
1638 | "version": "1.3.6",
1639 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
1640 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
1641 | "dev": true
1642 | },
1643 | "node_modules/media-typer": {
1644 | "version": "0.3.0",
1645 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1646 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
1647 | "engines": {
1648 | "node": ">= 0.6"
1649 | }
1650 | },
1651 | "node_modules/merge-descriptors": {
1652 | "version": "1.0.3",
1653 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
1654 | "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
1655 | "funding": {
1656 | "url": "https://github.com/sponsors/sindresorhus"
1657 | }
1658 | },
1659 | "node_modules/methods": {
1660 | "version": "1.1.2",
1661 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1662 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
1663 | "engines": {
1664 | "node": ">= 0.6"
1665 | }
1666 | },
1667 | "node_modules/mime": {
1668 | "version": "1.6.0",
1669 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1670 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1671 | "bin": {
1672 | "mime": "cli.js"
1673 | },
1674 | "engines": {
1675 | "node": ">=4"
1676 | }
1677 | },
1678 | "node_modules/mime-db": {
1679 | "version": "1.52.0",
1680 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1681 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1682 | "engines": {
1683 | "node": ">= 0.6"
1684 | }
1685 | },
1686 | "node_modules/mime-types": {
1687 | "version": "2.1.35",
1688 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1689 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1690 | "dependencies": {
1691 | "mime-db": "1.52.0"
1692 | },
1693 | "engines": {
1694 | "node": ">= 0.6"
1695 | }
1696 | },
1697 | "node_modules/minimist": {
1698 | "version": "1.2.8",
1699 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1700 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1701 | "funding": {
1702 | "url": "https://github.com/sponsors/ljharb"
1703 | }
1704 | },
1705 | "node_modules/mitt": {
1706 | "version": "3.0.1",
1707 | "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
1708 | "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
1709 | },
1710 | "node_modules/moment": {
1711 | "version": "2.30.1",
1712 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
1713 | "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
1714 | "engines": {
1715 | "node": "*"
1716 | }
1717 | },
1718 | "node_modules/ms": {
1719 | "version": "2.0.0",
1720 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1721 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1722 | },
1723 | "node_modules/negotiator": {
1724 | "version": "0.6.3",
1725 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1726 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1727 | "engines": {
1728 | "node": ">= 0.6"
1729 | }
1730 | },
1731 | "node_modules/neo-async": {
1732 | "version": "2.6.2",
1733 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
1734 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
1735 | },
1736 | "node_modules/netmask": {
1737 | "version": "2.0.2",
1738 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
1739 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
1740 | "engines": {
1741 | "node": ">= 0.4.0"
1742 | }
1743 | },
1744 | "node_modules/nwsapi": {
1745 | "version": "2.2.13",
1746 | "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz",
1747 | "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ=="
1748 | },
1749 | "node_modules/object-inspect": {
1750 | "version": "1.13.3",
1751 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
1752 | "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
1753 | "engines": {
1754 | "node": ">= 0.4"
1755 | },
1756 | "funding": {
1757 | "url": "https://github.com/sponsors/ljharb"
1758 | }
1759 | },
1760 | "node_modules/on-finished": {
1761 | "version": "2.4.1",
1762 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1763 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1764 | "dependencies": {
1765 | "ee-first": "1.1.1"
1766 | },
1767 | "engines": {
1768 | "node": ">= 0.8"
1769 | }
1770 | },
1771 | "node_modules/once": {
1772 | "version": "1.4.0",
1773 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1774 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1775 | "dependencies": {
1776 | "wrappy": "1"
1777 | }
1778 | },
1779 | "node_modules/pac-proxy-agent": {
1780 | "version": "7.0.2",
1781 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz",
1782 | "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==",
1783 | "dependencies": {
1784 | "@tootallnate/quickjs-emscripten": "^0.23.0",
1785 | "agent-base": "^7.0.2",
1786 | "debug": "^4.3.4",
1787 | "get-uri": "^6.0.1",
1788 | "http-proxy-agent": "^7.0.0",
1789 | "https-proxy-agent": "^7.0.5",
1790 | "pac-resolver": "^7.0.1",
1791 | "socks-proxy-agent": "^8.0.4"
1792 | },
1793 | "engines": {
1794 | "node": ">= 14"
1795 | }
1796 | },
1797 | "node_modules/pac-proxy-agent/node_modules/debug": {
1798 | "version": "4.3.7",
1799 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1800 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1801 | "dependencies": {
1802 | "ms": "^2.1.3"
1803 | },
1804 | "engines": {
1805 | "node": ">=6.0"
1806 | },
1807 | "peerDependenciesMeta": {
1808 | "supports-color": {
1809 | "optional": true
1810 | }
1811 | }
1812 | },
1813 | "node_modules/pac-proxy-agent/node_modules/ms": {
1814 | "version": "2.1.3",
1815 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1816 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1817 | },
1818 | "node_modules/pac-resolver": {
1819 | "version": "7.0.1",
1820 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
1821 | "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
1822 | "dependencies": {
1823 | "degenerator": "^5.0.0",
1824 | "netmask": "^2.0.2"
1825 | },
1826 | "engines": {
1827 | "node": ">= 14"
1828 | }
1829 | },
1830 | "node_modules/parent-module": {
1831 | "version": "1.0.1",
1832 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1833 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1834 | "dependencies": {
1835 | "callsites": "^3.0.0"
1836 | },
1837 | "engines": {
1838 | "node": ">=6"
1839 | }
1840 | },
1841 | "node_modules/parse-json": {
1842 | "version": "5.2.0",
1843 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
1844 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
1845 | "dependencies": {
1846 | "@babel/code-frame": "^7.0.0",
1847 | "error-ex": "^1.3.1",
1848 | "json-parse-even-better-errors": "^2.3.0",
1849 | "lines-and-columns": "^1.1.6"
1850 | },
1851 | "engines": {
1852 | "node": ">=8"
1853 | },
1854 | "funding": {
1855 | "url": "https://github.com/sponsors/sindresorhus"
1856 | }
1857 | },
1858 | "node_modules/parse5": {
1859 | "version": "7.2.1",
1860 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
1861 | "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
1862 | "dependencies": {
1863 | "entities": "^4.5.0"
1864 | },
1865 | "funding": {
1866 | "url": "https://github.com/inikulin/parse5?sponsor=1"
1867 | }
1868 | },
1869 | "node_modules/parseurl": {
1870 | "version": "1.3.3",
1871 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1872 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1873 | "engines": {
1874 | "node": ">= 0.8"
1875 | }
1876 | },
1877 | "node_modules/path-to-regexp": {
1878 | "version": "0.1.10",
1879 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
1880 | "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
1881 | },
1882 | "node_modules/peek-readable": {
1883 | "version": "4.1.0",
1884 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
1885 | "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
1886 | "engines": {
1887 | "node": ">=8"
1888 | },
1889 | "funding": {
1890 | "type": "github",
1891 | "url": "https://github.com/sponsors/Borewit"
1892 | }
1893 | },
1894 | "node_modules/pend": {
1895 | "version": "1.2.0",
1896 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
1897 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
1898 | },
1899 | "node_modules/picocolors": {
1900 | "version": "1.1.1",
1901 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1902 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
1903 | },
1904 | "node_modules/progress": {
1905 | "version": "2.0.3",
1906 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
1907 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1908 | "engines": {
1909 | "node": ">=0.4.0"
1910 | }
1911 | },
1912 | "node_modules/proxy-addr": {
1913 | "version": "2.0.7",
1914 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1915 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1916 | "dependencies": {
1917 | "forwarded": "0.2.0",
1918 | "ipaddr.js": "1.9.1"
1919 | },
1920 | "engines": {
1921 | "node": ">= 0.10"
1922 | }
1923 | },
1924 | "node_modules/proxy-agent": {
1925 | "version": "6.4.0",
1926 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz",
1927 | "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==",
1928 | "dependencies": {
1929 | "agent-base": "^7.0.2",
1930 | "debug": "^4.3.4",
1931 | "http-proxy-agent": "^7.0.1",
1932 | "https-proxy-agent": "^7.0.3",
1933 | "lru-cache": "^7.14.1",
1934 | "pac-proxy-agent": "^7.0.1",
1935 | "proxy-from-env": "^1.1.0",
1936 | "socks-proxy-agent": "^8.0.2"
1937 | },
1938 | "engines": {
1939 | "node": ">= 14"
1940 | }
1941 | },
1942 | "node_modules/proxy-agent/node_modules/debug": {
1943 | "version": "4.3.7",
1944 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1945 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1946 | "dependencies": {
1947 | "ms": "^2.1.3"
1948 | },
1949 | "engines": {
1950 | "node": ">=6.0"
1951 | },
1952 | "peerDependenciesMeta": {
1953 | "supports-color": {
1954 | "optional": true
1955 | }
1956 | }
1957 | },
1958 | "node_modules/proxy-agent/node_modules/ms": {
1959 | "version": "2.1.3",
1960 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1961 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1962 | },
1963 | "node_modules/proxy-from-env": {
1964 | "version": "1.1.0",
1965 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1966 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
1967 | },
1968 | "node_modules/pump": {
1969 | "version": "3.0.2",
1970 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
1971 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
1972 | "dependencies": {
1973 | "end-of-stream": "^1.1.0",
1974 | "once": "^1.3.1"
1975 | }
1976 | },
1977 | "node_modules/punycode": {
1978 | "version": "2.3.1",
1979 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
1980 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
1981 | "engines": {
1982 | "node": ">=6"
1983 | }
1984 | },
1985 | "node_modules/puppeteer": {
1986 | "version": "23.8.0",
1987 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.8.0.tgz",
1988 | "integrity": "sha512-MFWDMWoCcOpwNwQIjA9gPKWrEUbj8bLCzkK56w5lZPMUT6wK4FfpgOEPxKffVmXEMYMZzgcjxzqy15b/Q1ibaw==",
1989 | "hasInstallScript": true,
1990 | "dependencies": {
1991 | "@puppeteer/browsers": "2.4.1",
1992 | "chromium-bidi": "0.8.0",
1993 | "cosmiconfig": "^9.0.0",
1994 | "devtools-protocol": "0.0.1367902",
1995 | "puppeteer-core": "23.8.0",
1996 | "typed-query-selector": "^2.12.0"
1997 | },
1998 | "bin": {
1999 | "puppeteer": "lib/cjs/puppeteer/node/cli.js"
2000 | },
2001 | "engines": {
2002 | "node": ">=18"
2003 | }
2004 | },
2005 | "node_modules/puppeteer-core": {
2006 | "version": "23.8.0",
2007 | "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.8.0.tgz",
2008 | "integrity": "sha512-c2ymGN2M//We7pC+JhP2dE/g4+qnT89BO+EMSZyJmecN3DN6RNqErA7eH7DrWoNIcU75r2nP4VHa4pswAL6NVg==",
2009 | "dependencies": {
2010 | "@puppeteer/browsers": "2.4.1",
2011 | "chromium-bidi": "0.8.0",
2012 | "debug": "^4.3.7",
2013 | "devtools-protocol": "0.0.1367902",
2014 | "typed-query-selector": "^2.12.0",
2015 | "ws": "^8.18.0"
2016 | },
2017 | "engines": {
2018 | "node": ">=18"
2019 | }
2020 | },
2021 | "node_modules/puppeteer-core/node_modules/debug": {
2022 | "version": "4.3.7",
2023 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
2024 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
2025 | "dependencies": {
2026 | "ms": "^2.1.3"
2027 | },
2028 | "engines": {
2029 | "node": ">=6.0"
2030 | },
2031 | "peerDependenciesMeta": {
2032 | "supports-color": {
2033 | "optional": true
2034 | }
2035 | }
2036 | },
2037 | "node_modules/puppeteer-core/node_modules/ms": {
2038 | "version": "2.1.3",
2039 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2040 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
2041 | },
2042 | "node_modules/qs": {
2043 | "version": "6.13.0",
2044 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
2045 | "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
2046 | "dependencies": {
2047 | "side-channel": "^1.0.6"
2048 | },
2049 | "engines": {
2050 | "node": ">=0.6"
2051 | },
2052 | "funding": {
2053 | "url": "https://github.com/sponsors/ljharb"
2054 | }
2055 | },
2056 | "node_modules/queue-tick": {
2057 | "version": "1.0.1",
2058 | "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
2059 | "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
2060 | },
2061 | "node_modules/range-parser": {
2062 | "version": "1.2.1",
2063 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
2064 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
2065 | "engines": {
2066 | "node": ">= 0.6"
2067 | }
2068 | },
2069 | "node_modules/raw-body": {
2070 | "version": "2.5.2",
2071 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
2072 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
2073 | "dependencies": {
2074 | "bytes": "3.1.2",
2075 | "http-errors": "2.0.0",
2076 | "iconv-lite": "0.4.24",
2077 | "unpipe": "1.0.0"
2078 | },
2079 | "engines": {
2080 | "node": ">= 0.8"
2081 | }
2082 | },
2083 | "node_modules/readable-web-to-node-stream": {
2084 | "version": "3.0.2",
2085 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
2086 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
2087 | "dependencies": {
2088 | "readable-stream": "^3.6.0"
2089 | },
2090 | "engines": {
2091 | "node": ">=8"
2092 | },
2093 | "funding": {
2094 | "type": "github",
2095 | "url": "https://github.com/sponsors/Borewit"
2096 | }
2097 | },
2098 | "node_modules/readable-web-to-node-stream/node_modules/readable-stream": {
2099 | "version": "3.6.2",
2100 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
2101 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
2102 | "dependencies": {
2103 | "inherits": "^2.0.3",
2104 | "string_decoder": "^1.1.1",
2105 | "util-deprecate": "^1.0.1"
2106 | },
2107 | "engines": {
2108 | "node": ">= 6"
2109 | }
2110 | },
2111 | "node_modules/require-directory": {
2112 | "version": "2.1.1",
2113 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2114 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
2115 | "engines": {
2116 | "node": ">=0.10.0"
2117 | }
2118 | },
2119 | "node_modules/resolve-from": {
2120 | "version": "4.0.0",
2121 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2122 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2123 | "engines": {
2124 | "node": ">=4"
2125 | }
2126 | },
2127 | "node_modules/rrweb-cssom": {
2128 | "version": "0.7.1",
2129 | "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
2130 | "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg=="
2131 | },
2132 | "node_modules/safe-buffer": {
2133 | "version": "5.2.1",
2134 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2135 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
2136 | "funding": [
2137 | {
2138 | "type": "github",
2139 | "url": "https://github.com/sponsors/feross"
2140 | },
2141 | {
2142 | "type": "patreon",
2143 | "url": "https://www.patreon.com/feross"
2144 | },
2145 | {
2146 | "type": "consulting",
2147 | "url": "https://feross.org/support"
2148 | }
2149 | ]
2150 | },
2151 | "node_modules/safer-buffer": {
2152 | "version": "2.1.2",
2153 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2154 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2155 | },
2156 | "node_modules/saxes": {
2157 | "version": "6.0.0",
2158 | "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
2159 | "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
2160 | "dependencies": {
2161 | "xmlchars": "^2.2.0"
2162 | },
2163 | "engines": {
2164 | "node": ">=v12.22.7"
2165 | }
2166 | },
2167 | "node_modules/send": {
2168 | "version": "0.19.0",
2169 | "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
2170 | "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
2171 | "dependencies": {
2172 | "debug": "2.6.9",
2173 | "depd": "2.0.0",
2174 | "destroy": "1.2.0",
2175 | "encodeurl": "~1.0.2",
2176 | "escape-html": "~1.0.3",
2177 | "etag": "~1.8.1",
2178 | "fresh": "0.5.2",
2179 | "http-errors": "2.0.0",
2180 | "mime": "1.6.0",
2181 | "ms": "2.1.3",
2182 | "on-finished": "2.4.1",
2183 | "range-parser": "~1.2.1",
2184 | "statuses": "2.0.1"
2185 | },
2186 | "engines": {
2187 | "node": ">= 0.8.0"
2188 | }
2189 | },
2190 | "node_modules/send/node_modules/encodeurl": {
2191 | "version": "1.0.2",
2192 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
2193 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
2194 | "engines": {
2195 | "node": ">= 0.8"
2196 | }
2197 | },
2198 | "node_modules/send/node_modules/ms": {
2199 | "version": "2.1.3",
2200 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2201 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
2202 | },
2203 | "node_modules/serve-static": {
2204 | "version": "1.16.2",
2205 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
2206 | "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
2207 | "dependencies": {
2208 | "encodeurl": "~2.0.0",
2209 | "escape-html": "~1.0.3",
2210 | "parseurl": "~1.3.3",
2211 | "send": "0.19.0"
2212 | },
2213 | "engines": {
2214 | "node": ">= 0.8.0"
2215 | }
2216 | },
2217 | "node_modules/set-function-length": {
2218 | "version": "1.2.2",
2219 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
2220 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
2221 | "dependencies": {
2222 | "define-data-property": "^1.1.4",
2223 | "es-errors": "^1.3.0",
2224 | "function-bind": "^1.1.2",
2225 | "get-intrinsic": "^1.2.4",
2226 | "gopd": "^1.0.1",
2227 | "has-property-descriptors": "^1.0.2"
2228 | },
2229 | "engines": {
2230 | "node": ">= 0.4"
2231 | }
2232 | },
2233 | "node_modules/setprototypeof": {
2234 | "version": "1.2.0",
2235 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
2236 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
2237 | },
2238 | "node_modules/side-channel": {
2239 | "version": "1.0.6",
2240 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
2241 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
2242 | "dependencies": {
2243 | "call-bind": "^1.0.7",
2244 | "es-errors": "^1.3.0",
2245 | "get-intrinsic": "^1.2.4",
2246 | "object-inspect": "^1.13.1"
2247 | },
2248 | "engines": {
2249 | "node": ">= 0.4"
2250 | },
2251 | "funding": {
2252 | "url": "https://github.com/sponsors/ljharb"
2253 | }
2254 | },
2255 | "node_modules/smart-buffer": {
2256 | "version": "4.2.0",
2257 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
2258 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
2259 | "engines": {
2260 | "node": ">= 6.0.0",
2261 | "npm": ">= 3.0.0"
2262 | }
2263 | },
2264 | "node_modules/socks": {
2265 | "version": "2.8.3",
2266 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
2267 | "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
2268 | "dependencies": {
2269 | "ip-address": "^9.0.5",
2270 | "smart-buffer": "^4.2.0"
2271 | },
2272 | "engines": {
2273 | "node": ">= 10.0.0",
2274 | "npm": ">= 3.0.0"
2275 | }
2276 | },
2277 | "node_modules/socks-proxy-agent": {
2278 | "version": "8.0.4",
2279 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
2280 | "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
2281 | "dependencies": {
2282 | "agent-base": "^7.1.1",
2283 | "debug": "^4.3.4",
2284 | "socks": "^2.8.3"
2285 | },
2286 | "engines": {
2287 | "node": ">= 14"
2288 | }
2289 | },
2290 | "node_modules/socks-proxy-agent/node_modules/debug": {
2291 | "version": "4.3.7",
2292 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
2293 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
2294 | "dependencies": {
2295 | "ms": "^2.1.3"
2296 | },
2297 | "engines": {
2298 | "node": ">=6.0"
2299 | },
2300 | "peerDependenciesMeta": {
2301 | "supports-color": {
2302 | "optional": true
2303 | }
2304 | }
2305 | },
2306 | "node_modules/socks-proxy-agent/node_modules/ms": {
2307 | "version": "2.1.3",
2308 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2309 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
2310 | },
2311 | "node_modules/source-map": {
2312 | "version": "0.6.1",
2313 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2314 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2315 | "engines": {
2316 | "node": ">=0.10.0"
2317 | }
2318 | },
2319 | "node_modules/sprintf-js": {
2320 | "version": "1.1.3",
2321 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
2322 | "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
2323 | },
2324 | "node_modules/statuses": {
2325 | "version": "2.0.1",
2326 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
2327 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
2328 | "engines": {
2329 | "node": ">= 0.8"
2330 | }
2331 | },
2332 | "node_modules/streamx": {
2333 | "version": "2.20.2",
2334 | "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.2.tgz",
2335 | "integrity": "sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==",
2336 | "dependencies": {
2337 | "fast-fifo": "^1.3.2",
2338 | "queue-tick": "^1.0.1",
2339 | "text-decoder": "^1.1.0"
2340 | },
2341 | "optionalDependencies": {
2342 | "bare-events": "^2.2.0"
2343 | }
2344 | },
2345 | "node_modules/string_decoder": {
2346 | "version": "1.1.1",
2347 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2348 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2349 | "dependencies": {
2350 | "safe-buffer": "~5.1.0"
2351 | }
2352 | },
2353 | "node_modules/string_decoder/node_modules/safe-buffer": {
2354 | "version": "5.1.2",
2355 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2356 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
2357 | },
2358 | "node_modules/string-width": {
2359 | "version": "4.2.3",
2360 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2361 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2362 | "dependencies": {
2363 | "emoji-regex": "^8.0.0",
2364 | "is-fullwidth-code-point": "^3.0.0",
2365 | "strip-ansi": "^6.0.1"
2366 | },
2367 | "engines": {
2368 | "node": ">=8"
2369 | }
2370 | },
2371 | "node_modules/strip-ansi": {
2372 | "version": "6.0.1",
2373 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2374 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2375 | "dependencies": {
2376 | "ansi-regex": "^5.0.1"
2377 | },
2378 | "engines": {
2379 | "node": ">=8"
2380 | }
2381 | },
2382 | "node_modules/strtok3": {
2383 | "version": "6.3.0",
2384 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
2385 | "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
2386 | "dependencies": {
2387 | "@tokenizer/token": "^0.3.0",
2388 | "peek-readable": "^4.1.0"
2389 | },
2390 | "engines": {
2391 | "node": ">=10"
2392 | },
2393 | "funding": {
2394 | "type": "github",
2395 | "url": "https://github.com/sponsors/Borewit"
2396 | }
2397 | },
2398 | "node_modules/symbol-tree": {
2399 | "version": "3.2.4",
2400 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
2401 | "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
2402 | },
2403 | "node_modules/tar-fs": {
2404 | "version": "3.0.6",
2405 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
2406 | "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
2407 | "dependencies": {
2408 | "pump": "^3.0.0",
2409 | "tar-stream": "^3.1.5"
2410 | },
2411 | "optionalDependencies": {
2412 | "bare-fs": "^2.1.1",
2413 | "bare-path": "^2.1.0"
2414 | }
2415 | },
2416 | "node_modules/tar-stream": {
2417 | "version": "3.1.7",
2418 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
2419 | "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
2420 | "dependencies": {
2421 | "b4a": "^1.6.4",
2422 | "fast-fifo": "^1.2.0",
2423 | "streamx": "^2.15.0"
2424 | }
2425 | },
2426 | "node_modules/text-decoder": {
2427 | "version": "1.2.1",
2428 | "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz",
2429 | "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ=="
2430 | },
2431 | "node_modules/through": {
2432 | "version": "2.3.8",
2433 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2434 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
2435 | },
2436 | "node_modules/tldts": {
2437 | "version": "6.1.61",
2438 | "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.61.tgz",
2439 | "integrity": "sha512-rv8LUyez4Ygkopqn+M6OLItAOT9FF3REpPQDkdMx5ix8w4qkuE7Vo2o/vw1nxKQYmJDV8JpAMJQr1b+lTKf0FA==",
2440 | "dependencies": {
2441 | "tldts-core": "^6.1.61"
2442 | },
2443 | "bin": {
2444 | "tldts": "bin/cli.js"
2445 | }
2446 | },
2447 | "node_modules/tldts-core": {
2448 | "version": "6.1.61",
2449 | "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.61.tgz",
2450 | "integrity": "sha512-In7VffkDWUPgwa+c9picLUxvb0RltVwTkSgMNFgvlGSWveCzGBemBqTsgJCL4EDFWZ6WH0fKTsot6yNhzy3ZzQ=="
2451 | },
2452 | "node_modules/toidentifier": {
2453 | "version": "1.0.1",
2454 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
2455 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
2456 | "engines": {
2457 | "node": ">=0.6"
2458 | }
2459 | },
2460 | "node_modules/token-types": {
2461 | "version": "4.2.1",
2462 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
2463 | "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
2464 | "dependencies": {
2465 | "@tokenizer/token": "^0.3.0",
2466 | "ieee754": "^1.2.1"
2467 | },
2468 | "engines": {
2469 | "node": ">=10"
2470 | },
2471 | "funding": {
2472 | "type": "github",
2473 | "url": "https://github.com/sponsors/Borewit"
2474 | }
2475 | },
2476 | "node_modules/tough-cookie": {
2477 | "version": "5.0.0",
2478 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
2479 | "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
2480 | "dependencies": {
2481 | "tldts": "^6.1.32"
2482 | },
2483 | "engines": {
2484 | "node": ">=16"
2485 | }
2486 | },
2487 | "node_modules/tr46": {
2488 | "version": "5.0.0",
2489 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
2490 | "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
2491 | "dependencies": {
2492 | "punycode": "^2.3.1"
2493 | },
2494 | "engines": {
2495 | "node": ">=18"
2496 | }
2497 | },
2498 | "node_modules/ts-node": {
2499 | "version": "10.9.2",
2500 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
2501 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
2502 | "dev": true,
2503 | "dependencies": {
2504 | "@cspotcode/source-map-support": "^0.8.0",
2505 | "@tsconfig/node10": "^1.0.7",
2506 | "@tsconfig/node12": "^1.0.7",
2507 | "@tsconfig/node14": "^1.0.0",
2508 | "@tsconfig/node16": "^1.0.2",
2509 | "acorn": "^8.4.1",
2510 | "acorn-walk": "^8.1.1",
2511 | "arg": "^4.1.0",
2512 | "create-require": "^1.1.0",
2513 | "diff": "^4.0.1",
2514 | "make-error": "^1.1.1",
2515 | "v8-compile-cache-lib": "^3.0.1",
2516 | "yn": "3.1.1"
2517 | },
2518 | "bin": {
2519 | "ts-node": "dist/bin.js",
2520 | "ts-node-cwd": "dist/bin-cwd.js",
2521 | "ts-node-esm": "dist/bin-esm.js",
2522 | "ts-node-script": "dist/bin-script.js",
2523 | "ts-node-transpile-only": "dist/bin-transpile.js",
2524 | "ts-script": "dist/bin-script-deprecated.js"
2525 | },
2526 | "peerDependencies": {
2527 | "@swc/core": ">=1.2.50",
2528 | "@swc/wasm": ">=1.2.50",
2529 | "@types/node": "*",
2530 | "typescript": ">=2.7"
2531 | },
2532 | "peerDependenciesMeta": {
2533 | "@swc/core": {
2534 | "optional": true
2535 | },
2536 | "@swc/wasm": {
2537 | "optional": true
2538 | }
2539 | }
2540 | },
2541 | "node_modules/tslib": {
2542 | "version": "2.8.1",
2543 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
2544 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
2545 | },
2546 | "node_modules/type-is": {
2547 | "version": "1.6.18",
2548 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
2549 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
2550 | "dependencies": {
2551 | "media-typer": "0.3.0",
2552 | "mime-types": "~2.1.24"
2553 | },
2554 | "engines": {
2555 | "node": ">= 0.6"
2556 | }
2557 | },
2558 | "node_modules/typed-query-selector": {
2559 | "version": "2.12.0",
2560 | "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz",
2561 | "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg=="
2562 | },
2563 | "node_modules/typescript": {
2564 | "version": "5.6.3",
2565 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
2566 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
2567 | "devOptional": true,
2568 | "bin": {
2569 | "tsc": "bin/tsc",
2570 | "tsserver": "bin/tsserver"
2571 | },
2572 | "engines": {
2573 | "node": ">=14.17"
2574 | }
2575 | },
2576 | "node_modules/uglify-js": {
2577 | "version": "3.19.3",
2578 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
2579 | "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
2580 | "optional": true,
2581 | "bin": {
2582 | "uglifyjs": "bin/uglifyjs"
2583 | },
2584 | "engines": {
2585 | "node": ">=0.8.0"
2586 | }
2587 | },
2588 | "node_modules/unbzip2-stream": {
2589 | "version": "1.4.3",
2590 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
2591 | "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
2592 | "dependencies": {
2593 | "buffer": "^5.2.1",
2594 | "through": "^2.3.8"
2595 | }
2596 | },
2597 | "node_modules/undici-types": {
2598 | "version": "6.19.8",
2599 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
2600 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
2601 | "devOptional": true
2602 | },
2603 | "node_modules/universalify": {
2604 | "version": "2.0.1",
2605 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
2606 | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
2607 | "engines": {
2608 | "node": ">= 10.0.0"
2609 | }
2610 | },
2611 | "node_modules/unpipe": {
2612 | "version": "1.0.0",
2613 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2614 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
2615 | "engines": {
2616 | "node": ">= 0.8"
2617 | }
2618 | },
2619 | "node_modules/urlpattern-polyfill": {
2620 | "version": "10.0.0",
2621 | "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
2622 | "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg=="
2623 | },
2624 | "node_modules/util-deprecate": {
2625 | "version": "1.0.2",
2626 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2627 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
2628 | },
2629 | "node_modules/utils-merge": {
2630 | "version": "1.0.1",
2631 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
2632 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
2633 | "engines": {
2634 | "node": ">= 0.4.0"
2635 | }
2636 | },
2637 | "node_modules/v8-compile-cache-lib": {
2638 | "version": "3.0.1",
2639 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
2640 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
2641 | "dev": true
2642 | },
2643 | "node_modules/validator": {
2644 | "version": "13.12.0",
2645 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz",
2646 | "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==",
2647 | "engines": {
2648 | "node": ">= 0.10"
2649 | }
2650 | },
2651 | "node_modules/vary": {
2652 | "version": "1.1.2",
2653 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
2654 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
2655 | "engines": {
2656 | "node": ">= 0.8"
2657 | }
2658 | },
2659 | "node_modules/w3c-xmlserializer": {
2660 | "version": "5.0.0",
2661 | "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
2662 | "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
2663 | "dependencies": {
2664 | "xml-name-validator": "^5.0.0"
2665 | },
2666 | "engines": {
2667 | "node": ">=18"
2668 | }
2669 | },
2670 | "node_modules/webidl-conversions": {
2671 | "version": "7.0.0",
2672 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
2673 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
2674 | "engines": {
2675 | "node": ">=12"
2676 | }
2677 | },
2678 | "node_modules/whatwg-encoding": {
2679 | "version": "3.1.1",
2680 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
2681 | "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
2682 | "dependencies": {
2683 | "iconv-lite": "0.6.3"
2684 | },
2685 | "engines": {
2686 | "node": ">=18"
2687 | }
2688 | },
2689 | "node_modules/whatwg-encoding/node_modules/iconv-lite": {
2690 | "version": "0.6.3",
2691 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
2692 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
2693 | "dependencies": {
2694 | "safer-buffer": ">= 2.1.2 < 3.0.0"
2695 | },
2696 | "engines": {
2697 | "node": ">=0.10.0"
2698 | }
2699 | },
2700 | "node_modules/whatwg-mimetype": {
2701 | "version": "4.0.0",
2702 | "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
2703 | "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
2704 | "engines": {
2705 | "node": ">=18"
2706 | }
2707 | },
2708 | "node_modules/whatwg-url": {
2709 | "version": "14.0.0",
2710 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
2711 | "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
2712 | "dependencies": {
2713 | "tr46": "^5.0.0",
2714 | "webidl-conversions": "^7.0.0"
2715 | },
2716 | "engines": {
2717 | "node": ">=18"
2718 | }
2719 | },
2720 | "node_modules/wordwrap": {
2721 | "version": "1.0.0",
2722 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
2723 | "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
2724 | },
2725 | "node_modules/wrap-ansi": {
2726 | "version": "7.0.0",
2727 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2728 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2729 | "dependencies": {
2730 | "ansi-styles": "^4.0.0",
2731 | "string-width": "^4.1.0",
2732 | "strip-ansi": "^6.0.0"
2733 | },
2734 | "engines": {
2735 | "node": ">=10"
2736 | },
2737 | "funding": {
2738 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2739 | }
2740 | },
2741 | "node_modules/wrappy": {
2742 | "version": "1.0.2",
2743 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2744 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
2745 | },
2746 | "node_modules/ws": {
2747 | "version": "8.18.0",
2748 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
2749 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
2750 | "engines": {
2751 | "node": ">=10.0.0"
2752 | },
2753 | "peerDependencies": {
2754 | "bufferutil": "^4.0.1",
2755 | "utf-8-validate": ">=5.0.2"
2756 | },
2757 | "peerDependenciesMeta": {
2758 | "bufferutil": {
2759 | "optional": true
2760 | },
2761 | "utf-8-validate": {
2762 | "optional": true
2763 | }
2764 | }
2765 | },
2766 | "node_modules/xml-name-validator": {
2767 | "version": "5.0.0",
2768 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
2769 | "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
2770 | "engines": {
2771 | "node": ">=18"
2772 | }
2773 | },
2774 | "node_modules/xmlchars": {
2775 | "version": "2.2.0",
2776 | "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
2777 | "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
2778 | },
2779 | "node_modules/y18n": {
2780 | "version": "5.0.8",
2781 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
2782 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
2783 | "engines": {
2784 | "node": ">=10"
2785 | }
2786 | },
2787 | "node_modules/yargs": {
2788 | "version": "17.7.2",
2789 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
2790 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
2791 | "dependencies": {
2792 | "cliui": "^8.0.1",
2793 | "escalade": "^3.1.1",
2794 | "get-caller-file": "^2.0.5",
2795 | "require-directory": "^2.1.1",
2796 | "string-width": "^4.2.3",
2797 | "y18n": "^5.0.5",
2798 | "yargs-parser": "^21.1.1"
2799 | },
2800 | "engines": {
2801 | "node": ">=12"
2802 | }
2803 | },
2804 | "node_modules/yargs-parser": {
2805 | "version": "21.1.1",
2806 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
2807 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
2808 | "engines": {
2809 | "node": ">=12"
2810 | }
2811 | },
2812 | "node_modules/yauzl": {
2813 | "version": "2.10.0",
2814 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
2815 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
2816 | "dependencies": {
2817 | "buffer-crc32": "~0.2.3",
2818 | "fd-slicer": "~1.1.0"
2819 | }
2820 | },
2821 | "node_modules/yn": {
2822 | "version": "3.1.1",
2823 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
2824 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
2825 | "dev": true,
2826 | "engines": {
2827 | "node": ">=6"
2828 | }
2829 | },
2830 | "node_modules/zod": {
2831 | "version": "3.23.8",
2832 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
2833 | "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
2834 | "funding": {
2835 | "url": "https://github.com/sponsors/colinhacks"
2836 | }
2837 | }
2838 | }
2839 | }
2840 |
--------------------------------------------------------------------------------