├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── env.d.ts
├── index.html
├── package.json
├── pnpm-lock.yaml
├── postcss.config.js
├── public
└── .keep
├── src
├── components
│ ├── App.vue
│ ├── BuildLogs.vue
│ └── CodeMirror.vue
├── css
│ ├── codemirror.css
│ └── tailwind.css
├── hooks
│ └── useEsbuild.ts
├── lib
│ ├── builtin-modules.ts
│ ├── constants.ts
│ ├── editor.ts
│ ├── esbuild.ts
│ ├── path.ts
│ ├── store.ts
│ └── utils.ts
└── main.ts
├── tailwind.config.js
├── tsconfig.json
└── vite.config.ts
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | [*]
7 | indent_style = space
8 | indent_size = 2
9 | end_of_line = lf
10 | charset = utf-8
11 | trim_trailing_whitespace = false
12 | insert_final_newline = false
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .DS_Store
4 | esbuild.wasm
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 EGOIST
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.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # play-esbuild
2 |
3 | Try esbuild online: https://esbuild.egoist.dev
4 |
5 | ## Development
6 |
7 | Vite + Vue:
8 |
9 | ```bash
10 | pnpm i
11 | pnpm run dev
12 | ```
13 |
14 | ## Sponsors
15 |
16 | [](https://github.com/sponsors/egoist)
17 |
18 | ## License
19 |
20 | MIT
21 |
--------------------------------------------------------------------------------
/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | esbuild playground
8 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "play-esbuild",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "copy-esbuild": "cp node_modules/esbuild-wasm/esbuild.wasm public/esbuild.wasm",
9 | "dev": "npm run copy-esbuild && vite",
10 | "build": "npm run copy-esbuild && vite build"
11 | },
12 | "keywords": [],
13 | "author": "",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "@types/codemirror": "^5.60.5",
17 | "@types/ejs": "^3.1.0",
18 | "@types/parse-package-name": "^0.1.0",
19 | "@types/umami": "^2.10.0",
20 | "@vitejs/plugin-vue": "^5.2.1",
21 | "@vue/compiler-sfc": "^3.5.13",
22 | "codemirror": "^5.63.3",
23 | "ejs": "^3.1.6",
24 | "esbuild-wasm": "^0.24.2",
25 | "parse-package-name": "^1.0.0",
26 | "postcss": "^8.3.11",
27 | "resolve.exports": "^1.1.0",
28 | "tailwindcss": "^3.4.17",
29 | "typescript": "^4.4.4",
30 | "vite": "^6.0.5",
31 | "vue": "^3.5.13"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | devDependencies:
11 | '@types/codemirror':
12 | specifier: ^5.60.5
13 | version: 5.60.15
14 | '@types/ejs':
15 | specifier: ^3.1.0
16 | version: 3.1.5
17 | '@types/parse-package-name':
18 | specifier: ^0.1.0
19 | version: 0.1.3
20 | '@types/umami':
21 | specifier: ^2.10.0
22 | version: 2.10.0
23 | '@vitejs/plugin-vue':
24 | specifier: ^5.2.1
25 | version: 5.2.1(vite@6.0.5(jiti@1.21.7)(yaml@2.6.1))(vue@3.5.13(typescript@4.9.5))
26 | '@vue/compiler-sfc':
27 | specifier: ^3.5.13
28 | version: 3.5.13
29 | codemirror:
30 | specifier: ^5.63.3
31 | version: 5.65.18
32 | ejs:
33 | specifier: ^3.1.6
34 | version: 3.1.10
35 | esbuild-wasm:
36 | specifier: ^0.24.2
37 | version: 0.24.2
38 | parse-package-name:
39 | specifier: ^1.0.0
40 | version: 1.0.0
41 | postcss:
42 | specifier: ^8.3.11
43 | version: 8.4.49
44 | resolve.exports:
45 | specifier: ^1.1.0
46 | version: 1.1.1
47 | tailwindcss:
48 | specifier: ^3.4.17
49 | version: 3.4.17
50 | typescript:
51 | specifier: ^4.4.4
52 | version: 4.9.5
53 | vite:
54 | specifier: ^6.0.5
55 | version: 6.0.5(jiti@1.21.7)(yaml@2.6.1)
56 | vue:
57 | specifier: ^3.5.13
58 | version: 3.5.13(typescript@4.9.5)
59 |
60 | packages:
61 |
62 | '@alloc/quick-lru@5.2.0':
63 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
64 | engines: {node: '>=10'}
65 |
66 | '@babel/helper-string-parser@7.25.9':
67 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
68 | engines: {node: '>=6.9.0'}
69 |
70 | '@babel/helper-validator-identifier@7.25.9':
71 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
72 | engines: {node: '>=6.9.0'}
73 |
74 | '@babel/parser@7.26.3':
75 | resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==}
76 | engines: {node: '>=6.0.0'}
77 | hasBin: true
78 |
79 | '@babel/types@7.26.3':
80 | resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==}
81 | engines: {node: '>=6.9.0'}
82 |
83 | '@esbuild/aix-ppc64@0.24.0':
84 | resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
85 | engines: {node: '>=18'}
86 | cpu: [ppc64]
87 | os: [aix]
88 |
89 | '@esbuild/android-arm64@0.24.0':
90 | resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
91 | engines: {node: '>=18'}
92 | cpu: [arm64]
93 | os: [android]
94 |
95 | '@esbuild/android-arm@0.24.0':
96 | resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
97 | engines: {node: '>=18'}
98 | cpu: [arm]
99 | os: [android]
100 |
101 | '@esbuild/android-x64@0.24.0':
102 | resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
103 | engines: {node: '>=18'}
104 | cpu: [x64]
105 | os: [android]
106 |
107 | '@esbuild/darwin-arm64@0.24.0':
108 | resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
109 | engines: {node: '>=18'}
110 | cpu: [arm64]
111 | os: [darwin]
112 |
113 | '@esbuild/darwin-x64@0.24.0':
114 | resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
115 | engines: {node: '>=18'}
116 | cpu: [x64]
117 | os: [darwin]
118 |
119 | '@esbuild/freebsd-arm64@0.24.0':
120 | resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
121 | engines: {node: '>=18'}
122 | cpu: [arm64]
123 | os: [freebsd]
124 |
125 | '@esbuild/freebsd-x64@0.24.0':
126 | resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
127 | engines: {node: '>=18'}
128 | cpu: [x64]
129 | os: [freebsd]
130 |
131 | '@esbuild/linux-arm64@0.24.0':
132 | resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
133 | engines: {node: '>=18'}
134 | cpu: [arm64]
135 | os: [linux]
136 |
137 | '@esbuild/linux-arm@0.24.0':
138 | resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
139 | engines: {node: '>=18'}
140 | cpu: [arm]
141 | os: [linux]
142 |
143 | '@esbuild/linux-ia32@0.24.0':
144 | resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
145 | engines: {node: '>=18'}
146 | cpu: [ia32]
147 | os: [linux]
148 |
149 | '@esbuild/linux-loong64@0.24.0':
150 | resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
151 | engines: {node: '>=18'}
152 | cpu: [loong64]
153 | os: [linux]
154 |
155 | '@esbuild/linux-mips64el@0.24.0':
156 | resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
157 | engines: {node: '>=18'}
158 | cpu: [mips64el]
159 | os: [linux]
160 |
161 | '@esbuild/linux-ppc64@0.24.0':
162 | resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
163 | engines: {node: '>=18'}
164 | cpu: [ppc64]
165 | os: [linux]
166 |
167 | '@esbuild/linux-riscv64@0.24.0':
168 | resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
169 | engines: {node: '>=18'}
170 | cpu: [riscv64]
171 | os: [linux]
172 |
173 | '@esbuild/linux-s390x@0.24.0':
174 | resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
175 | engines: {node: '>=18'}
176 | cpu: [s390x]
177 | os: [linux]
178 |
179 | '@esbuild/linux-x64@0.24.0':
180 | resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
181 | engines: {node: '>=18'}
182 | cpu: [x64]
183 | os: [linux]
184 |
185 | '@esbuild/netbsd-x64@0.24.0':
186 | resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
187 | engines: {node: '>=18'}
188 | cpu: [x64]
189 | os: [netbsd]
190 |
191 | '@esbuild/openbsd-arm64@0.24.0':
192 | resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
193 | engines: {node: '>=18'}
194 | cpu: [arm64]
195 | os: [openbsd]
196 |
197 | '@esbuild/openbsd-x64@0.24.0':
198 | resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
199 | engines: {node: '>=18'}
200 | cpu: [x64]
201 | os: [openbsd]
202 |
203 | '@esbuild/sunos-x64@0.24.0':
204 | resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
205 | engines: {node: '>=18'}
206 | cpu: [x64]
207 | os: [sunos]
208 |
209 | '@esbuild/win32-arm64@0.24.0':
210 | resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
211 | engines: {node: '>=18'}
212 | cpu: [arm64]
213 | os: [win32]
214 |
215 | '@esbuild/win32-ia32@0.24.0':
216 | resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
217 | engines: {node: '>=18'}
218 | cpu: [ia32]
219 | os: [win32]
220 |
221 | '@esbuild/win32-x64@0.24.0':
222 | resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
223 | engines: {node: '>=18'}
224 | cpu: [x64]
225 | os: [win32]
226 |
227 | '@isaacs/cliui@8.0.2':
228 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
229 | engines: {node: '>=12'}
230 |
231 | '@jridgewell/gen-mapping@0.3.8':
232 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
233 | engines: {node: '>=6.0.0'}
234 |
235 | '@jridgewell/resolve-uri@3.1.2':
236 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
237 | engines: {node: '>=6.0.0'}
238 |
239 | '@jridgewell/set-array@1.2.1':
240 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
241 | engines: {node: '>=6.0.0'}
242 |
243 | '@jridgewell/sourcemap-codec@1.5.0':
244 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
245 |
246 | '@jridgewell/trace-mapping@0.3.25':
247 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
248 |
249 | '@nodelib/fs.scandir@2.1.5':
250 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
251 | engines: {node: '>= 8'}
252 |
253 | '@nodelib/fs.stat@2.0.5':
254 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
255 | engines: {node: '>= 8'}
256 |
257 | '@nodelib/fs.walk@1.2.8':
258 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
259 | engines: {node: '>= 8'}
260 |
261 | '@pkgjs/parseargs@0.11.0':
262 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
263 | engines: {node: '>=14'}
264 |
265 | '@rollup/rollup-android-arm-eabi@4.29.0':
266 | resolution: {integrity: sha512-TnF0md3qWSRDlU96y9+0dd5RNrlXiQUp1K2pK1UpNmjeND+o9ts9Jxv3G6ntagkt8jVh0KAT1VYgU0nCz5gt2w==}
267 | cpu: [arm]
268 | os: [android]
269 |
270 | '@rollup/rollup-android-arm64@4.29.0':
271 | resolution: {integrity: sha512-L/7oX07eY6ACt2NXDrku1JIPdf9VGV/DI92EjAd8FRDzMMub5hXFpT1OegBqimJh9xy9Vv+nToaVtZp4Ku9SEA==}
272 | cpu: [arm64]
273 | os: [android]
274 |
275 | '@rollup/rollup-darwin-arm64@4.29.0':
276 | resolution: {integrity: sha512-I1ZucWPVS96hjAsMSJiGosHTqMulMynrmTN+Xde5OsLcU5SjE0xylBmQ/DbB2psJ+HasINrJYz8HQpojtAw2eA==}
277 | cpu: [arm64]
278 | os: [darwin]
279 |
280 | '@rollup/rollup-darwin-x64@4.29.0':
281 | resolution: {integrity: sha512-CTZ+lHMsTbH1q/XLKzmnJWxl2r/1xdv7cnjwbi5v+95nVA1syikxWLvqur4nDoGDHjC8oNMBGurnQptpuFJHXA==}
282 | cpu: [x64]
283 | os: [darwin]
284 |
285 | '@rollup/rollup-freebsd-arm64@4.29.0':
286 | resolution: {integrity: sha512-BB8+4OMzk2JiKL5+aK8A0pi9DPB5pkIBZWXr19+grdez9b0VKihvV432uSwuZLO0sI6zCyxak8NO3mZ1yjM1jA==}
287 | cpu: [arm64]
288 | os: [freebsd]
289 |
290 | '@rollup/rollup-freebsd-x64@4.29.0':
291 | resolution: {integrity: sha512-Udz9Uh26uEE6phGMG2++TfpsLK/z4cYJqrIOyVhig/PMoWiZLghpjZUQvsAylsoztbpg0/QmplkDAyyVq0x6Jg==}
292 | cpu: [x64]
293 | os: [freebsd]
294 |
295 | '@rollup/rollup-linux-arm-gnueabihf@4.29.0':
296 | resolution: {integrity: sha512-IPSCTzP8GRYzY+siSnggIKrckC2U+kVXoen6eSHRDgU9a4EZCHHWWOiKio1EkieOOk2j6EvZaaHfQUCmt8UJBg==}
297 | cpu: [arm]
298 | os: [linux]
299 |
300 | '@rollup/rollup-linux-arm-musleabihf@4.29.0':
301 | resolution: {integrity: sha512-GvHPu0UIDx+ohyS8vTYnwoSVMM5BH3NO+JwQs6GWNCuQVlC5rKxnH2WClTGu3NxiIfhKLai08IKUwn3QbzX1UQ==}
302 | cpu: [arm]
303 | os: [linux]
304 |
305 | '@rollup/rollup-linux-arm64-gnu@4.29.0':
306 | resolution: {integrity: sha512-Pnnn/2CAZWcH9GQoj1nnr85Ejh7aNDe5MsEV0xhuFNUPF0SdnutJ7b2muOI5Kx12T0/i2ol5B/tlhMviZQDL3g==}
307 | cpu: [arm64]
308 | os: [linux]
309 |
310 | '@rollup/rollup-linux-arm64-musl@4.29.0':
311 | resolution: {integrity: sha512-AP+DLj4q9FT22ZL43ssA3gizEn7/MfJcZ1BOuyEPqoriuH3a8VRuDddN0MtpUwEtiZL6jc1GY5/eL99hkloQ1Q==}
312 | cpu: [arm64]
313 | os: [linux]
314 |
315 | '@rollup/rollup-linux-loongarch64-gnu@4.29.0':
316 | resolution: {integrity: sha512-1+jPFClHmDATqbk0Cwi74KEOymVcs09Vbqe/CTKqLwCP0TeP2CACfnMnjYBs5CJgO20e/4bxFtmbR/9fKE1gug==}
317 | cpu: [loong64]
318 | os: [linux]
319 |
320 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.0':
321 | resolution: {integrity: sha512-Nmt5Us5w2dL8eh7QVyAIDVVwBv4wk8ljrBQe7lWkLaOcwABDaFQ3K4sAAC6IsOdJwaXXW+d85zVaMN+Xl8Co2w==}
322 | cpu: [ppc64]
323 | os: [linux]
324 |
325 | '@rollup/rollup-linux-riscv64-gnu@4.29.0':
326 | resolution: {integrity: sha512-KGuQ8WGhnq09LR7eOru7P9jfBSYXTMhq6TyavWfmEo+TxvkvuRwOCee5lPIa6HYjblOuFr4GeOxSE0c8iyw2Fg==}
327 | cpu: [riscv64]
328 | os: [linux]
329 |
330 | '@rollup/rollup-linux-s390x-gnu@4.29.0':
331 | resolution: {integrity: sha512-lSQtvrYIONme7a4gbf4O9d3zbZat3/5covIeoqk27ZIkTgBeL/67x+wq2bZfpLjkqQQp5SjBPQ/n0sg8iArzTg==}
332 | cpu: [s390x]
333 | os: [linux]
334 |
335 | '@rollup/rollup-linux-x64-gnu@4.29.0':
336 | resolution: {integrity: sha512-qh0ussrXBwnF4L07M9t1+jpHRhiGSae+wpNQDbmlXHXciT7pqpZ5zpk4dyGZPtDGB2l2clDiufE16BufXPGRWQ==}
337 | cpu: [x64]
338 | os: [linux]
339 |
340 | '@rollup/rollup-linux-x64-musl@4.29.0':
341 | resolution: {integrity: sha512-YEABzSaRS7+v14yw6MVBZoMqLoUyTX1/sJoGeC0euvgMrzvw0i+jHo4keDZgYeOblfwdseVAf6ylxWSvcBAKTA==}
342 | cpu: [x64]
343 | os: [linux]
344 |
345 | '@rollup/rollup-win32-arm64-msvc@4.29.0':
346 | resolution: {integrity: sha512-jA4+oxG7QTTtSQxwSHzFVwShcppHO2DpkbAM59pfD5WMG/da79yQaeBtXAfGTI+ciUx8hqK3RF3H2KWByITXtQ==}
347 | cpu: [arm64]
348 | os: [win32]
349 |
350 | '@rollup/rollup-win32-ia32-msvc@4.29.0':
351 | resolution: {integrity: sha512-4TQbLoAQVu9uE+cvh47JnjRZylXVdRCoOkRSVF2Rr2T0U1YwphGRjR0sHyRPEt95y3ETT4YFTTzQPq1O4bcjmw==}
352 | cpu: [ia32]
353 | os: [win32]
354 |
355 | '@rollup/rollup-win32-x64-msvc@4.29.0':
356 | resolution: {integrity: sha512-GsFvcTZ7Yj9k94Qm0qgav7pxmQ7lQDR9NjoelRaxeV1UF6JSDfanR/2tHZ8hS7Ps4KPIVf5AElYPRPmN/Q0ZkQ==}
357 | cpu: [x64]
358 | os: [win32]
359 |
360 | '@types/codemirror@5.60.15':
361 | resolution: {integrity: sha512-dTOvwEQ+ouKJ/rE9LT1Ue2hmP6H1mZv5+CCnNWu2qtiOe2LQa9lCprEY20HxiDmV/Bxh+dXjywmy5aKvoGjULA==}
362 |
363 | '@types/ejs@3.1.5':
364 | resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==}
365 |
366 | '@types/estree@1.0.6':
367 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
368 |
369 | '@types/parse-package-name@0.1.3':
370 | resolution: {integrity: sha512-lWrVKSTl0+vN53rNh2OQMyQTFG6SMCUgBobtUBESdlWBHukhPrU/mbuLBJntDq6XnACBdjONxKwzx+HGBgNVQA==}
371 |
372 | '@types/tern@0.23.9':
373 | resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==}
374 |
375 | '@types/umami@2.10.0':
376 | resolution: {integrity: sha512-iWcs1KkcO3ooIi2rR9M5drmpQzlsT+sFiyWElIGmVwjdGlp+vQmy/VYIChYnF5ETqx7KrL80JfSkroS6dm37Hg==}
377 |
378 | '@vitejs/plugin-vue@5.2.1':
379 | resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==}
380 | engines: {node: ^18.0.0 || >=20.0.0}
381 | peerDependencies:
382 | vite: ^5.0.0 || ^6.0.0
383 | vue: ^3.2.25
384 |
385 | '@vue/compiler-core@3.5.13':
386 | resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
387 |
388 | '@vue/compiler-dom@3.5.13':
389 | resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
390 |
391 | '@vue/compiler-sfc@3.5.13':
392 | resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
393 |
394 | '@vue/compiler-ssr@3.5.13':
395 | resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
396 |
397 | '@vue/reactivity@3.5.13':
398 | resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
399 |
400 | '@vue/runtime-core@3.5.13':
401 | resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
402 |
403 | '@vue/runtime-dom@3.5.13':
404 | resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
405 |
406 | '@vue/server-renderer@3.5.13':
407 | resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
408 | peerDependencies:
409 | vue: 3.5.13
410 |
411 | '@vue/shared@3.5.13':
412 | resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
413 |
414 | ansi-regex@5.0.1:
415 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
416 | engines: {node: '>=8'}
417 |
418 | ansi-regex@6.1.0:
419 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
420 | engines: {node: '>=12'}
421 |
422 | ansi-styles@4.3.0:
423 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
424 | engines: {node: '>=8'}
425 |
426 | ansi-styles@6.2.1:
427 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
428 | engines: {node: '>=12'}
429 |
430 | any-promise@1.3.0:
431 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
432 |
433 | anymatch@3.1.3:
434 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
435 | engines: {node: '>= 8'}
436 |
437 | arg@5.0.2:
438 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
439 |
440 | async@3.2.6:
441 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
442 |
443 | balanced-match@1.0.2:
444 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
445 |
446 | binary-extensions@2.3.0:
447 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
448 | engines: {node: '>=8'}
449 |
450 | brace-expansion@1.1.11:
451 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
452 |
453 | brace-expansion@2.0.1:
454 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
455 |
456 | braces@3.0.3:
457 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
458 | engines: {node: '>=8'}
459 |
460 | camelcase-css@2.0.1:
461 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
462 | engines: {node: '>= 6'}
463 |
464 | chalk@4.1.2:
465 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
466 | engines: {node: '>=10'}
467 |
468 | chokidar@3.6.0:
469 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
470 | engines: {node: '>= 8.10.0'}
471 |
472 | codemirror@5.65.18:
473 | resolution: {integrity: sha512-Gaz4gHnkbHMGgahNt3CA5HBk5lLQBqmD/pBgeB4kQU6OedZmqMBjlRF0LSrp2tJ4wlLNPm2FfaUd1pDy0mdlpA==}
474 |
475 | color-convert@2.0.1:
476 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
477 | engines: {node: '>=7.0.0'}
478 |
479 | color-name@1.1.4:
480 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
481 |
482 | commander@4.1.1:
483 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
484 | engines: {node: '>= 6'}
485 |
486 | concat-map@0.0.1:
487 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
488 |
489 | cross-spawn@7.0.6:
490 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
491 | engines: {node: '>= 8'}
492 |
493 | cssesc@3.0.0:
494 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
495 | engines: {node: '>=4'}
496 | hasBin: true
497 |
498 | csstype@3.1.3:
499 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
500 |
501 | didyoumean@1.2.2:
502 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
503 |
504 | dlv@1.1.3:
505 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
506 |
507 | eastasianwidth@0.2.0:
508 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
509 |
510 | ejs@3.1.10:
511 | resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
512 | engines: {node: '>=0.10.0'}
513 | hasBin: true
514 |
515 | emoji-regex@8.0.0:
516 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
517 |
518 | emoji-regex@9.2.2:
519 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
520 |
521 | entities@4.5.0:
522 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
523 | engines: {node: '>=0.12'}
524 |
525 | esbuild-wasm@0.24.2:
526 | resolution: {integrity: sha512-03/7Z1gD+ohDnScFztvI4XddTAbKVmMEzCvvkBpQdWKEXJ+73dTyeNrmdxP1Q0zpDMFjzUJwtK4rLjqwiHbzkw==}
527 | engines: {node: '>=18'}
528 | hasBin: true
529 |
530 | esbuild@0.24.0:
531 | resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
532 | engines: {node: '>=18'}
533 | hasBin: true
534 |
535 | estree-walker@2.0.2:
536 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
537 |
538 | fast-glob@3.3.2:
539 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
540 | engines: {node: '>=8.6.0'}
541 |
542 | fastq@1.17.1:
543 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
544 |
545 | filelist@1.0.4:
546 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
547 |
548 | fill-range@7.1.1:
549 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
550 | engines: {node: '>=8'}
551 |
552 | foreground-child@3.3.0:
553 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
554 | engines: {node: '>=14'}
555 |
556 | fsevents@2.3.3:
557 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
558 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
559 | os: [darwin]
560 |
561 | function-bind@1.1.2:
562 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
563 |
564 | glob-parent@5.1.2:
565 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
566 | engines: {node: '>= 6'}
567 |
568 | glob-parent@6.0.2:
569 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
570 | engines: {node: '>=10.13.0'}
571 |
572 | glob@10.4.5:
573 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
574 | hasBin: true
575 |
576 | has-flag@4.0.0:
577 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
578 | engines: {node: '>=8'}
579 |
580 | hasown@2.0.2:
581 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
582 | engines: {node: '>= 0.4'}
583 |
584 | is-binary-path@2.1.0:
585 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
586 | engines: {node: '>=8'}
587 |
588 | is-core-module@2.16.0:
589 | resolution: {integrity: sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==}
590 | engines: {node: '>= 0.4'}
591 |
592 | is-extglob@2.1.1:
593 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
594 | engines: {node: '>=0.10.0'}
595 |
596 | is-fullwidth-code-point@3.0.0:
597 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
598 | engines: {node: '>=8'}
599 |
600 | is-glob@4.0.3:
601 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
602 | engines: {node: '>=0.10.0'}
603 |
604 | is-number@7.0.0:
605 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
606 | engines: {node: '>=0.12.0'}
607 |
608 | isexe@2.0.0:
609 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
610 |
611 | jackspeak@3.4.3:
612 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
613 |
614 | jake@10.9.2:
615 | resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
616 | engines: {node: '>=10'}
617 | hasBin: true
618 |
619 | jiti@1.21.7:
620 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
621 | hasBin: true
622 |
623 | lilconfig@3.1.3:
624 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
625 | engines: {node: '>=14'}
626 |
627 | lines-and-columns@1.2.4:
628 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
629 |
630 | lru-cache@10.4.3:
631 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
632 |
633 | magic-string@0.30.17:
634 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
635 |
636 | merge2@1.4.1:
637 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
638 | engines: {node: '>= 8'}
639 |
640 | micromatch@4.0.8:
641 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
642 | engines: {node: '>=8.6'}
643 |
644 | minimatch@3.1.2:
645 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
646 |
647 | minimatch@5.1.6:
648 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
649 | engines: {node: '>=10'}
650 |
651 | minimatch@9.0.5:
652 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
653 | engines: {node: '>=16 || 14 >=14.17'}
654 |
655 | minipass@7.1.2:
656 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
657 | engines: {node: '>=16 || 14 >=14.17'}
658 |
659 | mz@2.7.0:
660 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
661 |
662 | nanoid@3.3.8:
663 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
664 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
665 | hasBin: true
666 |
667 | normalize-path@3.0.0:
668 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
669 | engines: {node: '>=0.10.0'}
670 |
671 | object-assign@4.1.1:
672 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
673 | engines: {node: '>=0.10.0'}
674 |
675 | object-hash@3.0.0:
676 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
677 | engines: {node: '>= 6'}
678 |
679 | package-json-from-dist@1.0.1:
680 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
681 |
682 | parse-package-name@1.0.0:
683 | resolution: {integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==}
684 |
685 | path-key@3.1.1:
686 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
687 | engines: {node: '>=8'}
688 |
689 | path-parse@1.0.7:
690 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
691 |
692 | path-scurry@1.11.1:
693 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
694 | engines: {node: '>=16 || 14 >=14.18'}
695 |
696 | picocolors@1.1.1:
697 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
698 |
699 | picomatch@2.3.1:
700 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
701 | engines: {node: '>=8.6'}
702 |
703 | pify@2.3.0:
704 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
705 | engines: {node: '>=0.10.0'}
706 |
707 | pirates@4.0.6:
708 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
709 | engines: {node: '>= 6'}
710 |
711 | postcss-import@15.1.0:
712 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
713 | engines: {node: '>=14.0.0'}
714 | peerDependencies:
715 | postcss: ^8.0.0
716 |
717 | postcss-js@4.0.1:
718 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
719 | engines: {node: ^12 || ^14 || >= 16}
720 | peerDependencies:
721 | postcss: ^8.4.21
722 |
723 | postcss-load-config@4.0.2:
724 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
725 | engines: {node: '>= 14'}
726 | peerDependencies:
727 | postcss: '>=8.0.9'
728 | ts-node: '>=9.0.0'
729 | peerDependenciesMeta:
730 | postcss:
731 | optional: true
732 | ts-node:
733 | optional: true
734 |
735 | postcss-nested@6.2.0:
736 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
737 | engines: {node: '>=12.0'}
738 | peerDependencies:
739 | postcss: ^8.2.14
740 |
741 | postcss-selector-parser@6.1.2:
742 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
743 | engines: {node: '>=4'}
744 |
745 | postcss-value-parser@4.2.0:
746 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
747 |
748 | postcss@8.4.49:
749 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
750 | engines: {node: ^10 || ^12 || >=14}
751 |
752 | queue-microtask@1.2.3:
753 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
754 |
755 | read-cache@1.0.0:
756 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
757 |
758 | readdirp@3.6.0:
759 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
760 | engines: {node: '>=8.10.0'}
761 |
762 | resolve.exports@1.1.1:
763 | resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==}
764 | engines: {node: '>=10'}
765 |
766 | resolve@1.22.10:
767 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
768 | engines: {node: '>= 0.4'}
769 | hasBin: true
770 |
771 | reusify@1.0.4:
772 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
773 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
774 |
775 | rollup@4.29.0:
776 | resolution: {integrity: sha512-pdftUn12oB9Qlka+Vpyc39R28D4NsP9Sz6neepSrekofJmWzPD1sxcSO9hEOxFF8+7Kz3sHvwSkkRREI28M1/w==}
777 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
778 | hasBin: true
779 |
780 | run-parallel@1.2.0:
781 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
782 |
783 | shebang-command@2.0.0:
784 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
785 | engines: {node: '>=8'}
786 |
787 | shebang-regex@3.0.0:
788 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
789 | engines: {node: '>=8'}
790 |
791 | signal-exit@4.1.0:
792 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
793 | engines: {node: '>=14'}
794 |
795 | source-map-js@1.2.1:
796 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
797 | engines: {node: '>=0.10.0'}
798 |
799 | string-width@4.2.3:
800 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
801 | engines: {node: '>=8'}
802 |
803 | string-width@5.1.2:
804 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
805 | engines: {node: '>=12'}
806 |
807 | strip-ansi@6.0.1:
808 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
809 | engines: {node: '>=8'}
810 |
811 | strip-ansi@7.1.0:
812 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
813 | engines: {node: '>=12'}
814 |
815 | sucrase@3.35.0:
816 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
817 | engines: {node: '>=16 || 14 >=14.17'}
818 | hasBin: true
819 |
820 | supports-color@7.2.0:
821 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
822 | engines: {node: '>=8'}
823 |
824 | supports-preserve-symlinks-flag@1.0.0:
825 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
826 | engines: {node: '>= 0.4'}
827 |
828 | tailwindcss@3.4.17:
829 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
830 | engines: {node: '>=14.0.0'}
831 | hasBin: true
832 |
833 | thenify-all@1.6.0:
834 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
835 | engines: {node: '>=0.8'}
836 |
837 | thenify@3.3.1:
838 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
839 |
840 | to-regex-range@5.0.1:
841 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
842 | engines: {node: '>=8.0'}
843 |
844 | ts-interface-checker@0.1.13:
845 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
846 |
847 | typescript@4.9.5:
848 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
849 | engines: {node: '>=4.2.0'}
850 | hasBin: true
851 |
852 | util-deprecate@1.0.2:
853 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
854 |
855 | vite@6.0.5:
856 | resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==}
857 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
858 | hasBin: true
859 | peerDependencies:
860 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
861 | jiti: '>=1.21.0'
862 | less: '*'
863 | lightningcss: ^1.21.0
864 | sass: '*'
865 | sass-embedded: '*'
866 | stylus: '*'
867 | sugarss: '*'
868 | terser: ^5.16.0
869 | tsx: ^4.8.1
870 | yaml: ^2.4.2
871 | peerDependenciesMeta:
872 | '@types/node':
873 | optional: true
874 | jiti:
875 | optional: true
876 | less:
877 | optional: true
878 | lightningcss:
879 | optional: true
880 | sass:
881 | optional: true
882 | sass-embedded:
883 | optional: true
884 | stylus:
885 | optional: true
886 | sugarss:
887 | optional: true
888 | terser:
889 | optional: true
890 | tsx:
891 | optional: true
892 | yaml:
893 | optional: true
894 |
895 | vue@3.5.13:
896 | resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
897 | peerDependencies:
898 | typescript: '*'
899 | peerDependenciesMeta:
900 | typescript:
901 | optional: true
902 |
903 | which@2.0.2:
904 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
905 | engines: {node: '>= 8'}
906 | hasBin: true
907 |
908 | wrap-ansi@7.0.0:
909 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
910 | engines: {node: '>=10'}
911 |
912 | wrap-ansi@8.1.0:
913 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
914 | engines: {node: '>=12'}
915 |
916 | yaml@2.6.1:
917 | resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==}
918 | engines: {node: '>= 14'}
919 | hasBin: true
920 |
921 | snapshots:
922 |
923 | '@alloc/quick-lru@5.2.0': {}
924 |
925 | '@babel/helper-string-parser@7.25.9': {}
926 |
927 | '@babel/helper-validator-identifier@7.25.9': {}
928 |
929 | '@babel/parser@7.26.3':
930 | dependencies:
931 | '@babel/types': 7.26.3
932 |
933 | '@babel/types@7.26.3':
934 | dependencies:
935 | '@babel/helper-string-parser': 7.25.9
936 | '@babel/helper-validator-identifier': 7.25.9
937 |
938 | '@esbuild/aix-ppc64@0.24.0':
939 | optional: true
940 |
941 | '@esbuild/android-arm64@0.24.0':
942 | optional: true
943 |
944 | '@esbuild/android-arm@0.24.0':
945 | optional: true
946 |
947 | '@esbuild/android-x64@0.24.0':
948 | optional: true
949 |
950 | '@esbuild/darwin-arm64@0.24.0':
951 | optional: true
952 |
953 | '@esbuild/darwin-x64@0.24.0':
954 | optional: true
955 |
956 | '@esbuild/freebsd-arm64@0.24.0':
957 | optional: true
958 |
959 | '@esbuild/freebsd-x64@0.24.0':
960 | optional: true
961 |
962 | '@esbuild/linux-arm64@0.24.0':
963 | optional: true
964 |
965 | '@esbuild/linux-arm@0.24.0':
966 | optional: true
967 |
968 | '@esbuild/linux-ia32@0.24.0':
969 | optional: true
970 |
971 | '@esbuild/linux-loong64@0.24.0':
972 | optional: true
973 |
974 | '@esbuild/linux-mips64el@0.24.0':
975 | optional: true
976 |
977 | '@esbuild/linux-ppc64@0.24.0':
978 | optional: true
979 |
980 | '@esbuild/linux-riscv64@0.24.0':
981 | optional: true
982 |
983 | '@esbuild/linux-s390x@0.24.0':
984 | optional: true
985 |
986 | '@esbuild/linux-x64@0.24.0':
987 | optional: true
988 |
989 | '@esbuild/netbsd-x64@0.24.0':
990 | optional: true
991 |
992 | '@esbuild/openbsd-arm64@0.24.0':
993 | optional: true
994 |
995 | '@esbuild/openbsd-x64@0.24.0':
996 | optional: true
997 |
998 | '@esbuild/sunos-x64@0.24.0':
999 | optional: true
1000 |
1001 | '@esbuild/win32-arm64@0.24.0':
1002 | optional: true
1003 |
1004 | '@esbuild/win32-ia32@0.24.0':
1005 | optional: true
1006 |
1007 | '@esbuild/win32-x64@0.24.0':
1008 | optional: true
1009 |
1010 | '@isaacs/cliui@8.0.2':
1011 | dependencies:
1012 | string-width: 5.1.2
1013 | string-width-cjs: string-width@4.2.3
1014 | strip-ansi: 7.1.0
1015 | strip-ansi-cjs: strip-ansi@6.0.1
1016 | wrap-ansi: 8.1.0
1017 | wrap-ansi-cjs: wrap-ansi@7.0.0
1018 |
1019 | '@jridgewell/gen-mapping@0.3.8':
1020 | dependencies:
1021 | '@jridgewell/set-array': 1.2.1
1022 | '@jridgewell/sourcemap-codec': 1.5.0
1023 | '@jridgewell/trace-mapping': 0.3.25
1024 |
1025 | '@jridgewell/resolve-uri@3.1.2': {}
1026 |
1027 | '@jridgewell/set-array@1.2.1': {}
1028 |
1029 | '@jridgewell/sourcemap-codec@1.5.0': {}
1030 |
1031 | '@jridgewell/trace-mapping@0.3.25':
1032 | dependencies:
1033 | '@jridgewell/resolve-uri': 3.1.2
1034 | '@jridgewell/sourcemap-codec': 1.5.0
1035 |
1036 | '@nodelib/fs.scandir@2.1.5':
1037 | dependencies:
1038 | '@nodelib/fs.stat': 2.0.5
1039 | run-parallel: 1.2.0
1040 |
1041 | '@nodelib/fs.stat@2.0.5': {}
1042 |
1043 | '@nodelib/fs.walk@1.2.8':
1044 | dependencies:
1045 | '@nodelib/fs.scandir': 2.1.5
1046 | fastq: 1.17.1
1047 |
1048 | '@pkgjs/parseargs@0.11.0':
1049 | optional: true
1050 |
1051 | '@rollup/rollup-android-arm-eabi@4.29.0':
1052 | optional: true
1053 |
1054 | '@rollup/rollup-android-arm64@4.29.0':
1055 | optional: true
1056 |
1057 | '@rollup/rollup-darwin-arm64@4.29.0':
1058 | optional: true
1059 |
1060 | '@rollup/rollup-darwin-x64@4.29.0':
1061 | optional: true
1062 |
1063 | '@rollup/rollup-freebsd-arm64@4.29.0':
1064 | optional: true
1065 |
1066 | '@rollup/rollup-freebsd-x64@4.29.0':
1067 | optional: true
1068 |
1069 | '@rollup/rollup-linux-arm-gnueabihf@4.29.0':
1070 | optional: true
1071 |
1072 | '@rollup/rollup-linux-arm-musleabihf@4.29.0':
1073 | optional: true
1074 |
1075 | '@rollup/rollup-linux-arm64-gnu@4.29.0':
1076 | optional: true
1077 |
1078 | '@rollup/rollup-linux-arm64-musl@4.29.0':
1079 | optional: true
1080 |
1081 | '@rollup/rollup-linux-loongarch64-gnu@4.29.0':
1082 | optional: true
1083 |
1084 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.0':
1085 | optional: true
1086 |
1087 | '@rollup/rollup-linux-riscv64-gnu@4.29.0':
1088 | optional: true
1089 |
1090 | '@rollup/rollup-linux-s390x-gnu@4.29.0':
1091 | optional: true
1092 |
1093 | '@rollup/rollup-linux-x64-gnu@4.29.0':
1094 | optional: true
1095 |
1096 | '@rollup/rollup-linux-x64-musl@4.29.0':
1097 | optional: true
1098 |
1099 | '@rollup/rollup-win32-arm64-msvc@4.29.0':
1100 | optional: true
1101 |
1102 | '@rollup/rollup-win32-ia32-msvc@4.29.0':
1103 | optional: true
1104 |
1105 | '@rollup/rollup-win32-x64-msvc@4.29.0':
1106 | optional: true
1107 |
1108 | '@types/codemirror@5.60.15':
1109 | dependencies:
1110 | '@types/tern': 0.23.9
1111 |
1112 | '@types/ejs@3.1.5': {}
1113 |
1114 | '@types/estree@1.0.6': {}
1115 |
1116 | '@types/parse-package-name@0.1.3': {}
1117 |
1118 | '@types/tern@0.23.9':
1119 | dependencies:
1120 | '@types/estree': 1.0.6
1121 |
1122 | '@types/umami@2.10.0': {}
1123 |
1124 | '@vitejs/plugin-vue@5.2.1(vite@6.0.5(jiti@1.21.7)(yaml@2.6.1))(vue@3.5.13(typescript@4.9.5))':
1125 | dependencies:
1126 | vite: 6.0.5(jiti@1.21.7)(yaml@2.6.1)
1127 | vue: 3.5.13(typescript@4.9.5)
1128 |
1129 | '@vue/compiler-core@3.5.13':
1130 | dependencies:
1131 | '@babel/parser': 7.26.3
1132 | '@vue/shared': 3.5.13
1133 | entities: 4.5.0
1134 | estree-walker: 2.0.2
1135 | source-map-js: 1.2.1
1136 |
1137 | '@vue/compiler-dom@3.5.13':
1138 | dependencies:
1139 | '@vue/compiler-core': 3.5.13
1140 | '@vue/shared': 3.5.13
1141 |
1142 | '@vue/compiler-sfc@3.5.13':
1143 | dependencies:
1144 | '@babel/parser': 7.26.3
1145 | '@vue/compiler-core': 3.5.13
1146 | '@vue/compiler-dom': 3.5.13
1147 | '@vue/compiler-ssr': 3.5.13
1148 | '@vue/shared': 3.5.13
1149 | estree-walker: 2.0.2
1150 | magic-string: 0.30.17
1151 | postcss: 8.4.49
1152 | source-map-js: 1.2.1
1153 |
1154 | '@vue/compiler-ssr@3.5.13':
1155 | dependencies:
1156 | '@vue/compiler-dom': 3.5.13
1157 | '@vue/shared': 3.5.13
1158 |
1159 | '@vue/reactivity@3.5.13':
1160 | dependencies:
1161 | '@vue/shared': 3.5.13
1162 |
1163 | '@vue/runtime-core@3.5.13':
1164 | dependencies:
1165 | '@vue/reactivity': 3.5.13
1166 | '@vue/shared': 3.5.13
1167 |
1168 | '@vue/runtime-dom@3.5.13':
1169 | dependencies:
1170 | '@vue/reactivity': 3.5.13
1171 | '@vue/runtime-core': 3.5.13
1172 | '@vue/shared': 3.5.13
1173 | csstype: 3.1.3
1174 |
1175 | '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@4.9.5))':
1176 | dependencies:
1177 | '@vue/compiler-ssr': 3.5.13
1178 | '@vue/shared': 3.5.13
1179 | vue: 3.5.13(typescript@4.9.5)
1180 |
1181 | '@vue/shared@3.5.13': {}
1182 |
1183 | ansi-regex@5.0.1: {}
1184 |
1185 | ansi-regex@6.1.0: {}
1186 |
1187 | ansi-styles@4.3.0:
1188 | dependencies:
1189 | color-convert: 2.0.1
1190 |
1191 | ansi-styles@6.2.1: {}
1192 |
1193 | any-promise@1.3.0: {}
1194 |
1195 | anymatch@3.1.3:
1196 | dependencies:
1197 | normalize-path: 3.0.0
1198 | picomatch: 2.3.1
1199 |
1200 | arg@5.0.2: {}
1201 |
1202 | async@3.2.6: {}
1203 |
1204 | balanced-match@1.0.2: {}
1205 |
1206 | binary-extensions@2.3.0: {}
1207 |
1208 | brace-expansion@1.1.11:
1209 | dependencies:
1210 | balanced-match: 1.0.2
1211 | concat-map: 0.0.1
1212 |
1213 | brace-expansion@2.0.1:
1214 | dependencies:
1215 | balanced-match: 1.0.2
1216 |
1217 | braces@3.0.3:
1218 | dependencies:
1219 | fill-range: 7.1.1
1220 |
1221 | camelcase-css@2.0.1: {}
1222 |
1223 | chalk@4.1.2:
1224 | dependencies:
1225 | ansi-styles: 4.3.0
1226 | supports-color: 7.2.0
1227 |
1228 | chokidar@3.6.0:
1229 | dependencies:
1230 | anymatch: 3.1.3
1231 | braces: 3.0.3
1232 | glob-parent: 5.1.2
1233 | is-binary-path: 2.1.0
1234 | is-glob: 4.0.3
1235 | normalize-path: 3.0.0
1236 | readdirp: 3.6.0
1237 | optionalDependencies:
1238 | fsevents: 2.3.3
1239 |
1240 | codemirror@5.65.18: {}
1241 |
1242 | color-convert@2.0.1:
1243 | dependencies:
1244 | color-name: 1.1.4
1245 |
1246 | color-name@1.1.4: {}
1247 |
1248 | commander@4.1.1: {}
1249 |
1250 | concat-map@0.0.1: {}
1251 |
1252 | cross-spawn@7.0.6:
1253 | dependencies:
1254 | path-key: 3.1.1
1255 | shebang-command: 2.0.0
1256 | which: 2.0.2
1257 |
1258 | cssesc@3.0.0: {}
1259 |
1260 | csstype@3.1.3: {}
1261 |
1262 | didyoumean@1.2.2: {}
1263 |
1264 | dlv@1.1.3: {}
1265 |
1266 | eastasianwidth@0.2.0: {}
1267 |
1268 | ejs@3.1.10:
1269 | dependencies:
1270 | jake: 10.9.2
1271 |
1272 | emoji-regex@8.0.0: {}
1273 |
1274 | emoji-regex@9.2.2: {}
1275 |
1276 | entities@4.5.0: {}
1277 |
1278 | esbuild-wasm@0.24.2: {}
1279 |
1280 | esbuild@0.24.0:
1281 | optionalDependencies:
1282 | '@esbuild/aix-ppc64': 0.24.0
1283 | '@esbuild/android-arm': 0.24.0
1284 | '@esbuild/android-arm64': 0.24.0
1285 | '@esbuild/android-x64': 0.24.0
1286 | '@esbuild/darwin-arm64': 0.24.0
1287 | '@esbuild/darwin-x64': 0.24.0
1288 | '@esbuild/freebsd-arm64': 0.24.0
1289 | '@esbuild/freebsd-x64': 0.24.0
1290 | '@esbuild/linux-arm': 0.24.0
1291 | '@esbuild/linux-arm64': 0.24.0
1292 | '@esbuild/linux-ia32': 0.24.0
1293 | '@esbuild/linux-loong64': 0.24.0
1294 | '@esbuild/linux-mips64el': 0.24.0
1295 | '@esbuild/linux-ppc64': 0.24.0
1296 | '@esbuild/linux-riscv64': 0.24.0
1297 | '@esbuild/linux-s390x': 0.24.0
1298 | '@esbuild/linux-x64': 0.24.0
1299 | '@esbuild/netbsd-x64': 0.24.0
1300 | '@esbuild/openbsd-arm64': 0.24.0
1301 | '@esbuild/openbsd-x64': 0.24.0
1302 | '@esbuild/sunos-x64': 0.24.0
1303 | '@esbuild/win32-arm64': 0.24.0
1304 | '@esbuild/win32-ia32': 0.24.0
1305 | '@esbuild/win32-x64': 0.24.0
1306 |
1307 | estree-walker@2.0.2: {}
1308 |
1309 | fast-glob@3.3.2:
1310 | dependencies:
1311 | '@nodelib/fs.stat': 2.0.5
1312 | '@nodelib/fs.walk': 1.2.8
1313 | glob-parent: 5.1.2
1314 | merge2: 1.4.1
1315 | micromatch: 4.0.8
1316 |
1317 | fastq@1.17.1:
1318 | dependencies:
1319 | reusify: 1.0.4
1320 |
1321 | filelist@1.0.4:
1322 | dependencies:
1323 | minimatch: 5.1.6
1324 |
1325 | fill-range@7.1.1:
1326 | dependencies:
1327 | to-regex-range: 5.0.1
1328 |
1329 | foreground-child@3.3.0:
1330 | dependencies:
1331 | cross-spawn: 7.0.6
1332 | signal-exit: 4.1.0
1333 |
1334 | fsevents@2.3.3:
1335 | optional: true
1336 |
1337 | function-bind@1.1.2: {}
1338 |
1339 | glob-parent@5.1.2:
1340 | dependencies:
1341 | is-glob: 4.0.3
1342 |
1343 | glob-parent@6.0.2:
1344 | dependencies:
1345 | is-glob: 4.0.3
1346 |
1347 | glob@10.4.5:
1348 | dependencies:
1349 | foreground-child: 3.3.0
1350 | jackspeak: 3.4.3
1351 | minimatch: 9.0.5
1352 | minipass: 7.1.2
1353 | package-json-from-dist: 1.0.1
1354 | path-scurry: 1.11.1
1355 |
1356 | has-flag@4.0.0: {}
1357 |
1358 | hasown@2.0.2:
1359 | dependencies:
1360 | function-bind: 1.1.2
1361 |
1362 | is-binary-path@2.1.0:
1363 | dependencies:
1364 | binary-extensions: 2.3.0
1365 |
1366 | is-core-module@2.16.0:
1367 | dependencies:
1368 | hasown: 2.0.2
1369 |
1370 | is-extglob@2.1.1: {}
1371 |
1372 | is-fullwidth-code-point@3.0.0: {}
1373 |
1374 | is-glob@4.0.3:
1375 | dependencies:
1376 | is-extglob: 2.1.1
1377 |
1378 | is-number@7.0.0: {}
1379 |
1380 | isexe@2.0.0: {}
1381 |
1382 | jackspeak@3.4.3:
1383 | dependencies:
1384 | '@isaacs/cliui': 8.0.2
1385 | optionalDependencies:
1386 | '@pkgjs/parseargs': 0.11.0
1387 |
1388 | jake@10.9.2:
1389 | dependencies:
1390 | async: 3.2.6
1391 | chalk: 4.1.2
1392 | filelist: 1.0.4
1393 | minimatch: 3.1.2
1394 |
1395 | jiti@1.21.7: {}
1396 |
1397 | lilconfig@3.1.3: {}
1398 |
1399 | lines-and-columns@1.2.4: {}
1400 |
1401 | lru-cache@10.4.3: {}
1402 |
1403 | magic-string@0.30.17:
1404 | dependencies:
1405 | '@jridgewell/sourcemap-codec': 1.5.0
1406 |
1407 | merge2@1.4.1: {}
1408 |
1409 | micromatch@4.0.8:
1410 | dependencies:
1411 | braces: 3.0.3
1412 | picomatch: 2.3.1
1413 |
1414 | minimatch@3.1.2:
1415 | dependencies:
1416 | brace-expansion: 1.1.11
1417 |
1418 | minimatch@5.1.6:
1419 | dependencies:
1420 | brace-expansion: 2.0.1
1421 |
1422 | minimatch@9.0.5:
1423 | dependencies:
1424 | brace-expansion: 2.0.1
1425 |
1426 | minipass@7.1.2: {}
1427 |
1428 | mz@2.7.0:
1429 | dependencies:
1430 | any-promise: 1.3.0
1431 | object-assign: 4.1.1
1432 | thenify-all: 1.6.0
1433 |
1434 | nanoid@3.3.8: {}
1435 |
1436 | normalize-path@3.0.0: {}
1437 |
1438 | object-assign@4.1.1: {}
1439 |
1440 | object-hash@3.0.0: {}
1441 |
1442 | package-json-from-dist@1.0.1: {}
1443 |
1444 | parse-package-name@1.0.0: {}
1445 |
1446 | path-key@3.1.1: {}
1447 |
1448 | path-parse@1.0.7: {}
1449 |
1450 | path-scurry@1.11.1:
1451 | dependencies:
1452 | lru-cache: 10.4.3
1453 | minipass: 7.1.2
1454 |
1455 | picocolors@1.1.1: {}
1456 |
1457 | picomatch@2.3.1: {}
1458 |
1459 | pify@2.3.0: {}
1460 |
1461 | pirates@4.0.6: {}
1462 |
1463 | postcss-import@15.1.0(postcss@8.4.49):
1464 | dependencies:
1465 | postcss: 8.4.49
1466 | postcss-value-parser: 4.2.0
1467 | read-cache: 1.0.0
1468 | resolve: 1.22.10
1469 |
1470 | postcss-js@4.0.1(postcss@8.4.49):
1471 | dependencies:
1472 | camelcase-css: 2.0.1
1473 | postcss: 8.4.49
1474 |
1475 | postcss-load-config@4.0.2(postcss@8.4.49):
1476 | dependencies:
1477 | lilconfig: 3.1.3
1478 | yaml: 2.6.1
1479 | optionalDependencies:
1480 | postcss: 8.4.49
1481 |
1482 | postcss-nested@6.2.0(postcss@8.4.49):
1483 | dependencies:
1484 | postcss: 8.4.49
1485 | postcss-selector-parser: 6.1.2
1486 |
1487 | postcss-selector-parser@6.1.2:
1488 | dependencies:
1489 | cssesc: 3.0.0
1490 | util-deprecate: 1.0.2
1491 |
1492 | postcss-value-parser@4.2.0: {}
1493 |
1494 | postcss@8.4.49:
1495 | dependencies:
1496 | nanoid: 3.3.8
1497 | picocolors: 1.1.1
1498 | source-map-js: 1.2.1
1499 |
1500 | queue-microtask@1.2.3: {}
1501 |
1502 | read-cache@1.0.0:
1503 | dependencies:
1504 | pify: 2.3.0
1505 |
1506 | readdirp@3.6.0:
1507 | dependencies:
1508 | picomatch: 2.3.1
1509 |
1510 | resolve.exports@1.1.1: {}
1511 |
1512 | resolve@1.22.10:
1513 | dependencies:
1514 | is-core-module: 2.16.0
1515 | path-parse: 1.0.7
1516 | supports-preserve-symlinks-flag: 1.0.0
1517 |
1518 | reusify@1.0.4: {}
1519 |
1520 | rollup@4.29.0:
1521 | dependencies:
1522 | '@types/estree': 1.0.6
1523 | optionalDependencies:
1524 | '@rollup/rollup-android-arm-eabi': 4.29.0
1525 | '@rollup/rollup-android-arm64': 4.29.0
1526 | '@rollup/rollup-darwin-arm64': 4.29.0
1527 | '@rollup/rollup-darwin-x64': 4.29.0
1528 | '@rollup/rollup-freebsd-arm64': 4.29.0
1529 | '@rollup/rollup-freebsd-x64': 4.29.0
1530 | '@rollup/rollup-linux-arm-gnueabihf': 4.29.0
1531 | '@rollup/rollup-linux-arm-musleabihf': 4.29.0
1532 | '@rollup/rollup-linux-arm64-gnu': 4.29.0
1533 | '@rollup/rollup-linux-arm64-musl': 4.29.0
1534 | '@rollup/rollup-linux-loongarch64-gnu': 4.29.0
1535 | '@rollup/rollup-linux-powerpc64le-gnu': 4.29.0
1536 | '@rollup/rollup-linux-riscv64-gnu': 4.29.0
1537 | '@rollup/rollup-linux-s390x-gnu': 4.29.0
1538 | '@rollup/rollup-linux-x64-gnu': 4.29.0
1539 | '@rollup/rollup-linux-x64-musl': 4.29.0
1540 | '@rollup/rollup-win32-arm64-msvc': 4.29.0
1541 | '@rollup/rollup-win32-ia32-msvc': 4.29.0
1542 | '@rollup/rollup-win32-x64-msvc': 4.29.0
1543 | fsevents: 2.3.3
1544 |
1545 | run-parallel@1.2.0:
1546 | dependencies:
1547 | queue-microtask: 1.2.3
1548 |
1549 | shebang-command@2.0.0:
1550 | dependencies:
1551 | shebang-regex: 3.0.0
1552 |
1553 | shebang-regex@3.0.0: {}
1554 |
1555 | signal-exit@4.1.0: {}
1556 |
1557 | source-map-js@1.2.1: {}
1558 |
1559 | string-width@4.2.3:
1560 | dependencies:
1561 | emoji-regex: 8.0.0
1562 | is-fullwidth-code-point: 3.0.0
1563 | strip-ansi: 6.0.1
1564 |
1565 | string-width@5.1.2:
1566 | dependencies:
1567 | eastasianwidth: 0.2.0
1568 | emoji-regex: 9.2.2
1569 | strip-ansi: 7.1.0
1570 |
1571 | strip-ansi@6.0.1:
1572 | dependencies:
1573 | ansi-regex: 5.0.1
1574 |
1575 | strip-ansi@7.1.0:
1576 | dependencies:
1577 | ansi-regex: 6.1.0
1578 |
1579 | sucrase@3.35.0:
1580 | dependencies:
1581 | '@jridgewell/gen-mapping': 0.3.8
1582 | commander: 4.1.1
1583 | glob: 10.4.5
1584 | lines-and-columns: 1.2.4
1585 | mz: 2.7.0
1586 | pirates: 4.0.6
1587 | ts-interface-checker: 0.1.13
1588 |
1589 | supports-color@7.2.0:
1590 | dependencies:
1591 | has-flag: 4.0.0
1592 |
1593 | supports-preserve-symlinks-flag@1.0.0: {}
1594 |
1595 | tailwindcss@3.4.17:
1596 | dependencies:
1597 | '@alloc/quick-lru': 5.2.0
1598 | arg: 5.0.2
1599 | chokidar: 3.6.0
1600 | didyoumean: 1.2.2
1601 | dlv: 1.1.3
1602 | fast-glob: 3.3.2
1603 | glob-parent: 6.0.2
1604 | is-glob: 4.0.3
1605 | jiti: 1.21.7
1606 | lilconfig: 3.1.3
1607 | micromatch: 4.0.8
1608 | normalize-path: 3.0.0
1609 | object-hash: 3.0.0
1610 | picocolors: 1.1.1
1611 | postcss: 8.4.49
1612 | postcss-import: 15.1.0(postcss@8.4.49)
1613 | postcss-js: 4.0.1(postcss@8.4.49)
1614 | postcss-load-config: 4.0.2(postcss@8.4.49)
1615 | postcss-nested: 6.2.0(postcss@8.4.49)
1616 | postcss-selector-parser: 6.1.2
1617 | resolve: 1.22.10
1618 | sucrase: 3.35.0
1619 | transitivePeerDependencies:
1620 | - ts-node
1621 |
1622 | thenify-all@1.6.0:
1623 | dependencies:
1624 | thenify: 3.3.1
1625 |
1626 | thenify@3.3.1:
1627 | dependencies:
1628 | any-promise: 1.3.0
1629 |
1630 | to-regex-range@5.0.1:
1631 | dependencies:
1632 | is-number: 7.0.0
1633 |
1634 | ts-interface-checker@0.1.13: {}
1635 |
1636 | typescript@4.9.5: {}
1637 |
1638 | util-deprecate@1.0.2: {}
1639 |
1640 | vite@6.0.5(jiti@1.21.7)(yaml@2.6.1):
1641 | dependencies:
1642 | esbuild: 0.24.0
1643 | postcss: 8.4.49
1644 | rollup: 4.29.0
1645 | optionalDependencies:
1646 | fsevents: 2.3.3
1647 | jiti: 1.21.7
1648 | yaml: 2.6.1
1649 |
1650 | vue@3.5.13(typescript@4.9.5):
1651 | dependencies:
1652 | '@vue/compiler-dom': 3.5.13
1653 | '@vue/compiler-sfc': 3.5.13
1654 | '@vue/runtime-dom': 3.5.13
1655 | '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@4.9.5))
1656 | '@vue/shared': 3.5.13
1657 | optionalDependencies:
1658 | typescript: 4.9.5
1659 |
1660 | which@2.0.2:
1661 | dependencies:
1662 | isexe: 2.0.0
1663 |
1664 | wrap-ansi@7.0.0:
1665 | dependencies:
1666 | ansi-styles: 4.3.0
1667 | string-width: 4.2.3
1668 | strip-ansi: 6.0.1
1669 |
1670 | wrap-ansi@8.1.0:
1671 | dependencies:
1672 | ansi-styles: 6.2.1
1673 | string-width: 5.1.2
1674 | strip-ansi: 7.1.0
1675 |
1676 | yaml@2.6.1: {}
1677 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | },
5 | }
6 |
--------------------------------------------------------------------------------
/public/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/egoist/play-esbuild/a27961c4af88709e0754beaf080194118754aa0b/public/.keep
--------------------------------------------------------------------------------
/src/components/App.vue:
--------------------------------------------------------------------------------
1 |
133 |
134 |
135 |
136 |
137 |
247 |
248 |
249 |
250 |
256 |
257 |
258 |
259 |
260 |
261 | Loading the WASM build of esbuild..
262 |
263 |
264 |
265 |
268 |
{{ buildError }}
269 |
270 |
271 |
272 |
273 |
274 |
284 |
285 |
286 |
287 |
288 |
289 |
--------------------------------------------------------------------------------
/src/components/BuildLogs.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/src/components/CodeMirror.vue:
--------------------------------------------------------------------------------
1 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/src/css/codemirror.css:
--------------------------------------------------------------------------------
1 | /* BASICS */
2 |
3 | .CodeMirror {
4 | /* Set height, width, borders, and global font properties here */
5 | font-family: monaco, monospace;
6 | height: 100%;
7 | color: black;
8 | direction: ltr;
9 | }
10 |
11 | /* PADDING */
12 |
13 | .CodeMirror-lines {
14 | padding: 4px 0; /* Vertical padding around content */
15 | }
16 | .CodeMirror pre.CodeMirror-line,
17 | .CodeMirror pre.CodeMirror-line-like {
18 | padding: 0 4px; /* Horizontal padding of content */
19 | }
20 |
21 | .CodeMirror-scrollbar-filler,
22 | .CodeMirror-gutter-filler {
23 | background-color: white; /* The little square between H and V scrollbars */
24 | }
25 |
26 | /* GUTTER */
27 |
28 | .CodeMirror-gutters {
29 | border-right: 1px solid #ddd;
30 | white-space: nowrap;
31 | background: white;
32 | }
33 | .CodeMirror-linenumbers {
34 | }
35 | .CodeMirror-linenumber {
36 | padding: 0 3px 0 5px;
37 | min-width: 20px;
38 | text-align: right;
39 | color: #999;
40 | white-space: nowrap;
41 | }
42 |
43 | .CodeMirror-guttermarker {
44 | color: black;
45 | }
46 | .CodeMirror-guttermarker-subtle {
47 | color: #999;
48 | }
49 |
50 | /* CURSOR */
51 |
52 | .CodeMirror-cursor {
53 | border-left: 1px solid black;
54 | border-right: none;
55 | width: 0;
56 | }
57 | /* Shown when moving in bi-directional text */
58 | .CodeMirror div.CodeMirror-secondarycursor {
59 | border-left: 1px solid silver;
60 | }
61 | .cm-fat-cursor .CodeMirror-cursor {
62 | width: auto;
63 | border: 0 !important;
64 | background: #7e7;
65 | }
66 | .cm-fat-cursor div.CodeMirror-cursors {
67 | z-index: 1;
68 | }
69 | .cm-fat-cursor-mark {
70 | background-color: rgba(20, 255, 20, 0.5);
71 | -webkit-animation: blink 1.06s steps(1) infinite;
72 | -moz-animation: blink 1.06s steps(1) infinite;
73 | animation: blink 1.06s steps(1) infinite;
74 | }
75 | .cm-animate-fat-cursor {
76 | width: auto;
77 | -webkit-animation: blink 1.06s steps(1) infinite;
78 | -moz-animation: blink 1.06s steps(1) infinite;
79 | animation: blink 1.06s steps(1) infinite;
80 | background-color: #7e7;
81 | }
82 | @-moz-keyframes blink {
83 | 0% {
84 | }
85 | 50% {
86 | background-color: transparent;
87 | }
88 | 100% {
89 | }
90 | }
91 | @-webkit-keyframes blink {
92 | 0% {
93 | }
94 | 50% {
95 | background-color: transparent;
96 | }
97 | 100% {
98 | }
99 | }
100 | @keyframes blink {
101 | 0% {
102 | }
103 | 50% {
104 | background-color: transparent;
105 | }
106 | 100% {
107 | }
108 | }
109 |
110 | /* Can style cursor different in overwrite (non-insert) mode */
111 | .CodeMirror-overwrite .CodeMirror-cursor {
112 | }
113 |
114 | .cm-tab {
115 | display: inline-block;
116 | text-decoration: inherit;
117 | }
118 |
119 | .CodeMirror-rulers {
120 | position: absolute;
121 | left: 0;
122 | right: 0;
123 | top: -50px;
124 | bottom: 0;
125 | overflow: hidden;
126 | }
127 | .CodeMirror-ruler {
128 | border-left: 1px solid #ccc;
129 | top: 0;
130 | bottom: 0;
131 | position: absolute;
132 | }
133 |
134 | /* DEFAULT THEME */
135 |
136 | .cm-s-default .cm-header {
137 | color: blue;
138 | }
139 | .cm-s-default .cm-quote {
140 | color: #090;
141 | }
142 | .cm-negative {
143 | color: #d44;
144 | }
145 | .cm-positive {
146 | color: #292;
147 | }
148 | .cm-header,
149 | .cm-strong {
150 | font-weight: bold;
151 | }
152 | .cm-em {
153 | font-style: italic;
154 | }
155 | .cm-link {
156 | text-decoration: underline;
157 | }
158 | .cm-strikethrough {
159 | text-decoration: line-through;
160 | }
161 |
162 | .cm-s-default .cm-keyword {
163 | color: #708;
164 | }
165 | .cm-s-default .cm-atom {
166 | color: #219;
167 | }
168 | .cm-s-default .cm-number {
169 | color: #164;
170 | }
171 | .cm-s-default .cm-def {
172 | color: #00f;
173 | }
174 | .cm-s-default .cm-variable,
175 | .cm-s-default .cm-punctuation,
176 | .cm-s-default .cm-property,
177 | .cm-s-default .cm-operator {
178 | }
179 | .cm-s-default .cm-variable-2 {
180 | color: #05a;
181 | }
182 | .cm-s-default .cm-variable-3,
183 | .cm-s-default .cm-type {
184 | color: #085;
185 | }
186 | .cm-s-default .cm-comment {
187 | color: #a50;
188 | }
189 | .cm-s-default .cm-string {
190 | color: #a11;
191 | }
192 | .cm-s-default .cm-string-2 {
193 | color: #f50;
194 | }
195 | .cm-s-default .cm-meta {
196 | color: #555;
197 | }
198 | .cm-s-default .cm-qualifier {
199 | color: #555;
200 | }
201 | .cm-s-default .cm-builtin {
202 | color: #30a;
203 | }
204 | .cm-s-default .cm-bracket {
205 | color: #997;
206 | }
207 | .cm-s-default .cm-tag {
208 | color: #170;
209 | }
210 | .cm-s-default .cm-attribute {
211 | color: #00c;
212 | }
213 | .cm-s-default .cm-hr {
214 | color: #999;
215 | }
216 | .cm-s-default .cm-link {
217 | color: #00c;
218 | }
219 |
220 | .cm-s-default .cm-error {
221 | color: #f00;
222 | }
223 | .cm-invalidchar {
224 | color: #f00;
225 | }
226 |
227 | .CodeMirror-composing {
228 | border-bottom: 2px solid;
229 | }
230 |
231 | /* Default styles for common addons */
232 |
233 | div.CodeMirror span.CodeMirror-matchingbracket {
234 | color: #0b0;
235 | }
236 | div.CodeMirror span.CodeMirror-nonmatchingbracket {
237 | color: #a22;
238 | }
239 | .CodeMirror-matchingtag {
240 | background: rgba(255, 150, 0, 0.3);
241 | }
242 | .CodeMirror-activeline-background {
243 | background: #e8f2ff;
244 | }
245 |
246 | /* STOP */
247 |
248 | /* The rest of this file contains styles related to the mechanics of
249 | the editor. You probably shouldn't touch them. */
250 |
251 | .CodeMirror {
252 | position: relative;
253 | overflow: hidden;
254 | background: white;
255 | }
256 |
257 | .CodeMirror-scroll {
258 | overflow: scroll !important; /* Things will break if this is overridden */
259 | /* 50px is the magic margin used to hide the element's real scrollbars */
260 | /* See overflow: hidden in .CodeMirror */
261 | margin-bottom: -50px;
262 | margin-right: -50px;
263 | padding-bottom: 50px;
264 | height: 100%;
265 | outline: none; /* Prevent dragging from highlighting the element */
266 | position: relative;
267 | }
268 | .CodeMirror-sizer {
269 | position: relative;
270 | border-right: 50px solid transparent;
271 | }
272 |
273 | /* The fake, visible scrollbars. Used to force redraw during scrolling
274 | before actual scrolling happens, thus preventing shaking and
275 | flickering artifacts. */
276 | .CodeMirror-vscrollbar,
277 | .CodeMirror-hscrollbar,
278 | .CodeMirror-scrollbar-filler,
279 | .CodeMirror-gutter-filler {
280 | position: absolute;
281 | z-index: 6;
282 | display: none;
283 | outline: none;
284 | }
285 | .CodeMirror-vscrollbar {
286 | right: 0;
287 | top: 0;
288 | overflow-x: hidden;
289 | overflow-y: scroll;
290 | }
291 | .CodeMirror-hscrollbar {
292 | bottom: 0;
293 | left: 0;
294 | overflow-y: hidden;
295 | overflow-x: scroll;
296 | }
297 | .CodeMirror-scrollbar-filler {
298 | right: 0;
299 | bottom: 0;
300 | }
301 | .CodeMirror-gutter-filler {
302 | left: 0;
303 | bottom: 0;
304 | }
305 |
306 | .CodeMirror-gutters {
307 | position: absolute;
308 | left: 0;
309 | top: 0;
310 | min-height: 100%;
311 | z-index: 3;
312 | }
313 | .CodeMirror-gutter {
314 | white-space: normal;
315 | height: 100%;
316 | display: inline-block;
317 | vertical-align: top;
318 | margin-bottom: -50px;
319 | }
320 | .CodeMirror-gutter-wrapper {
321 | position: absolute;
322 | z-index: 4;
323 | background: none !important;
324 | border: none !important;
325 | }
326 | .CodeMirror-gutter-background {
327 | position: absolute;
328 | top: 0;
329 | bottom: 0;
330 | z-index: 4;
331 | }
332 | .CodeMirror-gutter-elt {
333 | position: absolute;
334 | cursor: default;
335 | z-index: 4;
336 | }
337 | .CodeMirror-gutter-wrapper ::selection {
338 | background-color: transparent;
339 | }
340 | .CodeMirror-gutter-wrapper ::-moz-selection {
341 | background-color: transparent;
342 | }
343 |
344 | .CodeMirror-lines {
345 | cursor: text;
346 | min-height: 1px; /* prevents collapsing before first draw */
347 | }
348 | .CodeMirror pre.CodeMirror-line,
349 | .CodeMirror pre.CodeMirror-line-like {
350 | /* Reset some styles that the rest of the page might have set */
351 | -moz-border-radius: 0;
352 | -webkit-border-radius: 0;
353 | border-radius: 0;
354 | border-width: 0;
355 | background: transparent;
356 | font-family: inherit;
357 | font-size: inherit;
358 | margin: 0;
359 | white-space: pre;
360 | word-wrap: normal;
361 | line-height: inherit;
362 | color: inherit;
363 | z-index: 2;
364 | position: relative;
365 | overflow: visible;
366 | -webkit-tap-highlight-color: transparent;
367 | -webkit-font-variant-ligatures: contextual;
368 | font-variant-ligatures: contextual;
369 | }
370 | .CodeMirror-wrap pre.CodeMirror-line,
371 | .CodeMirror-wrap pre.CodeMirror-line-like {
372 | word-wrap: break-word;
373 | white-space: pre-wrap;
374 | word-break: normal;
375 | }
376 |
377 | .CodeMirror-linebackground {
378 | position: absolute;
379 | left: 0;
380 | right: 0;
381 | top: 0;
382 | bottom: 0;
383 | z-index: 0;
384 | }
385 |
386 | .CodeMirror-linewidget {
387 | position: relative;
388 | z-index: 2;
389 | padding: 0.1px; /* Force widget margins to stay inside of the container */
390 | }
391 |
392 | .CodeMirror-widget {
393 | }
394 |
395 | .CodeMirror-rtl pre {
396 | direction: rtl;
397 | }
398 |
399 | .CodeMirror-code {
400 | outline: none;
401 | }
402 |
403 | /* Force content-box sizing for the elements where we expect it */
404 | .CodeMirror-scroll,
405 | .CodeMirror-sizer,
406 | .CodeMirror-gutter,
407 | .CodeMirror-gutters,
408 | .CodeMirror-linenumber {
409 | -moz-box-sizing: content-box;
410 | box-sizing: content-box;
411 | }
412 |
413 | .CodeMirror-measure {
414 | position: absolute;
415 | width: 100%;
416 | height: 0;
417 | overflow: hidden;
418 | visibility: hidden;
419 | }
420 |
421 | .CodeMirror-cursor {
422 | position: absolute;
423 | pointer-events: none;
424 | }
425 | .CodeMirror-measure pre {
426 | position: static;
427 | }
428 |
429 | div.CodeMirror-cursors {
430 | visibility: hidden;
431 | position: relative;
432 | z-index: 3;
433 | }
434 | div.CodeMirror-dragcursors {
435 | visibility: visible;
436 | }
437 |
438 | .CodeMirror-focused div.CodeMirror-cursors {
439 | visibility: visible;
440 | }
441 |
442 | .CodeMirror-selected {
443 | background: #d9d9d9;
444 | }
445 | .CodeMirror-focused .CodeMirror-selected {
446 | background: #d7d4f0;
447 | }
448 | .CodeMirror-crosshair {
449 | cursor: crosshair;
450 | }
451 | .CodeMirror-line::selection,
452 | .CodeMirror-line > span::selection,
453 | .CodeMirror-line > span > span::selection {
454 | background: #d7d4f0;
455 | }
456 | .CodeMirror-line::-moz-selection,
457 | .CodeMirror-line > span::-moz-selection,
458 | .CodeMirror-line > span > span::-moz-selection {
459 | background: #d7d4f0;
460 | }
461 |
462 | .cm-searching {
463 | background-color: #ffa;
464 | background-color: rgba(255, 255, 0, 0.4);
465 | }
466 |
467 | /* Used to force a border model for a node */
468 | .cm-force-border {
469 | padding-right: 0.1px;
470 | }
471 |
472 | @media print {
473 | /* Hide the cursor when printing */
474 | .CodeMirror div.CodeMirror-cursors {
475 | visibility: hidden;
476 | }
477 | }
478 |
479 | /* See issue #2901 */
480 | .cm-tab-wrap-hack:after {
481 | content: "";
482 | }
483 |
484 | /* Help users use markselection to safely style text background */
485 | span.CodeMirror-selectedtext {
486 | background: none;
487 | }
488 |
--------------------------------------------------------------------------------
/src/css/tailwind.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/src/hooks/useEsbuild.ts:
--------------------------------------------------------------------------------
1 | import * as esbuild from "esbuild-wasm"
2 | import { onMounted, ref } from "vue"
3 |
4 | export function useEsbuild(onLoaded?: () => void) {
5 | const loading = ref(true)
6 | const error = ref(null)
7 |
8 | onMounted(() => {
9 | esbuild
10 | .initialize({
11 | wasmURL: `/esbuild.wasm`,
12 | })
13 | .then(() => {
14 | loading.value = false
15 | onLoaded && onLoaded()
16 | })
17 | .catch((_error) => {
18 | error.value = _error
19 | })
20 | .finally(() => {
21 | loading.value = false
22 | })
23 | })
24 |
25 | return { loading, error, esbuild }
26 | }
27 |
--------------------------------------------------------------------------------
/src/lib/builtin-modules.ts:
--------------------------------------------------------------------------------
1 | export const builtinModules = [
2 | "assert",
3 | "async_hooks",
4 | "buffer",
5 | "child_process",
6 | "cluster",
7 | "console",
8 | "constants",
9 | "crypto",
10 | "dgram",
11 | "dns",
12 | "domain",
13 | "events",
14 | "fs",
15 | "http",
16 | "http2",
17 | "https",
18 | "inspector",
19 | "module",
20 | "net",
21 | "os",
22 | "path",
23 | "perf_hooks",
24 | "process",
25 | "punycode",
26 | "querystring",
27 | "readline",
28 | "repl",
29 | "stream",
30 | "string_decoder",
31 | "timers",
32 | "tls",
33 | "trace_events",
34 | "tty",
35 | "url",
36 | "util",
37 | "v8",
38 | "vm",
39 | "wasi",
40 | "worker_threads",
41 | "zlib",
42 | ]
43 |
--------------------------------------------------------------------------------
/src/lib/constants.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/egoist/play-esbuild/a27961c4af88709e0754beaf080194118754aa0b/src/lib/constants.ts
--------------------------------------------------------------------------------
/src/lib/editor.ts:
--------------------------------------------------------------------------------
1 | export const getMode = (filename: string) => {
2 | if (/\.(js|jsx|ts|tsx)$/.test(filename)) return "text/typescript-jsx"
3 | if (/\.json$/.test(filename)) return "application/json"
4 | if (/\.css$/.test(filename)) return "text/css"
5 | }
6 |
--------------------------------------------------------------------------------
/src/lib/esbuild.ts:
--------------------------------------------------------------------------------
1 | import { Plugin, Loader, formatMessages, PartialMessage } from "esbuild-wasm"
2 | import { reactive } from "vue"
3 | import { resolve, legacy } from "resolve.exports"
4 | import { parse as parsePackageName } from "parse-package-name"
5 | import { extname, join, urlJoin } from "./path"
6 | import { state } from "./store"
7 | import { builtinModules } from "./builtin-modules"
8 | class Logger {
9 | lines: Set
10 |
11 | constructor() {
12 | this.lines = reactive(new Set())
13 | }
14 |
15 | log(message: string) {
16 | this.lines.add(message)
17 | }
18 |
19 | clear() {
20 | this.lines.clear()
21 | }
22 | }
23 |
24 | export const logger = new Logger()
25 |
26 | export const PROJECT_ROOT = "/project/"
27 |
28 | const URL_RE = /^https?:\/\//
29 |
30 | // https://esbuild.github.io/api/#resolve-extensions
31 | const RESOLVE_EXTENSIONS = [".tsx", ".ts", ".jsx", ".js", ".css", ".json"]
32 |
33 | export function resolvePlugin({
34 | cdnUrl = "https://unpkg.com",
35 | }: {
36 | cdnUrl: string
37 | }): Plugin {
38 | const makeCDNUrl = (p: string) => {
39 | return cdnUrl + "/" + p.replace(/^\//, "")
40 | }
41 |
42 | return {
43 | name: "resolve",
44 | setup(build) {
45 | // External modules
46 | const external = [
47 | ...(build.initialOptions.external || []),
48 | ...builtinModules,
49 | ]
50 |
51 | const isExternal = (id: string) => {
52 | function match(it: string): boolean {
53 | if (it === id) return true // import 'foo' & external: ['foo']
54 | if (id.startsWith(`${it}/`)) return true // import 'foo/bar.js' & external: ['foo']
55 | return false
56 | }
57 | return external.find(match)
58 | }
59 |
60 | build.onStart(() => {
61 | logger.clear()
62 | })
63 |
64 | build.onEnd(() => {
65 | logger.clear()
66 | })
67 |
68 | // Intercept import paths starting with "http:" and "https:" so
69 | // esbuild doesn't attempt to map them to a file system location.
70 | // Tag them with the "http-url" namespace to associate them with
71 | // this plugin.
72 | build.onResolve({ filter: URL_RE }, (args) => ({
73 | path: args.path,
74 | namespace: "http-url",
75 | }))
76 |
77 | // We also want to intercept all import paths inside downloaded
78 | // files and resolve them against the original URL. All of these
79 | // files will be in the "http-url" namespace. Make sure to keep
80 | // the newly resolved URL in the "http-url" namespace so imports
81 | // inside it will also be resolved as URLs recursively.
82 | build.onResolve({ filter: /.*/, namespace: "http-url" }, (args) => {
83 | if (isExternal(args.path)) return { external: true, path: args.path }
84 |
85 | if (!args.path.startsWith(".")) {
86 | return {
87 | path: makeCDNUrl(args.path),
88 | namespace: "http-url",
89 | }
90 | }
91 | return {
92 | path: urlJoin(args.pluginData.url, "../", args.path),
93 | namespace: "http-url",
94 | }
95 | })
96 |
97 | build.onResolve({ filter: /.*/ }, async (args) => {
98 | if (args.path.startsWith(PROJECT_ROOT)) {
99 | return {
100 | path: args.path,
101 | }
102 | }
103 |
104 | // Relative path
105 | if (args.path[0] === ".") {
106 | const absPath = join(args.importer, "..", args.path)
107 | for (const ext of RESOLVE_EXTENSIONS) {
108 | const file = state.files.get(
109 | absPath.replace(PROJECT_ROOT, "") + ext
110 | )
111 | if (file) {
112 | return {
113 | path: absPath + ext,
114 | }
115 | }
116 | }
117 | if (state.files.has(absPath.replace(PROJECT_ROOT, ""))) {
118 | return {
119 | path: absPath,
120 | }
121 | }
122 | throw new Error(`file not found`)
123 | }
124 |
125 | if (isExternal(args.path)) return { external: true, path: args.path }
126 |
127 | const parsed = parsePackageName(args.path)
128 | let subpath = parsed.path
129 | if (!subpath) {
130 | const pkg = await fetch(
131 | makeCDNUrl(`${parsed.name}@${parsed.version}/package.json`)
132 | ).then((res) => res.json())
133 | const p =
134 | resolve(pkg, ".", {
135 | require:
136 | args.kind === "require-call" || args.kind === "require-resolve",
137 | }) || legacy(pkg)
138 | if (typeof p === "string") {
139 | subpath = p.replace(/^\.?\/?/, "/")
140 | }
141 | }
142 |
143 | if (subpath && subpath[0] !== "/") {
144 | subpath = `/${subpath}`
145 | }
146 |
147 | return {
148 | path: makeCDNUrl(`${parsed.name}@${parsed.version}${subpath}`),
149 | namespace: "http-url",
150 | }
151 | })
152 |
153 | // Local files
154 | build.onLoad({ filter: /.*/ }, (args) => {
155 | if (args.path.startsWith(PROJECT_ROOT)) {
156 | const name = args.path.replace(PROJECT_ROOT, "")
157 | const file = state.files.get(name)
158 | if (file) {
159 | return {
160 | contents: file.content,
161 | loader: inferLoader(args.path),
162 | }
163 | }
164 | }
165 | })
166 |
167 | build.onLoad({ filter: /.*/, namespace: "http-url" }, async (args) => {
168 | logger.log(`Fetching ${args.path}`)
169 | const res = await fetch(args.path)
170 | if (!res.ok) throw new Error(`failed to load ${res.url}: ${res.status}`)
171 | const loader = inferLoader(res.url)
172 | return {
173 | contents: new Uint8Array(await res.arrayBuffer()),
174 | loader: loader as Loader,
175 | pluginData: {
176 | url: res.url,
177 | },
178 | }
179 | })
180 | },
181 | }
182 | }
183 |
184 | function inferLoader(p: string): Loader {
185 | const ext = extname(p)
186 | if (RESOLVE_EXTENSIONS.includes(ext)) {
187 | return ext.slice(1) as Loader
188 | }
189 | if (ext === ".mjs" || ext === ".cjs") {
190 | return "js"
191 | }
192 | return "text"
193 | }
194 |
195 | export function formatBuildErrors(errors: PartialMessage[]) {
196 | return formatMessages(errors, { kind: "error" }).then((res) =>
197 | res.join("\n\n")
198 | )
199 | }
200 |
--------------------------------------------------------------------------------
/src/lib/path.ts:
--------------------------------------------------------------------------------
1 | function assertPath(path: string): void {
2 | if (typeof path !== "string") {
3 | throw new TypeError(
4 | `Path must be a string. Received ${JSON.stringify(path)}`
5 | )
6 | }
7 | }
8 |
9 | const CHAR_DOT = 46 /* . */
10 | const CHAR_FORWARD_SLASH = 47 /* / */
11 |
12 | // Resolves . and .. elements in a path with directory names
13 | export function normalizeString(
14 | path: string,
15 | allowAboveRoot: boolean,
16 | separator: string,
17 | isPathSeparator: (code: number) => boolean
18 | ): string {
19 | let res = ""
20 | let lastSegmentLength = 0
21 | let lastSlash = -1
22 | let dots = 0
23 | let code: number | undefined
24 | for (let i = 0, len = path.length; i <= len; ++i) {
25 | if (i < len) code = path.charCodeAt(i)
26 | else if (isPathSeparator(code!)) break
27 | else code = CHAR_FORWARD_SLASH
28 |
29 | if (isPathSeparator(code!)) {
30 | if (lastSlash === i - 1 || dots === 1) {
31 | // NOOP
32 | } else if (lastSlash !== i - 1 && dots === 2) {
33 | if (
34 | res.length < 2 ||
35 | lastSegmentLength !== 2 ||
36 | res.charCodeAt(res.length - 1) !== CHAR_DOT ||
37 | res.charCodeAt(res.length - 2) !== CHAR_DOT
38 | ) {
39 | if (res.length > 2) {
40 | const lastSlashIndex = res.lastIndexOf(separator)
41 | if (lastSlashIndex === -1) {
42 | res = ""
43 | lastSegmentLength = 0
44 | } else {
45 | res = res.slice(0, lastSlashIndex)
46 | lastSegmentLength = res.length - 1 - res.lastIndexOf(separator)
47 | }
48 | lastSlash = i
49 | dots = 0
50 | continue
51 | } else if (res.length === 2 || res.length === 1) {
52 | res = ""
53 | lastSegmentLength = 0
54 | lastSlash = i
55 | dots = 0
56 | continue
57 | }
58 | }
59 | if (allowAboveRoot) {
60 | if (res.length > 0) res += `${separator}..`
61 | else res = ".."
62 | lastSegmentLength = 2
63 | }
64 | } else {
65 | if (res.length > 0) res += separator + path.slice(lastSlash + 1, i)
66 | else res = path.slice(lastSlash + 1, i)
67 | lastSegmentLength = i - lastSlash - 1
68 | }
69 | lastSlash = i
70 | dots = 0
71 | } else if (code === CHAR_DOT && dots !== -1) {
72 | ++dots
73 | } else {
74 | dots = -1
75 | }
76 | }
77 | return res
78 | }
79 |
80 | function isPosixPathSeparator(code: number): boolean {
81 | return code === CHAR_FORWARD_SLASH
82 | }
83 |
84 | function normalize(path: string): string {
85 | assertPath(path)
86 |
87 | if (path.length === 0) return "."
88 |
89 | const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH
90 | const trailingSeparator =
91 | path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH
92 |
93 | // Normalize the path
94 | path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator)
95 |
96 | if (path.length === 0 && !isAbsolute) path = "."
97 | if (path.length > 0 && trailingSeparator) path += "/"
98 |
99 | if (isAbsolute) return `/${path}`
100 | return path
101 | }
102 |
103 | export function join(...paths: string[]): string {
104 | if (paths.length === 0) return "."
105 | let joined: string | undefined
106 | for (let i = 0, len = paths.length; i < len; ++i) {
107 | const path = paths[i]
108 | assertPath(path)
109 | if (path.length > 0) {
110 | if (!joined) joined = path
111 | else joined += `/${path}`
112 | }
113 | }
114 | if (!joined) return "."
115 | return normalize(joined)
116 | }
117 |
118 | export function extname(path: string): string {
119 | const m = /(\.[a-zA-Z0-9]+)$/.exec(path)
120 | return m ? m[1] : ""
121 | }
122 |
123 | export function urlJoin(url: string, ...args: string[]) {
124 | const u = new URL(url)
125 | u.pathname = join(u.pathname, ...args)
126 | return u.toString()
127 | }
128 |
--------------------------------------------------------------------------------
/src/lib/store.ts:
--------------------------------------------------------------------------------
1 | import { reactive } from "vue"
2 |
3 | export const state = reactive({
4 | files: new Map([
5 | [
6 | "index.ts",
7 | {
8 | content: `
9 | import { pipe, string, email } from 'valibot'
10 |
11 | const schema = pipe(string(), email())
12 |
13 | console.log(schema.parse('hi@exmaple.com'))
14 | `.trim(),
15 | },
16 | ],
17 | [
18 | "esbuild.config.json",
19 | {
20 | content: JSON.stringify(
21 | { format: "esm", cdnUrl: "https://esm.sh" },
22 | null,
23 | 2
24 | ),
25 | },
26 | ],
27 | ]),
28 | })
29 |
--------------------------------------------------------------------------------
/src/lib/utils.ts:
--------------------------------------------------------------------------------
1 | export function debounce(fn: Function, n = 100) {
2 | let handle: any
3 | return (...args: any[]) => {
4 | if (handle) clearTimeout(handle)
5 | handle = setTimeout(() => {
6 | fn(...args)
7 | }, n)
8 | }
9 | }
10 |
11 | // prefer old unicode hacks for backward compatibility
12 | // https://base64.guru/developers/javascript/examples/unicode-strings
13 | export function utoa(data: string): string {
14 | return btoa(unescape(encodeURIComponent(data)))
15 | }
16 |
17 | export function atou(base64: string): string {
18 | return decodeURIComponent(escape(atob(base64)))
19 | }
20 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import "./css/tailwind.css";
2 | import "./css/codemirror.css";
3 | import { createApp } from "vue";
4 | import App from "./components/App.vue";
5 |
6 | createApp(App).mount("#app");
7 |
8 | if (import.meta.env.PROD) {
9 | const script = document.createElement("script");
10 | script.src = "https://umami2.egoist.dev/script.js";
11 | script.defer = true;
12 | script.setAttribute(
13 | "data-website-id",
14 | "fcfe4289-ab86-4d66-91b1-23eb307c25b1"
15 | );
16 | script.setAttribute("data-auto-track", "false");
17 |
18 | script.onload = () => {
19 | if (typeof umami === "undefined") return;
20 |
21 | umami.track((props) => ({
22 | ...props,
23 | url: location.pathname + location.search,
24 | }));
25 | };
26 |
27 | document.head.appendChild(script);
28 | }
29 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | darkMode: "class", // or 'media' or 'class'
4 | content: ["./src/**/*.vue"],
5 | theme: {
6 | extend: {
7 | height: {
8 | header: "44px",
9 | main: "calc(100vh - 44px)",
10 | },
11 | },
12 | },
13 | variants: {
14 | extend: {},
15 | },
16 | plugins: [],
17 | }
18 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 |
5 | /* Projects */
6 | // "incremental": true, /* Enable incremental compilation */
7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12 |
13 | /* Language and Environment */
14 | "target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16 | // "jsx": "preserve", /* Specify what JSX code is generated. */
17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
25 |
26 | /* Modules */
27 | "module": "esnext" /* Specify what module code is generated. */,
28 | // "rootDir": "./", /* Specify the root folder within your source files. */
29 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
30 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
31 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
32 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
33 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
34 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */
35 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
36 | // "resolveJsonModule": true, /* Enable importing .json files */
37 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */
38 |
39 | /* JavaScript Support */
40 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
41 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
42 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
43 |
44 | /* Emit */
45 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
46 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */
47 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
48 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
49 | // "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. */
50 | // "outDir": "./", /* Specify an output folder for all emitted files. */
51 | // "removeComments": true, /* Disable emitting comments. */
52 | // "noEmit": true, /* Disable emitting files from a compilation. */
53 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
54 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
55 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
56 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
58 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
59 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
60 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
61 | // "newLine": "crlf", /* Set the newline character for emitting files. */
62 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
63 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
64 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
65 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
66 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
67 |
68 | /* Interop Constraints */
69 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
70 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
71 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
72 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
73 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
74 |
75 | /* Type Checking */
76 | "strict": true /* Enable all strict type-checking options. */,
77 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
78 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
79 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
80 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
81 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
82 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
83 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
84 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
85 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
86 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
87 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
88 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
89 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
90 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
91 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
92 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
93 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
94 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
95 |
96 | /* Completeness */
97 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
98 | "skipLibCheck": true /* Skip type checking all .d.ts files. */
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite"
2 | import vue from "@vitejs/plugin-vue"
3 | import ejs from "ejs"
4 |
5 | export default defineConfig((ctx) => {
6 | return {
7 | plugins: [
8 | vue(),
9 | {
10 | name: "ejs-html",
11 | transformIndexHtml: {
12 | order: "pre",
13 | handler(html) {
14 | return ejs.render(html, { prod: ctx.mode === "production" })
15 | },
16 | },
17 | },
18 | ],
19 | }
20 | })
21 |
--------------------------------------------------------------------------------