├── .firebaserc
├── .github
└── workflows
│ └── build.yml
├── .gitignore
├── .nvmrc
├── CHANGELOG.md
├── LICENSE
├── README.md
├── custom-elements.json
├── docs
├── index.html
└── robots.txt
├── firebase.json
├── package.json
├── pnpm-lock.yaml
├── src
├── angular.ts
├── blazor.ts
├── index.ts
├── jsx.ts
├── preact.ts
├── react.ts
├── reserved.ts
├── typescript.ts
└── utils.ts
├── tsconfig.json
└── tsconfig.lib.json
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "sites-fc2cf"
4 | }
5 | }
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on: [push, pull_request]
4 |
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - uses: actions/checkout@v4
10 | with:
11 | lfs: true
12 | - uses: pnpm/action-setup@v4
13 | with:
14 | run_install: false
15 | - uses: actions/setup-node@v4
16 | with:
17 | node-version-file: './.nvmrc'
18 | cache: 'pnpm'
19 | - run: npm run setup
20 | - run: pnpm run ci
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dist
2 |
3 | # Logs
4 | logs
5 | *.log
6 | npm-debug.log*
7 | yarn-debug.log*
8 | yarn-error.log*
9 | lerna-debug.log*
10 |
11 | # Diagnostic reports (https://nodejs.org/api/report.html)
12 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
13 |
14 | # Runtime data
15 | pids
16 | *.pid
17 | *.seed
18 | *.pid.lock
19 |
20 | # Directory for instrumented libs generated by jscoverage/JSCover
21 | lib-cov
22 |
23 | # Coverage directory used by tools like istanbul
24 | coverage
25 | *.lcov
26 |
27 | # nyc test coverage
28 | .nyc_output
29 |
30 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
31 | .grunt
32 |
33 | # Bower dependency directory (https://bower.io/)
34 | bower_components
35 |
36 | # node-waf configuration
37 | .lock-wscript
38 |
39 | # Compiled binary addons (https://nodejs.org/api/addons.html)
40 | build/Release
41 |
42 | # Dependency directories
43 | node_modules/
44 | jspm_packages/
45 |
46 | # TypeScript v1 declaration files
47 | typings/
48 |
49 | # TypeScript cache
50 | *.tsbuildinfo
51 |
52 | # Optional npm cache directory
53 | .npm
54 |
55 | # Optional eslint cache
56 | .eslintcache
57 |
58 | # Microbundle cache
59 | .rpt2_cache/
60 | .rts2_cache_cjs/
61 | .rts2_cache_es/
62 | .rts2_cache_umd/
63 |
64 | # Optional REPL history
65 | .node_repl_history
66 |
67 | # Output of 'npm pack'
68 | *.tgz
69 |
70 | # Yarn Integrity file
71 | .yarn-integrity
72 |
73 | # dotenv environment variables file
74 | .env
75 | .env.test
76 |
77 | # parcel-bundler cache (https://parceljs.org/)
78 | .cache
79 |
80 | # Next.js build output
81 | .next
82 |
83 | # Nuxt.js build / generate output
84 | .nuxt
85 | dist
86 |
87 | # Gatsby files
88 | .cache/
89 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
90 | # https://nextjs.org/blog/next-9-1#public-directory-support
91 | # public
92 |
93 | # vuepress build output
94 | .vuepress/dist
95 |
96 | # Serverless directories
97 | .serverless/
98 |
99 | # FuseBox cache
100 | .fusebox/
101 |
102 | # DynamoDB Local files
103 | .dynamodb/
104 |
105 | # TernJS port file
106 | .tern-port
107 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 22.14.0
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## 0.2.8
4 | - update dependencies
5 | - update React to support React 19
6 |
7 | ## 0.2.7
8 | - update dependencies
9 | - update Angular output to standalone directives
10 | - fix temporary workaround for accessor based properties
11 | - fix cli binary entrypoint
12 |
13 | ## 0.2.6
14 | - ignore native props and events
15 |
16 | ## 0.2.5
17 | - ignore non attribute supported properties to prevent overide of native props
18 |
19 | ## 0.2.1
20 | - cleanup generated output formatting
21 |
22 | ## 0.2.0
23 | - Blazor support
24 |
25 | ## 0.1.0
26 | - add Preact type support
27 |
28 | ## 0.0.0
29 |
30 | - intial beta release
31 | - basic support for React experimental
32 | - basic support for Angular
33 | - basic support for TypeScript
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Crylan Software
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # custom-element-types
2 |
3 | [](https://badge.fury.io/js/custom-element-types) 
4 |
5 | A generator to create type definitions and framework bindings for applications using Web Components (Custom Elements).
6 |
7 | ## Getting Started
8 |
9 | Install via NPM
10 |
11 | ```bash
12 | npm install --save-dev custom-element-types
13 | ```
14 |
15 | ## Playground
16 |
17 | If you have a published Web Component library you can try out the [generator playground](https://custom-element-types.web.app).
18 |
19 | ## CLI
20 |
21 | ```bash
22 | custom-element-types --write --type react --entrypoint @blueprintui/components
23 | ```
24 |
25 | | Args | Description |
26 | | ----------------- | ---------------------------------------------------------------------------- |
27 | | type | `jsx`, `react`, `preact`, `angular`, `typescript`, `blazor` |
28 | | custom-elements | optional custom path to `custom-elements.json` file |
29 | | write | write to file, optionally provide a output directory path |
30 | | entrypoint | package name for base entrypoint import path, else defaults to relative path |
31 |
32 | ## Examples
33 | - React: https://stackblitz.com/edit/http-server-noh4jj
34 | - Angular: https://stackblitz.com/edit/node-1tthxz
35 | - Preact: https://stackblitz.com/edit/vitejs-vite-8qed1q
36 | - Blazor: https://github.com/coryrylan/clarity-blazor
37 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | BlueprintUI - Custom Element Types
5 |
6 |
7 |
8 |
9 |
10 |
11 |
33 |
34 |
35 |
36 |
37 | Warning, in beta. Subject to change.
38 |
39 |
40 |
41 |
Custom Element Types
42 |
Framework Type Generator for Web Components
43 |
44 |
48 |
49 |
50 |
56 |
57 |
58 |
59 | The Custom Element Types generator will use a custom-elements.json
file to generate
60 | a specific type definition files or shims for a given framework enabling type checking in
61 | type aware templates such as TSX in React or Angular HTML templates.
62 |
63 |
64 | Most Web Component libraries ship with a custom-elements.json
. However if not provided, a manifest can be generated using the Custom Elements Manifest Generator .
65 |
66 |
67 |
npm install --save-dev custom-element-types
68 |
69 | custom-element-types --write --type react --entrypoint @blueprintui/components
70 |
71 |
72 |
73 |
74 |
75 |
76 | package.json
77 |
78 |
79 |
80 |
81 |
82 | Output Format
83 | React
84 |
85 |
86 | Angular
87 |
88 |
89 | Preact
90 |
91 |
92 | TypeScript
93 |
94 |
95 | Blazor
96 |
97 |
98 |
99 |
100 |
101 |
102 | Add a types.d.ts
file to your project (React example) .
103 |
104 |
105 |
106 | Add custom-element-types.module.ts
file to your project.
107 | Import and add CustomElementTypeModule
to your app module (Angular example) .
108 |
109 |
110 |
111 | Add a types.d.ts
file to your project (Preact example) .
112 |
113 |
114 |
115 | Add a types.d.ts
file to your project. If using a third party library it is likely this definition is already included.
116 |
117 |
118 |
119 | Add event-handlers.js
to wwwroot
.
120 |
121 | Add script tag reference to index.html
122 |
123 | <script type="module" src="js/event-handlers.js"></script>
124 |
125 |
126 |
127 | Add EventHandlers.cs
to the root of the project.
128 |
129 |
130 | (Blazor example) .
131 |
132 |
133 |
134 |
135 |
136 | Loaded Custom Elements Manifest JSON
137 |
138 |
139 |
140 |
141 |
copied
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 | About
151 |
152 |
153 |
154 |
155 | Built and maintained by Cory Rylan 👋.
156 |
157 |
158 |
159 |
160 |
161 |
162 |
244 |
245 |
--------------------------------------------------------------------------------
/docs/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "site": "custom-element-types",
4 | "public": "docs",
5 | "ignore": [
6 | "firebase.json",
7 | "**/.*",
8 | "**/node_modules/**"
9 | ],
10 | "rewrites": [ ],
11 | "redirects": [ ]
12 | }
13 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "custom-element-types",
3 | "version": "0.0.2",
4 | "description": "A generator to create Framework integrations and types for Custom Elements using the Custom Elements Schema format.",
5 | "packageManager": "pnpm@10.7.0",
6 | "engines": {
7 | "node": "22.14.0"
8 | },
9 | "bin": {
10 | "cet": "./dist/lib/index.js",
11 | "custom-element-types": "./dist/lib/index.js"
12 | },
13 | "main": "./index.js",
14 | "module": "./index.js",
15 | "typings": "./index.d.ts",
16 | "type": "module",
17 | "files": [
18 | "./dist",
19 | "./package.json",
20 | "./README.md",
21 | "./LICENSE.md"
22 | ],
23 | "exports": {
24 | "./package.json": "./package.json",
25 | "./*": {
26 | "types": "./dist/lib/*",
27 | "default": "./dist/lib/*"
28 | },
29 | ".": {
30 | "types": "./dist/lib/index.d.ts",
31 | "default": "./dist/lib/index.js"
32 | }
33 | },
34 | "scripts": {
35 | "start": "cd ./docs && lite-server",
36 | "ci": "pnpm run clean && pnpm run build && pnpm run build:react && pnpm run build:preact && pnpm run build:angular && pnpm run build:typescript && pnpm run build:blazor && pnpm run build:jsx",
37 | "setup": "curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && unset npm_config_prefix && . ~/.nvm/nvm.sh && nvm install && nvm use && npm install -g pnpm && pnpm run clean && pnpm i --frozen-lockfile && pnpm dlx playwright install chromium --with-deps chromium",
38 | "clean": "rm -rf dist",
39 | "build": "tsc --project ./tsconfig.lib.json",
40 | "build:watch": "tsc --watch --project ./tsconfig.lib.json",
41 | "build:react": "node ./dist/lib/index.js --type react --custom-elements ./custom-elements.json --write ./dist/react --entrypoint @blueprintui/components",
42 | "build:preact": "node ./dist/lib/index.js --type preact --custom-elements ./custom-elements.json --write ./dist/preact --entrypoint @blueprintui/components",
43 | "build:angular": "node ./dist/lib/index.js --type angular --custom-elements ./custom-elements.json --write ./dist/angular --entrypoint @blueprintui/components",
44 | "build:typescript": "node ./dist/lib/index.js --type typescript --custom-elements ./custom-elements.json --write ./dist/typescript --entrypoint @blueprintui/components",
45 | "build:blazor": "node ./dist/lib/index.js --type blazor --custom-elements ./custom-elements.json --write ./dist/blazor --entrypoint @blueprintui/components",
46 | "build:jsx": "node ./dist/lib/index.js --type jsx --custom-elements ./custom-elements.json --write ./dist/jsx --entrypoint @blueprintui/components",
47 | "deploy": "firebase deploy --only hosting:custom-element-types"
48 | },
49 | "repository": {
50 | "type": "git",
51 | "url": "git+https://github.com/coryrylan/custom-element-types.git"
52 | },
53 | "keywords": [
54 | "web components",
55 | "custom elements",
56 | "react",
57 | "preact",
58 | "angular",
59 | "typescript",
60 | "blazor"
61 | ],
62 | "author": "Cory Rylan",
63 | "license": "MIT",
64 | "bugs": {
65 | "url": "https://github.com/coryrylan/custom-element-types/issues"
66 | },
67 | "homepage": "https://github.com/coryrylan/custom-element-types#readme",
68 | "devDependencies": {
69 | "@types/fs-extra": "11.0.4",
70 | "@types/node": "22.14.0",
71 | "cpy-cli": "5.0.0",
72 | "custom-elements-manifest": "2.1.0",
73 | "lite-server": "2.6.1",
74 | "typescript": "5.8.3"
75 | },
76 | "dependencies": {
77 | "fs-extra": "11.3.0",
78 | "yargs": "17.7.2"
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | fs-extra:
12 | specifier: 11.3.0
13 | version: 11.3.0
14 | yargs:
15 | specifier: 17.7.2
16 | version: 17.7.2
17 | devDependencies:
18 | '@types/fs-extra':
19 | specifier: 11.0.4
20 | version: 11.0.4
21 | '@types/node':
22 | specifier: 22.14.0
23 | version: 22.14.0
24 | cpy-cli:
25 | specifier: 5.0.0
26 | version: 5.0.0
27 | custom-elements-manifest:
28 | specifier: 2.1.0
29 | version: 2.1.0
30 | lite-server:
31 | specifier: 2.6.1
32 | version: 2.6.1
33 | typescript:
34 | specifier: 5.8.3
35 | version: 5.8.3
36 |
37 | packages:
38 |
39 | '@nodelib/fs.scandir@2.1.5':
40 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
41 | engines: {node: '>= 8'}
42 |
43 | '@nodelib/fs.stat@2.0.5':
44 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
45 | engines: {node: '>= 8'}
46 |
47 | '@nodelib/fs.walk@1.2.8':
48 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
49 | engines: {node: '>= 8'}
50 |
51 | '@socket.io/component-emitter@3.1.2':
52 | resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
53 |
54 | '@types/cors@2.8.17':
55 | resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==}
56 |
57 | '@types/fs-extra@11.0.4':
58 | resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
59 |
60 | '@types/jsonfile@6.1.4':
61 | resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
62 |
63 | '@types/node@22.14.0':
64 | resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==}
65 |
66 | accepts@1.3.8:
67 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
68 | engines: {node: '>= 0.6'}
69 |
70 | aggregate-error@4.0.1:
71 | resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==}
72 | engines: {node: '>=12'}
73 |
74 | ansi-regex@5.0.1:
75 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
76 | engines: {node: '>=8'}
77 |
78 | ansi-styles@4.3.0:
79 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
80 | engines: {node: '>=8'}
81 |
82 | anymatch@3.1.3:
83 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
84 | engines: {node: '>= 8'}
85 |
86 | arrify@3.0.0:
87 | resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==}
88 | engines: {node: '>=12'}
89 |
90 | async-each-series@0.1.1:
91 | resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==}
92 | engines: {node: '>=0.8.0'}
93 |
94 | async@2.6.4:
95 | resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==}
96 |
97 | axios@0.21.4:
98 | resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
99 |
100 | balanced-match@1.0.2:
101 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
102 |
103 | base64id@2.0.0:
104 | resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
105 | engines: {node: ^4.5.0 || >= 5.9}
106 |
107 | batch@0.6.1:
108 | resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
109 |
110 | binary-extensions@2.3.0:
111 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
112 | engines: {node: '>=8'}
113 |
114 | brace-expansion@1.1.11:
115 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
116 |
117 | braces@3.0.3:
118 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
119 | engines: {node: '>=8'}
120 |
121 | browser-sync-client@2.29.3:
122 | resolution: {integrity: sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==}
123 | engines: {node: '>=8.0.0'}
124 |
125 | browser-sync-ui@2.29.3:
126 | resolution: {integrity: sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==}
127 |
128 | browser-sync@2.29.3:
129 | resolution: {integrity: sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==}
130 | engines: {node: '>= 8.0.0'}
131 | hasBin: true
132 |
133 | bs-recipes@1.3.4:
134 | resolution: {integrity: sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==}
135 |
136 | bytes@3.1.2:
137 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
138 | engines: {node: '>= 0.8'}
139 |
140 | chalk@4.1.2:
141 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
142 | engines: {node: '>=10'}
143 |
144 | chokidar@3.6.0:
145 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
146 | engines: {node: '>= 8.10.0'}
147 |
148 | clean-stack@4.2.0:
149 | resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==}
150 | engines: {node: '>=12'}
151 |
152 | cliui@7.0.4:
153 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
154 |
155 | cliui@8.0.1:
156 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
157 | engines: {node: '>=12'}
158 |
159 | color-convert@2.0.1:
160 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
161 | engines: {node: '>=7.0.0'}
162 |
163 | color-name@1.1.4:
164 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
165 |
166 | commander@2.20.3:
167 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
168 |
169 | concat-map@0.0.1:
170 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
171 |
172 | connect-history-api-fallback@1.6.0:
173 | resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==}
174 | engines: {node: '>=0.8'}
175 |
176 | connect-logger@0.0.1:
177 | resolution: {integrity: sha512-kC5FPWpcfgpW5HtICnXbdOAFa4uNilU4ZPmsH6RlXaDVfXLupyUjgI1otpj3kOcsoPpDxknxmcoM0wk0ApsjYQ==}
178 |
179 | connect@3.6.6:
180 | resolution: {integrity: sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==}
181 | engines: {node: '>= 0.10.0'}
182 |
183 | cookie@0.7.2:
184 | resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
185 | engines: {node: '>= 0.6'}
186 |
187 | cors@2.8.5:
188 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
189 | engines: {node: '>= 0.10'}
190 |
191 | cp-file@10.0.0:
192 | resolution: {integrity: sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==}
193 | engines: {node: '>=14.16'}
194 |
195 | cpy-cli@5.0.0:
196 | resolution: {integrity: sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==}
197 | engines: {node: '>=16'}
198 | hasBin: true
199 |
200 | cpy@10.1.0:
201 | resolution: {integrity: sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==}
202 | engines: {node: '>=16'}
203 |
204 | custom-elements-manifest@2.1.0:
205 | resolution: {integrity: sha512-4TU+YhBQpCGYWonsZVTOPx6aYJXenOiSRT7TNGvDB7ipa4SZSJKed1DYXG77XKL9JFZ86sDSDVkwgv1mqw3V3A==}
206 |
207 | debug@2.6.9:
208 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
209 | peerDependencies:
210 | supports-color: '*'
211 | peerDependenciesMeta:
212 | supports-color:
213 | optional: true
214 |
215 | debug@4.3.2:
216 | resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==}
217 | engines: {node: '>=6.0'}
218 | peerDependencies:
219 | supports-color: '*'
220 | peerDependenciesMeta:
221 | supports-color:
222 | optional: true
223 |
224 | debug@4.3.7:
225 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
226 | engines: {node: '>=6.0'}
227 | peerDependencies:
228 | supports-color: '*'
229 | peerDependenciesMeta:
230 | supports-color:
231 | optional: true
232 |
233 | depd@1.1.2:
234 | resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
235 | engines: {node: '>= 0.6'}
236 |
237 | depd@2.0.0:
238 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
239 | engines: {node: '>= 0.8'}
240 |
241 | destroy@1.0.4:
242 | resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==}
243 |
244 | dev-ip@1.0.1:
245 | resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==}
246 | engines: {node: '>= 0.8.0'}
247 | hasBin: true
248 |
249 | dir-glob@3.0.1:
250 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
251 | engines: {node: '>=8'}
252 |
253 | easy-extender@2.3.4:
254 | resolution: {integrity: sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==}
255 | engines: {node: '>= 4.0.0'}
256 |
257 | eazy-logger@4.1.0:
258 | resolution: {integrity: sha512-+mn7lRm+Zf1UT/YaH8WXtpU6PIV2iOjzP6jgKoiaq/VNrjYKp+OHZGe2znaLgDeFkw8cL9ffuaUm+nNnzcYyGw==}
259 | engines: {node: '>= 0.8.0'}
260 |
261 | ee-first@1.1.1:
262 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
263 |
264 | emoji-regex@8.0.0:
265 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
266 |
267 | encodeurl@1.0.2:
268 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
269 | engines: {node: '>= 0.8'}
270 |
271 | engine.io-client@6.6.3:
272 | resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==}
273 |
274 | engine.io-parser@5.2.3:
275 | resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
276 | engines: {node: '>=10.0.0'}
277 |
278 | engine.io@6.6.4:
279 | resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==}
280 | engines: {node: '>=10.2.0'}
281 |
282 | escalade@3.2.0:
283 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
284 | engines: {node: '>=6'}
285 |
286 | escape-html@1.0.3:
287 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
288 |
289 | escape-string-regexp@5.0.0:
290 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
291 | engines: {node: '>=12'}
292 |
293 | etag@1.8.1:
294 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
295 | engines: {node: '>= 0.6'}
296 |
297 | eventemitter3@4.0.7:
298 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
299 |
300 | fast-glob@3.3.2:
301 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
302 | engines: {node: '>=8.6.0'}
303 |
304 | fastq@1.17.1:
305 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
306 |
307 | fill-range@7.1.1:
308 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
309 | engines: {node: '>=8'}
310 |
311 | finalhandler@1.1.0:
312 | resolution: {integrity: sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==}
313 | engines: {node: '>= 0.8'}
314 |
315 | follow-redirects@1.15.9:
316 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
317 | engines: {node: '>=4.0'}
318 | peerDependencies:
319 | debug: '*'
320 | peerDependenciesMeta:
321 | debug:
322 | optional: true
323 |
324 | fresh@0.5.2:
325 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
326 | engines: {node: '>= 0.6'}
327 |
328 | fs-extra@11.3.0:
329 | resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
330 | engines: {node: '>=14.14'}
331 |
332 | fs-extra@3.0.1:
333 | resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==}
334 |
335 | fsevents@2.3.3:
336 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
337 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
338 | os: [darwin]
339 |
340 | get-caller-file@2.0.5:
341 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
342 | engines: {node: 6.* || 8.* || >= 10.*}
343 |
344 | glob-parent@5.1.2:
345 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
346 | engines: {node: '>= 6'}
347 |
348 | globby@13.2.2:
349 | resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
350 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
351 |
352 | graceful-fs@4.2.11:
353 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
354 |
355 | has-flag@4.0.0:
356 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
357 | engines: {node: '>=8'}
358 |
359 | http-errors@1.6.3:
360 | resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==}
361 | engines: {node: '>= 0.6'}
362 |
363 | http-errors@2.0.0:
364 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
365 | engines: {node: '>= 0.8'}
366 |
367 | http-proxy@1.18.1:
368 | resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
369 | engines: {node: '>=8.0.0'}
370 |
371 | iconv-lite@0.4.24:
372 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
373 | engines: {node: '>=0.10.0'}
374 |
375 | ignore@5.3.2:
376 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
377 | engines: {node: '>= 4'}
378 |
379 | immutable@3.8.2:
380 | resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==}
381 | engines: {node: '>=0.10.0'}
382 |
383 | indent-string@5.0.0:
384 | resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
385 | engines: {node: '>=12'}
386 |
387 | inherits@2.0.3:
388 | resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
389 |
390 | inherits@2.0.4:
391 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
392 |
393 | is-binary-path@2.1.0:
394 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
395 | engines: {node: '>=8'}
396 |
397 | is-extglob@2.1.1:
398 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
399 | engines: {node: '>=0.10.0'}
400 |
401 | is-fullwidth-code-point@3.0.0:
402 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
403 | engines: {node: '>=8'}
404 |
405 | is-glob@4.0.3:
406 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
407 | engines: {node: '>=0.10.0'}
408 |
409 | is-number-like@1.0.8:
410 | resolution: {integrity: sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==}
411 |
412 | is-number@7.0.0:
413 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
414 | engines: {node: '>=0.12.0'}
415 |
416 | is-wsl@1.1.0:
417 | resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==}
418 | engines: {node: '>=4'}
419 |
420 | jsonfile@3.0.1:
421 | resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==}
422 |
423 | jsonfile@6.1.0:
424 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
425 |
426 | junk@4.0.1:
427 | resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==}
428 | engines: {node: '>=12.20'}
429 |
430 | limiter@1.1.5:
431 | resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==}
432 |
433 | lite-server@2.6.1:
434 | resolution: {integrity: sha512-d3oyB/C8AU4EwYQHlLxcu6vTQDnCaLb81v1KKNYABmFS5oeJ11A+YxlqtpbTclID1AFddJfcB5klf0q98vYIMw==}
435 | hasBin: true
436 |
437 | localtunnel@2.0.2:
438 | resolution: {integrity: sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==}
439 | engines: {node: '>=8.3.0'}
440 | hasBin: true
441 |
442 | lodash.isfinite@3.3.2:
443 | resolution: {integrity: sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==}
444 |
445 | lodash@4.17.21:
446 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
447 |
448 | meow@12.1.1:
449 | resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
450 | engines: {node: '>=16.10'}
451 |
452 | merge2@1.4.1:
453 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
454 | engines: {node: '>= 8'}
455 |
456 | micromatch@4.0.8:
457 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
458 | engines: {node: '>=8.6'}
459 |
460 | mime-db@1.52.0:
461 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
462 | engines: {node: '>= 0.6'}
463 |
464 | mime-types@2.1.35:
465 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
466 | engines: {node: '>= 0.6'}
467 |
468 | mime@1.4.1:
469 | resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==}
470 | hasBin: true
471 |
472 | minimatch@3.1.2:
473 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
474 |
475 | minimist@1.2.8:
476 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
477 |
478 | mitt@1.2.0:
479 | resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==}
480 |
481 | moment@2.30.1:
482 | resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
483 |
484 | ms@2.0.0:
485 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
486 |
487 | ms@2.1.2:
488 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
489 |
490 | ms@2.1.3:
491 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
492 |
493 | negotiator@0.6.3:
494 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
495 | engines: {node: '>= 0.6'}
496 |
497 | nested-error-stacks@2.1.1:
498 | resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==}
499 |
500 | normalize-path@3.0.0:
501 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
502 | engines: {node: '>=0.10.0'}
503 |
504 | object-assign@4.1.1:
505 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
506 | engines: {node: '>=0.10.0'}
507 |
508 | on-finished@2.3.0:
509 | resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
510 | engines: {node: '>= 0.8'}
511 |
512 | openurl@1.1.1:
513 | resolution: {integrity: sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==}
514 |
515 | opn@5.3.0:
516 | resolution: {integrity: sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==}
517 | engines: {node: '>=4'}
518 |
519 | p-event@5.0.1:
520 | resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==}
521 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
522 |
523 | p-filter@3.0.0:
524 | resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==}
525 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
526 |
527 | p-map@5.5.0:
528 | resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==}
529 | engines: {node: '>=12'}
530 |
531 | p-map@6.0.0:
532 | resolution: {integrity: sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==}
533 | engines: {node: '>=16'}
534 |
535 | p-timeout@5.1.0:
536 | resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==}
537 | engines: {node: '>=12'}
538 |
539 | parseurl@1.3.3:
540 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
541 | engines: {node: '>= 0.8'}
542 |
543 | path-type@4.0.0:
544 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
545 | engines: {node: '>=8'}
546 |
547 | picomatch@2.3.1:
548 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
549 | engines: {node: '>=8.6'}
550 |
551 | portscanner@2.2.0:
552 | resolution: {integrity: sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==}
553 | engines: {node: '>=0.4', npm: '>=1.0.0'}
554 |
555 | queue-microtask@1.2.3:
556 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
557 |
558 | range-parser@1.2.1:
559 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
560 | engines: {node: '>= 0.6'}
561 |
562 | raw-body@2.5.2:
563 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
564 | engines: {node: '>= 0.8'}
565 |
566 | readdirp@3.6.0:
567 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
568 | engines: {node: '>=8.10.0'}
569 |
570 | require-directory@2.1.1:
571 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
572 | engines: {node: '>=0.10.0'}
573 |
574 | requires-port@1.0.0:
575 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
576 |
577 | resp-modifier@6.0.2:
578 | resolution: {integrity: sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==}
579 | engines: {node: '>= 0.8.0'}
580 |
581 | reusify@1.0.4:
582 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
583 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
584 |
585 | run-parallel@1.2.0:
586 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
587 |
588 | rx@4.1.0:
589 | resolution: {integrity: sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==}
590 |
591 | safer-buffer@2.1.2:
592 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
593 |
594 | send@0.16.2:
595 | resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==}
596 | engines: {node: '>= 0.8.0'}
597 |
598 | serve-index@1.9.1:
599 | resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
600 | engines: {node: '>= 0.8.0'}
601 |
602 | serve-static@1.13.2:
603 | resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==}
604 | engines: {node: '>= 0.8.0'}
605 |
606 | server-destroy@1.0.1:
607 | resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==}
608 |
609 | setprototypeof@1.1.0:
610 | resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
611 |
612 | setprototypeof@1.2.0:
613 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
614 |
615 | slash@4.0.0:
616 | resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
617 | engines: {node: '>=12'}
618 |
619 | socket.io-adapter@2.5.5:
620 | resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==}
621 |
622 | socket.io-client@4.8.1:
623 | resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==}
624 | engines: {node: '>=10.0.0'}
625 |
626 | socket.io-parser@4.2.4:
627 | resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
628 | engines: {node: '>=10.0.0'}
629 |
630 | socket.io@4.8.1:
631 | resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==}
632 | engines: {node: '>=10.2.0'}
633 |
634 | statuses@1.3.1:
635 | resolution: {integrity: sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==}
636 | engines: {node: '>= 0.6'}
637 |
638 | statuses@1.4.0:
639 | resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==}
640 | engines: {node: '>= 0.6'}
641 |
642 | statuses@2.0.1:
643 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
644 | engines: {node: '>= 0.8'}
645 |
646 | stream-throttle@0.1.3:
647 | resolution: {integrity: sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==}
648 | engines: {node: '>= 0.10.0'}
649 | hasBin: true
650 |
651 | string-width@4.2.3:
652 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
653 | engines: {node: '>=8'}
654 |
655 | strip-ansi@6.0.1:
656 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
657 | engines: {node: '>=8'}
658 |
659 | supports-color@7.2.0:
660 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
661 | engines: {node: '>=8'}
662 |
663 | to-regex-range@5.0.1:
664 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
665 | engines: {node: '>=8.0'}
666 |
667 | toidentifier@1.0.1:
668 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
669 | engines: {node: '>=0.6'}
670 |
671 | typescript@5.8.3:
672 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
673 | engines: {node: '>=14.17'}
674 | hasBin: true
675 |
676 | ua-parser-js@1.0.40:
677 | resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==}
678 | hasBin: true
679 |
680 | undici-types@6.21.0:
681 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
682 |
683 | universalify@0.1.2:
684 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
685 | engines: {node: '>= 4.0.0'}
686 |
687 | universalify@2.0.1:
688 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
689 | engines: {node: '>= 10.0.0'}
690 |
691 | unpipe@1.0.0:
692 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
693 | engines: {node: '>= 0.8'}
694 |
695 | utils-merge@1.0.1:
696 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
697 | engines: {node: '>= 0.4.0'}
698 |
699 | vary@1.1.2:
700 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
701 | engines: {node: '>= 0.8'}
702 |
703 | wrap-ansi@7.0.0:
704 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
705 | engines: {node: '>=10'}
706 |
707 | ws@8.17.1:
708 | resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
709 | engines: {node: '>=10.0.0'}
710 | peerDependencies:
711 | bufferutil: ^4.0.1
712 | utf-8-validate: '>=5.0.2'
713 | peerDependenciesMeta:
714 | bufferutil:
715 | optional: true
716 | utf-8-validate:
717 | optional: true
718 |
719 | xmlhttprequest-ssl@2.1.2:
720 | resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
721 | engines: {node: '>=0.4.0'}
722 |
723 | y18n@5.0.8:
724 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
725 | engines: {node: '>=10'}
726 |
727 | yargs-parser@20.2.9:
728 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
729 | engines: {node: '>=10'}
730 |
731 | yargs-parser@21.1.1:
732 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
733 | engines: {node: '>=12'}
734 |
735 | yargs@17.1.1:
736 | resolution: {integrity: sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==}
737 | engines: {node: '>=12'}
738 |
739 | yargs@17.7.2:
740 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
741 | engines: {node: '>=12'}
742 |
743 | snapshots:
744 |
745 | '@nodelib/fs.scandir@2.1.5':
746 | dependencies:
747 | '@nodelib/fs.stat': 2.0.5
748 | run-parallel: 1.2.0
749 |
750 | '@nodelib/fs.stat@2.0.5': {}
751 |
752 | '@nodelib/fs.walk@1.2.8':
753 | dependencies:
754 | '@nodelib/fs.scandir': 2.1.5
755 | fastq: 1.17.1
756 |
757 | '@socket.io/component-emitter@3.1.2': {}
758 |
759 | '@types/cors@2.8.17':
760 | dependencies:
761 | '@types/node': 22.14.0
762 |
763 | '@types/fs-extra@11.0.4':
764 | dependencies:
765 | '@types/jsonfile': 6.1.4
766 | '@types/node': 22.14.0
767 |
768 | '@types/jsonfile@6.1.4':
769 | dependencies:
770 | '@types/node': 22.14.0
771 |
772 | '@types/node@22.14.0':
773 | dependencies:
774 | undici-types: 6.21.0
775 |
776 | accepts@1.3.8:
777 | dependencies:
778 | mime-types: 2.1.35
779 | negotiator: 0.6.3
780 |
781 | aggregate-error@4.0.1:
782 | dependencies:
783 | clean-stack: 4.2.0
784 | indent-string: 5.0.0
785 |
786 | ansi-regex@5.0.1: {}
787 |
788 | ansi-styles@4.3.0:
789 | dependencies:
790 | color-convert: 2.0.1
791 |
792 | anymatch@3.1.3:
793 | dependencies:
794 | normalize-path: 3.0.0
795 | picomatch: 2.3.1
796 |
797 | arrify@3.0.0: {}
798 |
799 | async-each-series@0.1.1: {}
800 |
801 | async@2.6.4:
802 | dependencies:
803 | lodash: 4.17.21
804 |
805 | axios@0.21.4(debug@4.3.2):
806 | dependencies:
807 | follow-redirects: 1.15.9(debug@4.3.2)
808 | transitivePeerDependencies:
809 | - debug
810 |
811 | balanced-match@1.0.2: {}
812 |
813 | base64id@2.0.0: {}
814 |
815 | batch@0.6.1: {}
816 |
817 | binary-extensions@2.3.0: {}
818 |
819 | brace-expansion@1.1.11:
820 | dependencies:
821 | balanced-match: 1.0.2
822 | concat-map: 0.0.1
823 |
824 | braces@3.0.3:
825 | dependencies:
826 | fill-range: 7.1.1
827 |
828 | browser-sync-client@2.29.3:
829 | dependencies:
830 | etag: 1.8.1
831 | fresh: 0.5.2
832 | mitt: 1.2.0
833 |
834 | browser-sync-ui@2.29.3:
835 | dependencies:
836 | async-each-series: 0.1.1
837 | chalk: 4.1.2
838 | connect-history-api-fallback: 1.6.0
839 | immutable: 3.8.2
840 | server-destroy: 1.0.1
841 | socket.io-client: 4.8.1
842 | stream-throttle: 0.1.3
843 | transitivePeerDependencies:
844 | - bufferutil
845 | - supports-color
846 | - utf-8-validate
847 |
848 | browser-sync@2.29.3:
849 | dependencies:
850 | browser-sync-client: 2.29.3
851 | browser-sync-ui: 2.29.3
852 | bs-recipes: 1.3.4
853 | chalk: 4.1.2
854 | chokidar: 3.6.0
855 | connect: 3.6.6
856 | connect-history-api-fallback: 1.6.0
857 | dev-ip: 1.0.1
858 | easy-extender: 2.3.4
859 | eazy-logger: 4.1.0
860 | etag: 1.8.1
861 | fresh: 0.5.2
862 | fs-extra: 3.0.1
863 | http-proxy: 1.18.1
864 | immutable: 3.8.2
865 | localtunnel: 2.0.2
866 | micromatch: 4.0.8
867 | opn: 5.3.0
868 | portscanner: 2.2.0
869 | raw-body: 2.5.2
870 | resp-modifier: 6.0.2
871 | rx: 4.1.0
872 | send: 0.16.2
873 | serve-index: 1.9.1
874 | serve-static: 1.13.2
875 | server-destroy: 1.0.1
876 | socket.io: 4.8.1
877 | ua-parser-js: 1.0.40
878 | yargs: 17.7.2
879 | transitivePeerDependencies:
880 | - bufferutil
881 | - debug
882 | - supports-color
883 | - utf-8-validate
884 |
885 | bs-recipes@1.3.4: {}
886 |
887 | bytes@3.1.2: {}
888 |
889 | chalk@4.1.2:
890 | dependencies:
891 | ansi-styles: 4.3.0
892 | supports-color: 7.2.0
893 |
894 | chokidar@3.6.0:
895 | dependencies:
896 | anymatch: 3.1.3
897 | braces: 3.0.3
898 | glob-parent: 5.1.2
899 | is-binary-path: 2.1.0
900 | is-glob: 4.0.3
901 | normalize-path: 3.0.0
902 | readdirp: 3.6.0
903 | optionalDependencies:
904 | fsevents: 2.3.3
905 |
906 | clean-stack@4.2.0:
907 | dependencies:
908 | escape-string-regexp: 5.0.0
909 |
910 | cliui@7.0.4:
911 | dependencies:
912 | string-width: 4.2.3
913 | strip-ansi: 6.0.1
914 | wrap-ansi: 7.0.0
915 |
916 | cliui@8.0.1:
917 | dependencies:
918 | string-width: 4.2.3
919 | strip-ansi: 6.0.1
920 | wrap-ansi: 7.0.0
921 |
922 | color-convert@2.0.1:
923 | dependencies:
924 | color-name: 1.1.4
925 |
926 | color-name@1.1.4: {}
927 |
928 | commander@2.20.3: {}
929 |
930 | concat-map@0.0.1: {}
931 |
932 | connect-history-api-fallback@1.6.0: {}
933 |
934 | connect-logger@0.0.1:
935 | dependencies:
936 | moment: 2.30.1
937 |
938 | connect@3.6.6:
939 | dependencies:
940 | debug: 2.6.9
941 | finalhandler: 1.1.0
942 | parseurl: 1.3.3
943 | utils-merge: 1.0.1
944 | transitivePeerDependencies:
945 | - supports-color
946 |
947 | cookie@0.7.2: {}
948 |
949 | cors@2.8.5:
950 | dependencies:
951 | object-assign: 4.1.1
952 | vary: 1.1.2
953 |
954 | cp-file@10.0.0:
955 | dependencies:
956 | graceful-fs: 4.2.11
957 | nested-error-stacks: 2.1.1
958 | p-event: 5.0.1
959 |
960 | cpy-cli@5.0.0:
961 | dependencies:
962 | cpy: 10.1.0
963 | meow: 12.1.1
964 |
965 | cpy@10.1.0:
966 | dependencies:
967 | arrify: 3.0.0
968 | cp-file: 10.0.0
969 | globby: 13.2.2
970 | junk: 4.0.1
971 | micromatch: 4.0.8
972 | nested-error-stacks: 2.1.1
973 | p-filter: 3.0.0
974 | p-map: 6.0.0
975 |
976 | custom-elements-manifest@2.1.0: {}
977 |
978 | debug@2.6.9:
979 | dependencies:
980 | ms: 2.0.0
981 |
982 | debug@4.3.2:
983 | dependencies:
984 | ms: 2.1.2
985 |
986 | debug@4.3.7:
987 | dependencies:
988 | ms: 2.1.3
989 |
990 | depd@1.1.2: {}
991 |
992 | depd@2.0.0: {}
993 |
994 | destroy@1.0.4: {}
995 |
996 | dev-ip@1.0.1: {}
997 |
998 | dir-glob@3.0.1:
999 | dependencies:
1000 | path-type: 4.0.0
1001 |
1002 | easy-extender@2.3.4:
1003 | dependencies:
1004 | lodash: 4.17.21
1005 |
1006 | eazy-logger@4.1.0:
1007 | dependencies:
1008 | chalk: 4.1.2
1009 |
1010 | ee-first@1.1.1: {}
1011 |
1012 | emoji-regex@8.0.0: {}
1013 |
1014 | encodeurl@1.0.2: {}
1015 |
1016 | engine.io-client@6.6.3:
1017 | dependencies:
1018 | '@socket.io/component-emitter': 3.1.2
1019 | debug: 4.3.7
1020 | engine.io-parser: 5.2.3
1021 | ws: 8.17.1
1022 | xmlhttprequest-ssl: 2.1.2
1023 | transitivePeerDependencies:
1024 | - bufferutil
1025 | - supports-color
1026 | - utf-8-validate
1027 |
1028 | engine.io-parser@5.2.3: {}
1029 |
1030 | engine.io@6.6.4:
1031 | dependencies:
1032 | '@types/cors': 2.8.17
1033 | '@types/node': 22.14.0
1034 | accepts: 1.3.8
1035 | base64id: 2.0.0
1036 | cookie: 0.7.2
1037 | cors: 2.8.5
1038 | debug: 4.3.7
1039 | engine.io-parser: 5.2.3
1040 | ws: 8.17.1
1041 | transitivePeerDependencies:
1042 | - bufferutil
1043 | - supports-color
1044 | - utf-8-validate
1045 |
1046 | escalade@3.2.0: {}
1047 |
1048 | escape-html@1.0.3: {}
1049 |
1050 | escape-string-regexp@5.0.0: {}
1051 |
1052 | etag@1.8.1: {}
1053 |
1054 | eventemitter3@4.0.7: {}
1055 |
1056 | fast-glob@3.3.2:
1057 | dependencies:
1058 | '@nodelib/fs.stat': 2.0.5
1059 | '@nodelib/fs.walk': 1.2.8
1060 | glob-parent: 5.1.2
1061 | merge2: 1.4.1
1062 | micromatch: 4.0.8
1063 |
1064 | fastq@1.17.1:
1065 | dependencies:
1066 | reusify: 1.0.4
1067 |
1068 | fill-range@7.1.1:
1069 | dependencies:
1070 | to-regex-range: 5.0.1
1071 |
1072 | finalhandler@1.1.0:
1073 | dependencies:
1074 | debug: 2.6.9
1075 | encodeurl: 1.0.2
1076 | escape-html: 1.0.3
1077 | on-finished: 2.3.0
1078 | parseurl: 1.3.3
1079 | statuses: 1.3.1
1080 | unpipe: 1.0.0
1081 | transitivePeerDependencies:
1082 | - supports-color
1083 |
1084 | follow-redirects@1.15.9(debug@4.3.2):
1085 | optionalDependencies:
1086 | debug: 4.3.2
1087 |
1088 | fresh@0.5.2: {}
1089 |
1090 | fs-extra@11.3.0:
1091 | dependencies:
1092 | graceful-fs: 4.2.11
1093 | jsonfile: 6.1.0
1094 | universalify: 2.0.1
1095 |
1096 | fs-extra@3.0.1:
1097 | dependencies:
1098 | graceful-fs: 4.2.11
1099 | jsonfile: 3.0.1
1100 | universalify: 0.1.2
1101 |
1102 | fsevents@2.3.3:
1103 | optional: true
1104 |
1105 | get-caller-file@2.0.5: {}
1106 |
1107 | glob-parent@5.1.2:
1108 | dependencies:
1109 | is-glob: 4.0.3
1110 |
1111 | globby@13.2.2:
1112 | dependencies:
1113 | dir-glob: 3.0.1
1114 | fast-glob: 3.3.2
1115 | ignore: 5.3.2
1116 | merge2: 1.4.1
1117 | slash: 4.0.0
1118 |
1119 | graceful-fs@4.2.11: {}
1120 |
1121 | has-flag@4.0.0: {}
1122 |
1123 | http-errors@1.6.3:
1124 | dependencies:
1125 | depd: 1.1.2
1126 | inherits: 2.0.3
1127 | setprototypeof: 1.1.0
1128 | statuses: 1.4.0
1129 |
1130 | http-errors@2.0.0:
1131 | dependencies:
1132 | depd: 2.0.0
1133 | inherits: 2.0.4
1134 | setprototypeof: 1.2.0
1135 | statuses: 2.0.1
1136 | toidentifier: 1.0.1
1137 |
1138 | http-proxy@1.18.1:
1139 | dependencies:
1140 | eventemitter3: 4.0.7
1141 | follow-redirects: 1.15.9(debug@4.3.2)
1142 | requires-port: 1.0.0
1143 | transitivePeerDependencies:
1144 | - debug
1145 |
1146 | iconv-lite@0.4.24:
1147 | dependencies:
1148 | safer-buffer: 2.1.2
1149 |
1150 | ignore@5.3.2: {}
1151 |
1152 | immutable@3.8.2: {}
1153 |
1154 | indent-string@5.0.0: {}
1155 |
1156 | inherits@2.0.3: {}
1157 |
1158 | inherits@2.0.4: {}
1159 |
1160 | is-binary-path@2.1.0:
1161 | dependencies:
1162 | binary-extensions: 2.3.0
1163 |
1164 | is-extglob@2.1.1: {}
1165 |
1166 | is-fullwidth-code-point@3.0.0: {}
1167 |
1168 | is-glob@4.0.3:
1169 | dependencies:
1170 | is-extglob: 2.1.1
1171 |
1172 | is-number-like@1.0.8:
1173 | dependencies:
1174 | lodash.isfinite: 3.3.2
1175 |
1176 | is-number@7.0.0: {}
1177 |
1178 | is-wsl@1.1.0: {}
1179 |
1180 | jsonfile@3.0.1:
1181 | optionalDependencies:
1182 | graceful-fs: 4.2.11
1183 |
1184 | jsonfile@6.1.0:
1185 | dependencies:
1186 | universalify: 2.0.1
1187 | optionalDependencies:
1188 | graceful-fs: 4.2.11
1189 |
1190 | junk@4.0.1: {}
1191 |
1192 | limiter@1.1.5: {}
1193 |
1194 | lite-server@2.6.1:
1195 | dependencies:
1196 | browser-sync: 2.29.3
1197 | connect-history-api-fallback: 1.6.0
1198 | connect-logger: 0.0.1
1199 | lodash: 4.17.21
1200 | minimist: 1.2.8
1201 | transitivePeerDependencies:
1202 | - bufferutil
1203 | - debug
1204 | - supports-color
1205 | - utf-8-validate
1206 |
1207 | localtunnel@2.0.2:
1208 | dependencies:
1209 | axios: 0.21.4(debug@4.3.2)
1210 | debug: 4.3.2
1211 | openurl: 1.1.1
1212 | yargs: 17.1.1
1213 | transitivePeerDependencies:
1214 | - supports-color
1215 |
1216 | lodash.isfinite@3.3.2: {}
1217 |
1218 | lodash@4.17.21: {}
1219 |
1220 | meow@12.1.1: {}
1221 |
1222 | merge2@1.4.1: {}
1223 |
1224 | micromatch@4.0.8:
1225 | dependencies:
1226 | braces: 3.0.3
1227 | picomatch: 2.3.1
1228 |
1229 | mime-db@1.52.0: {}
1230 |
1231 | mime-types@2.1.35:
1232 | dependencies:
1233 | mime-db: 1.52.0
1234 |
1235 | mime@1.4.1: {}
1236 |
1237 | minimatch@3.1.2:
1238 | dependencies:
1239 | brace-expansion: 1.1.11
1240 |
1241 | minimist@1.2.8: {}
1242 |
1243 | mitt@1.2.0: {}
1244 |
1245 | moment@2.30.1: {}
1246 |
1247 | ms@2.0.0: {}
1248 |
1249 | ms@2.1.2: {}
1250 |
1251 | ms@2.1.3: {}
1252 |
1253 | negotiator@0.6.3: {}
1254 |
1255 | nested-error-stacks@2.1.1: {}
1256 |
1257 | normalize-path@3.0.0: {}
1258 |
1259 | object-assign@4.1.1: {}
1260 |
1261 | on-finished@2.3.0:
1262 | dependencies:
1263 | ee-first: 1.1.1
1264 |
1265 | openurl@1.1.1: {}
1266 |
1267 | opn@5.3.0:
1268 | dependencies:
1269 | is-wsl: 1.1.0
1270 |
1271 | p-event@5.0.1:
1272 | dependencies:
1273 | p-timeout: 5.1.0
1274 |
1275 | p-filter@3.0.0:
1276 | dependencies:
1277 | p-map: 5.5.0
1278 |
1279 | p-map@5.5.0:
1280 | dependencies:
1281 | aggregate-error: 4.0.1
1282 |
1283 | p-map@6.0.0: {}
1284 |
1285 | p-timeout@5.1.0: {}
1286 |
1287 | parseurl@1.3.3: {}
1288 |
1289 | path-type@4.0.0: {}
1290 |
1291 | picomatch@2.3.1: {}
1292 |
1293 | portscanner@2.2.0:
1294 | dependencies:
1295 | async: 2.6.4
1296 | is-number-like: 1.0.8
1297 |
1298 | queue-microtask@1.2.3: {}
1299 |
1300 | range-parser@1.2.1: {}
1301 |
1302 | raw-body@2.5.2:
1303 | dependencies:
1304 | bytes: 3.1.2
1305 | http-errors: 2.0.0
1306 | iconv-lite: 0.4.24
1307 | unpipe: 1.0.0
1308 |
1309 | readdirp@3.6.0:
1310 | dependencies:
1311 | picomatch: 2.3.1
1312 |
1313 | require-directory@2.1.1: {}
1314 |
1315 | requires-port@1.0.0: {}
1316 |
1317 | resp-modifier@6.0.2:
1318 | dependencies:
1319 | debug: 2.6.9
1320 | minimatch: 3.1.2
1321 | transitivePeerDependencies:
1322 | - supports-color
1323 |
1324 | reusify@1.0.4: {}
1325 |
1326 | run-parallel@1.2.0:
1327 | dependencies:
1328 | queue-microtask: 1.2.3
1329 |
1330 | rx@4.1.0: {}
1331 |
1332 | safer-buffer@2.1.2: {}
1333 |
1334 | send@0.16.2:
1335 | dependencies:
1336 | debug: 2.6.9
1337 | depd: 1.1.2
1338 | destroy: 1.0.4
1339 | encodeurl: 1.0.2
1340 | escape-html: 1.0.3
1341 | etag: 1.8.1
1342 | fresh: 0.5.2
1343 | http-errors: 1.6.3
1344 | mime: 1.4.1
1345 | ms: 2.0.0
1346 | on-finished: 2.3.0
1347 | range-parser: 1.2.1
1348 | statuses: 1.4.0
1349 | transitivePeerDependencies:
1350 | - supports-color
1351 |
1352 | serve-index@1.9.1:
1353 | dependencies:
1354 | accepts: 1.3.8
1355 | batch: 0.6.1
1356 | debug: 2.6.9
1357 | escape-html: 1.0.3
1358 | http-errors: 1.6.3
1359 | mime-types: 2.1.35
1360 | parseurl: 1.3.3
1361 | transitivePeerDependencies:
1362 | - supports-color
1363 |
1364 | serve-static@1.13.2:
1365 | dependencies:
1366 | encodeurl: 1.0.2
1367 | escape-html: 1.0.3
1368 | parseurl: 1.3.3
1369 | send: 0.16.2
1370 | transitivePeerDependencies:
1371 | - supports-color
1372 |
1373 | server-destroy@1.0.1: {}
1374 |
1375 | setprototypeof@1.1.0: {}
1376 |
1377 | setprototypeof@1.2.0: {}
1378 |
1379 | slash@4.0.0: {}
1380 |
1381 | socket.io-adapter@2.5.5:
1382 | dependencies:
1383 | debug: 4.3.7
1384 | ws: 8.17.1
1385 | transitivePeerDependencies:
1386 | - bufferutil
1387 | - supports-color
1388 | - utf-8-validate
1389 |
1390 | socket.io-client@4.8.1:
1391 | dependencies:
1392 | '@socket.io/component-emitter': 3.1.2
1393 | debug: 4.3.7
1394 | engine.io-client: 6.6.3
1395 | socket.io-parser: 4.2.4
1396 | transitivePeerDependencies:
1397 | - bufferutil
1398 | - supports-color
1399 | - utf-8-validate
1400 |
1401 | socket.io-parser@4.2.4:
1402 | dependencies:
1403 | '@socket.io/component-emitter': 3.1.2
1404 | debug: 4.3.7
1405 | transitivePeerDependencies:
1406 | - supports-color
1407 |
1408 | socket.io@4.8.1:
1409 | dependencies:
1410 | accepts: 1.3.8
1411 | base64id: 2.0.0
1412 | cors: 2.8.5
1413 | debug: 4.3.7
1414 | engine.io: 6.6.4
1415 | socket.io-adapter: 2.5.5
1416 | socket.io-parser: 4.2.4
1417 | transitivePeerDependencies:
1418 | - bufferutil
1419 | - supports-color
1420 | - utf-8-validate
1421 |
1422 | statuses@1.3.1: {}
1423 |
1424 | statuses@1.4.0: {}
1425 |
1426 | statuses@2.0.1: {}
1427 |
1428 | stream-throttle@0.1.3:
1429 | dependencies:
1430 | commander: 2.20.3
1431 | limiter: 1.1.5
1432 |
1433 | string-width@4.2.3:
1434 | dependencies:
1435 | emoji-regex: 8.0.0
1436 | is-fullwidth-code-point: 3.0.0
1437 | strip-ansi: 6.0.1
1438 |
1439 | strip-ansi@6.0.1:
1440 | dependencies:
1441 | ansi-regex: 5.0.1
1442 |
1443 | supports-color@7.2.0:
1444 | dependencies:
1445 | has-flag: 4.0.0
1446 |
1447 | to-regex-range@5.0.1:
1448 | dependencies:
1449 | is-number: 7.0.0
1450 |
1451 | toidentifier@1.0.1: {}
1452 |
1453 | typescript@5.8.3: {}
1454 |
1455 | ua-parser-js@1.0.40: {}
1456 |
1457 | undici-types@6.21.0: {}
1458 |
1459 | universalify@0.1.2: {}
1460 |
1461 | universalify@2.0.1: {}
1462 |
1463 | unpipe@1.0.0: {}
1464 |
1465 | utils-merge@1.0.1: {}
1466 |
1467 | vary@1.1.2: {}
1468 |
1469 | wrap-ansi@7.0.0:
1470 | dependencies:
1471 | ansi-styles: 4.3.0
1472 | string-width: 4.2.3
1473 | strip-ansi: 6.0.1
1474 |
1475 | ws@8.17.1: {}
1476 |
1477 | xmlhttprequest-ssl@2.1.2: {}
1478 |
1479 | y18n@5.0.8: {}
1480 |
1481 | yargs-parser@20.2.9: {}
1482 |
1483 | yargs-parser@21.1.1: {}
1484 |
1485 | yargs@17.1.1:
1486 | dependencies:
1487 | cliui: 7.0.4
1488 | escalade: 3.2.0
1489 | get-caller-file: 2.0.5
1490 | require-directory: 2.1.1
1491 | string-width: 4.2.3
1492 | y18n: 5.0.8
1493 | yargs-parser: 20.2.9
1494 |
1495 | yargs@17.7.2:
1496 | dependencies:
1497 | cliui: 8.0.1
1498 | escalade: 3.2.0
1499 | get-caller-file: 2.0.5
1500 | require-directory: 2.1.1
1501 | string-width: 4.2.3
1502 | y18n: 5.0.8
1503 | yargs-parser: 21.1.1
1504 |
--------------------------------------------------------------------------------
/src/angular.ts:
--------------------------------------------------------------------------------
1 | import { generatedMessage, createElementMetadata, CustomElement } from './utils.js';
2 |
3 | export function generate(config: { customElementsManifest: any, entrypoint: string }) {
4 | const elements = createElementMetadata(config.customElementsManifest, config.entrypoint);
5 |
6 | const src = `
7 | /*
8 | * custom-element-types.module.ts
9 | * ${generatedMessage}
10 | */
11 | import { Directive, Input, Output, EventEmitter, ElementRef } from '@angular/core';
12 | ${elements.map(e => e.importType).join('\n')}
13 |
14 | ${elements.map(e => getDirective(e)).join('\n')}`.trim();
15 | return [{ src, path: 'custom-element-types.module.ts' }];;
16 | }
17 |
18 | // https://github.com/angular/angular/issues/14761
19 | function getDirective(element: CustomElement) {
20 | return `
21 | @Directive({ selector: '${element.tagName}', standalone: true })
22 | export class ${element.name}Directive {
23 | protected element: Partial<${element.name}>;
24 | ${getInputProperties(element)}
25 | ${getOutputEvents(element)}
26 | constructor(elementRef: ElementRef) {
27 | this.element = elementRef.nativeElement;
28 | }
29 | }`;
30 | }
31 |
32 | function getInputProperties(element: CustomElement) {
33 | return element.propeties.map(prop => `
34 | @Input() set ${prop.name}(value${prop.type === 'boolean' ? `: boolean | ''` : ''}) { this.element.${prop.name} = ${prop.type === 'boolean' ? `value === '' ? true : ` : ''}value; }
35 | get ${prop.name}() { return this.element.${prop.name}; }`).join('\n');
36 | }
37 |
38 | function getOutputEvents(element: any) {
39 | return `${element.events?.length ? `\n${element.events?.map(event => ` @Output('${event.name}') ${event.name}Event: EventEmitter = new EventEmitter();`).join('\n\n')}` : ''}`;
40 | }
41 |
--------------------------------------------------------------------------------
/src/blazor.ts:
--------------------------------------------------------------------------------
1 | import { generatedMessage, createElementMetadata } from './utils.js';
2 |
3 | export function generate(config: { customElementsManifest: any, entrypoint: string }) {
4 | const elements = createElementMetadata(config.customElementsManifest, config.entrypoint);
5 |
6 | const eventObject = elements.reduce((prev, component) => {
7 | component.events?.forEach(event => {
8 | prev[event.name] = prev[event.name] ? [...prev[event.name] ?? [], { ...event, tagName: component.tagName }] : [];
9 | });
10 |
11 | return prev;
12 | }, { });
13 |
14 |
15 | const srcCS = `
16 | /*
17 | * @experimental
18 | *
19 | * EventHandlers.cs
20 | * ${generatedMessage}
21 | */
22 |
23 | using Microsoft.AspNetCore.Components;
24 | using System.Text.Json;
25 |
26 | namespace BlazorApp;
27 | ${Object.keys(eventObject).map(name => ({ name, descriptions: eventObject[name] })).map(e => {
28 | return `
29 | [EventHandler("on${e.name}", typeof(CustomEventArgs))] // ${e.descriptions.map(d => `${d.tagName}`).join(', ')}`;
30 | }).join('')}
31 | public static class EventHandlers
32 | {
33 |
34 | }
35 |
36 | public class CustomEventArgs : EventArgs
37 | {
38 | public dynamic? Detail { get; set; }
39 |
40 | /* Returns the detail value of CustomEvent with given type */
41 | public T GetDetail() {
42 | return JsonSerializer.Deserialize(Detail); // used to cast dynamic type, unknown until event occurs at runtime
43 | }
44 | }`.trim();
45 |
46 | const srcJS = `
47 | /**
48 | * @experimental
49 | *
50 | * wwwroot/custom-events.js
51 | * ${generatedMessage}
52 | */
53 |
54 | const customEvents = {${Object.keys(eventObject)
55 | .map(name => ({ name, descriptions: eventObject[name] }))
56 | .map(e => `
57 | ${e.name}: true, // ${e.descriptions.map(d => `${d.tagName}`).join(', ')}`)}
58 | };
59 |
60 | /**
61 | * Workaround: Blazor ignores the event target and only listens to global events
62 | * this is a problem for most custom elements which dispatch CustomEvent types
63 | * that default to not bubbling.
64 | */
65 | CustomEvent = class Bubbled extends CustomEvent {
66 | constructor(event, config) {
67 | const bubbles = customEvents[event] !== undefined ? customEvents[event] : config.bubbles;
68 | super(event, { ...config, bubbles });
69 | }
70 | }
71 |
72 | Object.keys(customEvents).map(event => {
73 | Blazor.registerCustomEventType(event, {
74 | browserEventName: event,
75 | createEventArgs: event => {
76 | return { detail: event.detail };
77 | }
78 | });
79 | });
80 | `;
81 |
82 | return [{ src: srcCS, path: 'CustomEvents.cs' }, { src: srcJS, path: 'custom-events.js' }];
83 | }
84 |
85 |
86 | // export function afterStarted() {
87 | // ${Object.keys(eventObject).map(name => ({ name, descriptions: eventObject[name] })).map(e => `
88 | // ${e.descriptions.map(d => ` // ${d.tagName}: ${d.description}`).join('\n')}
89 | // Blazor.registerCustomEventType('${e.name}', {
90 | // browserEventName: '${e.name}',
91 | // createEventArgs: event => {
92 | // return { detail: event.detail };
93 | // }
94 | // });`)}`};
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import fs from 'fs-extra';
4 | import path from 'path';
5 | import yargs from 'yargs';
6 | import { hideBin } from 'yargs/helpers';
7 |
8 | import { generate as generateAngular } from './angular.js';
9 | import { generate as generateReact } from './react.js';
10 | import { generate as generatePreact } from './preact.js';
11 | import { generate as generateTypeScript } from './typescript.js';
12 | import { generate as generateBlazor } from './blazor.js';
13 | import { generate as generateJSX } from './jsx.js';
14 |
15 | const { ensureFileSync, writeFileSync, readJsonSync } = fs;
16 | const argv = yargs(hideBin(process.argv)).argv;
17 | const writePath = argv.write === true ? './' : argv.write;
18 | const manifestPath = argv.customElements ? argv.customElements : './custom-elements.json';
19 |
20 | const generator = {
21 | angular: generateAngular,
22 | react: generateReact,
23 | preact: generatePreact,
24 | typescript: generateTypeScript,
25 | blazor: generateBlazor,
26 | jsx: generateJSX
27 | }
28 |
29 | export function run() {
30 | const customElementsManifest = readJsonSync(path.resolve(manifestPath));
31 | let result = generator[argv.type]({ customElementsManifest, entrypoint: argv.entrypoint });
32 |
33 | if (argv.write) {
34 | write(writePath, result);
35 | } else {
36 | console.log(result);
37 | }
38 | }
39 |
40 | function write(dir: string, files: { src: string, path: string }[]) {
41 | files.forEach(file => {
42 | ensureFileSync(path.resolve(dir, file.path));
43 | writeFileSync(path.resolve(dir, file.path), file.src);
44 | });
45 | }
46 |
47 | run();
48 |
--------------------------------------------------------------------------------
/src/jsx.ts:
--------------------------------------------------------------------------------
1 | import { generatedMessage, createElementMetadata } from './utils.js';
2 |
3 | export function generate(config: { customElementsManifest: any, entrypoint: string }) {
4 | const elements = createElementMetadata(config.customElementsManifest, config.entrypoint);
5 | const src = `
6 | /*
7 | * @experimental
8 | *
9 | * types.d.ts
10 | * ${generatedMessage}
11 | */
12 | ${elements.map(e => e.importType).join('\n')}
13 |
14 | type CustomEvents = { [key in K] : (event: CustomEvent) => void };
15 | type CustomElement = Partial>;
16 |
17 | export interface CustomElements {
18 | ${elements.map(e => ` ['${e.tagName}']: CustomElement<${e.name}${e.events.length ? `,${e.events.map(event => `'${event.name}'`).join(' | ')}` : ''}>`).join(';\n')}
19 | }
20 | `.trim();
21 |
22 | return [{ src, path: 'types.d.ts' }];
23 | }
24 |
--------------------------------------------------------------------------------
/src/preact.ts:
--------------------------------------------------------------------------------
1 | import { generatedMessage, createElementMetadata } from './utils.js';
2 |
3 | export function generate(config: { customElementsManifest: any, entrypoint: string }) {
4 | const elements = createElementMetadata(config.customElementsManifest, config.entrypoint);
5 |
6 | const src = `
7 | /*
8 | * types.d.ts
9 | * ${generatedMessage}
10 | */
11 | ${elements.map(e => e.import).join('\n')}
12 |
13 | type CustomEvents = { [key in K] : (event: CustomEvent) => void };
14 | type CustomElement = Partial>;
15 |
16 | declare global {
17 | namespace preact.JSX {
18 | interface IntrinsicElements {
19 | ${elements.map(e => ` ['${e.tagName}']: CustomElement<${e.name}${e.events.length ? `,${e.events.map(event => `'${event.name}'`).join(' | ')}` : ''}>`).join(';\n')}
20 | }
21 | }
22 | }`.trim();
23 |
24 | return [{ src, path: 'types.d.ts' }];
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/src/react.ts:
--------------------------------------------------------------------------------
1 | import { generatedMessage, createElementMetadata } from './utils.js';
2 |
3 | export function generate(config: { customElementsManifest: any, entrypoint: string }) {
4 | const elements = createElementMetadata(config.customElementsManifest, config.entrypoint);
5 | const src = `
6 | /*
7 | * @experimental
8 | *
9 | * types.d.ts
10 | * ${generatedMessage}
11 | */
12 | import { DOMAttributes } from 'react';
13 | ${elements.map(e => e.import).join('\n')}
14 |
15 | type CustomEvents = { [key in K] : (event: CustomEvent) => void };
16 | type CustomElement = Partial & { children: any } & CustomEvents<\`on\${K}\`>>;
17 |
18 | declare module "react" {
19 | namespace JSX {
20 | interface IntrinsicElements {
21 | ${elements.map(e => ` ['${e.tagName}']: CustomElement<${e.name}${e.events.length ? `,${e.events.map(event => `'${event.name}'`).join(' | ')}` : ''}>`).join(';\n')}
22 | }
23 | }
24 | }`.trim();
25 |
26 | return [{ src, path: 'types.d.ts' }];
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/src/reserved.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This rule catches property overrides that conflicts with a key in the HTMLElement prototype
3 | * https://github.com/ionic-team/stencil-eslint/blob/main/src/rules/reserved-member-names.ts
4 | * https://github.com/ionic-team/stencil-eslint/blob/main/src/rules/reserved-event-names.ts
5 | */
6 |
7 | const ariaProperties = [
8 | 'ActiveDescendant',
9 | 'Atomic',
10 | 'AutoComplete',
11 | 'Busy',
12 | 'Checked',
13 | 'ColCount',
14 | 'ColIndex',
15 | 'ColSpan',
16 | 'Controls',
17 | 'Current',
18 | 'DescribedBy',
19 | 'Details',
20 | 'Disabled',
21 | 'ErrorMessage',
22 | 'Expanded',
23 | 'FlowTo',
24 | 'HasPopup',
25 | 'Hidden',
26 | 'Invalid',
27 | 'KeyShortcuts',
28 | 'Label',
29 | 'LabelledBy',
30 | 'Level',
31 | 'Live',
32 | 'Modal',
33 | 'MultiLine',
34 | 'MultiSelectable',
35 | 'Orientation',
36 | 'Owns',
37 | 'Placeholder',
38 | 'PosInSet',
39 | 'Pressed',
40 | 'ReadOnly',
41 | 'Relevant',
42 | 'Required',
43 | 'RoleDescription',
44 | 'RowCount',
45 | 'RowIndex',
46 | 'RowSpan',
47 | 'Selected',
48 | 'SetSize',
49 | 'Sort',
50 | 'ValueMax',
51 | 'ValueMin',
52 | 'ValueNow',
53 | 'ValueText',
54 | ].map(name => `aria${name}`);
55 |
56 | const htmlElementProperties = [
57 | 'title',
58 | 'lang',
59 | 'translate',
60 | 'dir',
61 | 'dataset',
62 | 'hidden',
63 | 'tabIndex',
64 | 'accessKey',
65 | 'draggable',
66 | 'spellcheck',
67 | 'autocapitalize',
68 | 'contentEditable',
69 | 'isContentEditable',
70 | 'inputMode',
71 | 'offsetParent',
72 | 'offsetTop',
73 | 'offsetLeft',
74 | 'offsetWidth',
75 | 'offsetHeight',
76 | 'style',
77 | 'innerText',
78 | 'outerText',
79 | 'oncopy',
80 | 'oncut',
81 | 'onpaste',
82 | 'onabort',
83 | 'onblur',
84 | 'oncancel',
85 | 'oncanplay',
86 | 'oncanplaythrough',
87 | 'onchange',
88 | 'onclick',
89 | 'onclose',
90 | 'oncontextmenu',
91 | 'oncuechange',
92 | 'ondblclick',
93 | 'ondrag',
94 | 'ondragend',
95 | 'ondragenter',
96 | 'ondragleave',
97 | 'ondragover',
98 | 'ondragstart',
99 | 'ondrop',
100 | 'ondurationchange',
101 | 'onemptied',
102 | 'onended',
103 | 'onerror',
104 | 'onfocus',
105 | 'oninput',
106 | 'oninvalid',
107 | 'onkeydown',
108 | 'onkeypress',
109 | 'onkeyup',
110 | 'onload',
111 | 'onloadeddata',
112 | 'onloadedmetadata',
113 | 'onloadstart',
114 | 'onmousedown',
115 | 'onmouseenter',
116 | 'onmouseleave',
117 | 'onmousemove',
118 | 'onmouseout',
119 | 'onmouseover',
120 | 'onmouseup',
121 | 'onmousewheel',
122 | 'onpause',
123 | 'onplay',
124 | 'onplaying',
125 | 'onprogress',
126 | 'onratechange',
127 | 'onreset',
128 | 'onresize',
129 | 'onscroll',
130 | 'onseeked',
131 | 'onseeking',
132 | 'onselect',
133 | 'onstalled',
134 | 'onsubmit',
135 | 'onsuspend',
136 | 'ontimeupdate',
137 | 'ontoggle',
138 | 'onvolumechange',
139 | 'onwaiting',
140 | 'onwheel',
141 | 'onauxclick',
142 | 'ongotpointercapture',
143 | 'onlostpointercapture',
144 | 'onpointerdown',
145 | 'onpointermove',
146 | 'onpointerup',
147 | 'onpointercancel',
148 | 'onpointerover',
149 | 'onpointerout',
150 | 'onpointerenter',
151 | 'onpointerleave',
152 | 'onselectstart',
153 | 'onselectionchange',
154 | 'nonce',
155 | 'click',
156 | 'focus',
157 | 'blur',
158 | ];
159 |
160 | const elementProperties = [
161 | 'namespaceURI',
162 | 'prefix',
163 | 'localName',
164 | 'tagName',
165 | 'id',
166 | 'className',
167 | 'classList',
168 | 'slot',
169 | 'attributes',
170 | 'shadowRoot',
171 | 'assignedSlot',
172 | 'innerHTML',
173 | 'outerHTML',
174 | 'scrollTop',
175 | 'scrollLeft',
176 | 'scrollWidth',
177 | 'scrollHeight',
178 | 'clientTop',
179 | 'clientLeft',
180 | 'clientWidth',
181 | 'clientHeight',
182 | 'attributeStyleMap',
183 | 'onbeforecopy',
184 | 'onbeforecut',
185 | 'onbeforepaste',
186 | 'onsearch',
187 | 'previousElementSibling',
188 | 'nextElementSibling',
189 | 'children',
190 | 'firstElementChild',
191 | 'lastElementChild',
192 | 'childElementCount',
193 | 'onfullscreenchange',
194 | 'onfullscreenerror',
195 | 'onwebkitfullscreenchange',
196 | 'onwebkitfullscreenerror',
197 | 'setPointerCapture',
198 | 'releasePointerCapture',
199 | 'hasPointerCapture',
200 | 'hasAttributes',
201 | 'getAttributeNames',
202 | 'getAttribute',
203 | 'getAttributeNS',
204 | 'setAttribute',
205 | 'setAttributeNS',
206 | 'removeAttribute',
207 | 'removeAttributeNS',
208 | 'hasAttribute',
209 | 'hasAttributeNS',
210 | 'toggleAttribute',
211 | 'getAttributeNode',
212 | 'getAttributeNodeNS',
213 | 'setAttributeNode',
214 | 'setAttributeNodeNS',
215 | 'removeAttributeNode',
216 | 'closest',
217 | 'matches',
218 | 'webkitMatchesSelector',
219 | 'attachShadow',
220 | 'getElementsByTagName',
221 | 'getElementsByTagNameNS',
222 | 'getElementsByClassName',
223 | 'insertAdjacentElement',
224 | 'insertAdjacentText',
225 | 'insertAdjacentHTML',
226 | 'requestPointerLock',
227 | 'getClientRects',
228 | 'getBoundingClientRect',
229 | 'scrollIntoView',
230 | 'scroll',
231 | 'scrollTo',
232 | 'scrollBy',
233 | 'scrollIntoViewIfNeeded',
234 | 'animate',
235 | 'computedStyleMap',
236 | 'before',
237 | 'after',
238 | 'replaceWith',
239 | 'remove',
240 | 'prepend',
241 | 'append',
242 | 'querySelector',
243 | 'querySelectorAll',
244 | 'requestFullscreen',
245 | 'webkitRequestFullScreen',
246 | 'webkitRequestFullscreen',
247 | 'part',
248 | 'createShadowRoot',
249 | 'getDestinationInsertionPoints',
250 |
251 | // custom elements
252 | 'role',
253 | 'form',
254 | ];
255 |
256 | const reservedPublicProperties = new Set(
257 | [...ariaProperties, ...htmlElementProperties, ...elementProperties].map(p => p.toLowerCase())
258 | );
259 |
260 | export function isReservedProperty(memberName) {
261 | memberName = memberName.toLowerCase();
262 | return reservedPublicProperties.has(memberName);
263 | }
264 |
265 | const htmlElementEvents = [
266 | 'abort',
267 | 'auxclick',
268 | 'blur',
269 | 'cancel',
270 | 'canplay',
271 | 'canplaythrough',
272 | 'change',
273 | 'click',
274 | 'close',
275 | 'contextmenu',
276 | 'copy',
277 | 'cuechange',
278 | 'cut',
279 | 'dblclick',
280 | 'drag',
281 | 'dragend',
282 | 'dragenter',
283 | 'dragleave',
284 | 'dragover',
285 | 'dragstart',
286 | 'drop',
287 | 'durationchange',
288 | 'emptied',
289 | 'ended',
290 | 'error',
291 | 'focus',
292 | 'gotpointercapture',
293 | 'input',
294 | 'invalid',
295 | 'keydown',
296 | 'keypress',
297 | 'keyup',
298 | 'load',
299 | 'loadeddata',
300 | 'loadedmetadata',
301 | 'loadstart',
302 | 'lostpointercapture',
303 | 'mousedown',
304 | 'mouseenter',
305 | 'mouseleave',
306 | 'mousemove',
307 | 'mouseout',
308 | 'mouseover',
309 | 'mouseup',
310 | 'mousewheel',
311 | 'paste',
312 | 'pause',
313 | 'play',
314 | 'playing',
315 | 'pointercancel',
316 | 'pointerdown',
317 | 'pointerenter',
318 | 'pointerleave',
319 | 'pointermove',
320 | 'pointerout',
321 | 'pointerover',
322 | 'pointerup',
323 | 'progress',
324 | 'ratechange',
325 | 'reset',
326 | 'resize',
327 | 'scroll',
328 | 'seeked',
329 | 'seeking',
330 | 'select',
331 | 'selectionchange',
332 | 'selectstart',
333 | 'stalled',
334 | 'submit',
335 | 'suspend',
336 | 'timeupdate',
337 | 'toggle',
338 | 'volumechange',
339 | 'waiting',
340 | 'wheel',
341 | ];
342 |
343 | const reservedPublicEvents = new Set([...htmlElementEvents].map(p => p.toLowerCase()));
344 |
345 | export function isReservedEvent(memberName) {
346 | memberName = memberName.toLowerCase();
347 | return reservedPublicEvents.has(memberName);
348 | }
--------------------------------------------------------------------------------
/src/typescript.ts:
--------------------------------------------------------------------------------
1 | import { generatedMessage, createElementMetadata } from './utils.js';
2 |
3 | export function generate(config: { customElementsManifest: any, entrypoint: string }) {
4 | const elements = createElementMetadata(config.customElementsManifest, config.entrypoint);
5 | const src = `
6 | /*
7 | * types.d.ts
8 | * ${generatedMessage}
9 | */
10 | ${elements.map(e => e.import).join('\n')}
11 |
12 | declare global {
13 | interface HTMLElementTagNameMap {
14 | ${elements.map(e => ` '${e.tagName}': ${e.name}`).join(';\n')}
15 | }
16 | }`.trim();
17 |
18 | return [{ src, path: 'types.d.ts' }];;
19 | }
20 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import { Package } from 'custom-elements-manifest/schema';
2 | import { isReservedEvent, isReservedProperty } from './reserved.js';
3 |
4 | export interface CustomElement {
5 | name: string;
6 | tagName: string;
7 | path: string;
8 | import: string;
9 | importType: string;
10 | description: string;
11 | propeties: { name: string; type: string; }[];
12 | events: { name: string; }[];
13 | cssProperties: any[];
14 | slots: any[]
15 | }
16 |
17 | export interface CustomElementMetadata {
18 | entrypoint: string;
19 | elements: CustomElement[];
20 | }
21 |
22 | export function createElementMetadata(customElementsManifest: Package, entrypoint): CustomElement[] {
23 | const modules = getCustomElementModules(customElementsManifest);
24 |
25 | const elements = modules.flatMap(m => {
26 | return m.declarations.filter(d => d.customElement && d.tagName).map(d => {
27 |
28 | const path = `${entrypoint ? `${entrypoint}` : './'}${replaceTsExtentions(m.path)}`;
29 | const element: CustomElement = {
30 | name: d.name,
31 | tagName: d.tagName,
32 | description: d.description ?? '',
33 | path,
34 | import: `import { ${d.name} } from '${path}';`,
35 | importType: `import type { ${d.name} } from '${path}';`,
36 | slots: d.slots ?? [],
37 | cssProperties: d.cssProperties ?? [],
38 | events: getCustomElementEvents(d) ?? [],
39 | propeties: getPublicProperties(d)
40 | };
41 |
42 | return element;
43 | });
44 | });
45 |
46 | return elements;
47 | }
48 |
49 | function replaceTsExtentions(filePath: string) {
50 | return filePath.endsWith('.ts') ? changeExt(filePath, 'js') : filePath;
51 | }
52 |
53 | function changeExt(filePath: string, ext: string) {
54 | const pos = filePath.includes('.') ? filePath.lastIndexOf('.') : filePath.length;
55 | return `${filePath.substr(0, pos)}.${ext}`;
56 | }
57 |
58 | function getPublicProperties(element: any) {
59 | return (element.members?.filter(m =>
60 | !m.readonly &&
61 | !m.static &&
62 | m.kind === 'field' &&
63 | m.attribute !== undefined &&
64 | m.privacy === undefined &&
65 | m.privacy !== 'private' &&
66 | m.privacy !== 'protected' &&
67 | m.name !== 'accessor' &&
68 | !isReservedProperty(m.name)
69 | ) ?? []).map(p => ({ name: p.name, type: p.type?.text }));
70 | }
71 |
72 | function getCustomElementModules(customElementsManifest: any) {
73 | return customElementsManifest.modules.filter(m => m.declarations?.length && m.declarations.find(d => d.customElement === true));
74 | }
75 |
76 | function getCustomElementEvents(element): any[] {
77 | const memberEvents = element.members
78 | .filter(event => event.privacy === undefined) // public
79 | .filter(prop => prop.type && prop.type?.text && prop.type?.text.includes('EventEmitter') && !isReservedEvent(prop.name))
80 | .map(event => ({ name: event.name }));
81 | const events = element.events ?? [];
82 | return Object.values(Object.values([...memberEvents, ...events].reduce((prev, next) => ({ ...prev, [next.name]: next }), {})));
83 | }
84 |
85 | export const generatedMessage = `Generated with https://github.com/blueprintui/custom-element-types`;
86 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2019",
4 | "module": "esnext",
5 | "moduleResolution": "node",
6 | "lib": ["es2020", "dom"],
7 | "emitDecoratorMetadata": false,
8 | "experimentalDecorators": true,
9 | "allowSyntheticDefaultImports": true,
10 | "resolveJsonModule": true,
11 | "declaration": true,
12 | "alwaysStrict": true,
13 | "noImplicitAny": false,
14 | "noImplicitReturns": true,
15 | "noImplicitThis": true,
16 | "noUnusedLocals": false,
17 | "noUnusedParameters": false,
18 | "strictFunctionTypes": true,
19 | "noFallthroughCasesInSwitch": true,
20 | "strictNullChecks": false,
21 | "sourceMap": false,
22 | "inlineSourceMap": false,
23 | "importHelpers": true,
24 | "rootDir": "./src",
25 | "baseUrl": "./",
26 | "paths": {
27 | "web-test-runner-performance": ["./dist/lib"],
28 | "web-test-runner-performance/*": ["./dist/lib/*"]
29 | }
30 | },
31 | "include": ["src/**/*.ts", "src/**/*.d.ts"],
32 | "exclude": ["node_modules"]
33 | }
34 |
--------------------------------------------------------------------------------
/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "noEmit": false,
5 | "outDir": "./dist/lib",
6 | },
7 | "include": ["src/**/*.ts", "src/**/*.d.ts"],
8 | "exclude": ["dist", "node_modules", "src/**/*.spec.ts", "src/**/*.performance.ts"]
9 | }
10 |
--------------------------------------------------------------------------------