├── src
├── vite-env.d.ts
├── pin.ts
├── store.ts
├── typescript.svg
├── utils.ts
├── results.ts
├── editor.ts
├── compressors.ts
├── themeToggle.ts
├── main.ts
├── options.ts
└── style.css
├── public
├── og.png
├── pin.svg
└── zip.svg
├── .prettierrc
├── vite.config.ts
├── .gitignore
├── tsconfig.json
├── package.json
├── README.md
├── index.html
└── pnpm-lock.yaml
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/public/og.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arrow-js/min-gzip/HEAD/public/og.png
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 2,
3 | "useTabs": false,
4 | "semi": false,
5 | "singleQuote": true
6 | }
7 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import topLevelAwait from 'vite-plugin-top-level-await'
3 |
4 | export default defineConfig({
5 | optimizeDeps: {
6 | exclude: ['brotli-wasm', 'brotli-wasm/pkg.bundler/brotli_wasm_bg.wasm'],
7 | },
8 | plugins: [topLevelAwait()],
9 | })
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/public/pin.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "useDefineForClassFields": true,
5 | "module": "ESNext",
6 | "lib": ["ESNext", "DOM"],
7 | "moduleResolution": "Node",
8 | "strict": true,
9 | "resolveJsonModule": true,
10 | "isolatedModules": true,
11 | "esModuleInterop": true,
12 | "noEmit": true,
13 | "noUnusedLocals": true,
14 | "noUnusedParameters": true,
15 | "noImplicitReturns": true,
16 | "skipLibCheck": true
17 | },
18 | "include": ["src"]
19 | }
20 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "min-gzip",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "tsc && vite build",
9 | "preview": "vite preview"
10 | },
11 | "devDependencies": {
12 | "typescript": "^4.9.3",
13 | "vite": "^4.2.0",
14 | "vite-plugin-top-level-await": "^1.3.0"
15 | },
16 | "dependencies": {
17 | "@arrow-js/core": "^1.0.0-alpha.9",
18 | "@types/pako": "^2.0.0",
19 | "brotli-wasm": "^1.3.1",
20 | "install": "^0.13.0",
21 | "monaco-editor": "^0.36.1",
22 | "pako": "^2.1.0",
23 | "sucrase": "^3.31.0",
24 | "terser": "^5.16.8"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/pin.ts:
--------------------------------------------------------------------------------
1 | import store from './store'
2 | import { html } from '@arrow-js/core'
3 |
4 | export default function pin() {
5 | return html`
6 |
23 | `
24 | }
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # min-gzip.com
2 |
3 | This is a simple web app that allows you to copy and paste Typescript or JavaScript and see the size of the file after it has been minified + gzipped/brotlied. Although the code needs to be valid in order to be minified, the Typescript typings are automatically striped — so you can count on the resulting calculated sizes to be accurate.
4 |
5 | This is particularly helpful when you are trying to optimize the size of your JavaScript bundle and need to understand which implementation techniques are the most size efficient when sent "over the wire".
6 |
7 | 👉 [min-gzip.com](https://min-gzip.com)
8 |
9 | ## How to use
10 |
11 | 1. Copy and paste your code into the text area.
12 | 2. Check the min/gzip size in the header.
13 |
14 | ## Things to know
15 |
16 | Gzip and Brotli gain in their compression efficiency the larger the artifact so often it is helpful to copy and paste your entire file and then make adjustments to see the impact on total size.
17 |
--------------------------------------------------------------------------------
/src/store.ts:
--------------------------------------------------------------------------------
1 | import { reactive, watch } from '@arrow-js/core'
2 |
3 | const store = reactive({
4 | code: `/**
5 | * Enter some JavaScript or TypeScript code into the editor to see how it
6 | * compresses with gzip, brotli, and minification.
7 | *
8 | * Typescript typings are automatically removed before minification allowing
9 | * for accurate compression results.
10 | */
11 | `,
12 | gzip: 0,
13 | brotli: 0,
14 | min: 0,
15 | pin: false,
16 | pinnedResults: {
17 | gzip: 0,
18 | brotli: 0,
19 | min: 0,
20 | },
21 | useGzip: true,
22 | useBrotli: true,
23 | useMinify: true,
24 | theme:
25 | localStorage.getItem('theme') ||
26 | (window.matchMedia('(prefers-color-scheme: dark)').matches
27 | ? 'dark'
28 | : 'light'),
29 | })
30 |
31 | watch(
32 | () => store.pin,
33 | () => {
34 | if (store.pin) {
35 | Object.assign(store.pinnedResults, {
36 | gzip: store.gzip,
37 | brotli: store.brotli,
38 | min: store.min,
39 | })
40 | }
41 | }
42 | )
43 |
44 | export default store
45 |
--------------------------------------------------------------------------------
/public/zip.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/typescript.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import brotliPromise from 'brotli-wasm'
2 |
3 | export function formatBytes(bytes: number, decimals = 2) {
4 | if (!+bytes) return '0 b'
5 |
6 | const k = 1024
7 | const dm = decimals < 0 ? 0 : decimals
8 | const sizes = ['b', 'kb', 'mb']
9 |
10 | const i = Math.floor(Math.log(bytes) / Math.log(k))
11 |
12 | return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`
13 | }
14 |
15 | export async function compressUrlCode(param: string, code: string) {
16 | if (!code) {
17 | const url = new URL(window.location.href)
18 | url.searchParams.delete(param)
19 | history.replaceState(null, '', url.toString())
20 | return
21 | }
22 | const brotli = await brotliPromise
23 | const textEncoder = new TextEncoder()
24 | const compressed = brotli.compress(textEncoder.encode(code))
25 | const url = new URL(window.location.href)
26 | url.searchParams.set(param, compressed.join('.'))
27 | history.replaceState(null, '', url.toString())
28 | }
29 |
30 | export async function decompressUrlCode(param: string) {
31 | const brotli = await brotliPromise
32 | const textDecoder = new TextDecoder()
33 | const compressedString = new URLSearchParams(window.location.search).get(
34 | param
35 | )
36 | if (!compressedString) return ''
37 | const compressed = Uint8Array.from(
38 | compressedString.split('.').map((n) => Number(n))
39 | )
40 | try {
41 | const decompressed = brotli.decompress(compressed)
42 | const code = textDecoder.decode(decompressed)
43 | return code
44 | } catch (error) {
45 | return ''
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | min-gzip | Quickly check how your code compresses with gzip, brotli, and
9 | minification.
10 |
11 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
36 |
37 |
38 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/src/results.ts:
--------------------------------------------------------------------------------
1 | import store from './store'
2 | import { formatBytes } from './utils'
3 | import { html } from '@arrow-js/core'
4 |
5 | export default function () {
6 | return html`
7 |
8 | ${() =>
9 | store.useMinify &&
10 | html`
11 | -
20 | min: ${() => formatBytes(store.min)}
21 |
22 | `}
23 | ${() =>
24 | store.useGzip &&
25 | html`
26 | -
35 | ${() => (store.useMinify ? 'min-gzip' : 'gzip')}:
36 | ${() => formatBytes(store.gzip)}
37 |
38 | `}
39 | ${() =>
40 | store.useBrotli &&
41 | html`
42 | -
51 | ${() => (store.useMinify ? 'min-brotli' : 'brotli')}:
52 | ${() => formatBytes(store.brotli)}
53 |
54 | `}
55 |
56 | `
57 | }
58 |
--------------------------------------------------------------------------------
/src/editor.ts:
--------------------------------------------------------------------------------
1 | import { html, nextTick } from '@arrow-js/core'
2 | import store from './store'
3 | import { compressUrlCode, decompressUrlCode } from './utils'
4 | import * as monaco from 'monaco-editor'
5 | import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'
6 | import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'
7 | import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'
8 | import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'
9 | import * as editorApi from 'monaco-editor/esm/vs/editor/editor.api'
10 | // @ts-ignore
11 | self.MonacoEnvironment = {
12 | getWorker(_: any, label: string) {
13 | if (label === 'json') {
14 | return new jsonWorker()
15 | }
16 | if (label === 'html' || label === 'handlebars' || label === 'razor') {
17 | return new htmlWorker()
18 | }
19 | if (label === 'typescript' || label === 'javascript') {
20 | return new tsWorker()
21 | }
22 | return new editorWorker()
23 | },
24 | }
25 |
26 | monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true)
27 |
28 | export default async function editor() {
29 | const el = html``
30 | const code = await decompressUrlCode('editor')
31 | if (code) store.code = code
32 | let editorUpdateDebounce = 0
33 |
34 | nextTick(async () => {
35 | await new Promise((r) => setTimeout(r))
36 | const editor = editorApi.editor.create(document.getElementById('editor')!, {
37 | language: 'typescript',
38 | value: store.code,
39 | automaticLayout: true,
40 | theme: store.theme === 'dark' ? 'vs-dark' : 'vs',
41 | })
42 | editor.getModel()?.onDidChangeContent(() => {
43 | clearTimeout(editorUpdateDebounce)
44 | store.code = editor.getModel()?.getLinesContent().join('\n') ?? ''
45 |
46 | editorUpdateDebounce = setTimeout(() => {
47 | compressUrlCode('editor', store.code)
48 | }, 1000)
49 | })
50 |
51 | store.$on('theme', () => {
52 | editor.updateOptions({ theme: store.theme === 'dark' ? 'vs-dark' : 'vs' })
53 | })
54 | })
55 |
56 | return el
57 | }
58 |
--------------------------------------------------------------------------------
/src/compressors.ts:
--------------------------------------------------------------------------------
1 | import store from './store'
2 | import { watch } from '@arrow-js/core'
3 | import { minify } from 'terser'
4 | import { transform } from 'sucrase'
5 | import { gzip } from 'pako'
6 | import brotliInit from 'brotli-wasm'
7 |
8 | let nonce: number = 0
9 | watch(
10 | async function compress(): Promise<
11 | [
12 | results: {
13 | min: number
14 | gzip: number
15 | brotli: number
16 | },
17 | nonce: number
18 | ]
19 | > {
20 | const results = { min: 0, gzip: 0, brotli: 0 }
21 | let code = store.code
22 | const localNonce = ++nonce
23 | try {
24 | code = transform(code, { transforms: ['typescript'] }).code
25 | } catch (error) {
26 | // squelch
27 | }
28 | const promises: Promise[] = []
29 | if (store.useMinify) {
30 | promises.push(
31 | minify(code)
32 | .then((result) => {
33 | if (typeof result.code === 'string') {
34 | code = result.code
35 | results.min = code.length
36 | }
37 | })
38 | .catch(() => {
39 | // squelch
40 | })
41 | )
42 | }
43 |
44 | if (store.useGzip) {
45 | function runGzip() {
46 | const compressed = gzip(code)
47 | if (compressed) {
48 | results.gzip = compressed.length
49 | }
50 | }
51 | if (promises.length === 1) {
52 | promises.push(promises[0].then(runGzip))
53 | } else {
54 | runGzip()
55 | }
56 | }
57 |
58 | if (store.useBrotli) {
59 | promises.push(
60 | Promise.all(promises)
61 | .then(() => brotliInit)
62 | .then((brotli) => {
63 | const textEncoder = new TextEncoder()
64 | const compressed = brotli.compress(textEncoder.encode(code))
65 | results.brotli = compressed.length
66 | })
67 | )
68 | }
69 | return Promise.all(promises).then(() => [results, localNonce])
70 | },
71 | async (willBeResults) => {
72 | const [results, localNonce] = await willBeResults
73 | if (localNonce === nonce) {
74 | Object.assign(store, results)
75 | }
76 | }
77 | )
78 |
--------------------------------------------------------------------------------
/src/themeToggle.ts:
--------------------------------------------------------------------------------
1 | import store from './store'
2 | import { html } from '@arrow-js/core'
3 |
4 | export default function () {
5 | // get theme from locolStorage or use system theme
6 | document.documentElement.setAttribute('data-theme', store.theme)
7 |
8 | store.$on('theme', () => {
9 | document.documentElement.setAttribute('data-theme', store.theme)
10 | localStorage.setItem('theme', store.theme)
11 | })
12 |
13 | return html`
14 |
18 | (store.theme = store.theme === 'light' ? 'dark' : 'light')}"
19 | >
20 | ${() => {
21 | if (store.theme === 'light') {
22 | return html`
23 |
33 | `
34 | } else {
35 | return html`
36 |
46 | `
47 | }
48 | }}
49 |
50 | `
51 | }
52 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import './style.css'
2 | import { html } from '@arrow-js/core'
3 | import editor from './editor'
4 | import results from './results'
5 | import themeToggle from './themeToggle'
6 | import './compressors'
7 | import pin from './pin'
8 | import options from './options'
9 |
10 | // add gitub star button after component loads
11 | setTimeout(() => {
12 | const script = document.createElement('script')
13 | script.src = 'https://buttons.github.io/buttons.js'
14 | document.head.appendChild(script)
15 | }, 100)
16 |
17 | html`
18 |
19 |
20 |
26 | min-gzip
27 |
28 |
by ArrowJS
29 |
30 |
40 |
41 |
42 |
52 | ${await editor()}
53 |
54 |
55 |
59 | `(document.getElementById('app')!)
60 |
--------------------------------------------------------------------------------
/src/options.ts:
--------------------------------------------------------------------------------
1 | import store from './store'
2 | import { html, reactive, watch } from '@arrow-js/core'
3 |
4 | export default function options() {
5 | const data = reactive({
6 | showOptions: false,
7 | })
8 |
9 | const clickAway = (e: MouseEvent) => {
10 | if (e.target instanceof HTMLElement && !e.target.closest('.option-list')) {
11 | data.showOptions = false
12 | }
13 | }
14 |
15 | watch(() => {
16 | if (data.showOptions) {
17 | document.addEventListener('click', clickAway)
18 | } else {
19 | document.removeEventListener('click', clickAway)
20 | }
21 | })
22 |
23 | const setOption = (option: string) => (e: InputEvent) => {
24 | store[option] = (e.target as HTMLInputElement).checked
25 | }
26 |
27 | return html`
28 |
29 |
55 |
87 |
88 | `
89 | }
90 |
--------------------------------------------------------------------------------
/src/style.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --text: #0b1b50;
3 | --link: #e19a00;
4 | --editor-bg: #fff;
5 | --border: rgba(0, 0, 0, 0.1);
6 | --bg-transparent: rgba(0, 0, 0, 0.05);
7 | --header-height: 2em;
8 | --inset: 2em;
9 | --ui-color: #0275ff;
10 | }
11 |
12 | @media (min-width: 45em) {
13 | :root {
14 | --inset: 4em;
15 | }
16 | }
17 |
18 | @media (min-width: 55em) {
19 | :root {
20 | --inset: 6em;
21 | }
22 | }
23 |
24 | html[data-theme='dark'] {
25 | --text: #e8eaee;
26 | --link: #ffb000;
27 | --editor-bg: #242426;
28 | --border: rgba(255, 255, 255, 0.1);
29 | --bg-transparent: rgba(255, 255, 255, 0.05);
30 | }
31 |
32 | html,
33 | body {
34 | font-family: sans-serif;
35 | margin: 0;
36 | padding: 0;
37 | height: 100%;
38 | background: linear-gradient(to right, #f5fafc, #e9f9ff, #d8f2fc);
39 | }
40 |
41 | html[data-theme='dark'],
42 | html[data-theme='dark'] body {
43 | background: linear-gradient(to right, #0f2027, #203a43, #2c5364);
44 | }
45 |
46 | #app {
47 | min-height: 100%;
48 | display: flex;
49 | flex-direction: column;
50 | align-items: center;
51 | }
52 |
53 | .branding {
54 | width: calc(100% - var(--inset));
55 | color: var(--text);
56 | display: flex;
57 | align-items: flex-end;
58 | padding: 1em 0;
59 | }
60 |
61 | .branding h1 {
62 | margin: 0;
63 | display: flex;
64 | white-space: nowrap;
65 | }
66 | .branding h1 svg {
67 | width: 0.75em;
68 | margin-right: 0.25em;
69 | }
70 | .branding a {
71 | margin-left: 0.5em;
72 | font-size: 0.75em;
73 | margin-bottom: 0.33em;
74 | color: var(--link);
75 | }
76 | .branding .github-star {
77 | margin-left: auto;
78 | }
79 |
80 | header {
81 | height: var(--header-height);
82 | color: var(--text);
83 | border-bottom: rgba(0, 0, 0, 0.1) 1px solid;
84 | display: flex;
85 | align-items: center;
86 | -ms-overflow-style: none;
87 | scrollbar-width: none;
88 | }
89 |
90 | header::-webkit-scrollbar {
91 | display: none;
92 | }
93 |
94 | .header-container {
95 | display: flex;
96 | font-size: 0.875em;
97 | justify-content: flex-end;
98 | align-items: center;
99 | width: 100%;
100 | padding: 0 .5em;
101 | }
102 |
103 | @media (min-width: 30em) {
104 | .header-container {
105 | padding: 0 1em;
106 | }
107 | }
108 |
109 | main {
110 | height: calc(100% - var(--header-height));
111 | display: flex;
112 | align-items: center;
113 | justify-content: center;
114 | border-radius: 0 0 0.75em 0.75em;
115 | overflow: hidden;
116 | }
117 |
118 | footer {
119 | padding: 1em;
120 | color: var(--text);
121 | font-size: 0.8em;
122 | opacity: 0.75;
123 | }
124 | footer:hover {
125 | opacity: 1;
126 | }
127 | footer a {
128 | color: var(--link);
129 | }
130 |
131 | .container {
132 | width: calc(100% - var(--inset));
133 | height: calc(100vh - (6em + var(--header-height)));
134 | margin: 0 auto;
135 | background-color: var(--editor-bg);
136 | border: var(--border) 1px solid;
137 | border-radius: 0.75em;
138 | box-shadow: rgba(0, 0, 0, 0.1) 0px 10px 15px -3px,
139 | rgba(0, 0, 0, 0.05) 0px 4px 6px -2px;
140 | }
141 |
142 | .os-controls {
143 | display: none;
144 | align-items: center;
145 | justify-content: space-between;
146 | padding: 0.5em 1em;
147 | margin-left: -1em;
148 | }
149 |
150 | @media (min-width: 51em) {
151 | .os-controls {
152 | display: flex;
153 | }
154 | }
155 |
156 | .os-controls span {
157 | width: 0.75em;
158 | height: 0.75em;
159 | margin-right: 0.5em;
160 | background: rgba(0, 0, 0, 0.1);
161 | border: rgba(0, 0, 0, 0.1) 1px solid;
162 | border-radius: 50%;
163 | }
164 | .os-controls span:first-child {
165 | background: #ff5f56;
166 | }
167 | .os-controls span:nth-child(2) {
168 | background: #ffbd2e;
169 | }
170 | .os-controls span:last-child {
171 | background: #27c93f;
172 | }
173 |
174 | .options {
175 | display: flex;
176 | }
177 |
178 | .form-element {
179 | display: flex;
180 | align-items: center;
181 | user-select: none;
182 | }
183 |
184 | .form-element label {
185 | margin-right: 0.5em;
186 | margin-left: 0.15em;
187 | font-weight: 600;
188 | }
189 |
190 | @media (min-width: 41em) {
191 | .form-element:first-child label {
192 | border-right: var(--border) 1px solid;
193 | padding-right: 0.5em;
194 | }
195 |
196 | .form-element label {
197 | margin-right: 0.5em;
198 | margin-left: 0.15em;
199 | font-weight: 400;
200 | font-size: .875em;
201 | }
202 | }
203 |
204 | @media (min-width: 55em) {
205 | .form-element label {
206 | font-weight: 600;
207 | font-size: 1em;
208 | }
209 | }
210 |
211 | .theme-toggle {
212 | display: block;
213 | margin-left: 1em;
214 | cursor: pointer;
215 | }
216 | .theme-toggle svg {
217 | width: 1.1em;
218 | height: 1.1em;
219 | fill: var(--text);
220 | margin-top: 0.33em;
221 | }
222 |
223 | .editor {
224 | width: 100%;
225 | height: 100%;
226 | }
227 |
228 | .results {
229 | display: flex;
230 | list-style-type: none;
231 | margin-top: 0;
232 | margin-bottom: 0;
233 | padding-left: .5em;
234 | margin-left: auto;
235 | }
236 | .results li {
237 | margin-left: 1em;
238 | padding-right: 0.5em;
239 | background: var(--bg-transparent);
240 | display: flex;
241 | align-items: center;
242 | border-radius: 0.5em;
243 | border: var(--border) 1px solid;
244 | font-family: monospace;
245 | letter-spacing: -0.05em;
246 | white-space: nowrap;
247 | position: relative;
248 | font-size: 10px;
249 | }
250 |
251 | .results li[data-smaller] {
252 | background-color: rgba(0, 255, 0, .1);
253 | }
254 | .results li[data-larger] {
255 | background-color: rgba(255, 0, 0, .1);
256 | }
257 |
258 | .results li:first-child {
259 | margin-left: 0;
260 | }
261 | .results li span {
262 | padding: 0.25em 0.5em;
263 | margin-right: 0.5em;
264 | font-weight: 600;
265 | font-family: sans-serif;
266 | letter-spacing: 0.035em;
267 | background: var(--bg-transparent);
268 | border-right: var(--border) 1px solid;
269 | font-size: 10px;
270 | }
271 |
272 | @media (min-width: 36em) {
273 | .results li {
274 | font-size: 12px;
275 | }
276 | .results li span {
277 | font-size: 12px;
278 | }
279 | }
280 |
281 | .results li[data-pin]::before {
282 | content: attr(data-pin);
283 | display: block;
284 | position: absolute;
285 | padding: .25em .5em;
286 | border-radius: .5em;
287 | color: white;
288 | background-color: var(--ui-color);
289 | bottom: calc(100% + .5em);
290 | box-shadow: 0 0 0 1px var(--border);
291 | right: 0;
292 | }
293 | .results li[data-pin]::after {
294 | content: '';
295 | display: block;
296 | position: absolute;
297 | bottom: calc(100% - .3em);
298 | width: 0;
299 | height: 0;
300 | border: 0.5em solid transparent;
301 | border-top-color: var(--ui-color);
302 | right: .3em;
303 | }
304 | .button {
305 | appearance: none;
306 | border: 0;
307 | background: none;
308 | padding: 0;
309 | }
310 | .pin {
311 | width: 1.1em;
312 | display: flex;
313 | align-items: center;
314 | cursor: pointer;
315 | margin-left: 1em;
316 | color: var(--text);
317 | }
318 | .pin[data-active] {
319 | color: var(--ui-color);
320 | }
321 |
322 | .pin svg {
323 | width: 1.1em;
324 | cursor: pointer;
325 | position: relative;
326 | top: 1px;
327 | }
328 |
329 | .option-toggle {
330 | display: flex;
331 | cursor: pointer;
332 | align-items: center;
333 | color: var(--text);
334 | }
335 |
336 | .option-toggle span {
337 | margin-right: .25em;
338 | display: none;
339 | }
340 |
341 | .option-toggle .down-arrow {
342 | display: none;
343 | }
344 |
345 | @media (min-width: 30em) {
346 | .option-toggle span {
347 | display: inline;
348 | }
349 | .option-toggle .down-arrow {
350 | display: block;
351 | }
352 | .option-toggle .kebab {
353 | display: none;
354 | }
355 | }
356 |
357 |
358 | .option-toggle svg {
359 | width: 1.25em;
360 | position: relative;
361 | top: 1px;
362 | }
363 |
364 | @media (min-width: 41em) {
365 | .option-toggle {
366 | display: none;
367 | }
368 | }
369 |
370 | .options {
371 | position: relative;
372 | }
373 |
374 | .option-list {
375 | position: absolute;
376 | z-index: 10;
377 | top: calc(100% + 0.75em);
378 | left: 0;
379 | background-color: var(--editor-bg);
380 | border-radius: .25em;
381 | padding: 1em;
382 | box-shadow: 0 0 1.5em rgba(0, 0, 0, .2);
383 | margin: 0;
384 | display: none;
385 | }
386 |
387 |
388 | .option-list[data-show-options] {
389 | display: block;
390 | }
391 |
392 | .option-list li {
393 | margin-bottom: .5em;
394 | color: var(--text);
395 | }
396 | .option-list li:last-child {
397 | margin-bottom: 0;
398 | }
399 |
400 | @media (min-width: 41em) {
401 | .option-list {
402 | display: flex;
403 | background: transparent;
404 | position: static;
405 | padding: 0;
406 | box-shadow: none;
407 | }
408 |
409 | .option-list[data-show-options] {
410 | display: flex;
411 | }
412 |
413 | .option-list li {
414 | margin-right: .5em;
415 | margin-bottom: 0;
416 | }
417 | }
418 |
419 | @media (min-width: 55em) {
420 | .option-list li {
421 | margin-right: 1em;
422 | }
423 | }
424 |
425 | .option-list::before {
426 | content: '';
427 | display: block;
428 | position: absolute;
429 | width: 0;
430 | border: .5em solid transparent;
431 | border-bottom-color: var(--editor-bg);
432 | bottom: 100%;
433 | left: 1em
434 | }
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@arrow-js/core': ^1.0.0-alpha.9
5 | '@types/pako': ^2.0.0
6 | brotli-wasm: ^1.3.1
7 | install: ^0.13.0
8 | monaco-editor: ^0.36.1
9 | pako: ^2.1.0
10 | sucrase: ^3.31.0
11 | terser: ^5.16.8
12 | typescript: ^4.9.3
13 | vite: ^4.2.0
14 | vite-plugin-top-level-await: ^1.3.0
15 |
16 | dependencies:
17 | '@arrow-js/core': 1.0.0-alpha.9
18 | '@types/pako': 2.0.0
19 | brotli-wasm: 1.3.1
20 | install: 0.13.0
21 | monaco-editor: 0.36.1
22 | pako: 2.1.0
23 | sucrase: 3.31.0
24 | terser: 5.16.8
25 |
26 | devDependencies:
27 | typescript: 4.9.5
28 | vite: 4.2.1_terser@5.16.8
29 | vite-plugin-top-level-await: 1.3.0_vite@4.2.1
30 |
31 | packages:
32 |
33 | /@arrow-js/core/1.0.0-alpha.9:
34 | resolution: {integrity: sha512-Yf8UM15AJaUn/6MUxpVjQiSVZMDksvh66TAnaPx4YhaDlcrE0Nn5jx0nMJ4k0JPTpWNmCkF9ank3faJgY6nCVw==}
35 | engines: {node: '>=14.0.0'}
36 | dev: false
37 |
38 | /@esbuild/android-arm/0.17.14:
39 | resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==}
40 | engines: {node: '>=12'}
41 | cpu: [arm]
42 | os: [android]
43 | requiresBuild: true
44 | dev: true
45 | optional: true
46 |
47 | /@esbuild/android-arm64/0.17.14:
48 | resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==}
49 | engines: {node: '>=12'}
50 | cpu: [arm64]
51 | os: [android]
52 | requiresBuild: true
53 | dev: true
54 | optional: true
55 |
56 | /@esbuild/android-x64/0.17.14:
57 | resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==}
58 | engines: {node: '>=12'}
59 | cpu: [x64]
60 | os: [android]
61 | requiresBuild: true
62 | dev: true
63 | optional: true
64 |
65 | /@esbuild/darwin-arm64/0.17.14:
66 | resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==}
67 | engines: {node: '>=12'}
68 | cpu: [arm64]
69 | os: [darwin]
70 | requiresBuild: true
71 | dev: true
72 | optional: true
73 |
74 | /@esbuild/darwin-x64/0.17.14:
75 | resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==}
76 | engines: {node: '>=12'}
77 | cpu: [x64]
78 | os: [darwin]
79 | requiresBuild: true
80 | dev: true
81 | optional: true
82 |
83 | /@esbuild/freebsd-arm64/0.17.14:
84 | resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==}
85 | engines: {node: '>=12'}
86 | cpu: [arm64]
87 | os: [freebsd]
88 | requiresBuild: true
89 | dev: true
90 | optional: true
91 |
92 | /@esbuild/freebsd-x64/0.17.14:
93 | resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==}
94 | engines: {node: '>=12'}
95 | cpu: [x64]
96 | os: [freebsd]
97 | requiresBuild: true
98 | dev: true
99 | optional: true
100 |
101 | /@esbuild/linux-arm/0.17.14:
102 | resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==}
103 | engines: {node: '>=12'}
104 | cpu: [arm]
105 | os: [linux]
106 | requiresBuild: true
107 | dev: true
108 | optional: true
109 |
110 | /@esbuild/linux-arm64/0.17.14:
111 | resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==}
112 | engines: {node: '>=12'}
113 | cpu: [arm64]
114 | os: [linux]
115 | requiresBuild: true
116 | dev: true
117 | optional: true
118 |
119 | /@esbuild/linux-ia32/0.17.14:
120 | resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==}
121 | engines: {node: '>=12'}
122 | cpu: [ia32]
123 | os: [linux]
124 | requiresBuild: true
125 | dev: true
126 | optional: true
127 |
128 | /@esbuild/linux-loong64/0.17.14:
129 | resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==}
130 | engines: {node: '>=12'}
131 | cpu: [loong64]
132 | os: [linux]
133 | requiresBuild: true
134 | dev: true
135 | optional: true
136 |
137 | /@esbuild/linux-mips64el/0.17.14:
138 | resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==}
139 | engines: {node: '>=12'}
140 | cpu: [mips64el]
141 | os: [linux]
142 | requiresBuild: true
143 | dev: true
144 | optional: true
145 |
146 | /@esbuild/linux-ppc64/0.17.14:
147 | resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==}
148 | engines: {node: '>=12'}
149 | cpu: [ppc64]
150 | os: [linux]
151 | requiresBuild: true
152 | dev: true
153 | optional: true
154 |
155 | /@esbuild/linux-riscv64/0.17.14:
156 | resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==}
157 | engines: {node: '>=12'}
158 | cpu: [riscv64]
159 | os: [linux]
160 | requiresBuild: true
161 | dev: true
162 | optional: true
163 |
164 | /@esbuild/linux-s390x/0.17.14:
165 | resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==}
166 | engines: {node: '>=12'}
167 | cpu: [s390x]
168 | os: [linux]
169 | requiresBuild: true
170 | dev: true
171 | optional: true
172 |
173 | /@esbuild/linux-x64/0.17.14:
174 | resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==}
175 | engines: {node: '>=12'}
176 | cpu: [x64]
177 | os: [linux]
178 | requiresBuild: true
179 | dev: true
180 | optional: true
181 |
182 | /@esbuild/netbsd-x64/0.17.14:
183 | resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==}
184 | engines: {node: '>=12'}
185 | cpu: [x64]
186 | os: [netbsd]
187 | requiresBuild: true
188 | dev: true
189 | optional: true
190 |
191 | /@esbuild/openbsd-x64/0.17.14:
192 | resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==}
193 | engines: {node: '>=12'}
194 | cpu: [x64]
195 | os: [openbsd]
196 | requiresBuild: true
197 | dev: true
198 | optional: true
199 |
200 | /@esbuild/sunos-x64/0.17.14:
201 | resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==}
202 | engines: {node: '>=12'}
203 | cpu: [x64]
204 | os: [sunos]
205 | requiresBuild: true
206 | dev: true
207 | optional: true
208 |
209 | /@esbuild/win32-arm64/0.17.14:
210 | resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==}
211 | engines: {node: '>=12'}
212 | cpu: [arm64]
213 | os: [win32]
214 | requiresBuild: true
215 | dev: true
216 | optional: true
217 |
218 | /@esbuild/win32-ia32/0.17.14:
219 | resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==}
220 | engines: {node: '>=12'}
221 | cpu: [ia32]
222 | os: [win32]
223 | requiresBuild: true
224 | dev: true
225 | optional: true
226 |
227 | /@esbuild/win32-x64/0.17.14:
228 | resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==}
229 | engines: {node: '>=12'}
230 | cpu: [x64]
231 | os: [win32]
232 | requiresBuild: true
233 | dev: true
234 | optional: true
235 |
236 | /@jridgewell/gen-mapping/0.3.2:
237 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
238 | engines: {node: '>=6.0.0'}
239 | dependencies:
240 | '@jridgewell/set-array': 1.1.2
241 | '@jridgewell/sourcemap-codec': 1.4.14
242 | '@jridgewell/trace-mapping': 0.3.17
243 |
244 | /@jridgewell/resolve-uri/3.1.0:
245 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
246 | engines: {node: '>=6.0.0'}
247 |
248 | /@jridgewell/set-array/1.1.2:
249 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
250 | engines: {node: '>=6.0.0'}
251 |
252 | /@jridgewell/source-map/0.3.2:
253 | resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==}
254 | dependencies:
255 | '@jridgewell/gen-mapping': 0.3.2
256 | '@jridgewell/trace-mapping': 0.3.17
257 |
258 | /@jridgewell/sourcemap-codec/1.4.14:
259 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
260 |
261 | /@jridgewell/trace-mapping/0.3.17:
262 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
263 | dependencies:
264 | '@jridgewell/resolve-uri': 3.1.0
265 | '@jridgewell/sourcemap-codec': 1.4.14
266 |
267 | /@rollup/plugin-virtual/3.0.1:
268 | resolution: {integrity: sha512-fK8O0IL5+q+GrsMLuACVNk2x21g3yaw+sG2qn16SnUd3IlBsQyvWxLMGHmCmXRMecPjGRSZ/1LmZB4rjQm68og==}
269 | engines: {node: '>=14.0.0'}
270 | peerDependencies:
271 | rollup: ^1.20.0||^2.0.0||^3.0.0
272 | peerDependenciesMeta:
273 | rollup:
274 | optional: true
275 | dev: true
276 |
277 | /@swc/core-darwin-arm64/1.3.42:
278 | resolution: {integrity: sha512-hM6RrZFyoCM9mX3cj/zM5oXwhAqjUdOCLXJx7KTQps7NIkv/Qjvobgvyf2gAb89j3ARNo9NdIoLjTjJ6oALtiA==}
279 | engines: {node: '>=10'}
280 | cpu: [arm64]
281 | os: [darwin]
282 | requiresBuild: true
283 | dev: true
284 | optional: true
285 |
286 | /@swc/core-darwin-x64/1.3.42:
287 | resolution: {integrity: sha512-bjsWtHMb6wJK1+RGlBs2USvgZ0txlMk11y0qBLKo32gLKTqzUwRw0Fmfzuf6Ue2a/w//7eqMlPFEre4LvJajGw==}
288 | engines: {node: '>=10'}
289 | cpu: [x64]
290 | os: [darwin]
291 | requiresBuild: true
292 | dev: true
293 | optional: true
294 |
295 | /@swc/core-linux-arm-gnueabihf/1.3.42:
296 | resolution: {integrity: sha512-Oe0ggMz3MyqXNfeVmY+bBTL0hFSNY3bx8dhcqsh4vXk/ZVGse94QoC4dd92LuPHmKT0x6nsUzB86x2jU9QHW5g==}
297 | engines: {node: '>=10'}
298 | cpu: [arm]
299 | os: [linux]
300 | requiresBuild: true
301 | dev: true
302 | optional: true
303 |
304 | /@swc/core-linux-arm64-gnu/1.3.42:
305 | resolution: {integrity: sha512-ZJsa8NIW1RLmmHGTJCbM7OPSbBZ9rOMrLqDtUOGrT0uoJXZnnQqolflamB5wviW0X6h3Z3/PSTNGNDCJ3u3Lqg==}
306 | engines: {node: '>=10'}
307 | cpu: [arm64]
308 | os: [linux]
309 | requiresBuild: true
310 | dev: true
311 | optional: true
312 |
313 | /@swc/core-linux-arm64-musl/1.3.42:
314 | resolution: {integrity: sha512-YpZwlFAfOp5vkm/uVUJX1O7N3yJDO1fDQRWqsOPPNyIJkI2ydlRQtgN6ZylC159Qv+TimfXnGTlNr7o3iBAqjg==}
315 | engines: {node: '>=10'}
316 | cpu: [arm64]
317 | os: [linux]
318 | requiresBuild: true
319 | dev: true
320 | optional: true
321 |
322 | /@swc/core-linux-x64-gnu/1.3.42:
323 | resolution: {integrity: sha512-0ccpKnsZbyHBzaQFdP8U9i29nvOfKitm6oJfdJzlqsY/jCqwvD8kv2CAKSK8WhJz//ExI2LqNrDI0yazx5j7+A==}
324 | engines: {node: '>=10'}
325 | cpu: [x64]
326 | os: [linux]
327 | requiresBuild: true
328 | dev: true
329 | optional: true
330 |
331 | /@swc/core-linux-x64-musl/1.3.42:
332 | resolution: {integrity: sha512-7eckRRuTZ6+3K21uyfXXgc2ZCg0mSWRRNwNT3wap2bYkKPeqTgb8pm8xYSZNEiMuDonHEat6XCCV36lFY6kOdQ==}
333 | engines: {node: '>=10'}
334 | cpu: [x64]
335 | os: [linux]
336 | requiresBuild: true
337 | dev: true
338 | optional: true
339 |
340 | /@swc/core-win32-arm64-msvc/1.3.42:
341 | resolution: {integrity: sha512-t27dJkdw0GWANdN4TV0lY/V5vTYSx5SRjyzzZolep358ueCGuN1XFf1R0JcCbd1ojosnkQg2L7A7991UjXingg==}
342 | engines: {node: '>=10'}
343 | cpu: [arm64]
344 | os: [win32]
345 | requiresBuild: true
346 | dev: true
347 | optional: true
348 |
349 | /@swc/core-win32-ia32-msvc/1.3.42:
350 | resolution: {integrity: sha512-xfpc/Zt/aMILX4IX0e3loZaFyrae37u3MJCv1gJxgqrpeLi7efIQr3AmERkTK3mxTO6R5urSliWw2W3FyZ7D3Q==}
351 | engines: {node: '>=10'}
352 | cpu: [ia32]
353 | os: [win32]
354 | requiresBuild: true
355 | dev: true
356 | optional: true
357 |
358 | /@swc/core-win32-x64-msvc/1.3.42:
359 | resolution: {integrity: sha512-ra2K4Tu++EJLPhzZ6L8hWUsk94TdK/2UKhL9dzCBhtzKUixsGCEqhtqH1zISXNvW8qaVLFIMUP37ULe80/IJaA==}
360 | engines: {node: '>=10'}
361 | cpu: [x64]
362 | os: [win32]
363 | requiresBuild: true
364 | dev: true
365 | optional: true
366 |
367 | /@swc/core/1.3.42:
368 | resolution: {integrity: sha512-nVFUd5+7tGniM2cT3LXaqnu3735Cu4az8A9gAKK+8sdpASI52SWuqfDBmjFCK9xG90MiVDVp2PTZr0BWqCIzpw==}
369 | engines: {node: '>=10'}
370 | requiresBuild: true
371 | optionalDependencies:
372 | '@swc/core-darwin-arm64': 1.3.42
373 | '@swc/core-darwin-x64': 1.3.42
374 | '@swc/core-linux-arm-gnueabihf': 1.3.42
375 | '@swc/core-linux-arm64-gnu': 1.3.42
376 | '@swc/core-linux-arm64-musl': 1.3.42
377 | '@swc/core-linux-x64-gnu': 1.3.42
378 | '@swc/core-linux-x64-musl': 1.3.42
379 | '@swc/core-win32-arm64-msvc': 1.3.42
380 | '@swc/core-win32-ia32-msvc': 1.3.42
381 | '@swc/core-win32-x64-msvc': 1.3.42
382 | dev: true
383 |
384 | /@types/pako/2.0.0:
385 | resolution: {integrity: sha512-10+iaz93qR5WYxTo+PMifD5TSxiOtdRaxBf7INGGXMQgTCu8Z/7GYWYFUOS3q/G0nE5boj1r4FEB+WSy7s5gbA==}
386 | dev: false
387 |
388 | /acorn/8.8.2:
389 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
390 | engines: {node: '>=0.4.0'}
391 | hasBin: true
392 |
393 | /any-promise/1.3.0:
394 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
395 | dev: false
396 |
397 | /balanced-match/1.0.2:
398 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
399 | dev: false
400 |
401 | /brace-expansion/1.1.11:
402 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
403 | dependencies:
404 | balanced-match: 1.0.2
405 | concat-map: 0.0.1
406 | dev: false
407 |
408 | /brotli-wasm/1.3.1:
409 | resolution: {integrity: sha512-Vp+v3QXddvy39Ycbmvd3/Y1kUvKhwtnprzeABcKWN4jmyg6W3W5MhGPCfXBMHeSQnizgpV59iWmkSRp7ykOnDQ==}
410 | dev: false
411 |
412 | /buffer-from/1.1.2:
413 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
414 |
415 | /commander/2.20.3:
416 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
417 |
418 | /commander/4.1.1:
419 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
420 | engines: {node: '>= 6'}
421 | dev: false
422 |
423 | /concat-map/0.0.1:
424 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
425 | dev: false
426 |
427 | /esbuild/0.17.14:
428 | resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==}
429 | engines: {node: '>=12'}
430 | hasBin: true
431 | requiresBuild: true
432 | optionalDependencies:
433 | '@esbuild/android-arm': 0.17.14
434 | '@esbuild/android-arm64': 0.17.14
435 | '@esbuild/android-x64': 0.17.14
436 | '@esbuild/darwin-arm64': 0.17.14
437 | '@esbuild/darwin-x64': 0.17.14
438 | '@esbuild/freebsd-arm64': 0.17.14
439 | '@esbuild/freebsd-x64': 0.17.14
440 | '@esbuild/linux-arm': 0.17.14
441 | '@esbuild/linux-arm64': 0.17.14
442 | '@esbuild/linux-ia32': 0.17.14
443 | '@esbuild/linux-loong64': 0.17.14
444 | '@esbuild/linux-mips64el': 0.17.14
445 | '@esbuild/linux-ppc64': 0.17.14
446 | '@esbuild/linux-riscv64': 0.17.14
447 | '@esbuild/linux-s390x': 0.17.14
448 | '@esbuild/linux-x64': 0.17.14
449 | '@esbuild/netbsd-x64': 0.17.14
450 | '@esbuild/openbsd-x64': 0.17.14
451 | '@esbuild/sunos-x64': 0.17.14
452 | '@esbuild/win32-arm64': 0.17.14
453 | '@esbuild/win32-ia32': 0.17.14
454 | '@esbuild/win32-x64': 0.17.14
455 | dev: true
456 |
457 | /fs.realpath/1.0.0:
458 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
459 | dev: false
460 |
461 | /fsevents/2.3.2:
462 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
463 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
464 | os: [darwin]
465 | requiresBuild: true
466 | dev: true
467 | optional: true
468 |
469 | /function-bind/1.1.1:
470 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
471 | dev: true
472 |
473 | /glob/7.1.6:
474 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
475 | dependencies:
476 | fs.realpath: 1.0.0
477 | inflight: 1.0.6
478 | inherits: 2.0.4
479 | minimatch: 3.1.2
480 | once: 1.4.0
481 | path-is-absolute: 1.0.1
482 | dev: false
483 |
484 | /has/1.0.3:
485 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
486 | engines: {node: '>= 0.4.0'}
487 | dependencies:
488 | function-bind: 1.1.1
489 | dev: true
490 |
491 | /inflight/1.0.6:
492 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
493 | dependencies:
494 | once: 1.4.0
495 | wrappy: 1.0.2
496 | dev: false
497 |
498 | /inherits/2.0.4:
499 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
500 | dev: false
501 |
502 | /install/0.13.0:
503 | resolution: {integrity: sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==}
504 | engines: {node: '>= 0.10'}
505 | dev: false
506 |
507 | /is-core-module/2.11.0:
508 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
509 | dependencies:
510 | has: 1.0.3
511 | dev: true
512 |
513 | /lines-and-columns/1.2.4:
514 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
515 | dev: false
516 |
517 | /minimatch/3.1.2:
518 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
519 | dependencies:
520 | brace-expansion: 1.1.11
521 | dev: false
522 |
523 | /monaco-editor/0.36.1:
524 | resolution: {integrity: sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg==}
525 | dev: false
526 |
527 | /mz/2.7.0:
528 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
529 | dependencies:
530 | any-promise: 1.3.0
531 | object-assign: 4.1.1
532 | thenify-all: 1.6.0
533 | dev: false
534 |
535 | /nanoid/3.3.6:
536 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
537 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
538 | hasBin: true
539 | dev: true
540 |
541 | /object-assign/4.1.1:
542 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
543 | engines: {node: '>=0.10.0'}
544 | dev: false
545 |
546 | /once/1.4.0:
547 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
548 | dependencies:
549 | wrappy: 1.0.2
550 | dev: false
551 |
552 | /pako/2.1.0:
553 | resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
554 | dev: false
555 |
556 | /path-is-absolute/1.0.1:
557 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
558 | engines: {node: '>=0.10.0'}
559 | dev: false
560 |
561 | /path-parse/1.0.7:
562 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
563 | dev: true
564 |
565 | /picocolors/1.0.0:
566 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
567 | dev: true
568 |
569 | /pirates/4.0.5:
570 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
571 | engines: {node: '>= 6'}
572 | dev: false
573 |
574 | /postcss/8.4.21:
575 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
576 | engines: {node: ^10 || ^12 || >=14}
577 | dependencies:
578 | nanoid: 3.3.6
579 | picocolors: 1.0.0
580 | source-map-js: 1.0.2
581 | dev: true
582 |
583 | /resolve/1.22.1:
584 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
585 | hasBin: true
586 | dependencies:
587 | is-core-module: 2.11.0
588 | path-parse: 1.0.7
589 | supports-preserve-symlinks-flag: 1.0.0
590 | dev: true
591 |
592 | /rollup/3.20.2:
593 | resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==}
594 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
595 | hasBin: true
596 | optionalDependencies:
597 | fsevents: 2.3.2
598 | dev: true
599 |
600 | /source-map-js/1.0.2:
601 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
602 | engines: {node: '>=0.10.0'}
603 | dev: true
604 |
605 | /source-map-support/0.5.21:
606 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
607 | dependencies:
608 | buffer-from: 1.1.2
609 | source-map: 0.6.1
610 |
611 | /source-map/0.6.1:
612 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
613 | engines: {node: '>=0.10.0'}
614 |
615 | /sucrase/3.31.0:
616 | resolution: {integrity: sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==}
617 | engines: {node: '>=8'}
618 | hasBin: true
619 | dependencies:
620 | commander: 4.1.1
621 | glob: 7.1.6
622 | lines-and-columns: 1.2.4
623 | mz: 2.7.0
624 | pirates: 4.0.5
625 | ts-interface-checker: 0.1.13
626 | dev: false
627 |
628 | /supports-preserve-symlinks-flag/1.0.0:
629 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
630 | engines: {node: '>= 0.4'}
631 | dev: true
632 |
633 | /terser/5.16.8:
634 | resolution: {integrity: sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==}
635 | engines: {node: '>=10'}
636 | hasBin: true
637 | dependencies:
638 | '@jridgewell/source-map': 0.3.2
639 | acorn: 8.8.2
640 | commander: 2.20.3
641 | source-map-support: 0.5.21
642 |
643 | /thenify-all/1.6.0:
644 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
645 | engines: {node: '>=0.8'}
646 | dependencies:
647 | thenify: 3.3.1
648 | dev: false
649 |
650 | /thenify/3.3.1:
651 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
652 | dependencies:
653 | any-promise: 1.3.0
654 | dev: false
655 |
656 | /ts-interface-checker/0.1.13:
657 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
658 | dev: false
659 |
660 | /typescript/4.9.5:
661 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
662 | engines: {node: '>=4.2.0'}
663 | hasBin: true
664 | dev: true
665 |
666 | /uuid/9.0.0:
667 | resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
668 | hasBin: true
669 | dev: true
670 |
671 | /vite-plugin-top-level-await/1.3.0_vite@4.2.1:
672 | resolution: {integrity: sha512-owIfsgWudMlQODWJSwp0sQB3AZZu3qsMygeBjZy8CyjEk6OB9AGd8lHqmgwrcEqgvy9N58lYxSBLVk3/4ejEiA==}
673 | peerDependencies:
674 | vite: '>=2.8'
675 | dependencies:
676 | '@rollup/plugin-virtual': 3.0.1
677 | '@swc/core': 1.3.42
678 | uuid: 9.0.0
679 | vite: 4.2.1_terser@5.16.8
680 | transitivePeerDependencies:
681 | - rollup
682 | dev: true
683 |
684 | /vite/4.2.1_terser@5.16.8:
685 | resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==}
686 | engines: {node: ^14.18.0 || >=16.0.0}
687 | hasBin: true
688 | peerDependencies:
689 | '@types/node': '>= 14'
690 | less: '*'
691 | sass: '*'
692 | stylus: '*'
693 | sugarss: '*'
694 | terser: ^5.4.0
695 | peerDependenciesMeta:
696 | '@types/node':
697 | optional: true
698 | less:
699 | optional: true
700 | sass:
701 | optional: true
702 | stylus:
703 | optional: true
704 | sugarss:
705 | optional: true
706 | terser:
707 | optional: true
708 | dependencies:
709 | esbuild: 0.17.14
710 | postcss: 8.4.21
711 | resolve: 1.22.1
712 | rollup: 3.20.2
713 | terser: 5.16.8
714 | optionalDependencies:
715 | fsevents: 2.3.2
716 | dev: true
717 |
718 | /wrappy/1.0.2:
719 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
720 | dev: false
721 |
--------------------------------------------------------------------------------