├── src ├── preact.d.ts ├── vite-env.d.ts ├── worker.ts └── main.tsx ├── .gitignore ├── README.md ├── vite.config.ts ├── package.json ├── tsconfig.json ├── index.html └── pnpm-lock.yaml /src/preact.d.ts: -------------------------------------------------------------------------------- 1 | import JSX = preact.JSX; 2 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | 7 | # Local Netlify folder 8 | .netlify 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ShakerPhobia 2 | 3 | Bundle Size checker with treeshake on Browser. 4 | 5 | https://shakerphobia.netlify.app/ 6 | 7 | ## LICENSE 8 | 9 | MIT -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import preact from "@preact/preset-vite"; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [preact()], 7 | resolve: { 8 | alias: { 9 | path: "path-browserify", 10 | }, 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "esphobia", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "tsc && vite build", 7 | "serve": "vite preview" 8 | }, 9 | "dependencies": { 10 | "comlink": "^4.3.1", 11 | "path-browserify": "^1.0.1", 12 | "preact": "^10.5.13" 13 | }, 14 | "devDependencies": { 15 | "@preact/preset-vite": "^2.0.0", 16 | "@rollup/plugin-virtual": "^2.1.0", 17 | "@types/node": "^17.0.22", 18 | "rollup": "^2.70.1", 19 | "terser": "^5.12.1", 20 | "typescript": "^4.3.2", 21 | "vite": "^2.6.4" 22 | } 23 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": false, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "preserve", 18 | "jsxFactory": "h", 19 | "jsxFragmentFactory": "Fragment" 20 | }, 21 | "include": ["src"] 22 | } 23 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | 16 | 17 | 19 | Shakerphobia 20 | 21 | 22 |
23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/worker.ts: -------------------------------------------------------------------------------- 1 | import { minify } from "terser"; 2 | import { rollup } from "rollup"; 3 | import { expose } from "comlink"; 4 | import { Plugin } from "rollup"; 5 | import path from "path"; 6 | 7 | export type CompileResult = { 8 | error: false; 9 | input: string; 10 | code: string; 11 | size: number; 12 | gzipSize: number; 13 | } | { 14 | error: true; 15 | reason: string; 16 | }; 17 | 18 | declare const CompressionStream: any; 19 | const encoder = new TextEncoder(); 20 | 21 | async function compress(str: string): Promise { 22 | const cs = new CompressionStream("gzip"); 23 | const buf = encoder.encode(str); 24 | const stream = new Response(buf).body!.pipeThrough(cs); 25 | return new Response(stream as any).arrayBuffer(); 26 | } 27 | 28 | const api = { 29 | async compile( 30 | pkgName: string, 31 | imports: string[] | undefined, 32 | ): Promise { 33 | const importsString = imports?.join(","); 34 | const input = imports?.length 35 | ? `import {${importsString}} from "${pkgName}";\nconsole.log(${importsString})` 36 | : `import x from "${pkgName}";console.log(x)`; 37 | 38 | try { 39 | const bundle = await rollup({ 40 | input: "entry.js", 41 | plugins: [ 42 | { 43 | name: "entry", 44 | resolveId(id, importer) { 45 | if (importer == null) { 46 | return "entry.js"; 47 | } 48 | }, 49 | load(id) { 50 | if (id === "entry.js") { 51 | return input; 52 | } 53 | }, 54 | }, 55 | httpResolve(), 56 | ], 57 | }); 58 | const generated = await bundle.generate({ 59 | format: "es", 60 | }); 61 | const main = generated.output[0].code; 62 | const minified = await minify(main, { module: true }); 63 | const gzipped = await compress(minified.code!); 64 | return { 65 | error: false, 66 | input, 67 | code: minified.code!, 68 | size: minified.code!.length, 69 | gzipSize: gzipped.byteLength, 70 | }; 71 | } catch (e) { 72 | return { 73 | error: true, 74 | reason: e instanceof Error ? e.message : JSON.stringify(e), 75 | }; 76 | } 77 | }, 78 | }; 79 | 80 | export type Api = typeof api; 81 | 82 | expose(api); 83 | 84 | // http-resolve 85 | function isHttpProtocol(id: string | undefined | null) { 86 | return id?.startsWith("https://"); 87 | } 88 | 89 | const DEBUG = true; 90 | const log = (...args: any) => DEBUG && console.log(...args); 91 | 92 | type HttpResolveOptions = { 93 | cache?: any; 94 | fetcher?: (url: string) => Promise; 95 | onRequest?: (url: string) => void; 96 | onUseCache?: (url: string) => void; 97 | }; 98 | const defaultCache = new Map(); 99 | 100 | const httpResolve = function httpResolve_({ 101 | cache = defaultCache, 102 | onRequest, 103 | onUseCache, 104 | fetcher, 105 | }: HttpResolveOptions = {}) { 106 | return { 107 | name: "http-resolve", 108 | async resolveId(id: string, importer: string) { 109 | if (isHttpProtocol(id)) { 110 | return id; 111 | } 112 | log("[http-resolve:resolveId:enter]", id, "from", importer); 113 | // on network resolve 114 | if (importer && isHttpProtocol(importer)) { 115 | log("[http-resolve:resolveId:target]", id, "from", importer); 116 | if (id.startsWith("https://")) { 117 | log("[http-reslove:end] return with https", id); 118 | return id; 119 | } 120 | const { pathname, protocol, host } = new URL(importer); 121 | if (id.startsWith("/")) { 122 | log( 123 | "[http-reslove:end] return with host root", 124 | `${protocol}//${host}${id}`, 125 | ); 126 | return `${protocol}//${host}${id}`; 127 | } else if (id.startsWith(".") || id === "entry.js") { 128 | // pattern: ./xxx/yyy in https://esm.sh 129 | const resolvedPathname = path.join(path.dirname(pathname), id); 130 | const newId = `${protocol}//${host}${resolvedPathname}`; 131 | log("[http-resolve:end] return with relativePath", newId); 132 | return newId; 133 | } 134 | } 135 | }, 136 | async load(id: string) { 137 | log("[http-resolve:load]", id); 138 | if (id === null) { 139 | return; 140 | } 141 | if (isHttpProtocol(id)) { 142 | const cached = await cache.get(id); 143 | if (cached) { 144 | onUseCache?.(id); 145 | return cached; 146 | } 147 | onRequest?.(id); 148 | if (fetcher) { 149 | const code = await fetcher(id); 150 | await cache.set(id, code); 151 | return code; 152 | } else { 153 | const res = await fetch(id); 154 | if (!res.ok) { 155 | throw res.statusText; 156 | } 157 | const code = await res.text(); 158 | await cache.set(id, code); 159 | return code; 160 | } 161 | } 162 | }, 163 | } as Plugin; 164 | }; 165 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import type { Api, CompileResult } from "./worker"; 2 | import { render } from "preact"; 3 | import { useEffect, useState } from "preact/hooks"; 4 | import { wrap } from "comlink"; 5 | 6 | const worker = new Worker(new URL("./worker.ts", import.meta.url), { 7 | type: "module", 8 | }); 9 | const api = wrap(worker); 10 | 11 | type Query = { 12 | pkg?: string; 13 | imports?: string; 14 | }; 15 | 16 | function Reporter(props: { query: Query }) { 17 | const [error, setError] = useState<{ reason: string } | null>(null); 18 | const [result, setResult] = useState(null); 19 | 20 | useEffect(() => { 21 | (async () => { 22 | const imports = props.query.imports 23 | ? props.query.imports.split(",") 24 | : undefined; 25 | try { 26 | const ret = await api.compile( 27 | `https://cdn.skypack.dev/${props.query.pkg}`, 28 | imports, 29 | ); 30 | if (!ret.error && ret.code.includes("[Package Error]")) { 31 | setError({ reason: ret.code }); 32 | } 33 | setResult(ret); 34 | } catch (err) { 35 | setError({ reason: "compile error" }); 36 | } 37 | })(); 38 | }, [props.query]); 39 | 40 | if (error) { 41 | return
42 | BundleError 43 |
 44 |         
 45 |           {error.reason}
 46 |         
 47 |       
