123 | ```
124 |
125 | Limitations
126 | -----------
127 |
128 | - Does not currently work with [snowpack](https://github.com/snowpackjs/snowpack). It may be possible to change the snowpack config to get it to work, but I'm not sure how.
129 | - Subcomponents cannot have interdependencies. i.e. Only the default export component can use the subcomponents.
--------------------------------------------------------------------------------
/dev/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules/
2 | /public/build/
3 | /subcomponents/
4 |
5 | .DS_Store
6 |
--------------------------------------------------------------------------------
/dev/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-app",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "svelte-app",
9 | "version": "1.0.0",
10 | "dependencies": {
11 | "sirv-cli": "^1.0.0",
12 | "svelte-subcomponent-preprocessor": "file:.."
13 | },
14 | "devDependencies": {
15 | "@rollup/plugin-commonjs": "^17.0.0",
16 | "@rollup/plugin-node-resolve": "^11.0.0",
17 | "rollup": "^2.3.4",
18 | "rollup-plugin-css-only": "^3.1.0",
19 | "rollup-plugin-livereload": "^2.0.0",
20 | "rollup-plugin-svelte": "^7.0.0",
21 | "rollup-plugin-terser": "^7.0.0",
22 | "svelte": "^3.0.0"
23 | }
24 | },
25 | "..": {
26 | "version": "0.0.1",
27 | "license": "ISC",
28 | "dependencies": {
29 | "fs-extra": "^10.0.0"
30 | },
31 | "devDependencies": {
32 | "jest": "^27.3.1"
33 | }
34 | },
35 | "node_modules/@babel/code-frame": {
36 | "version": "7.15.8",
37 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
38 | "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
39 | "dev": true,
40 | "dependencies": {
41 | "@babel/highlight": "^7.14.5"
42 | },
43 | "engines": {
44 | "node": ">=6.9.0"
45 | }
46 | },
47 | "node_modules/@babel/helper-validator-identifier": {
48 | "version": "7.15.7",
49 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
50 | "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
51 | "dev": true,
52 | "engines": {
53 | "node": ">=6.9.0"
54 | }
55 | },
56 | "node_modules/@babel/highlight": {
57 | "version": "7.14.5",
58 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
59 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
60 | "dev": true,
61 | "dependencies": {
62 | "@babel/helper-validator-identifier": "^7.14.5",
63 | "chalk": "^2.0.0",
64 | "js-tokens": "^4.0.0"
65 | },
66 | "engines": {
67 | "node": ">=6.9.0"
68 | }
69 | },
70 | "node_modules/@polka/url": {
71 | "version": "1.0.0-next.21",
72 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
73 | "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g=="
74 | },
75 | "node_modules/@rollup/plugin-commonjs": {
76 | "version": "17.1.0",
77 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz",
78 | "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==",
79 | "dev": true,
80 | "dependencies": {
81 | "@rollup/pluginutils": "^3.1.0",
82 | "commondir": "^1.0.1",
83 | "estree-walker": "^2.0.1",
84 | "glob": "^7.1.6",
85 | "is-reference": "^1.2.1",
86 | "magic-string": "^0.25.7",
87 | "resolve": "^1.17.0"
88 | },
89 | "engines": {
90 | "node": ">= 8.0.0"
91 | },
92 | "peerDependencies": {
93 | "rollup": "^2.30.0"
94 | }
95 | },
96 | "node_modules/@rollup/plugin-node-resolve": {
97 | "version": "11.2.1",
98 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz",
99 | "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==",
100 | "dev": true,
101 | "dependencies": {
102 | "@rollup/pluginutils": "^3.1.0",
103 | "@types/resolve": "1.17.1",
104 | "builtin-modules": "^3.1.0",
105 | "deepmerge": "^4.2.2",
106 | "is-module": "^1.0.0",
107 | "resolve": "^1.19.0"
108 | },
109 | "engines": {
110 | "node": ">= 10.0.0"
111 | },
112 | "peerDependencies": {
113 | "rollup": "^1.20.0||^2.0.0"
114 | }
115 | },
116 | "node_modules/@rollup/pluginutils": {
117 | "version": "3.1.0",
118 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
119 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
120 | "dev": true,
121 | "dependencies": {
122 | "@types/estree": "0.0.39",
123 | "estree-walker": "^1.0.1",
124 | "picomatch": "^2.2.2"
125 | },
126 | "engines": {
127 | "node": ">= 8.0.0"
128 | },
129 | "peerDependencies": {
130 | "rollup": "^1.20.0||^2.0.0"
131 | }
132 | },
133 | "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
134 | "version": "1.0.1",
135 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
136 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
137 | "dev": true
138 | },
139 | "node_modules/@types/estree": {
140 | "version": "0.0.39",
141 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
142 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
143 | "dev": true
144 | },
145 | "node_modules/@types/node": {
146 | "version": "16.11.1",
147 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz",
148 | "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==",
149 | "dev": true
150 | },
151 | "node_modules/@types/resolve": {
152 | "version": "1.17.1",
153 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
154 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
155 | "dev": true,
156 | "dependencies": {
157 | "@types/node": "*"
158 | }
159 | },
160 | "node_modules/ansi-styles": {
161 | "version": "3.2.1",
162 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
163 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
164 | "dev": true,
165 | "dependencies": {
166 | "color-convert": "^1.9.0"
167 | },
168 | "engines": {
169 | "node": ">=4"
170 | }
171 | },
172 | "node_modules/anymatch": {
173 | "version": "3.1.2",
174 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
175 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
176 | "dev": true,
177 | "dependencies": {
178 | "normalize-path": "^3.0.0",
179 | "picomatch": "^2.0.4"
180 | },
181 | "engines": {
182 | "node": ">= 8"
183 | }
184 | },
185 | "node_modules/balanced-match": {
186 | "version": "1.0.2",
187 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
188 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
189 | "dev": true
190 | },
191 | "node_modules/binary-extensions": {
192 | "version": "2.2.0",
193 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
194 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
195 | "dev": true,
196 | "engines": {
197 | "node": ">=8"
198 | }
199 | },
200 | "node_modules/brace-expansion": {
201 | "version": "1.1.11",
202 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
203 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
204 | "dev": true,
205 | "dependencies": {
206 | "balanced-match": "^1.0.0",
207 | "concat-map": "0.0.1"
208 | }
209 | },
210 | "node_modules/braces": {
211 | "version": "3.0.2",
212 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
213 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
214 | "dev": true,
215 | "dependencies": {
216 | "fill-range": "^7.0.1"
217 | },
218 | "engines": {
219 | "node": ">=8"
220 | }
221 | },
222 | "node_modules/buffer-from": {
223 | "version": "1.1.2",
224 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
225 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
226 | "dev": true
227 | },
228 | "node_modules/builtin-modules": {
229 | "version": "3.2.0",
230 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
231 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
232 | "dev": true,
233 | "engines": {
234 | "node": ">=6"
235 | },
236 | "funding": {
237 | "url": "https://github.com/sponsors/sindresorhus"
238 | }
239 | },
240 | "node_modules/chalk": {
241 | "version": "2.4.2",
242 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
243 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
244 | "dev": true,
245 | "dependencies": {
246 | "ansi-styles": "^3.2.1",
247 | "escape-string-regexp": "^1.0.5",
248 | "supports-color": "^5.3.0"
249 | },
250 | "engines": {
251 | "node": ">=4"
252 | }
253 | },
254 | "node_modules/chokidar": {
255 | "version": "3.5.2",
256 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
257 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
258 | "dev": true,
259 | "dependencies": {
260 | "anymatch": "~3.1.2",
261 | "braces": "~3.0.2",
262 | "glob-parent": "~5.1.2",
263 | "is-binary-path": "~2.1.0",
264 | "is-glob": "~4.0.1",
265 | "normalize-path": "~3.0.0",
266 | "readdirp": "~3.6.0"
267 | },
268 | "engines": {
269 | "node": ">= 8.10.0"
270 | },
271 | "optionalDependencies": {
272 | "fsevents": "~2.3.2"
273 | }
274 | },
275 | "node_modules/color-convert": {
276 | "version": "1.9.3",
277 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
278 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
279 | "dev": true,
280 | "dependencies": {
281 | "color-name": "1.1.3"
282 | }
283 | },
284 | "node_modules/color-name": {
285 | "version": "1.1.3",
286 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
287 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
288 | "dev": true
289 | },
290 | "node_modules/commander": {
291 | "version": "2.20.3",
292 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
293 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
294 | "dev": true
295 | },
296 | "node_modules/commondir": {
297 | "version": "1.0.1",
298 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
299 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
300 | "dev": true
301 | },
302 | "node_modules/concat-map": {
303 | "version": "0.0.1",
304 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
305 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
306 | "dev": true
307 | },
308 | "node_modules/console-clear": {
309 | "version": "1.1.1",
310 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz",
311 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==",
312 | "engines": {
313 | "node": ">=4"
314 | }
315 | },
316 | "node_modules/deepmerge": {
317 | "version": "4.2.2",
318 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
319 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
320 | "dev": true,
321 | "engines": {
322 | "node": ">=0.10.0"
323 | }
324 | },
325 | "node_modules/escape-string-regexp": {
326 | "version": "1.0.5",
327 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
328 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
329 | "dev": true,
330 | "engines": {
331 | "node": ">=0.8.0"
332 | }
333 | },
334 | "node_modules/estree-walker": {
335 | "version": "2.0.2",
336 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
337 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
338 | "dev": true
339 | },
340 | "node_modules/fill-range": {
341 | "version": "7.0.1",
342 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
343 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
344 | "dev": true,
345 | "dependencies": {
346 | "to-regex-range": "^5.0.1"
347 | },
348 | "engines": {
349 | "node": ">=8"
350 | }
351 | },
352 | "node_modules/fs.realpath": {
353 | "version": "1.0.0",
354 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
355 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
356 | "dev": true
357 | },
358 | "node_modules/fsevents": {
359 | "version": "2.3.2",
360 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
361 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
362 | "dev": true,
363 | "hasInstallScript": true,
364 | "optional": true,
365 | "os": [
366 | "darwin"
367 | ],
368 | "engines": {
369 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
370 | }
371 | },
372 | "node_modules/function-bind": {
373 | "version": "1.1.1",
374 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
375 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
376 | "dev": true
377 | },
378 | "node_modules/get-port": {
379 | "version": "3.2.0",
380 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
381 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
382 | "engines": {
383 | "node": ">=4"
384 | }
385 | },
386 | "node_modules/glob": {
387 | "version": "7.2.0",
388 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
389 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
390 | "dev": true,
391 | "dependencies": {
392 | "fs.realpath": "^1.0.0",
393 | "inflight": "^1.0.4",
394 | "inherits": "2",
395 | "minimatch": "^3.0.4",
396 | "once": "^1.3.0",
397 | "path-is-absolute": "^1.0.0"
398 | },
399 | "engines": {
400 | "node": "*"
401 | },
402 | "funding": {
403 | "url": "https://github.com/sponsors/isaacs"
404 | }
405 | },
406 | "node_modules/glob-parent": {
407 | "version": "5.1.2",
408 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
409 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
410 | "dev": true,
411 | "dependencies": {
412 | "is-glob": "^4.0.1"
413 | },
414 | "engines": {
415 | "node": ">= 6"
416 | }
417 | },
418 | "node_modules/has": {
419 | "version": "1.0.3",
420 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
421 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
422 | "dev": true,
423 | "dependencies": {
424 | "function-bind": "^1.1.1"
425 | },
426 | "engines": {
427 | "node": ">= 0.4.0"
428 | }
429 | },
430 | "node_modules/has-flag": {
431 | "version": "3.0.0",
432 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
433 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
434 | "dev": true,
435 | "engines": {
436 | "node": ">=4"
437 | }
438 | },
439 | "node_modules/inflight": {
440 | "version": "1.0.6",
441 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
442 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
443 | "dev": true,
444 | "dependencies": {
445 | "once": "^1.3.0",
446 | "wrappy": "1"
447 | }
448 | },
449 | "node_modules/inherits": {
450 | "version": "2.0.4",
451 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
452 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
453 | "dev": true
454 | },
455 | "node_modules/is-binary-path": {
456 | "version": "2.1.0",
457 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
458 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
459 | "dev": true,
460 | "dependencies": {
461 | "binary-extensions": "^2.0.0"
462 | },
463 | "engines": {
464 | "node": ">=8"
465 | }
466 | },
467 | "node_modules/is-core-module": {
468 | "version": "2.8.0",
469 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
470 | "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
471 | "dev": true,
472 | "dependencies": {
473 | "has": "^1.0.3"
474 | },
475 | "funding": {
476 | "url": "https://github.com/sponsors/ljharb"
477 | }
478 | },
479 | "node_modules/is-extglob": {
480 | "version": "2.1.1",
481 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
482 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
483 | "dev": true,
484 | "engines": {
485 | "node": ">=0.10.0"
486 | }
487 | },
488 | "node_modules/is-glob": {
489 | "version": "4.0.3",
490 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
491 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
492 | "dev": true,
493 | "dependencies": {
494 | "is-extglob": "^2.1.1"
495 | },
496 | "engines": {
497 | "node": ">=0.10.0"
498 | }
499 | },
500 | "node_modules/is-module": {
501 | "version": "1.0.0",
502 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
503 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
504 | "dev": true
505 | },
506 | "node_modules/is-number": {
507 | "version": "7.0.0",
508 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
509 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
510 | "dev": true,
511 | "engines": {
512 | "node": ">=0.12.0"
513 | }
514 | },
515 | "node_modules/is-reference": {
516 | "version": "1.2.1",
517 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
518 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
519 | "dev": true,
520 | "dependencies": {
521 | "@types/estree": "*"
522 | }
523 | },
524 | "node_modules/jest-worker": {
525 | "version": "26.6.2",
526 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
527 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
528 | "dev": true,
529 | "dependencies": {
530 | "@types/node": "*",
531 | "merge-stream": "^2.0.0",
532 | "supports-color": "^7.0.0"
533 | },
534 | "engines": {
535 | "node": ">= 10.13.0"
536 | }
537 | },
538 | "node_modules/jest-worker/node_modules/has-flag": {
539 | "version": "4.0.0",
540 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
541 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
542 | "dev": true,
543 | "engines": {
544 | "node": ">=8"
545 | }
546 | },
547 | "node_modules/jest-worker/node_modules/supports-color": {
548 | "version": "7.2.0",
549 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
550 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
551 | "dev": true,
552 | "dependencies": {
553 | "has-flag": "^4.0.0"
554 | },
555 | "engines": {
556 | "node": ">=8"
557 | }
558 | },
559 | "node_modules/js-tokens": {
560 | "version": "4.0.0",
561 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
562 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
563 | "dev": true
564 | },
565 | "node_modules/kleur": {
566 | "version": "3.0.3",
567 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
568 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
569 | "engines": {
570 | "node": ">=6"
571 | }
572 | },
573 | "node_modules/livereload": {
574 | "version": "0.9.3",
575 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz",
576 | "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==",
577 | "dev": true,
578 | "dependencies": {
579 | "chokidar": "^3.5.0",
580 | "livereload-js": "^3.3.1",
581 | "opts": ">= 1.2.0",
582 | "ws": "^7.4.3"
583 | },
584 | "bin": {
585 | "livereload": "bin/livereload.js"
586 | },
587 | "engines": {
588 | "node": ">=8.0.0"
589 | }
590 | },
591 | "node_modules/livereload-js": {
592 | "version": "3.3.2",
593 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz",
594 | "integrity": "sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA==",
595 | "dev": true
596 | },
597 | "node_modules/local-access": {
598 | "version": "1.1.0",
599 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz",
600 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==",
601 | "engines": {
602 | "node": ">=6"
603 | }
604 | },
605 | "node_modules/magic-string": {
606 | "version": "0.25.7",
607 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
608 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
609 | "dev": true,
610 | "dependencies": {
611 | "sourcemap-codec": "^1.4.4"
612 | }
613 | },
614 | "node_modules/merge-stream": {
615 | "version": "2.0.0",
616 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
617 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
618 | "dev": true
619 | },
620 | "node_modules/mime": {
621 | "version": "2.5.2",
622 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
623 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
624 | "bin": {
625 | "mime": "cli.js"
626 | },
627 | "engines": {
628 | "node": ">=4.0.0"
629 | }
630 | },
631 | "node_modules/minimatch": {
632 | "version": "3.0.4",
633 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
634 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
635 | "dev": true,
636 | "dependencies": {
637 | "brace-expansion": "^1.1.7"
638 | },
639 | "engines": {
640 | "node": "*"
641 | }
642 | },
643 | "node_modules/mri": {
644 | "version": "1.2.0",
645 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
646 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
647 | "engines": {
648 | "node": ">=4"
649 | }
650 | },
651 | "node_modules/normalize-path": {
652 | "version": "3.0.0",
653 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
654 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
655 | "dev": true,
656 | "engines": {
657 | "node": ">=0.10.0"
658 | }
659 | },
660 | "node_modules/once": {
661 | "version": "1.4.0",
662 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
663 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
664 | "dev": true,
665 | "dependencies": {
666 | "wrappy": "1"
667 | }
668 | },
669 | "node_modules/opts": {
670 | "version": "2.0.2",
671 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz",
672 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==",
673 | "dev": true
674 | },
675 | "node_modules/path-is-absolute": {
676 | "version": "1.0.1",
677 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
678 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
679 | "dev": true,
680 | "engines": {
681 | "node": ">=0.10.0"
682 | }
683 | },
684 | "node_modules/path-parse": {
685 | "version": "1.0.7",
686 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
687 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
688 | "dev": true
689 | },
690 | "node_modules/picomatch": {
691 | "version": "2.3.0",
692 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
693 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
694 | "dev": true,
695 | "engines": {
696 | "node": ">=8.6"
697 | },
698 | "funding": {
699 | "url": "https://github.com/sponsors/jonschlinkert"
700 | }
701 | },
702 | "node_modules/randombytes": {
703 | "version": "2.1.0",
704 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
705 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
706 | "dev": true,
707 | "dependencies": {
708 | "safe-buffer": "^5.1.0"
709 | }
710 | },
711 | "node_modules/readdirp": {
712 | "version": "3.6.0",
713 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
714 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
715 | "dev": true,
716 | "dependencies": {
717 | "picomatch": "^2.2.1"
718 | },
719 | "engines": {
720 | "node": ">=8.10.0"
721 | }
722 | },
723 | "node_modules/require-relative": {
724 | "version": "0.8.7",
725 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
726 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
727 | "dev": true
728 | },
729 | "node_modules/resolve": {
730 | "version": "1.20.0",
731 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
732 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
733 | "dev": true,
734 | "dependencies": {
735 | "is-core-module": "^2.2.0",
736 | "path-parse": "^1.0.6"
737 | },
738 | "funding": {
739 | "url": "https://github.com/sponsors/ljharb"
740 | }
741 | },
742 | "node_modules/rollup": {
743 | "version": "2.58.0",
744 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz",
745 | "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==",
746 | "dev": true,
747 | "bin": {
748 | "rollup": "dist/bin/rollup"
749 | },
750 | "engines": {
751 | "node": ">=10.0.0"
752 | },
753 | "optionalDependencies": {
754 | "fsevents": "~2.3.2"
755 | }
756 | },
757 | "node_modules/rollup-plugin-css-only": {
758 | "version": "3.1.0",
759 | "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz",
760 | "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==",
761 | "dev": true,
762 | "dependencies": {
763 | "@rollup/pluginutils": "4"
764 | },
765 | "engines": {
766 | "node": ">=10.12.0"
767 | },
768 | "peerDependencies": {
769 | "rollup": "1 || 2"
770 | }
771 | },
772 | "node_modules/rollup-plugin-css-only/node_modules/@rollup/pluginutils": {
773 | "version": "4.1.1",
774 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz",
775 | "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==",
776 | "dev": true,
777 | "dependencies": {
778 | "estree-walker": "^2.0.1",
779 | "picomatch": "^2.2.2"
780 | },
781 | "engines": {
782 | "node": ">= 8.0.0"
783 | }
784 | },
785 | "node_modules/rollup-plugin-livereload": {
786 | "version": "2.0.5",
787 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz",
788 | "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==",
789 | "dev": true,
790 | "dependencies": {
791 | "livereload": "^0.9.1"
792 | },
793 | "engines": {
794 | "node": ">=8.3"
795 | }
796 | },
797 | "node_modules/rollup-plugin-svelte": {
798 | "version": "7.1.0",
799 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz",
800 | "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==",
801 | "dev": true,
802 | "dependencies": {
803 | "require-relative": "^0.8.7",
804 | "rollup-pluginutils": "^2.8.2"
805 | },
806 | "engines": {
807 | "node": ">=10"
808 | },
809 | "peerDependencies": {
810 | "rollup": ">=2.0.0",
811 | "svelte": ">=3.5.0"
812 | }
813 | },
814 | "node_modules/rollup-plugin-terser": {
815 | "version": "7.0.2",
816 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
817 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
818 | "dev": true,
819 | "dependencies": {
820 | "@babel/code-frame": "^7.10.4",
821 | "jest-worker": "^26.2.1",
822 | "serialize-javascript": "^4.0.0",
823 | "terser": "^5.0.0"
824 | },
825 | "peerDependencies": {
826 | "rollup": "^2.0.0"
827 | }
828 | },
829 | "node_modules/rollup-pluginutils": {
830 | "version": "2.8.2",
831 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
832 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
833 | "dev": true,
834 | "dependencies": {
835 | "estree-walker": "^0.6.1"
836 | }
837 | },
838 | "node_modules/rollup-pluginutils/node_modules/estree-walker": {
839 | "version": "0.6.1",
840 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
841 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
842 | "dev": true
843 | },
844 | "node_modules/sade": {
845 | "version": "1.7.4",
846 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz",
847 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==",
848 | "dependencies": {
849 | "mri": "^1.1.0"
850 | },
851 | "engines": {
852 | "node": ">= 6"
853 | }
854 | },
855 | "node_modules/safe-buffer": {
856 | "version": "5.2.1",
857 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
858 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
859 | "dev": true,
860 | "funding": [
861 | {
862 | "type": "github",
863 | "url": "https://github.com/sponsors/feross"
864 | },
865 | {
866 | "type": "patreon",
867 | "url": "https://www.patreon.com/feross"
868 | },
869 | {
870 | "type": "consulting",
871 | "url": "https://feross.org/support"
872 | }
873 | ]
874 | },
875 | "node_modules/semiver": {
876 | "version": "1.1.0",
877 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz",
878 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==",
879 | "engines": {
880 | "node": ">=6"
881 | }
882 | },
883 | "node_modules/serialize-javascript": {
884 | "version": "4.0.0",
885 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
886 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
887 | "dev": true,
888 | "dependencies": {
889 | "randombytes": "^2.1.0"
890 | }
891 | },
892 | "node_modules/sirv": {
893 | "version": "1.0.18",
894 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.18.tgz",
895 | "integrity": "sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA==",
896 | "dependencies": {
897 | "@polka/url": "^1.0.0-next.20",
898 | "mime": "^2.3.1",
899 | "totalist": "^1.0.0"
900 | },
901 | "engines": {
902 | "node": ">= 10"
903 | }
904 | },
905 | "node_modules/sirv-cli": {
906 | "version": "1.0.14",
907 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.14.tgz",
908 | "integrity": "sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==",
909 | "dependencies": {
910 | "console-clear": "^1.1.0",
911 | "get-port": "^3.2.0",
912 | "kleur": "^3.0.0",
913 | "local-access": "^1.0.1",
914 | "sade": "^1.6.0",
915 | "semiver": "^1.0.0",
916 | "sirv": "^1.0.13",
917 | "tinydate": "^1.0.0"
918 | },
919 | "bin": {
920 | "sirv": "bin.js"
921 | },
922 | "engines": {
923 | "node": ">= 10"
924 | }
925 | },
926 | "node_modules/source-map": {
927 | "version": "0.7.3",
928 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
929 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
930 | "dev": true,
931 | "engines": {
932 | "node": ">= 8"
933 | }
934 | },
935 | "node_modules/source-map-support": {
936 | "version": "0.5.20",
937 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
938 | "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
939 | "dev": true,
940 | "dependencies": {
941 | "buffer-from": "^1.0.0",
942 | "source-map": "^0.6.0"
943 | }
944 | },
945 | "node_modules/source-map-support/node_modules/source-map": {
946 | "version": "0.6.1",
947 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
948 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
949 | "dev": true,
950 | "engines": {
951 | "node": ">=0.10.0"
952 | }
953 | },
954 | "node_modules/sourcemap-codec": {
955 | "version": "1.4.8",
956 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
957 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
958 | "dev": true
959 | },
960 | "node_modules/supports-color": {
961 | "version": "5.5.0",
962 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
963 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
964 | "dev": true,
965 | "dependencies": {
966 | "has-flag": "^3.0.0"
967 | },
968 | "engines": {
969 | "node": ">=4"
970 | }
971 | },
972 | "node_modules/svelte": {
973 | "version": "3.43.2",
974 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.43.2.tgz",
975 | "integrity": "sha512-Lj+TJfSeod8UGnoG2opysdlCy4MCck/hHQsZwtNPXdYTwLTz+WC37QwewPhZtd+h3dpfps4h9QzFxWGVI4tzQw==",
976 | "dev": true,
977 | "engines": {
978 | "node": ">= 8"
979 | }
980 | },
981 | "node_modules/svelte-subcomponent-preprocessor": {
982 | "resolved": "..",
983 | "link": true
984 | },
985 | "node_modules/terser": {
986 | "version": "5.9.0",
987 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz",
988 | "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==",
989 | "dev": true,
990 | "dependencies": {
991 | "commander": "^2.20.0",
992 | "source-map": "~0.7.2",
993 | "source-map-support": "~0.5.20"
994 | },
995 | "bin": {
996 | "terser": "bin/terser"
997 | },
998 | "engines": {
999 | "node": ">=10"
1000 | }
1001 | },
1002 | "node_modules/tinydate": {
1003 | "version": "1.3.0",
1004 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz",
1005 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==",
1006 | "engines": {
1007 | "node": ">=4"
1008 | }
1009 | },
1010 | "node_modules/to-regex-range": {
1011 | "version": "5.0.1",
1012 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1013 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1014 | "dev": true,
1015 | "dependencies": {
1016 | "is-number": "^7.0.0"
1017 | },
1018 | "engines": {
1019 | "node": ">=8.0"
1020 | }
1021 | },
1022 | "node_modules/totalist": {
1023 | "version": "1.1.0",
1024 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
1025 | "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==",
1026 | "engines": {
1027 | "node": ">=6"
1028 | }
1029 | },
1030 | "node_modules/wrappy": {
1031 | "version": "1.0.2",
1032 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1033 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1034 | "dev": true
1035 | },
1036 | "node_modules/ws": {
1037 | "version": "7.5.5",
1038 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
1039 | "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
1040 | "dev": true,
1041 | "engines": {
1042 | "node": ">=8.3.0"
1043 | },
1044 | "peerDependencies": {
1045 | "bufferutil": "^4.0.1",
1046 | "utf-8-validate": "^5.0.2"
1047 | },
1048 | "peerDependenciesMeta": {
1049 | "bufferutil": {
1050 | "optional": true
1051 | },
1052 | "utf-8-validate": {
1053 | "optional": true
1054 | }
1055 | }
1056 | }
1057 | },
1058 | "dependencies": {
1059 | "@babel/code-frame": {
1060 | "version": "7.15.8",
1061 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
1062 | "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
1063 | "dev": true,
1064 | "requires": {
1065 | "@babel/highlight": "^7.14.5"
1066 | }
1067 | },
1068 | "@babel/helper-validator-identifier": {
1069 | "version": "7.15.7",
1070 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
1071 | "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
1072 | "dev": true
1073 | },
1074 | "@babel/highlight": {
1075 | "version": "7.14.5",
1076 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
1077 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
1078 | "dev": true,
1079 | "requires": {
1080 | "@babel/helper-validator-identifier": "^7.14.5",
1081 | "chalk": "^2.0.0",
1082 | "js-tokens": "^4.0.0"
1083 | }
1084 | },
1085 | "@polka/url": {
1086 | "version": "1.0.0-next.21",
1087 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
1088 | "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g=="
1089 | },
1090 | "@rollup/plugin-commonjs": {
1091 | "version": "17.1.0",
1092 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz",
1093 | "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==",
1094 | "dev": true,
1095 | "requires": {
1096 | "@rollup/pluginutils": "^3.1.0",
1097 | "commondir": "^1.0.1",
1098 | "estree-walker": "^2.0.1",
1099 | "glob": "^7.1.6",
1100 | "is-reference": "^1.2.1",
1101 | "magic-string": "^0.25.7",
1102 | "resolve": "^1.17.0"
1103 | }
1104 | },
1105 | "@rollup/plugin-node-resolve": {
1106 | "version": "11.2.1",
1107 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz",
1108 | "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==",
1109 | "dev": true,
1110 | "requires": {
1111 | "@rollup/pluginutils": "^3.1.0",
1112 | "@types/resolve": "1.17.1",
1113 | "builtin-modules": "^3.1.0",
1114 | "deepmerge": "^4.2.2",
1115 | "is-module": "^1.0.0",
1116 | "resolve": "^1.19.0"
1117 | }
1118 | },
1119 | "@rollup/pluginutils": {
1120 | "version": "3.1.0",
1121 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
1122 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
1123 | "dev": true,
1124 | "requires": {
1125 | "@types/estree": "0.0.39",
1126 | "estree-walker": "^1.0.1",
1127 | "picomatch": "^2.2.2"
1128 | },
1129 | "dependencies": {
1130 | "estree-walker": {
1131 | "version": "1.0.1",
1132 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
1133 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
1134 | "dev": true
1135 | }
1136 | }
1137 | },
1138 | "@types/estree": {
1139 | "version": "0.0.39",
1140 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
1141 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
1142 | "dev": true
1143 | },
1144 | "@types/node": {
1145 | "version": "16.11.1",
1146 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz",
1147 | "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==",
1148 | "dev": true
1149 | },
1150 | "@types/resolve": {
1151 | "version": "1.17.1",
1152 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
1153 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
1154 | "dev": true,
1155 | "requires": {
1156 | "@types/node": "*"
1157 | }
1158 | },
1159 | "ansi-styles": {
1160 | "version": "3.2.1",
1161 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1162 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1163 | "dev": true,
1164 | "requires": {
1165 | "color-convert": "^1.9.0"
1166 | }
1167 | },
1168 | "anymatch": {
1169 | "version": "3.1.2",
1170 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
1171 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
1172 | "dev": true,
1173 | "requires": {
1174 | "normalize-path": "^3.0.0",
1175 | "picomatch": "^2.0.4"
1176 | }
1177 | },
1178 | "balanced-match": {
1179 | "version": "1.0.2",
1180 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1181 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1182 | "dev": true
1183 | },
1184 | "binary-extensions": {
1185 | "version": "2.2.0",
1186 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1187 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1188 | "dev": true
1189 | },
1190 | "brace-expansion": {
1191 | "version": "1.1.11",
1192 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1193 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1194 | "dev": true,
1195 | "requires": {
1196 | "balanced-match": "^1.0.0",
1197 | "concat-map": "0.0.1"
1198 | }
1199 | },
1200 | "braces": {
1201 | "version": "3.0.2",
1202 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1203 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1204 | "dev": true,
1205 | "requires": {
1206 | "fill-range": "^7.0.1"
1207 | }
1208 | },
1209 | "buffer-from": {
1210 | "version": "1.1.2",
1211 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
1212 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
1213 | "dev": true
1214 | },
1215 | "builtin-modules": {
1216 | "version": "3.2.0",
1217 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
1218 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
1219 | "dev": true
1220 | },
1221 | "chalk": {
1222 | "version": "2.4.2",
1223 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1224 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1225 | "dev": true,
1226 | "requires": {
1227 | "ansi-styles": "^3.2.1",
1228 | "escape-string-regexp": "^1.0.5",
1229 | "supports-color": "^5.3.0"
1230 | }
1231 | },
1232 | "chokidar": {
1233 | "version": "3.5.2",
1234 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
1235 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
1236 | "dev": true,
1237 | "requires": {
1238 | "anymatch": "~3.1.2",
1239 | "braces": "~3.0.2",
1240 | "fsevents": "~2.3.2",
1241 | "glob-parent": "~5.1.2",
1242 | "is-binary-path": "~2.1.0",
1243 | "is-glob": "~4.0.1",
1244 | "normalize-path": "~3.0.0",
1245 | "readdirp": "~3.6.0"
1246 | }
1247 | },
1248 | "color-convert": {
1249 | "version": "1.9.3",
1250 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1251 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1252 | "dev": true,
1253 | "requires": {
1254 | "color-name": "1.1.3"
1255 | }
1256 | },
1257 | "color-name": {
1258 | "version": "1.1.3",
1259 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1260 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1261 | "dev": true
1262 | },
1263 | "commander": {
1264 | "version": "2.20.3",
1265 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
1266 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
1267 | "dev": true
1268 | },
1269 | "commondir": {
1270 | "version": "1.0.1",
1271 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
1272 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
1273 | "dev": true
1274 | },
1275 | "concat-map": {
1276 | "version": "0.0.1",
1277 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1278 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1279 | "dev": true
1280 | },
1281 | "console-clear": {
1282 | "version": "1.1.1",
1283 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz",
1284 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ=="
1285 | },
1286 | "deepmerge": {
1287 | "version": "4.2.2",
1288 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
1289 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
1290 | "dev": true
1291 | },
1292 | "escape-string-regexp": {
1293 | "version": "1.0.5",
1294 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1295 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1296 | "dev": true
1297 | },
1298 | "estree-walker": {
1299 | "version": "2.0.2",
1300 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
1301 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
1302 | "dev": true
1303 | },
1304 | "fill-range": {
1305 | "version": "7.0.1",
1306 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1307 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1308 | "dev": true,
1309 | "requires": {
1310 | "to-regex-range": "^5.0.1"
1311 | }
1312 | },
1313 | "fs.realpath": {
1314 | "version": "1.0.0",
1315 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1316 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1317 | "dev": true
1318 | },
1319 | "fsevents": {
1320 | "version": "2.3.2",
1321 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1322 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1323 | "dev": true,
1324 | "optional": true
1325 | },
1326 | "function-bind": {
1327 | "version": "1.1.1",
1328 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1329 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1330 | "dev": true
1331 | },
1332 | "get-port": {
1333 | "version": "3.2.0",
1334 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
1335 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw="
1336 | },
1337 | "glob": {
1338 | "version": "7.2.0",
1339 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
1340 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
1341 | "dev": true,
1342 | "requires": {
1343 | "fs.realpath": "^1.0.0",
1344 | "inflight": "^1.0.4",
1345 | "inherits": "2",
1346 | "minimatch": "^3.0.4",
1347 | "once": "^1.3.0",
1348 | "path-is-absolute": "^1.0.0"
1349 | }
1350 | },
1351 | "glob-parent": {
1352 | "version": "5.1.2",
1353 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1354 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1355 | "dev": true,
1356 | "requires": {
1357 | "is-glob": "^4.0.1"
1358 | }
1359 | },
1360 | "has": {
1361 | "version": "1.0.3",
1362 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1363 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1364 | "dev": true,
1365 | "requires": {
1366 | "function-bind": "^1.1.1"
1367 | }
1368 | },
1369 | "has-flag": {
1370 | "version": "3.0.0",
1371 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1372 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1373 | "dev": true
1374 | },
1375 | "inflight": {
1376 | "version": "1.0.6",
1377 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1378 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1379 | "dev": true,
1380 | "requires": {
1381 | "once": "^1.3.0",
1382 | "wrappy": "1"
1383 | }
1384 | },
1385 | "inherits": {
1386 | "version": "2.0.4",
1387 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1388 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1389 | "dev": true
1390 | },
1391 | "is-binary-path": {
1392 | "version": "2.1.0",
1393 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1394 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1395 | "dev": true,
1396 | "requires": {
1397 | "binary-extensions": "^2.0.0"
1398 | }
1399 | },
1400 | "is-core-module": {
1401 | "version": "2.8.0",
1402 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
1403 | "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
1404 | "dev": true,
1405 | "requires": {
1406 | "has": "^1.0.3"
1407 | }
1408 | },
1409 | "is-extglob": {
1410 | "version": "2.1.1",
1411 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1412 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1413 | "dev": true
1414 | },
1415 | "is-glob": {
1416 | "version": "4.0.3",
1417 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1418 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1419 | "dev": true,
1420 | "requires": {
1421 | "is-extglob": "^2.1.1"
1422 | }
1423 | },
1424 | "is-module": {
1425 | "version": "1.0.0",
1426 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
1427 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
1428 | "dev": true
1429 | },
1430 | "is-number": {
1431 | "version": "7.0.0",
1432 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1433 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1434 | "dev": true
1435 | },
1436 | "is-reference": {
1437 | "version": "1.2.1",
1438 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
1439 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
1440 | "dev": true,
1441 | "requires": {
1442 | "@types/estree": "*"
1443 | }
1444 | },
1445 | "jest-worker": {
1446 | "version": "26.6.2",
1447 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
1448 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
1449 | "dev": true,
1450 | "requires": {
1451 | "@types/node": "*",
1452 | "merge-stream": "^2.0.0",
1453 | "supports-color": "^7.0.0"
1454 | },
1455 | "dependencies": {
1456 | "has-flag": {
1457 | "version": "4.0.0",
1458 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1459 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1460 | "dev": true
1461 | },
1462 | "supports-color": {
1463 | "version": "7.2.0",
1464 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1465 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1466 | "dev": true,
1467 | "requires": {
1468 | "has-flag": "^4.0.0"
1469 | }
1470 | }
1471 | }
1472 | },
1473 | "js-tokens": {
1474 | "version": "4.0.0",
1475 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1476 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1477 | "dev": true
1478 | },
1479 | "kleur": {
1480 | "version": "3.0.3",
1481 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
1482 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
1483 | },
1484 | "livereload": {
1485 | "version": "0.9.3",
1486 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz",
1487 | "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==",
1488 | "dev": true,
1489 | "requires": {
1490 | "chokidar": "^3.5.0",
1491 | "livereload-js": "^3.3.1",
1492 | "opts": ">= 1.2.0",
1493 | "ws": "^7.4.3"
1494 | }
1495 | },
1496 | "livereload-js": {
1497 | "version": "3.3.2",
1498 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz",
1499 | "integrity": "sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA==",
1500 | "dev": true
1501 | },
1502 | "local-access": {
1503 | "version": "1.1.0",
1504 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz",
1505 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw=="
1506 | },
1507 | "magic-string": {
1508 | "version": "0.25.7",
1509 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
1510 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
1511 | "dev": true,
1512 | "requires": {
1513 | "sourcemap-codec": "^1.4.4"
1514 | }
1515 | },
1516 | "merge-stream": {
1517 | "version": "2.0.0",
1518 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
1519 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
1520 | "dev": true
1521 | },
1522 | "mime": {
1523 | "version": "2.5.2",
1524 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
1525 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="
1526 | },
1527 | "minimatch": {
1528 | "version": "3.0.4",
1529 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1530 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1531 | "dev": true,
1532 | "requires": {
1533 | "brace-expansion": "^1.1.7"
1534 | }
1535 | },
1536 | "mri": {
1537 | "version": "1.2.0",
1538 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
1539 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="
1540 | },
1541 | "normalize-path": {
1542 | "version": "3.0.0",
1543 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1544 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1545 | "dev": true
1546 | },
1547 | "once": {
1548 | "version": "1.4.0",
1549 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1550 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1551 | "dev": true,
1552 | "requires": {
1553 | "wrappy": "1"
1554 | }
1555 | },
1556 | "opts": {
1557 | "version": "2.0.2",
1558 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz",
1559 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==",
1560 | "dev": true
1561 | },
1562 | "path-is-absolute": {
1563 | "version": "1.0.1",
1564 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1565 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1566 | "dev": true
1567 | },
1568 | "path-parse": {
1569 | "version": "1.0.7",
1570 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1571 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1572 | "dev": true
1573 | },
1574 | "picomatch": {
1575 | "version": "2.3.0",
1576 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
1577 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
1578 | "dev": true
1579 | },
1580 | "randombytes": {
1581 | "version": "2.1.0",
1582 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
1583 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
1584 | "dev": true,
1585 | "requires": {
1586 | "safe-buffer": "^5.1.0"
1587 | }
1588 | },
1589 | "readdirp": {
1590 | "version": "3.6.0",
1591 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1592 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1593 | "dev": true,
1594 | "requires": {
1595 | "picomatch": "^2.2.1"
1596 | }
1597 | },
1598 | "require-relative": {
1599 | "version": "0.8.7",
1600 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
1601 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
1602 | "dev": true
1603 | },
1604 | "resolve": {
1605 | "version": "1.20.0",
1606 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
1607 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
1608 | "dev": true,
1609 | "requires": {
1610 | "is-core-module": "^2.2.0",
1611 | "path-parse": "^1.0.6"
1612 | }
1613 | },
1614 | "rollup": {
1615 | "version": "2.58.0",
1616 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz",
1617 | "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==",
1618 | "dev": true,
1619 | "requires": {
1620 | "fsevents": "~2.3.2"
1621 | }
1622 | },
1623 | "rollup-plugin-css-only": {
1624 | "version": "3.1.0",
1625 | "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz",
1626 | "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==",
1627 | "dev": true,
1628 | "requires": {
1629 | "@rollup/pluginutils": "4"
1630 | },
1631 | "dependencies": {
1632 | "@rollup/pluginutils": {
1633 | "version": "4.1.1",
1634 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz",
1635 | "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==",
1636 | "dev": true,
1637 | "requires": {
1638 | "estree-walker": "^2.0.1",
1639 | "picomatch": "^2.2.2"
1640 | }
1641 | }
1642 | }
1643 | },
1644 | "rollup-plugin-livereload": {
1645 | "version": "2.0.5",
1646 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz",
1647 | "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==",
1648 | "dev": true,
1649 | "requires": {
1650 | "livereload": "^0.9.1"
1651 | }
1652 | },
1653 | "rollup-plugin-svelte": {
1654 | "version": "7.1.0",
1655 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz",
1656 | "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==",
1657 | "dev": true,
1658 | "requires": {
1659 | "require-relative": "^0.8.7",
1660 | "rollup-pluginutils": "^2.8.2"
1661 | }
1662 | },
1663 | "rollup-plugin-terser": {
1664 | "version": "7.0.2",
1665 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
1666 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
1667 | "dev": true,
1668 | "requires": {
1669 | "@babel/code-frame": "^7.10.4",
1670 | "jest-worker": "^26.2.1",
1671 | "serialize-javascript": "^4.0.0",
1672 | "terser": "^5.0.0"
1673 | }
1674 | },
1675 | "rollup-pluginutils": {
1676 | "version": "2.8.2",
1677 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
1678 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
1679 | "dev": true,
1680 | "requires": {
1681 | "estree-walker": "^0.6.1"
1682 | },
1683 | "dependencies": {
1684 | "estree-walker": {
1685 | "version": "0.6.1",
1686 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
1687 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
1688 | "dev": true
1689 | }
1690 | }
1691 | },
1692 | "sade": {
1693 | "version": "1.7.4",
1694 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz",
1695 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==",
1696 | "requires": {
1697 | "mri": "^1.1.0"
1698 | }
1699 | },
1700 | "safe-buffer": {
1701 | "version": "5.2.1",
1702 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1703 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1704 | "dev": true
1705 | },
1706 | "semiver": {
1707 | "version": "1.1.0",
1708 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz",
1709 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg=="
1710 | },
1711 | "serialize-javascript": {
1712 | "version": "4.0.0",
1713 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
1714 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
1715 | "dev": true,
1716 | "requires": {
1717 | "randombytes": "^2.1.0"
1718 | }
1719 | },
1720 | "sirv": {
1721 | "version": "1.0.18",
1722 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.18.tgz",
1723 | "integrity": "sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA==",
1724 | "requires": {
1725 | "@polka/url": "^1.0.0-next.20",
1726 | "mime": "^2.3.1",
1727 | "totalist": "^1.0.0"
1728 | }
1729 | },
1730 | "sirv-cli": {
1731 | "version": "1.0.14",
1732 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.14.tgz",
1733 | "integrity": "sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==",
1734 | "requires": {
1735 | "console-clear": "^1.1.0",
1736 | "get-port": "^3.2.0",
1737 | "kleur": "^3.0.0",
1738 | "local-access": "^1.0.1",
1739 | "sade": "^1.6.0",
1740 | "semiver": "^1.0.0",
1741 | "sirv": "^1.0.13",
1742 | "tinydate": "^1.0.0"
1743 | }
1744 | },
1745 | "source-map": {
1746 | "version": "0.7.3",
1747 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
1748 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
1749 | "dev": true
1750 | },
1751 | "source-map-support": {
1752 | "version": "0.5.20",
1753 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
1754 | "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
1755 | "dev": true,
1756 | "requires": {
1757 | "buffer-from": "^1.0.0",
1758 | "source-map": "^0.6.0"
1759 | },
1760 | "dependencies": {
1761 | "source-map": {
1762 | "version": "0.6.1",
1763 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1764 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1765 | "dev": true
1766 | }
1767 | }
1768 | },
1769 | "sourcemap-codec": {
1770 | "version": "1.4.8",
1771 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
1772 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
1773 | "dev": true
1774 | },
1775 | "supports-color": {
1776 | "version": "5.5.0",
1777 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1778 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1779 | "dev": true,
1780 | "requires": {
1781 | "has-flag": "^3.0.0"
1782 | }
1783 | },
1784 | "svelte": {
1785 | "version": "3.43.2",
1786 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.43.2.tgz",
1787 | "integrity": "sha512-Lj+TJfSeod8UGnoG2opysdlCy4MCck/hHQsZwtNPXdYTwLTz+WC37QwewPhZtd+h3dpfps4h9QzFxWGVI4tzQw==",
1788 | "dev": true
1789 | },
1790 | "svelte-subcomponent-preprocessor": {
1791 | "version": "file:..",
1792 | "requires": {
1793 | "fs-extra": "^10.0.0",
1794 | "jest": "^27.3.1"
1795 | }
1796 | },
1797 | "terser": {
1798 | "version": "5.9.0",
1799 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz",
1800 | "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==",
1801 | "dev": true,
1802 | "requires": {
1803 | "commander": "^2.20.0",
1804 | "source-map": "~0.7.2",
1805 | "source-map-support": "~0.5.20"
1806 | }
1807 | },
1808 | "tinydate": {
1809 | "version": "1.3.0",
1810 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz",
1811 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w=="
1812 | },
1813 | "to-regex-range": {
1814 | "version": "5.0.1",
1815 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1816 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1817 | "dev": true,
1818 | "requires": {
1819 | "is-number": "^7.0.0"
1820 | }
1821 | },
1822 | "totalist": {
1823 | "version": "1.1.0",
1824 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
1825 | "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g=="
1826 | },
1827 | "wrappy": {
1828 | "version": "1.0.2",
1829 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1830 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1831 | "dev": true
1832 | },
1833 | "ws": {
1834 | "version": "7.5.5",
1835 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
1836 | "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
1837 | "dev": true,
1838 | "requires": {}
1839 | }
1840 | }
1841 | }
1842 |
--------------------------------------------------------------------------------
/dev/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-app",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "build": "rollup -c",
7 | "dev": "rollup -c -w",
8 | "start": "sirv public --no-clear"
9 | },
10 | "devDependencies": {
11 | "@rollup/plugin-commonjs": "^17.0.0",
12 | "@rollup/plugin-node-resolve": "^11.0.0",
13 | "rollup": "^2.3.4",
14 | "rollup-plugin-css-only": "^3.1.0",
15 | "rollup-plugin-livereload": "^2.0.0",
16 | "rollup-plugin-svelte": "^7.0.0",
17 | "rollup-plugin-terser": "^7.0.0",
18 | "svelte": "^3.0.0"
19 | },
20 | "dependencies": {
21 | "sirv-cli": "^1.0.0",
22 | "svelte-subcomponent-preprocessor": "file:.."
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/dev/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/srmullen/svelte-subcomponent-preprocessor/acaa99d92b951a44406b9420cd5d0467aabdd48b/dev/public/favicon.png
--------------------------------------------------------------------------------
/dev/public/global.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | position: relative;
3 | width: 100%;
4 | height: 100%;
5 | }
6 |
7 | body {
8 | color: #333;
9 | margin: 0;
10 | padding: 8px;
11 | box-sizing: border-box;
12 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
13 | }
14 |
15 | a {
16 | color: rgb(0,100,200);
17 | text-decoration: none;
18 | }
19 |
20 | a:hover {
21 | text-decoration: underline;
22 | }
23 |
24 | a:visited {
25 | color: rgb(0,80,160);
26 | }
27 |
28 | label {
29 | display: block;
30 | }
31 |
32 | input, button, select, textarea {
33 | font-family: inherit;
34 | font-size: inherit;
35 | -webkit-padding: 0.4em 0;
36 | padding: 0.4em;
37 | margin: 0 0 0.5em 0;
38 | box-sizing: border-box;
39 | border: 1px solid #ccc;
40 | border-radius: 2px;
41 | }
42 |
43 | input:disabled {
44 | color: #ccc;
45 | }
46 |
47 | button {
48 | color: #333;
49 | background-color: #f4f4f4;
50 | outline: none;
51 | }
52 |
53 | button:disabled {
54 | color: #999;
55 | }
56 |
57 | button:not(:disabled):active {
58 | background-color: #ddd;
59 | }
60 |
61 | button:focus {
62 | border-color: #666;
63 | }
64 |
--------------------------------------------------------------------------------
/dev/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Svelte app
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/dev/rollup.config.js:
--------------------------------------------------------------------------------
1 | import svelte from 'rollup-plugin-svelte';
2 | import commonjs from '@rollup/plugin-commonjs';
3 | import resolve from '@rollup/plugin-node-resolve';
4 | import livereload from 'rollup-plugin-livereload';
5 | import { terser } from 'rollup-plugin-terser';
6 | import css from 'rollup-plugin-css-only';
7 | import nestedComponentsPreprocesser from 'svelte-subcomponent-preprocessor';
8 |
9 | const production = !process.env.ROLLUP_WATCH;
10 |
11 | function serve() {
12 | let server;
13 |
14 | function toExit() {
15 | if (server) server.kill(0);
16 | }
17 |
18 | return {
19 | writeBundle() {
20 | if (server) return;
21 | server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
22 | stdio: ['ignore', 'inherit', 'inherit'],
23 | shell: true
24 | });
25 |
26 | process.on('SIGTERM', toExit);
27 | process.on('exit', toExit);
28 | }
29 | };
30 | }
31 |
32 | export default {
33 | input: 'src/main.js',
34 | output: {
35 | sourcemap: true,
36 | format: 'iife',
37 | name: 'app',
38 | file: 'public/build/bundle.js'
39 | },
40 | plugins: [
41 | svelte({
42 | compilerOptions: {
43 | // enable run-time checks when not in production
44 | dev: !production,
45 | },
46 | preprocess: [
47 | nestedComponentsPreprocesser()
48 | ]
49 | }),
50 | // we'll extract any component CSS out into
51 | // a separate file - better for performance
52 | css({ output: 'bundle.css' }),
53 |
54 | // If you have external dependencies installed from
55 | // npm, you'll most likely need these plugins. In
56 | // some cases you'll need additional configuration -
57 | // consult the documentation for details:
58 | // https://github.com/rollup/plugins/tree/master/packages/commonjs
59 | resolve({
60 | browser: true,
61 | dedupe: ['svelte']
62 | }),
63 | commonjs(),
64 |
65 | // In dev mode, call `npm run start` once
66 | // the bundle has been generated
67 | !production && serve(),
68 |
69 | // Watch the `public` directory and refresh the
70 | // browser on changes when not in production
71 | !production && livereload('public'),
72 |
73 | // If we're building for production (npm run build
74 | // instead of npm run dev), minify
75 | production && terser()
76 | ],
77 | watch: {
78 | clearScreen: false
79 | }
80 | };
81 |
--------------------------------------------------------------------------------
/dev/scripts/setupTypeScript.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 |
3 | /** This script modifies the project to support TS code in .svelte files like:
4 |
5 |
8 |
9 | As well as validating the code for CI.
10 | */
11 |
12 | /** To work on this script:
13 | rm -rf test-template template && git clone sveltejs/template test-template && node scripts/setupTypeScript.js test-template
14 | */
15 |
16 | const fs = require("fs")
17 | const path = require("path")
18 | const { argv } = require("process")
19 |
20 | const projectRoot = argv[2] || path.join(__dirname, "..")
21 |
22 | // Add deps to pkg.json
23 | const packageJSON = JSON.parse(fs.readFileSync(path.join(projectRoot, "package.json"), "utf8"))
24 | packageJSON.devDependencies = Object.assign(packageJSON.devDependencies, {
25 | "svelte-check": "^2.0.0",
26 | "svelte-preprocess": "^4.0.0",
27 | "@rollup/plugin-typescript": "^8.0.0",
28 | "typescript": "^4.0.0",
29 | "tslib": "^2.0.0",
30 | "@tsconfig/svelte": "^2.0.0"
31 | })
32 |
33 | // Add script for checking
34 | packageJSON.scripts = Object.assign(packageJSON.scripts, {
35 | "check": "svelte-check --tsconfig ./tsconfig.json"
36 | })
37 |
38 | // Write the package JSON
39 | fs.writeFileSync(path.join(projectRoot, "package.json"), JSON.stringify(packageJSON, null, " "))
40 |
41 | // mv src/main.js to main.ts - note, we need to edit rollup.config.js for this too
42 | const beforeMainJSPath = path.join(projectRoot, "src", "main.js")
43 | const afterMainTSPath = path.join(projectRoot, "src", "main.ts")
44 | fs.renameSync(beforeMainJSPath, afterMainTSPath)
45 |
46 | // Switch the app.svelte file to use TS
47 | const appSveltePath = path.join(projectRoot, "src", "App.svelte")
48 | let appFile = fs.readFileSync(appSveltePath, "utf8")
49 | appFile = appFile.replace("
11 |
12 |
13 | Hello {name}!
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/dev/src/NoScriptTag.svelte:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {#component Outer}
7 |
13 |
14 |
15 | {/component}
16 |
17 | {#component Inner}
18 |
24 |
25 |
Inner
26 | {/component}
--------------------------------------------------------------------------------
/dev/src/SubComponent.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
8 |
9 |
10 |
11 | {#each data as item}
12 |
13 | {/each}
14 |
15 |
16 |
17 | {#component ListItem}
18 |
26 |
27 |
^^^^{item}^^^^
28 | {/component}
29 |
30 |
42 |
43 | {#component ListTitle}
44 |
47 |
48 |
---{title}---
49 |
50 |
55 | {/component}
--------------------------------------------------------------------------------
/dev/src/components/Table.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | {#each cols as col, i}
7 |
8 | {/each}
9 |
10 |
11 |
17 |
18 |
19 | {#component Column}
20 |
24 |
25 |
{name} {number}
26 | {/component}
--------------------------------------------------------------------------------
/dev/src/main.js:
--------------------------------------------------------------------------------
1 | import App from './App.svelte';
2 |
3 | const app = new App({
4 | target: document.body,
5 | props: {
6 | name: 'world'
7 | }
8 | });
9 |
10 | export default app;
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-subcomponent-preprocessor",
3 | "version": "0.0.1",
4 | "description": "",
5 | "main": "src/index.js",
6 | "scripts": {
7 | "test": "jest",
8 | "test:watch": "jest --watchAll"
9 | },
10 | "author": "Sean Mullen
",
11 | "license": "ISC",
12 | "package": "module",
13 | "dependencies": {
14 | "fs-extra": "^10.0.0"
15 | },
16 | "devDependencies": {
17 | "jest": "^27.3.1"
18 | },
19 | "files": [
20 | "src"
21 | ],
22 | "repository": {
23 | "type": "git",
24 | "url": "https://github.com/srmullen/svelte-subcomponent-preprocessor"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs-extra');
2 | const path = require('path');
3 | const { stripComments, hasScriptTag } = require('./util');
4 | const { componentsRE, scriptRE, contextAttrRE } = require('./regexp');
5 |
6 | const DEFAULT_OUT = './node_modules/.svelte-subcomponent-preprocessor/';
7 |
8 | module.exports = function nestedComponentsPreprocesser(config = {}) {
9 | const fileDependencies = {};
10 |
11 | const out = config.out || DEFAULT_OUT;
12 |
13 | return {
14 | markup: async ({ content, filename }) => {
15 | let code = content;
16 | let matches = [...code.matchAll(componentsRE)];
17 | if (matches.length) {
18 | const deps = [];
19 | const files = [];
20 | let offset = 0;
21 | for (let i = 0; i < matches.length; i++) {
22 | const match = matches[i];
23 | // check that the match has capturing groups (ie. not a comment)
24 | if (match[1]) {
25 | // remove matched group
26 | const begin = match.index + offset;
27 | const end = begin + match[0].length;
28 | offset -= match[0].length;
29 | code = code.substr(0, begin) + code.substr(end);
30 |
31 | const filedir = path.relative('.', path.parse(filename).dir);
32 | const filelocation = path.join(out, filedir);
33 | const componentName = match[1];
34 | const componentSrc = match[2];
35 | const location = path.join(filelocation, componentName + '.svelte');
36 | deps.push({
37 | location,
38 | name: componentName
39 | });
40 | files.push(fs.outputFile(location, componentSrc, 'utf-8'));
41 | }
42 | }
43 | await Promise.all(files);
44 | fileDependencies[filename] = deps;
45 |
46 | // Check that the component has a script tag. If not insert one. Otherwise the script preprocess wont get called.
47 | if (!hasScriptTag(code)) {
48 | // Add script tag to the component.
49 | // Needs to have something in the script or script function won't get called during preprocess.
50 | code = `\n` + code;
51 | }
52 | return {
53 | code,
54 | dependencies: deps.map(({ location }) => path.resolve(location))
55 | };
56 | }
57 | },
58 | script: ({ content, filename, attributes }) => {
59 | if (attributes.context !== 'module') {
60 | const deps = fileDependencies[filename];
61 | if (!deps) {
62 | return;
63 | }
64 |
65 | let imports = '';
66 | deps.forEach(({ location, name }) => {
67 | const imprt = `import ${name} from '${path.relative(path.parse(filename).dir, location)}'\n`;
68 | imports += imprt;
69 | });
70 | const newContent = imports + content;
71 | return {
72 | code: newContent
73 | };
74 | }
75 | }
76 | }
77 | }
--------------------------------------------------------------------------------
/src/index.test.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | describe('hasScriptTags', () => {
4 | test('it works', () => {
5 | expect(2).toEqual(2);
6 | });
7 | });
--------------------------------------------------------------------------------
/src/regexp.js:
--------------------------------------------------------------------------------
1 | // This regular expression matches html comments and #component blocks, but it only captures groups for
2 | // component blocks. So if a match doesn't have a capture group, then it is a comment.
3 | const componentsRE = /|{#component\s+([A-Za-z]+[0-9]*)\s*}([\s\S]*?){\/component}/g;
4 |
5 | const scriptRE = /Yo!
10 | {/component}`;
11 |
12 | const otherComponent = `{#component OtherComponent}
13 |
14 |
15 |
16 | {/component}`
17 |
18 | const oneComponentSrc = `
21 |
22 |
23 |
24 | ${myComponent}
25 | `;
26 |
27 | const twoComponentSrc = `
28 |
29 |
30 |
31 |
32 | ${otherComponent}
33 |
34 | ${myComponent}
35 | `;
36 |
37 | const svelteIgnoreComment = ``;
38 | const commentedOutComponent = ``
41 |
42 | const commentSrc = `
43 |
49 |
50 | ${svelteIgnoreComment}
51 | ${myComponent}`
52 |
53 | describe('regex', () => {
54 | describe('componentsRE', () => {
55 | test('it matches the component name in the first group', () => {
56 | const [match1] = [...myComponent.matchAll(componentsRE)];
57 | expect(match1).not.toBeNull();
58 | expect(match1[1]).toEqual('MyComponent')
59 | const [match2] = [...otherComponent.matchAll(componentsRE)];
60 | expect(match2).not.toBeNull();
61 | expect(match2[1]).toEqual('OtherComponent');
62 | });
63 |
64 | test('it matches component blocks', () => {
65 | const matches = [...oneComponentSrc.matchAll(componentsRE)];
66 | expect(matches.length).toEqual(1);
67 | expect(matches[0][0]).toEqual(myComponent);
68 | });
69 |
70 | test('it matches more than one component', () => {
71 | const matches = [...twoComponentSrc.matchAll(componentsRE)];
72 | expect(matches.length).toEqual(2);
73 | expect(matches[0][0]).toEqual(otherComponent);
74 | expect(matches[1][0]).toEqual(myComponent);
75 | });
76 |
77 | describe('html comments', () => {
78 | const matches = [...commentSrc.matchAll(componentsRE)];
79 |
80 | test('it matches html comments', () => {
81 | expect(matches.length).toEqual(2);
82 | expect(matches[0][0]).toEqual(svelteIgnoreComment);
83 | });
84 |
85 | test('no groups are captured', () => {
86 | const match = matches[0];
87 | expect(match[0]).toEqual(svelteIgnoreComment);
88 | expect(match[1]).toBeUndefined();
89 | expect(match[2]).toBeUndefined();
90 | });
91 |
92 | test('it doesn\'t capture commented-out components', () => {
93 | const matches = [...commentedOutComponent.matchAll(componentsRE)];
94 | expect(matches.length).toEqual(1);
95 | expect(matches[0][1]).toBeUndefined();
96 | expect(matches[0][2]).toBeUndefined();
97 | });
98 |
99 | test('it captures comments and #components', () => {
100 | const src = `
101 | {#component ListItem}
102 |
110 |
111 | ^^^^{item}^^^^
112 | {/component}
113 |
114 | `;
126 | const matches = [...src.matchAll(componentsRE)];
127 | expect(matches.length).toEqual(3);
128 | expect(matches[0][1]).toBeUndefined();
129 | expect(matches[1][1]).toEqual('ListItem');
130 | expect(matches[2][1]).toBeUndefined();
131 | });
132 | });
133 | });
134 |
135 | const scriptTag = ``;
138 |
139 | const scriptTagWithAttributes = ``;
142 |
143 | const attrTagDoubleQuote = `context="module"`;
144 | const attrTagSingleQuote = `context = 'module'`;
145 | const attrTagBackTick = 'context=`module`';
146 |
147 | describe('scriptRE', () => {
148 | test('it matches basic script tag', () => {
149 | const matches = [...scriptTag.matchAll(scriptRE)];
150 | expect(matches.length).toEqual(1);
151 | expect(matches[0][0]).toEqual(scriptTag);
152 | });
153 |
154 | test('it captures attributes', () => {
155 | const matches = [...scriptTagWithAttributes.matchAll(scriptRE)];
156 | expect(matches.length).toEqual(1);
157 | expect(matches[0][0]).toEqual(scriptTagWithAttributes);
158 | expect(matches[0][1].trim()).toEqual('lang="ts" context="module"');
159 | });
160 | });
161 |
162 | describe('contextAttrRE', () => {
163 | test('it matches context attribute', () => {
164 | const matches = [...attrTagDoubleQuote.matchAll(contextAttrRE)];
165 | expect(matches.length).toEqual(1);
166 | expect(matches[0][0]).toEqual('context="module"');
167 | });
168 |
169 | test('it matches context attribute', () => {
170 | const matches = [...attrTagSingleQuote.matchAll(contextAttrRE)];
171 | expect(matches.length).toEqual(1);
172 | expect(matches[0][0]).toEqual(`context = 'module'`);
173 | });
174 |
175 | test('it matches context attribute', () => {
176 | const matches = [...attrTagBackTick.matchAll(contextAttrRE)];
177 | expect(matches.length).toEqual(1);
178 | expect(matches[0][0]).toEqual('context=`module`');
179 | });
180 |
181 | test('it doesn\'t match other attributes', () => {
182 | const matches = [...'lang="ts"'.matchAll(contextAttrRE)];
183 | expect(matches.length).toEqual(0);
184 | });
185 | });
186 | });
--------------------------------------------------------------------------------
/src/util.js:
--------------------------------------------------------------------------------
1 | const { scriptRE, contextAttrRE } = require('./regexp');
2 |
3 | function stripComments(src) {
4 | let stripped = src;
5 | const matches = stripped.match(//g);
6 | if (matches) {
7 | for (let i = 0; i < matches.length; i++) {
8 | const match = stripped.match(//);
9 | stripped = stripped.substr(0, match.index) + stripped.substr(match.index + match[0].length);
10 | }
11 | }
12 | return stripped;
13 | }
14 |
15 | /**
16 | * Check if the component source has a non module script tag.
17 | * @param {string} src
18 | */
19 | function hasScriptTag(src) {
20 | const sansComments = stripComments(src);
21 | const matches = [...sansComments.matchAll(scriptRE)];
22 | return Boolean(matches.filter(match => {
23 | const attrs = match[1];
24 | if (!attrs) {
25 | return true;
26 | } else {
27 | // check that the script isn't a module context.
28 | return !attrs.match(contextAttrRE);
29 | }
30 | }).length);
31 | }
32 |
33 | module.exports = {
34 | hasScriptTag,
35 | stripComments
36 | };
--------------------------------------------------------------------------------
/src/utils.test.js:
--------------------------------------------------------------------------------
1 | const { stripComments, hasScriptTag } = require('./util');
2 |
3 | describe('stripComments', () => {
4 | test('it leaves code that is not commented out', () => {
5 | const src = ``;
6 | expect(stripComments(src)).toEqual(src);
7 | });
8 |
9 | describe('commented code', () => {
10 | test('basic', () => {
11 | const src = ``;
12 | expect(stripComments(src)).toEqual('');
13 | });
14 |
15 | test('multiline', () => {
16 | const src = `
18 | `;
23 |
24 | expect(stripComments(src).trim()).toEqual(``);
25 | });
26 |
27 | test('nested comment', () => {
28 | const src = `
30 |
33 |
36 | hello
`;
37 | const result = `
39 |
40 | hello
`;
41 |
42 | expect(stripComments(src)).toEqual(result);
43 | });
44 | });
45 | });
46 |
47 | describe('hasScriptTag', () => {
48 | test('it returns false if there is no script tag', () => {
49 | expect(hasScriptTag(``)).toBe(false);
50 | expect(hasScriptTag(`no script `)).toBe(false);
51 | expect(hasScriptTag(`
52 |
53 | `)).toBe(false);
56 | });
57 |
58 | test('it returns true if there is a script tag', () => {
59 | expect(hasScriptTag(``)).toBe(true);
60 | expect(hasScriptTag(``)).toBe(true);
61 | expect(hasScriptTag(``)).toBe(true);
64 | });
65 |
66 | test('it returns false if the only script is a module context', () => {
67 | expect(hasScriptTag(` {
72 | expect(hasScriptTag(`
73 | `)).toBe(true);
74 | });
75 |
76 | test('commented out code is ignored', () => {
77 | expect(hasScriptTag(``)).toBe(false);
78 | expect(hasScriptTag(`
79 | `)).toBe(false);
80 | });
81 | });
--------------------------------------------------------------------------------
/stts-subcomponent-test/src/components/Item.svelte:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | {item}
7 |
--------------------------------------------------------------------------------
/stts-subcomponent-test/src/components/ListItem.svelte:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 | ^^^^{item}^^^^
12 |
--------------------------------------------------------------------------------
/stts-subcomponent-test/src/components/ListTitle.svelte:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | ---{title}---
7 |
8 |
13 |
--------------------------------------------------------------------------------