48 |
; 49 | } 50 | if (!result) { 51 | return
bundling...
; 52 | } 53 | if (result.error) { 54 | return
CompileError: {result.reason}
; 55 | } 56 | return ( 57 |
58 |

59 | {bytesToSize(result.size)} - gzip: {bytesToSize(result.gzipSize)} 60 |

61 |
62 |
63 | Output 64 |
 72 |             
 73 |               {result.code}
 74 |             
 75 |           
76 |
77 |
78 |
79 | ); 80 | } 81 | 82 | function SearchForm(props: { pkg: string, imports: string, onChangePkg: (pkg: string) => void, onChangeImports: (imports: string) => void }) { 83 | return ( 84 |
85 |
90 |
91 | import {'{'} 92 |
93 |
101 | props.onChangeImports(e.target.value)} 107 | placeholder="a,b,c..." 108 | /> 109 |
110 |
111 | {'}'} 112 |   113 | from 114 |
115 |
122 | props.onChangePkg(e.target.value)} 128 | /> 129 |
130 |
131 | 132 |
133 |
134 |
135 | ); 136 | } 137 | 138 | function TopPage() { 139 | return ( 140 |
141 |

What's this

142 |

143 | This is a tool to check bundle size with treeshake. It downloads sources 144 | from cdn.skpack.dev{" "} 145 | and build with rollup and terser in your browser. 146 |

147 |

148 | Open to bundle:{" "} 149 | 150 | {`https://shakerphobia.netlify.com/?pkg=&imports=`} 151 | . 152 |

153 |

Examples

154 |

155 |

    156 | {[ 157 | { 158 | pkg: "preact", 159 | imports: ["render", "h"], 160 | }, 161 | { 162 | pkg: "react-dom@18.0.0", 163 | imports: ["hydrate"], 164 | }, 165 | { 166 | pkg: "@mizchi/mints", 167 | imports: ["transformSync"], 168 | }, 169 | ].map((t) => { 170 | const url = `${location.protocol}//${location.host}/?pkg=${t.pkg}${ 171 | t.imports ? `&imports=${t.imports.join(",")}` : "" 172 | }`; 173 | return ( 174 |
  • 175 | 176 | {url} 177 | 178 |
  • 179 | ); 180 | })} 181 |
182 |

183 |
184 | ); 185 | } 186 | 187 | function App() { 188 | const [error, setError] = useState<{ reason: string } | null>(null); 189 | const [isTop, setIsTop] = useState(false); 190 | const [query, setQuery] = useState(null); 191 | useEffect(() => { 192 | if (!location.search) { 193 | setIsTop(true); 194 | return; 195 | } 196 | const query: Query = location.search.slice(1).split("&").reduce( 197 | (acc, cur) => { 198 | const [key, val] = cur.split("="); 199 | return { ...acc, [decodeURIComponent(key)]: decodeURIComponent(val) }; 200 | }, 201 | {}, 202 | ); 203 | // console.log(query); 204 | 205 | if (query.pkg) { 206 | if (query.pkg && /[a-zA-Z@][a-zA-Z-_\d\/\@]+/.test(query.pkg)) { 207 | setQuery(query); 208 | const pkg = document.querySelector("[name=pkg]") as HTMLInputElement; 209 | if (pkg) { 210 | pkg.value = query.pkg; 211 | } 212 | const imports = document.querySelector("[name=imports]") as HTMLInputElement; 213 | if (imports) { 214 | imports.value = query.imports ?? ''; 215 | } 216 | } else { 217 | setError({ reason: "Invalid pkgName" }); 218 | } 219 | } else { 220 | setIsTop(true); 221 | } 222 | }, []); 223 | return ( 224 |
225 |
226 |

227 | 228 | Shakerphobia 229 | 230 |

231 |

232 | bundle size after treeshake  |  233 | GitHub 234 |  |  author: @mizchi 235 |

236 | setQuery({ ...query, pkg })} 240 | onChangeImports={(imports) => setQuery({ ...query, imports: imports.replace(/ /g, "") })} 241 | /> 242 |
243 |
244 |
245 |
246 | {query && } 247 |
248 |
249 | {error && ( 250 |
251 | {error.reason} 252 |
253 | )} 254 | {isTop && } 255 |
256 | ); 257 | } 258 | 259 | render(, document.getElementById("app")!); 260 | 261 | function bytesToSize(bytes: number, decimals = 2) { 262 | if (bytes === 0) return "0 Bytes"; 263 | 264 | const k = 1024; 265 | const dm = decimals < 0 ? 0 : decimals; 266 | const sizes = ["bytes", "kb", "MB", "GB"]; 267 | const i = Math.floor(Math.log(bytes) / Math.log(k)); 268 | return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i]; 269 | } 270 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@preact/preset-vite': ^2.0.0 5 | '@rollup/plugin-virtual': ^2.1.0 6 | '@types/node': ^17.0.22 7 | comlink: ^4.3.1 8 | path-browserify: ^1.0.1 9 | preact: ^10.5.13 10 | rollup: ^2.70.1 11 | terser: ^5.12.1 12 | typescript: ^4.3.2 13 | vite: ^2.6.4 14 | 15 | dependencies: 16 | comlink: 4.3.1 17 | path-browserify: 1.0.1 18 | preact: 10.6.6 19 | 20 | devDependencies: 21 | '@preact/preset-vite': 2.1.7_preact@10.6.6+vite@2.8.6 22 | '@rollup/plugin-virtual': 2.1.0_rollup@2.70.1 23 | '@types/node': 17.0.22 24 | rollup: 2.70.1 25 | terser: 5.12.1 26 | typescript: 4.6.2 27 | vite: 2.8.6 28 | 29 | packages: 30 | 31 | /@ampproject/remapping/2.1.2: 32 | resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==} 33 | engines: {node: '>=6.0.0'} 34 | dependencies: 35 | '@jridgewell/trace-mapping': 0.3.4 36 | dev: true 37 | 38 | /@babel/code-frame/7.16.7: 39 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 40 | engines: {node: '>=6.9.0'} 41 | dependencies: 42 | '@babel/highlight': 7.16.10 43 | dev: true 44 | 45 | /@babel/compat-data/7.17.7: 46 | resolution: {integrity: sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==} 47 | engines: {node: '>=6.9.0'} 48 | dev: true 49 | 50 | /@babel/core/7.17.8: 51 | resolution: {integrity: sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==} 52 | engines: {node: '>=6.9.0'} 53 | dependencies: 54 | '@ampproject/remapping': 2.1.2 55 | '@babel/code-frame': 7.16.7 56 | '@babel/generator': 7.17.7 57 | '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.8 58 | '@babel/helper-module-transforms': 7.17.7 59 | '@babel/helpers': 7.17.8 60 | '@babel/parser': 7.17.8 61 | '@babel/template': 7.16.7 62 | '@babel/traverse': 7.17.3 63 | '@babel/types': 7.17.0 64 | convert-source-map: 1.8.0 65 | debug: 4.3.4 66 | gensync: 1.0.0-beta.2 67 | json5: 2.2.1 68 | semver: 6.3.0 69 | transitivePeerDependencies: 70 | - supports-color 71 | dev: true 72 | 73 | /@babel/generator/7.17.7: 74 | resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} 75 | engines: {node: '>=6.9.0'} 76 | dependencies: 77 | '@babel/types': 7.17.0 78 | jsesc: 2.5.2 79 | source-map: 0.5.7 80 | dev: true 81 | 82 | /@babel/helper-annotate-as-pure/7.16.7: 83 | resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} 84 | engines: {node: '>=6.9.0'} 85 | dependencies: 86 | '@babel/types': 7.17.0 87 | dev: true 88 | 89 | /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.8: 90 | resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} 91 | engines: {node: '>=6.9.0'} 92 | peerDependencies: 93 | '@babel/core': ^7.0.0 94 | dependencies: 95 | '@babel/compat-data': 7.17.7 96 | '@babel/core': 7.17.8 97 | '@babel/helper-validator-option': 7.16.7 98 | browserslist: 4.20.2 99 | semver: 6.3.0 100 | dev: true 101 | 102 | /@babel/helper-environment-visitor/7.16.7: 103 | resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} 104 | engines: {node: '>=6.9.0'} 105 | dependencies: 106 | '@babel/types': 7.17.0 107 | dev: true 108 | 109 | /@babel/helper-function-name/7.16.7: 110 | resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} 111 | engines: {node: '>=6.9.0'} 112 | dependencies: 113 | '@babel/helper-get-function-arity': 7.16.7 114 | '@babel/template': 7.16.7 115 | '@babel/types': 7.17.0 116 | dev: true 117 | 118 | /@babel/helper-get-function-arity/7.16.7: 119 | resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} 120 | engines: {node: '>=6.9.0'} 121 | dependencies: 122 | '@babel/types': 7.17.0 123 | dev: true 124 | 125 | /@babel/helper-hoist-variables/7.16.7: 126 | resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} 127 | engines: {node: '>=6.9.0'} 128 | dependencies: 129 | '@babel/types': 7.17.0 130 | dev: true 131 | 132 | /@babel/helper-module-imports/7.16.7: 133 | resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} 134 | engines: {node: '>=6.9.0'} 135 | dependencies: 136 | '@babel/types': 7.17.0 137 | dev: true 138 | 139 | /@babel/helper-module-transforms/7.17.7: 140 | resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} 141 | engines: {node: '>=6.9.0'} 142 | dependencies: 143 | '@babel/helper-environment-visitor': 7.16.7 144 | '@babel/helper-module-imports': 7.16.7 145 | '@babel/helper-simple-access': 7.17.7 146 | '@babel/helper-split-export-declaration': 7.16.7 147 | '@babel/helper-validator-identifier': 7.16.7 148 | '@babel/template': 7.16.7 149 | '@babel/traverse': 7.17.3 150 | '@babel/types': 7.17.0 151 | transitivePeerDependencies: 152 | - supports-color 153 | dev: true 154 | 155 | /@babel/helper-plugin-utils/7.16.7: 156 | resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} 157 | engines: {node: '>=6.9.0'} 158 | dev: true 159 | 160 | /@babel/helper-simple-access/7.17.7: 161 | resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} 162 | engines: {node: '>=6.9.0'} 163 | dependencies: 164 | '@babel/types': 7.17.0 165 | dev: true 166 | 167 | /@babel/helper-split-export-declaration/7.16.7: 168 | resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} 169 | engines: {node: '>=6.9.0'} 170 | dependencies: 171 | '@babel/types': 7.17.0 172 | dev: true 173 | 174 | /@babel/helper-validator-identifier/7.16.7: 175 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 176 | engines: {node: '>=6.9.0'} 177 | dev: true 178 | 179 | /@babel/helper-validator-option/7.16.7: 180 | resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} 181 | engines: {node: '>=6.9.0'} 182 | dev: true 183 | 184 | /@babel/helpers/7.17.8: 185 | resolution: {integrity: sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==} 186 | engines: {node: '>=6.9.0'} 187 | dependencies: 188 | '@babel/template': 7.16.7 189 | '@babel/traverse': 7.17.3 190 | '@babel/types': 7.17.0 191 | transitivePeerDependencies: 192 | - supports-color 193 | dev: true 194 | 195 | /@babel/highlight/7.16.10: 196 | resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} 197 | engines: {node: '>=6.9.0'} 198 | dependencies: 199 | '@babel/helper-validator-identifier': 7.16.7 200 | chalk: 2.4.2 201 | js-tokens: 4.0.0 202 | dev: true 203 | 204 | /@babel/parser/7.17.8: 205 | resolution: {integrity: sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==} 206 | engines: {node: '>=6.0.0'} 207 | hasBin: true 208 | dev: true 209 | 210 | /@babel/plugin-syntax-jsx/7.16.7: 211 | resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} 212 | engines: {node: '>=6.9.0'} 213 | peerDependencies: 214 | '@babel/core': ^7.0.0-0 215 | dependencies: 216 | '@babel/helper-plugin-utils': 7.16.7 217 | dev: true 218 | 219 | /@babel/plugin-transform-react-jsx/7.17.3: 220 | resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} 221 | engines: {node: '>=6.9.0'} 222 | peerDependencies: 223 | '@babel/core': ^7.0.0-0 224 | dependencies: 225 | '@babel/helper-annotate-as-pure': 7.16.7 226 | '@babel/helper-module-imports': 7.16.7 227 | '@babel/helper-plugin-utils': 7.16.7 228 | '@babel/plugin-syntax-jsx': 7.16.7 229 | '@babel/types': 7.17.0 230 | dev: true 231 | 232 | /@babel/template/7.16.7: 233 | resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} 234 | engines: {node: '>=6.9.0'} 235 | dependencies: 236 | '@babel/code-frame': 7.16.7 237 | '@babel/parser': 7.17.8 238 | '@babel/types': 7.17.0 239 | dev: true 240 | 241 | /@babel/traverse/7.17.3: 242 | resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} 243 | engines: {node: '>=6.9.0'} 244 | dependencies: 245 | '@babel/code-frame': 7.16.7 246 | '@babel/generator': 7.17.7 247 | '@babel/helper-environment-visitor': 7.16.7 248 | '@babel/helper-function-name': 7.16.7 249 | '@babel/helper-hoist-variables': 7.16.7 250 | '@babel/helper-split-export-declaration': 7.16.7 251 | '@babel/parser': 7.17.8 252 | '@babel/types': 7.17.0 253 | debug: 4.3.4 254 | globals: 11.12.0 255 | transitivePeerDependencies: 256 | - supports-color 257 | dev: true 258 | 259 | /@babel/types/7.17.0: 260 | resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} 261 | engines: {node: '>=6.9.0'} 262 | dependencies: 263 | '@babel/helper-validator-identifier': 7.16.7 264 | to-fast-properties: 2.0.0 265 | dev: true 266 | 267 | /@jridgewell/resolve-uri/3.0.5: 268 | resolution: {integrity: sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==} 269 | engines: {node: '>=6.0.0'} 270 | dev: true 271 | 272 | /@jridgewell/sourcemap-codec/1.4.11: 273 | resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} 274 | dev: true 275 | 276 | /@jridgewell/trace-mapping/0.3.4: 277 | resolution: {integrity: sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==} 278 | dependencies: 279 | '@jridgewell/resolve-uri': 3.0.5 280 | '@jridgewell/sourcemap-codec': 1.4.11 281 | dev: true 282 | 283 | /@preact/preset-vite/2.1.7_preact@10.6.6+vite@2.8.6: 284 | resolution: {integrity: sha512-/Ii+aN1Jm8TK5YzDVrj5UOVRZ91F2Nik1P3FbmZyQ5VJAg1ZCkOBBkmLrz9YhiMbbGl+U35yaZNUDMcO8Xlp2g==} 285 | peerDependencies: 286 | '@babel/core': 7.x 287 | vite: 2.x 288 | dependencies: 289 | '@babel/plugin-transform-react-jsx': 7.17.3 290 | '@prefresh/vite': 2.2.8_preact@10.6.6+vite@2.8.6 291 | '@rollup/pluginutils': 4.2.0 292 | babel-plugin-transform-hook-names: 1.0.2 293 | debug: 4.3.4 294 | kolorist: 1.5.1 295 | resolve: 1.22.0 296 | vite: 2.8.6 297 | transitivePeerDependencies: 298 | - preact 299 | - supports-color 300 | dev: true 301 | 302 | /@prefresh/babel-plugin/0.4.3: 303 | resolution: {integrity: sha512-fYAWbU1WDSLn108kKY4eDaaeUcnszFqXjgaGKYXNZ5NLulpRTpsrY+Sbfo9q8LDpWrBpqIgzjrwNnvglWI1xNQ==} 304 | dev: true 305 | 306 | /@prefresh/core/1.3.4_preact@10.6.6: 307 | resolution: {integrity: sha512-s7iNsnyJ3lZEUrYIgmVIB/hKtp4U6mdD91a31Zg7Q8M49O0x2KThrbrMQYraoDDrs4STdFB8Zv6bceUguOoX1A==} 308 | peerDependencies: 309 | preact: ^10.0.0 310 | dependencies: 311 | preact: 10.6.6 312 | dev: true 313 | 314 | /@prefresh/utils/1.1.3: 315 | resolution: {integrity: sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A==} 316 | dev: true 317 | 318 | /@prefresh/vite/2.2.8_preact@10.6.6+vite@2.8.6: 319 | resolution: {integrity: sha512-yGGa+PKPYPTzMlxgQ8aBgxw9K69I8X4iQ0E6KOcIvls96WKqKLLOYZW9SUgCve446jpUXvc9udviPBZjCeZIIQ==} 320 | peerDependencies: 321 | preact: ^10.4.0 322 | vite: '>=2.0.0-beta.3' 323 | dependencies: 324 | '@babel/core': 7.17.8 325 | '@prefresh/babel-plugin': 0.4.3 326 | '@prefresh/core': 1.3.4_preact@10.6.6 327 | '@prefresh/utils': 1.1.3 328 | '@rollup/pluginutils': 4.2.0 329 | preact: 10.6.6 330 | vite: 2.8.6 331 | transitivePeerDependencies: 332 | - supports-color 333 | dev: true 334 | 335 | /@rollup/plugin-virtual/2.1.0_rollup@2.70.1: 336 | resolution: {integrity: sha512-CPPAtlKT53HFqC8jFHb/V5WErpU8Hrq2TyCR0A7kPQMlF2wNUf0o1xuAc+Qxj8NCZM0Z3Yvl+FbUXfJjVWqDwA==} 337 | engines: {node: '>=8.0.0'} 338 | peerDependencies: 339 | rollup: ^1.20.0||^2.0.0 340 | dependencies: 341 | rollup: 2.70.1 342 | dev: true 343 | 344 | /@rollup/pluginutils/4.2.0: 345 | resolution: {integrity: sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA==} 346 | engines: {node: '>= 8.0.0'} 347 | dependencies: 348 | estree-walker: 2.0.2 349 | picomatch: 2.3.1 350 | dev: true 351 | 352 | /@types/node/17.0.22: 353 | resolution: {integrity: sha512-8FwbVoG4fy+ykY86XCAclKZDORttqE5/s7dyWZKLXTdv3vRy5HozBEinG5IqhvPXXzIZEcTVbuHlQEI6iuwcmw==} 354 | dev: true 355 | 356 | /acorn/8.7.0: 357 | resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} 358 | engines: {node: '>=0.4.0'} 359 | hasBin: true 360 | dev: true 361 | 362 | /ansi-styles/3.2.1: 363 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 364 | engines: {node: '>=4'} 365 | dependencies: 366 | color-convert: 1.9.3 367 | dev: true 368 | 369 | /babel-plugin-transform-hook-names/1.0.2: 370 | resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} 371 | peerDependencies: 372 | '@babel/core': ^7.12.10 373 | dev: true 374 | 375 | /browserslist/4.20.2: 376 | resolution: {integrity: sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==} 377 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 378 | hasBin: true 379 | dependencies: 380 | caniuse-lite: 1.0.30001319 381 | electron-to-chromium: 1.4.90 382 | escalade: 3.1.1 383 | node-releases: 2.0.2 384 | picocolors: 1.0.0 385 | dev: true 386 | 387 | /buffer-from/1.1.2: 388 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 389 | dev: true 390 | 391 | /caniuse-lite/1.0.30001319: 392 | resolution: {integrity: sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw==} 393 | dev: true 394 | 395 | /chalk/2.4.2: 396 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 397 | engines: {node: '>=4'} 398 | dependencies: 399 | ansi-styles: 3.2.1 400 | escape-string-regexp: 1.0.5 401 | supports-color: 5.5.0 402 | dev: true 403 | 404 | /color-convert/1.9.3: 405 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 406 | dependencies: 407 | color-name: 1.1.3 408 | dev: true 409 | 410 | /color-name/1.1.3: 411 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 412 | dev: true 413 | 414 | /comlink/4.3.1: 415 | resolution: {integrity: sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==} 416 | dev: false 417 | 418 | /commander/2.20.3: 419 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 420 | dev: true 421 | 422 | /convert-source-map/1.8.0: 423 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 424 | dependencies: 425 | safe-buffer: 5.1.2 426 | dev: true 427 | 428 | /debug/4.3.4: 429 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 430 | engines: {node: '>=6.0'} 431 | peerDependencies: 432 | supports-color: '*' 433 | peerDependenciesMeta: 434 | supports-color: 435 | optional: true 436 | dependencies: 437 | ms: 2.1.2 438 | dev: true 439 | 440 | /electron-to-chromium/1.4.90: 441 | resolution: {integrity: sha512-ZwKgSA0mQMyEhz+NR0F8dRzkrCLeHLzLkjx/CWf16+zV85hQ6meXPQbKanvhnpkYb7b2uJNj+enQJ/N877ND4Q==} 442 | dev: true 443 | 444 | /esbuild-android-64/0.14.27: 445 | resolution: {integrity: sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==} 446 | engines: {node: '>=12'} 447 | cpu: [x64] 448 | os: [android] 449 | requiresBuild: true 450 | dev: true 451 | optional: true 452 | 453 | /esbuild-android-arm64/0.14.27: 454 | resolution: {integrity: sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==} 455 | engines: {node: '>=12'} 456 | cpu: [arm64] 457 | os: [android] 458 | requiresBuild: true 459 | dev: true 460 | optional: true 461 | 462 | /esbuild-darwin-64/0.14.27: 463 | resolution: {integrity: sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==} 464 | engines: {node: '>=12'} 465 | cpu: [x64] 466 | os: [darwin] 467 | requiresBuild: true 468 | dev: true 469 | optional: true 470 | 471 | /esbuild-darwin-arm64/0.14.27: 472 | resolution: {integrity: sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==} 473 | engines: {node: '>=12'} 474 | cpu: [arm64] 475 | os: [darwin] 476 | requiresBuild: true 477 | dev: true 478 | optional: true 479 | 480 | /esbuild-freebsd-64/0.14.27: 481 | resolution: {integrity: sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==} 482 | engines: {node: '>=12'} 483 | cpu: [x64] 484 | os: [freebsd] 485 | requiresBuild: true 486 | dev: true 487 | optional: true 488 | 489 | /esbuild-freebsd-arm64/0.14.27: 490 | resolution: {integrity: sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==} 491 | engines: {node: '>=12'} 492 | cpu: [arm64] 493 | os: [freebsd] 494 | requiresBuild: true 495 | dev: true 496 | optional: true 497 | 498 | /esbuild-linux-32/0.14.27: 499 | resolution: {integrity: sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==} 500 | engines: {node: '>=12'} 501 | cpu: [ia32] 502 | os: [linux] 503 | requiresBuild: true 504 | dev: true 505 | optional: true 506 | 507 | /esbuild-linux-64/0.14.27: 508 | resolution: {integrity: sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==} 509 | engines: {node: '>=12'} 510 | cpu: [x64] 511 | os: [linux] 512 | requiresBuild: true 513 | dev: true 514 | optional: true 515 | 516 | /esbuild-linux-arm/0.14.27: 517 | resolution: {integrity: sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==} 518 | engines: {node: '>=12'} 519 | cpu: [arm] 520 | os: [linux] 521 | requiresBuild: true 522 | dev: true 523 | optional: true 524 | 525 | /esbuild-linux-arm64/0.14.27: 526 | resolution: {integrity: sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==} 527 | engines: {node: '>=12'} 528 | cpu: [arm64] 529 | os: [linux] 530 | requiresBuild: true 531 | dev: true 532 | optional: true 533 | 534 | /esbuild-linux-mips64le/0.14.27: 535 | resolution: {integrity: sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==} 536 | engines: {node: '>=12'} 537 | cpu: [mips64el] 538 | os: [linux] 539 | requiresBuild: true 540 | dev: true 541 | optional: true 542 | 543 | /esbuild-linux-ppc64le/0.14.27: 544 | resolution: {integrity: sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==} 545 | engines: {node: '>=12'} 546 | cpu: [ppc64] 547 | os: [linux] 548 | requiresBuild: true 549 | dev: true 550 | optional: true 551 | 552 | /esbuild-linux-riscv64/0.14.27: 553 | resolution: {integrity: sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==} 554 | engines: {node: '>=12'} 555 | cpu: [riscv64] 556 | os: [linux] 557 | requiresBuild: true 558 | dev: true 559 | optional: true 560 | 561 | /esbuild-linux-s390x/0.14.27: 562 | resolution: {integrity: sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==} 563 | engines: {node: '>=12'} 564 | cpu: [s390x] 565 | os: [linux] 566 | requiresBuild: true 567 | dev: true 568 | optional: true 569 | 570 | /esbuild-netbsd-64/0.14.27: 571 | resolution: {integrity: sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==} 572 | engines: {node: '>=12'} 573 | cpu: [x64] 574 | os: [netbsd] 575 | requiresBuild: true 576 | dev: true 577 | optional: true 578 | 579 | /esbuild-openbsd-64/0.14.27: 580 | resolution: {integrity: sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==} 581 | engines: {node: '>=12'} 582 | cpu: [x64] 583 | os: [openbsd] 584 | requiresBuild: true 585 | dev: true 586 | optional: true 587 | 588 | /esbuild-sunos-64/0.14.27: 589 | resolution: {integrity: sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==} 590 | engines: {node: '>=12'} 591 | cpu: [x64] 592 | os: [sunos] 593 | requiresBuild: true 594 | dev: true 595 | optional: true 596 | 597 | /esbuild-windows-32/0.14.27: 598 | resolution: {integrity: sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==} 599 | engines: {node: '>=12'} 600 | cpu: [ia32] 601 | os: [win32] 602 | requiresBuild: true 603 | dev: true 604 | optional: true 605 | 606 | /esbuild-windows-64/0.14.27: 607 | resolution: {integrity: sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==} 608 | engines: {node: '>=12'} 609 | cpu: [x64] 610 | os: [win32] 611 | requiresBuild: true 612 | dev: true 613 | optional: true 614 | 615 | /esbuild-windows-arm64/0.14.27: 616 | resolution: {integrity: sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==} 617 | engines: {node: '>=12'} 618 | cpu: [arm64] 619 | os: [win32] 620 | requiresBuild: true 621 | dev: true 622 | optional: true 623 | 624 | /esbuild/0.14.27: 625 | resolution: {integrity: sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==} 626 | engines: {node: '>=12'} 627 | hasBin: true 628 | requiresBuild: true 629 | optionalDependencies: 630 | esbuild-android-64: 0.14.27 631 | esbuild-android-arm64: 0.14.27 632 | esbuild-darwin-64: 0.14.27 633 | esbuild-darwin-arm64: 0.14.27 634 | esbuild-freebsd-64: 0.14.27 635 | esbuild-freebsd-arm64: 0.14.27 636 | esbuild-linux-32: 0.14.27 637 | esbuild-linux-64: 0.14.27 638 | esbuild-linux-arm: 0.14.27 639 | esbuild-linux-arm64: 0.14.27 640 | esbuild-linux-mips64le: 0.14.27 641 | esbuild-linux-ppc64le: 0.14.27 642 | esbuild-linux-riscv64: 0.14.27 643 | esbuild-linux-s390x: 0.14.27 644 | esbuild-netbsd-64: 0.14.27 645 | esbuild-openbsd-64: 0.14.27 646 | esbuild-sunos-64: 0.14.27 647 | esbuild-windows-32: 0.14.27 648 | esbuild-windows-64: 0.14.27 649 | esbuild-windows-arm64: 0.14.27 650 | dev: true 651 | 652 | /escalade/3.1.1: 653 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 654 | engines: {node: '>=6'} 655 | dev: true 656 | 657 | /escape-string-regexp/1.0.5: 658 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 659 | engines: {node: '>=0.8.0'} 660 | dev: true 661 | 662 | /estree-walker/2.0.2: 663 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 664 | dev: true 665 | 666 | /fsevents/2.3.2: 667 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 668 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 669 | os: [darwin] 670 | requiresBuild: true 671 | dev: true 672 | optional: true 673 | 674 | /function-bind/1.1.1: 675 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 676 | dev: true 677 | 678 | /gensync/1.0.0-beta.2: 679 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 680 | engines: {node: '>=6.9.0'} 681 | dev: true 682 | 683 | /globals/11.12.0: 684 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 685 | engines: {node: '>=4'} 686 | dev: true 687 | 688 | /has-flag/3.0.0: 689 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 690 | engines: {node: '>=4'} 691 | dev: true 692 | 693 | /has/1.0.3: 694 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 695 | engines: {node: '>= 0.4.0'} 696 | dependencies: 697 | function-bind: 1.1.1 698 | dev: true 699 | 700 | /is-core-module/2.8.1: 701 | resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} 702 | dependencies: 703 | has: 1.0.3 704 | dev: true 705 | 706 | /js-tokens/4.0.0: 707 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 708 | dev: true 709 | 710 | /jsesc/2.5.2: 711 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 712 | engines: {node: '>=4'} 713 | hasBin: true 714 | dev: true 715 | 716 | /json5/2.2.1: 717 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} 718 | engines: {node: '>=6'} 719 | hasBin: true 720 | dev: true 721 | 722 | /kolorist/1.5.1: 723 | resolution: {integrity: sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==} 724 | dev: true 725 | 726 | /ms/2.1.2: 727 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 728 | dev: true 729 | 730 | /nanoid/3.3.1: 731 | resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} 732 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 733 | hasBin: true 734 | dev: true 735 | 736 | /node-releases/2.0.2: 737 | resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} 738 | dev: true 739 | 740 | /path-browserify/1.0.1: 741 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 742 | dev: false 743 | 744 | /path-parse/1.0.7: 745 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 746 | dev: true 747 | 748 | /picocolors/1.0.0: 749 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 750 | dev: true 751 | 752 | /picomatch/2.3.1: 753 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 754 | engines: {node: '>=8.6'} 755 | dev: true 756 | 757 | /postcss/8.4.12: 758 | resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} 759 | engines: {node: ^10 || ^12 || >=14} 760 | dependencies: 761 | nanoid: 3.3.1 762 | picocolors: 1.0.0 763 | source-map-js: 1.0.2 764 | dev: true 765 | 766 | /preact/10.6.6: 767 | resolution: {integrity: sha512-dgxpTFV2vs4vizwKohYKkk7g7rmp1wOOcfd4Tz3IB3Wi+ivZzsn/SpeKJhRENSE+n8sUfsAl4S3HiCVT923ABw==} 768 | dev: false 769 | 770 | /resolve/1.22.0: 771 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 772 | hasBin: true 773 | dependencies: 774 | is-core-module: 2.8.1 775 | path-parse: 1.0.7 776 | supports-preserve-symlinks-flag: 1.0.0 777 | dev: true 778 | 779 | /rollup/2.70.1: 780 | resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==} 781 | engines: {node: '>=10.0.0'} 782 | hasBin: true 783 | optionalDependencies: 784 | fsevents: 2.3.2 785 | dev: true 786 | 787 | /safe-buffer/5.1.2: 788 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 789 | dev: true 790 | 791 | /semver/6.3.0: 792 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 793 | hasBin: true 794 | dev: true 795 | 796 | /source-map-js/1.0.2: 797 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 798 | engines: {node: '>=0.10.0'} 799 | dev: true 800 | 801 | /source-map-support/0.5.21: 802 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 803 | dependencies: 804 | buffer-from: 1.1.2 805 | source-map: 0.6.1 806 | dev: true 807 | 808 | /source-map/0.5.7: 809 | resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} 810 | engines: {node: '>=0.10.0'} 811 | dev: true 812 | 813 | /source-map/0.6.1: 814 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 815 | engines: {node: '>=0.10.0'} 816 | dev: true 817 | 818 | /source-map/0.7.3: 819 | resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} 820 | engines: {node: '>= 8'} 821 | dev: true 822 | 823 | /supports-color/5.5.0: 824 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 825 | engines: {node: '>=4'} 826 | dependencies: 827 | has-flag: 3.0.0 828 | dev: true 829 | 830 | /supports-preserve-symlinks-flag/1.0.0: 831 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 832 | engines: {node: '>= 0.4'} 833 | dev: true 834 | 835 | /terser/5.12.1: 836 | resolution: {integrity: sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==} 837 | engines: {node: '>=10'} 838 | hasBin: true 839 | dependencies: 840 | acorn: 8.7.0 841 | commander: 2.20.3 842 | source-map: 0.7.3 843 | source-map-support: 0.5.21 844 | dev: true 845 | 846 | /to-fast-properties/2.0.0: 847 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} 848 | engines: {node: '>=4'} 849 | dev: true 850 | 851 | /typescript/4.6.2: 852 | resolution: {integrity: sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==} 853 | engines: {node: '>=4.2.0'} 854 | hasBin: true 855 | dev: true 856 | 857 | /vite/2.8.6: 858 | resolution: {integrity: sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug==} 859 | engines: {node: '>=12.2.0'} 860 | hasBin: true 861 | peerDependencies: 862 | less: '*' 863 | sass: '*' 864 | stylus: '*' 865 | peerDependenciesMeta: 866 | less: 867 | optional: true 868 | sass: 869 | optional: true 870 | stylus: 871 | optional: true 872 | dependencies: 873 | esbuild: 0.14.27 874 | postcss: 8.4.12 875 | resolve: 1.22.0 876 | rollup: 2.70.1 877 | optionalDependencies: 878 | fsevents: 2.3.2 879 | dev: true 880 | --------------------------------------------------------------------------------