├── .gitignore
├── LICENSE
├── README.md
├── dist
├── cm6.bundle.js
└── cm6.bundle.min.js
├── examples
├── example1.html
├── example2.html
├── example3.html
└── example4.html
├── package-lock.json
├── package.json
├── scripts
└── watch_and_bundle.sh
└── src
└── editor.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Bryan Gillespie
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Overview
2 |
3 | If you want to get a [CodeMirror 6](https://codemirror.net/) editor up and running but aren't sure how to start, this repo is for you. Maybe you've even used CodeMirror 5 in the past and you feel like by comparison CodeMirror 6 just dumps a bunch of legos at your feet with minimal instructions and tells you to build your own editor. If that's you, fear not! I've crafted some examples to get you tinkering and iterating in no time.
4 |
5 | # Quickstart
6 |
7 | The quickest way to get CodeMirror 6 up and running is to just grab a copy of the `dist/cm6.bundle.js` file I've created to include in your own HTML.
8 |
9 | Here's a minimal example HTML page that uses it:
10 |
11 | [Example 1](https://rpgillespie6.github.io/codemirror-quickstart/examples/example1.html)
12 |
13 | Here's a slightly more complex example that lets you choose the editor theme on the fly:
14 |
15 | [Example 2](https://rpgillespie6.github.io/codemirror-quickstart/examples/example2.html)
16 |
17 | Here's an example that illustrates how states and views work together:
18 |
19 | [Example 3](https://rpgillespie6.github.io/codemirror-quickstart/examples/example3.html)
20 |
21 | Here's an example with [openSearchPanel](https://codemirror.net/docs/ref/#search.openSearchPanel):
22 |
23 | [Example 4](https://rpgillespie6.github.io/codemirror-quickstart/examples/example4.html)
24 |
25 | You can also run these examples locally by cloning this repository and running `python3 -m http.server 8000` (or any webserver) from the root of the repository and then navigating to i.e. http://localhost:8000/examples/example1.html.
26 |
27 | Note that `cm6.bundle.js` does not contain every possible extension of CodeMirror 6 - just the main ones and a few I personally like to use. If you want syntax highlighting for a language other than javascript or a different theme or some other extension not included here, you'll have to create your own custom bundle.
28 |
29 | # How to Create Your Own Custom Bundle
30 |
31 | So you've tinkered with the examples, and now you want to create your own custom-tailored `cm6.bundle.js` that meets your needs. Why would you want to create your own custom-tailored bundle? Well, for one thing it'll likely be smaller on disk than the monolithic one provided here. But also, maybe you need python syntax highlighting instead of javascript. That's the real beauty of CodeMirror 6 - it's super modular design allows you to generate an editor with only the features you want and nothing else; no bloating your web page with extra code that you aren't using!
32 |
33 | The official docs mention how to create a bundle [here](https://codemirror.net/examples/bundle/) but it doesn't do much handholding.
34 |
35 | So this section will walk you through exactly how I created the `cm6.bundle.js` in this repo and then show you how to make tweaks.
36 |
37 | 1. Install npm packages `rollup` and `@rollup/plugin-node-resolve`
38 |
39 | 2. Install CodeMirror 6 npm packages that you want (for example: `@codemirror/lang-python` if you want python support)
40 |
41 | You can simply run `npm install` in the root of this repo which will install all the dependencies currently used by `dist/cm6.bundle.js` as well as `rollup` and `minify`.
42 |
43 | Using [src/editor.js](src/editor.js) as a template, delete extensions, add different extensions, etc.
44 |
45 | Create bundle with: `npx rollup src/editor.js -f iife -o dist/cm6.bundle.js -p @rollup/plugin-node-resolve --output.name cm6`
46 |
47 | (Optional) Minify bundle with: `cd dist && npx minify cm6.bundle.js > cm6.bundle.min.js`
48 |
49 | If you are doing these steps a lot as you iterate, you can use a program to watch your `editor.js` for changes and autogenerate the bundle. I personally use [reflex](https://github.com/cespare/reflex) but there are npm packages that do the same. The reflex command I used to develop `cm6.bundle.js` in this repo is found in [scripts/watch_and_bundle.sh](scripts/watch_and_bundle.sh)
--------------------------------------------------------------------------------
/examples/example1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Quickstart Example 1
7 |
8 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/examples/example2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Quickstart Example 2
7 |
8 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | Toggle One Dark Theme
30 |
31 |
32 |
33 |
34 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/examples/example3.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Quickstart Example 3
7 |
8 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | States are kind of like git commits. Just like git commits are a snapshot of a repo's filesystem, Code Mirror
28 | states are a snapshot of the state of the editor. Any time you type into the editor or dispatch changes, a new
29 | state is generated. But if you saved an old state in a variable you can revert back to it.
30 |
31 | Try making edits above, saving state, then loading a different state. Notice how the undo (ctrl-z) history is
32 | tied to the current state you are on and its ancestor states and not necessarly what you most recently typed!
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/examples/example4.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Quickstart Example 4
7 |
8 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | Open search
29 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codemirror-quickstart",
3 | "lockfileVersion": 2,
4 | "requires": true,
5 | "packages": {
6 | "": {
7 | "dependencies": {
8 | "@codemirror/commands": "^6.1.2",
9 | "@codemirror/lang-javascript": "^6.1.1",
10 | "@codemirror/search": "^6.2.3",
11 | "@codemirror/theme-one-dark": "^6.1.0",
12 | "@codemirror/view": "^6.6.0",
13 | "@rollup/plugin-node-resolve": "^15.0.1",
14 | "minify": "^9.1.0",
15 | "rollup": "^3.5.1"
16 | }
17 | },
18 | "node_modules/@codemirror/autocomplete": {
19 | "version": "6.3.4",
20 | "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.3.4.tgz",
21 | "integrity": "sha512-irxKsTSjS0OkfMWWt9YxtNK97++/E+XIHfKnRpSVfZyHzda/amYF0BR+T8mMkrGQWidx2zApxHx08GT13egyQA==",
22 | "dependencies": {
23 | "@codemirror/language": "^6.0.0",
24 | "@codemirror/state": "^6.0.0",
25 | "@codemirror/view": "^6.6.0",
26 | "@lezer/common": "^1.0.0"
27 | },
28 | "peerDependencies": {
29 | "@codemirror/language": "^6.0.0",
30 | "@codemirror/state": "^6.0.0",
31 | "@codemirror/view": "^6.0.0",
32 | "@lezer/common": "^1.0.0"
33 | }
34 | },
35 | "node_modules/@codemirror/commands": {
36 | "version": "6.1.2",
37 | "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.1.2.tgz",
38 | "integrity": "sha512-sO3jdX1s0pam6lIdeSJLMN3DQ6mPEbM4yLvyKkdqtmd/UDwhXA5+AwFJ89rRXm6vTeOXBsE5cAmlos/t7MJdgg==",
39 | "dependencies": {
40 | "@codemirror/language": "^6.0.0",
41 | "@codemirror/state": "^6.0.0",
42 | "@codemirror/view": "^6.0.0",
43 | "@lezer/common": "^1.0.0"
44 | }
45 | },
46 | "node_modules/@codemirror/lang-javascript": {
47 | "version": "6.1.1",
48 | "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.1.1.tgz",
49 | "integrity": "sha512-F4+kiuC5d5dUSJmff96tJQwpEXs/tX/4bapMRnZWW6bHKK1Fx6MunTzopkCUWRa9bF87GPmb9m7Qtg7Yv8f3uQ==",
50 | "dependencies": {
51 | "@codemirror/autocomplete": "^6.0.0",
52 | "@codemirror/language": "^6.0.0",
53 | "@codemirror/lint": "^6.0.0",
54 | "@codemirror/state": "^6.0.0",
55 | "@codemirror/view": "^6.0.0",
56 | "@lezer/common": "^1.0.0",
57 | "@lezer/javascript": "^1.0.0"
58 | }
59 | },
60 | "node_modules/@codemirror/language": {
61 | "version": "6.3.1",
62 | "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.3.1.tgz",
63 | "integrity": "sha512-MK+G1QKaGfSEUg9YEFaBkMBI6j1ge4VMBPZv9fDYotw7w695c42x5Ba1mmwBkesYnzYFBfte6Hh9TDcKa6xORQ==",
64 | "dependencies": {
65 | "@codemirror/state": "^6.0.0",
66 | "@codemirror/view": "^6.0.0",
67 | "@lezer/common": "^1.0.0",
68 | "@lezer/highlight": "^1.0.0",
69 | "@lezer/lr": "^1.0.0",
70 | "style-mod": "^4.0.0"
71 | }
72 | },
73 | "node_modules/@codemirror/lint": {
74 | "version": "6.1.0",
75 | "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.1.0.tgz",
76 | "integrity": "sha512-mdvDQrjRmYPvQ3WrzF6Ewaao+NWERYtpthJvoQ3tK3t/44Ynhk8ZGjTSL9jMEv8CgSMogmt75X8ceOZRDSXHtQ==",
77 | "dependencies": {
78 | "@codemirror/state": "^6.0.0",
79 | "@codemirror/view": "^6.0.0",
80 | "crelt": "^1.0.5"
81 | }
82 | },
83 | "node_modules/@codemirror/search": {
84 | "version": "6.2.3",
85 | "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.2.3.tgz",
86 | "integrity": "sha512-V9n9233lopQhB1dyjsBK2Wc1i+8hcCqxl1wQ46c5HWWLePoe4FluV3TGHoZ04rBRlGjNyz9DTmpJErig8UE4jw==",
87 | "dependencies": {
88 | "@codemirror/state": "^6.0.0",
89 | "@codemirror/view": "^6.0.0",
90 | "crelt": "^1.0.5"
91 | }
92 | },
93 | "node_modules/@codemirror/state": {
94 | "version": "6.1.4",
95 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.4.tgz",
96 | "integrity": "sha512-g+3OJuRylV5qsXuuhrc6Cvs1NQluNioepYMM2fhnpYkNk7NgX+j0AFuevKSVKzTDmDyt9+Puju+zPdHNECzCNQ=="
97 | },
98 | "node_modules/@codemirror/theme-one-dark": {
99 | "version": "6.1.0",
100 | "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.0.tgz",
101 | "integrity": "sha512-AiTHtFRu8+vWT9wWUWDM+cog6ZwgivJogB1Tm/g40NIpLwph7AnmxrSzWfvJN5fBVufsuwBxecQCNmdcR5D7Aw==",
102 | "dependencies": {
103 | "@codemirror/language": "^6.0.0",
104 | "@codemirror/state": "^6.0.0",
105 | "@codemirror/view": "^6.0.0",
106 | "@lezer/highlight": "^1.0.0"
107 | }
108 | },
109 | "node_modules/@codemirror/view": {
110 | "version": "6.6.0",
111 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.6.0.tgz",
112 | "integrity": "sha512-40VaFVZI3rkyjO5GHFAbNwaW+YgZexjKyx5gxLU2DvfuXAEZX0kW0apOXb0SBRLnKIQJ+U/n2nPfxgBVFHERrg==",
113 | "dependencies": {
114 | "@codemirror/state": "^6.1.4",
115 | "style-mod": "^4.0.0",
116 | "w3c-keyname": "^2.2.4"
117 | }
118 | },
119 | "node_modules/@jridgewell/gen-mapping": {
120 | "version": "0.3.2",
121 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
122 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
123 | "dependencies": {
124 | "@jridgewell/set-array": "^1.0.1",
125 | "@jridgewell/sourcemap-codec": "^1.4.10",
126 | "@jridgewell/trace-mapping": "^0.3.9"
127 | },
128 | "engines": {
129 | "node": ">=6.0.0"
130 | }
131 | },
132 | "node_modules/@jridgewell/resolve-uri": {
133 | "version": "3.1.0",
134 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
135 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
136 | "engines": {
137 | "node": ">=6.0.0"
138 | }
139 | },
140 | "node_modules/@jridgewell/set-array": {
141 | "version": "1.1.2",
142 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
143 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
144 | "engines": {
145 | "node": ">=6.0.0"
146 | }
147 | },
148 | "node_modules/@jridgewell/source-map": {
149 | "version": "0.3.2",
150 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
151 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
152 | "dependencies": {
153 | "@jridgewell/gen-mapping": "^0.3.0",
154 | "@jridgewell/trace-mapping": "^0.3.9"
155 | }
156 | },
157 | "node_modules/@jridgewell/sourcemap-codec": {
158 | "version": "1.4.14",
159 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
160 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
161 | },
162 | "node_modules/@jridgewell/trace-mapping": {
163 | "version": "0.3.17",
164 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
165 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
166 | "dependencies": {
167 | "@jridgewell/resolve-uri": "3.1.0",
168 | "@jridgewell/sourcemap-codec": "1.4.14"
169 | }
170 | },
171 | "node_modules/@lezer/common": {
172 | "version": "1.0.2",
173 | "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.2.tgz",
174 | "integrity": "sha512-SVgiGtMnMnW3ActR8SXgsDhw7a0w0ChHSYAyAUxxrOiJ1OqYWEKk/xJd84tTSPo1mo6DXLObAJALNnd0Hrv7Ng=="
175 | },
176 | "node_modules/@lezer/highlight": {
177 | "version": "1.1.3",
178 | "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.3.tgz",
179 | "integrity": "sha512-3vLKLPThO4td43lYRBygmMY18JN3CPh9w+XS2j8WC30vR4yZeFG4z1iFe4jXE43NtGqe//zHW5q8ENLlHvz9gw==",
180 | "dependencies": {
181 | "@lezer/common": "^1.0.0"
182 | }
183 | },
184 | "node_modules/@lezer/javascript": {
185 | "version": "1.3.1",
186 | "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.3.1.tgz",
187 | "integrity": "sha512-3Z6OggGxRuqMntAuadxW0Oy7Zbs56KJSwujDc6vwhVfbi5upHOEzNIrNLvphDU/HozLoTCGQcjNmjLkb2Zr5pg==",
188 | "dependencies": {
189 | "@lezer/highlight": "^1.0.0",
190 | "@lezer/lr": "^1.0.0"
191 | }
192 | },
193 | "node_modules/@lezer/lr": {
194 | "version": "1.2.5",
195 | "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.2.5.tgz",
196 | "integrity": "sha512-f9319YG1A/3ysgUE3bqCHEd7g+3ZZ71MWlwEc42mpnLVYXgfJJgtu1XAyBB4Kz8FmqmnFe9caopDqKeMMMAU6g==",
197 | "dependencies": {
198 | "@lezer/common": "^1.0.0"
199 | }
200 | },
201 | "node_modules/@rollup/plugin-node-resolve": {
202 | "version": "15.0.1",
203 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz",
204 | "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==",
205 | "dependencies": {
206 | "@rollup/pluginutils": "^5.0.1",
207 | "@types/resolve": "1.20.2",
208 | "deepmerge": "^4.2.2",
209 | "is-builtin-module": "^3.2.0",
210 | "is-module": "^1.0.0",
211 | "resolve": "^1.22.1"
212 | },
213 | "engines": {
214 | "node": ">=14.0.0"
215 | },
216 | "peerDependencies": {
217 | "rollup": "^2.78.0||^3.0.0"
218 | },
219 | "peerDependenciesMeta": {
220 | "rollup": {
221 | "optional": true
222 | }
223 | }
224 | },
225 | "node_modules/@rollup/pluginutils": {
226 | "version": "5.0.2",
227 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
228 | "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
229 | "dependencies": {
230 | "@types/estree": "^1.0.0",
231 | "estree-walker": "^2.0.2",
232 | "picomatch": "^2.3.1"
233 | },
234 | "engines": {
235 | "node": ">=14.0.0"
236 | },
237 | "peerDependencies": {
238 | "rollup": "^1.20.0||^2.0.0||^3.0.0"
239 | },
240 | "peerDependenciesMeta": {
241 | "rollup": {
242 | "optional": true
243 | }
244 | }
245 | },
246 | "node_modules/@types/estree": {
247 | "version": "1.0.0",
248 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
249 | "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ=="
250 | },
251 | "node_modules/@types/resolve": {
252 | "version": "1.20.2",
253 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
254 | "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="
255 | },
256 | "node_modules/acorn": {
257 | "version": "8.8.1",
258 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
259 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
260 | "bin": {
261 | "acorn": "bin/acorn"
262 | },
263 | "engines": {
264 | "node": ">=0.4.0"
265 | }
266 | },
267 | "node_modules/buffer-from": {
268 | "version": "1.1.2",
269 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
270 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
271 | },
272 | "node_modules/builtin-modules": {
273 | "version": "3.3.0",
274 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
275 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
276 | "engines": {
277 | "node": ">=6"
278 | },
279 | "funding": {
280 | "url": "https://github.com/sponsors/sindresorhus"
281 | }
282 | },
283 | "node_modules/camel-case": {
284 | "version": "4.1.2",
285 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
286 | "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
287 | "dependencies": {
288 | "pascal-case": "^3.1.2",
289 | "tslib": "^2.0.3"
290 | }
291 | },
292 | "node_modules/clean-css": {
293 | "version": "5.3.1",
294 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz",
295 | "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==",
296 | "dependencies": {
297 | "source-map": "~0.6.0"
298 | },
299 | "engines": {
300 | "node": ">= 10.0"
301 | }
302 | },
303 | "node_modules/commander": {
304 | "version": "9.4.1",
305 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz",
306 | "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==",
307 | "engines": {
308 | "node": "^12.20.0 || >=14"
309 | }
310 | },
311 | "node_modules/crelt": {
312 | "version": "1.0.5",
313 | "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz",
314 | "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA=="
315 | },
316 | "node_modules/css-b64-images": {
317 | "version": "0.2.5",
318 | "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz",
319 | "integrity": "sha512-TgQBEdP07adhrDfXvI5o6bHGukKBNMzp2Ngckc/6d09zpjD2gc1Hl3Ca1CKgb8FXjHi88+Phv2Uegs2kTL4zjg==",
320 | "bin": {
321 | "css-b64-images": "bin/css-b64-images"
322 | },
323 | "engines": {
324 | "node": "*"
325 | }
326 | },
327 | "node_modules/debug": {
328 | "version": "4.3.4",
329 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
330 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
331 | "dependencies": {
332 | "ms": "2.1.2"
333 | },
334 | "engines": {
335 | "node": ">=6.0"
336 | },
337 | "peerDependenciesMeta": {
338 | "supports-color": {
339 | "optional": true
340 | }
341 | }
342 | },
343 | "node_modules/deepmerge": {
344 | "version": "4.2.2",
345 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
346 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
347 | "engines": {
348 | "node": ">=0.10.0"
349 | }
350 | },
351 | "node_modules/dot-case": {
352 | "version": "3.0.4",
353 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
354 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
355 | "dependencies": {
356 | "no-case": "^3.0.4",
357 | "tslib": "^2.0.3"
358 | }
359 | },
360 | "node_modules/entities": {
361 | "version": "4.4.0",
362 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
363 | "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
364 | "engines": {
365 | "node": ">=0.12"
366 | },
367 | "funding": {
368 | "url": "https://github.com/fb55/entities?sponsor=1"
369 | }
370 | },
371 | "node_modules/estree-walker": {
372 | "version": "2.0.2",
373 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
374 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
375 | },
376 | "node_modules/find-up": {
377 | "version": "6.3.0",
378 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
379 | "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
380 | "dependencies": {
381 | "locate-path": "^7.1.0",
382 | "path-exists": "^5.0.0"
383 | },
384 | "engines": {
385 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
386 | },
387 | "funding": {
388 | "url": "https://github.com/sponsors/sindresorhus"
389 | }
390 | },
391 | "node_modules/fsevents": {
392 | "version": "2.3.2",
393 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
394 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
395 | "hasInstallScript": true,
396 | "optional": true,
397 | "os": [
398 | "darwin"
399 | ],
400 | "engines": {
401 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
402 | }
403 | },
404 | "node_modules/function-bind": {
405 | "version": "1.1.1",
406 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
407 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
408 | },
409 | "node_modules/has": {
410 | "version": "1.0.3",
411 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
412 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
413 | "dependencies": {
414 | "function-bind": "^1.1.1"
415 | },
416 | "engines": {
417 | "node": ">= 0.4.0"
418 | }
419 | },
420 | "node_modules/html-minifier-terser": {
421 | "version": "7.1.0",
422 | "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.1.0.tgz",
423 | "integrity": "sha512-BvPO2S7Ip0Q5qt+Y8j/27Vclj6uHC6av0TMoDn7/bJPhMWHI2UtR2e/zEgJn3/qYAmxumrGp9q4UHurL6mtW9Q==",
424 | "dependencies": {
425 | "camel-case": "^4.1.2",
426 | "clean-css": "5.2.0",
427 | "commander": "^9.4.1",
428 | "entities": "^4.4.0",
429 | "param-case": "^3.0.4",
430 | "relateurl": "^0.2.7",
431 | "terser": "^5.15.1"
432 | },
433 | "bin": {
434 | "html-minifier-terser": "cli.js"
435 | },
436 | "engines": {
437 | "node": "^14.13.1 || >=16.0.0"
438 | }
439 | },
440 | "node_modules/html-minifier-terser/node_modules/clean-css": {
441 | "version": "5.2.0",
442 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.0.tgz",
443 | "integrity": "sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==",
444 | "dependencies": {
445 | "source-map": "~0.6.0"
446 | },
447 | "engines": {
448 | "node": ">= 10.0"
449 | }
450 | },
451 | "node_modules/is-builtin-module": {
452 | "version": "3.2.0",
453 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz",
454 | "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==",
455 | "dependencies": {
456 | "builtin-modules": "^3.3.0"
457 | },
458 | "engines": {
459 | "node": ">=6"
460 | },
461 | "funding": {
462 | "url": "https://github.com/sponsors/sindresorhus"
463 | }
464 | },
465 | "node_modules/is-core-module": {
466 | "version": "2.11.0",
467 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
468 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
469 | "dependencies": {
470 | "has": "^1.0.3"
471 | },
472 | "funding": {
473 | "url": "https://github.com/sponsors/ljharb"
474 | }
475 | },
476 | "node_modules/is-module": {
477 | "version": "1.0.0",
478 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
479 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="
480 | },
481 | "node_modules/jju": {
482 | "version": "1.4.0",
483 | "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
484 | "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA=="
485 | },
486 | "node_modules/locate-path": {
487 | "version": "7.1.1",
488 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
489 | "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
490 | "dependencies": {
491 | "p-locate": "^6.0.0"
492 | },
493 | "engines": {
494 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
495 | },
496 | "funding": {
497 | "url": "https://github.com/sponsors/sindresorhus"
498 | }
499 | },
500 | "node_modules/lower-case": {
501 | "version": "2.0.2",
502 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
503 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
504 | "dependencies": {
505 | "tslib": "^2.0.3"
506 | }
507 | },
508 | "node_modules/minify": {
509 | "version": "9.1.0",
510 | "resolved": "https://registry.npmjs.org/minify/-/minify-9.1.0.tgz",
511 | "integrity": "sha512-1/VsCf9hNOE5dntVUaGGVfo5s2+k6LQsZx9HR2EX5/MUiNmDr0MTFGFD56ouz3yks8vjCVTrH1wir6gTF0anhw==",
512 | "dependencies": {
513 | "clean-css": "^5.0.1",
514 | "css-b64-images": "~0.2.5",
515 | "debug": "^4.1.0",
516 | "find-up": "^6.1.0",
517 | "html-minifier-terser": "^7.0.0-alpha.1",
518 | "readjson": "^2.2.2",
519 | "simport": "^1.2.0",
520 | "terser": "^5.3.2",
521 | "try-catch": "^3.0.0",
522 | "try-to-catch": "^3.0.0"
523 | },
524 | "bin": {
525 | "minify": "bin/minify.js"
526 | },
527 | "engines": {
528 | "node": ">=16"
529 | }
530 | },
531 | "node_modules/ms": {
532 | "version": "2.1.2",
533 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
534 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
535 | },
536 | "node_modules/no-case": {
537 | "version": "3.0.4",
538 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
539 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
540 | "dependencies": {
541 | "lower-case": "^2.0.2",
542 | "tslib": "^2.0.3"
543 | }
544 | },
545 | "node_modules/p-limit": {
546 | "version": "4.0.0",
547 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
548 | "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
549 | "dependencies": {
550 | "yocto-queue": "^1.0.0"
551 | },
552 | "engines": {
553 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
554 | },
555 | "funding": {
556 | "url": "https://github.com/sponsors/sindresorhus"
557 | }
558 | },
559 | "node_modules/p-locate": {
560 | "version": "6.0.0",
561 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
562 | "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
563 | "dependencies": {
564 | "p-limit": "^4.0.0"
565 | },
566 | "engines": {
567 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
568 | },
569 | "funding": {
570 | "url": "https://github.com/sponsors/sindresorhus"
571 | }
572 | },
573 | "node_modules/param-case": {
574 | "version": "3.0.4",
575 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
576 | "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
577 | "dependencies": {
578 | "dot-case": "^3.0.4",
579 | "tslib": "^2.0.3"
580 | }
581 | },
582 | "node_modules/pascal-case": {
583 | "version": "3.1.2",
584 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
585 | "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
586 | "dependencies": {
587 | "no-case": "^3.0.4",
588 | "tslib": "^2.0.3"
589 | }
590 | },
591 | "node_modules/path-exists": {
592 | "version": "5.0.0",
593 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
594 | "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
595 | "engines": {
596 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
597 | }
598 | },
599 | "node_modules/path-parse": {
600 | "version": "1.0.7",
601 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
602 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
603 | },
604 | "node_modules/picomatch": {
605 | "version": "2.3.1",
606 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
607 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
608 | "engines": {
609 | "node": ">=8.6"
610 | },
611 | "funding": {
612 | "url": "https://github.com/sponsors/jonschlinkert"
613 | }
614 | },
615 | "node_modules/readjson": {
616 | "version": "2.2.2",
617 | "resolved": "https://registry.npmjs.org/readjson/-/readjson-2.2.2.tgz",
618 | "integrity": "sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==",
619 | "dependencies": {
620 | "jju": "^1.4.0",
621 | "try-catch": "^3.0.0"
622 | },
623 | "engines": {
624 | "node": ">=10"
625 | }
626 | },
627 | "node_modules/relateurl": {
628 | "version": "0.2.7",
629 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
630 | "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",
631 | "engines": {
632 | "node": ">= 0.10"
633 | }
634 | },
635 | "node_modules/resolve": {
636 | "version": "1.22.1",
637 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
638 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
639 | "dependencies": {
640 | "is-core-module": "^2.9.0",
641 | "path-parse": "^1.0.7",
642 | "supports-preserve-symlinks-flag": "^1.0.0"
643 | },
644 | "bin": {
645 | "resolve": "bin/resolve"
646 | },
647 | "funding": {
648 | "url": "https://github.com/sponsors/ljharb"
649 | }
650 | },
651 | "node_modules/rollup": {
652 | "version": "3.5.1",
653 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.5.1.tgz",
654 | "integrity": "sha512-hdQWTvPeiAbM6SUkxV70HdGUVxsgsc+CLy5fuh4KdgUBJ0SowXiix8gANgXoG3wEuLwfoJhCT2V+WwxfWq9Ikw==",
655 | "bin": {
656 | "rollup": "dist/bin/rollup"
657 | },
658 | "engines": {
659 | "node": ">=14.18.0",
660 | "npm": ">=8.0.0"
661 | },
662 | "optionalDependencies": {
663 | "fsevents": "~2.3.2"
664 | }
665 | },
666 | "node_modules/simport": {
667 | "version": "1.2.0",
668 | "resolved": "https://registry.npmjs.org/simport/-/simport-1.2.0.tgz",
669 | "integrity": "sha512-85Bm7pKsqiiQ8rmYCaPDdlXZjJvuW6/k/FY8MTtLFMgU7f8S00CgTHfRtWB6KwSb6ek4p9YyG2enG1+yJbl+CA==",
670 | "dependencies": {
671 | "readjson": "^2.2.0",
672 | "try-to-catch": "^3.0.0"
673 | },
674 | "engines": {
675 | "node": ">=12.2"
676 | }
677 | },
678 | "node_modules/source-map": {
679 | "version": "0.6.1",
680 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
681 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
682 | "engines": {
683 | "node": ">=0.10.0"
684 | }
685 | },
686 | "node_modules/source-map-support": {
687 | "version": "0.5.21",
688 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
689 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
690 | "dependencies": {
691 | "buffer-from": "^1.0.0",
692 | "source-map": "^0.6.0"
693 | }
694 | },
695 | "node_modules/style-mod": {
696 | "version": "4.0.0",
697 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz",
698 | "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw=="
699 | },
700 | "node_modules/supports-preserve-symlinks-flag": {
701 | "version": "1.0.0",
702 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
703 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
704 | "engines": {
705 | "node": ">= 0.4"
706 | },
707 | "funding": {
708 | "url": "https://github.com/sponsors/ljharb"
709 | }
710 | },
711 | "node_modules/terser": {
712 | "version": "5.16.1",
713 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz",
714 | "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==",
715 | "dependencies": {
716 | "@jridgewell/source-map": "^0.3.2",
717 | "acorn": "^8.5.0",
718 | "commander": "^2.20.0",
719 | "source-map-support": "~0.5.20"
720 | },
721 | "bin": {
722 | "terser": "bin/terser"
723 | },
724 | "engines": {
725 | "node": ">=10"
726 | }
727 | },
728 | "node_modules/terser/node_modules/commander": {
729 | "version": "2.20.3",
730 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
731 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
732 | },
733 | "node_modules/try-catch": {
734 | "version": "3.0.1",
735 | "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-3.0.1.tgz",
736 | "integrity": "sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ==",
737 | "engines": {
738 | "node": ">=6"
739 | }
740 | },
741 | "node_modules/try-to-catch": {
742 | "version": "3.0.1",
743 | "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz",
744 | "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==",
745 | "engines": {
746 | "node": ">=6"
747 | }
748 | },
749 | "node_modules/tslib": {
750 | "version": "2.4.1",
751 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
752 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
753 | },
754 | "node_modules/w3c-keyname": {
755 | "version": "2.2.6",
756 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
757 | "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg=="
758 | },
759 | "node_modules/yocto-queue": {
760 | "version": "1.0.0",
761 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
762 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
763 | "engines": {
764 | "node": ">=12.20"
765 | },
766 | "funding": {
767 | "url": "https://github.com/sponsors/sindresorhus"
768 | }
769 | }
770 | },
771 | "dependencies": {
772 | "@codemirror/autocomplete": {
773 | "version": "6.3.4",
774 | "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.3.4.tgz",
775 | "integrity": "sha512-irxKsTSjS0OkfMWWt9YxtNK97++/E+XIHfKnRpSVfZyHzda/amYF0BR+T8mMkrGQWidx2zApxHx08GT13egyQA==",
776 | "requires": {
777 | "@codemirror/language": "^6.0.0",
778 | "@codemirror/state": "^6.0.0",
779 | "@codemirror/view": "^6.6.0",
780 | "@lezer/common": "^1.0.0"
781 | }
782 | },
783 | "@codemirror/commands": {
784 | "version": "6.1.2",
785 | "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.1.2.tgz",
786 | "integrity": "sha512-sO3jdX1s0pam6lIdeSJLMN3DQ6mPEbM4yLvyKkdqtmd/UDwhXA5+AwFJ89rRXm6vTeOXBsE5cAmlos/t7MJdgg==",
787 | "requires": {
788 | "@codemirror/language": "^6.0.0",
789 | "@codemirror/state": "^6.0.0",
790 | "@codemirror/view": "^6.0.0",
791 | "@lezer/common": "^1.0.0"
792 | }
793 | },
794 | "@codemirror/lang-javascript": {
795 | "version": "6.1.1",
796 | "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.1.1.tgz",
797 | "integrity": "sha512-F4+kiuC5d5dUSJmff96tJQwpEXs/tX/4bapMRnZWW6bHKK1Fx6MunTzopkCUWRa9bF87GPmb9m7Qtg7Yv8f3uQ==",
798 | "requires": {
799 | "@codemirror/autocomplete": "^6.0.0",
800 | "@codemirror/language": "^6.0.0",
801 | "@codemirror/lint": "^6.0.0",
802 | "@codemirror/state": "^6.0.0",
803 | "@codemirror/view": "^6.0.0",
804 | "@lezer/common": "^1.0.0",
805 | "@lezer/javascript": "^1.0.0"
806 | }
807 | },
808 | "@codemirror/language": {
809 | "version": "6.3.1",
810 | "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.3.1.tgz",
811 | "integrity": "sha512-MK+G1QKaGfSEUg9YEFaBkMBI6j1ge4VMBPZv9fDYotw7w695c42x5Ba1mmwBkesYnzYFBfte6Hh9TDcKa6xORQ==",
812 | "requires": {
813 | "@codemirror/state": "^6.0.0",
814 | "@codemirror/view": "^6.0.0",
815 | "@lezer/common": "^1.0.0",
816 | "@lezer/highlight": "^1.0.0",
817 | "@lezer/lr": "^1.0.0",
818 | "style-mod": "^4.0.0"
819 | }
820 | },
821 | "@codemirror/lint": {
822 | "version": "6.1.0",
823 | "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.1.0.tgz",
824 | "integrity": "sha512-mdvDQrjRmYPvQ3WrzF6Ewaao+NWERYtpthJvoQ3tK3t/44Ynhk8ZGjTSL9jMEv8CgSMogmt75X8ceOZRDSXHtQ==",
825 | "requires": {
826 | "@codemirror/state": "^6.0.0",
827 | "@codemirror/view": "^6.0.0",
828 | "crelt": "^1.0.5"
829 | }
830 | },
831 | "@codemirror/search": {
832 | "version": "6.2.3",
833 | "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.2.3.tgz",
834 | "integrity": "sha512-V9n9233lopQhB1dyjsBK2Wc1i+8hcCqxl1wQ46c5HWWLePoe4FluV3TGHoZ04rBRlGjNyz9DTmpJErig8UE4jw==",
835 | "requires": {
836 | "@codemirror/state": "^6.0.0",
837 | "@codemirror/view": "^6.0.0",
838 | "crelt": "^1.0.5"
839 | }
840 | },
841 | "@codemirror/state": {
842 | "version": "6.1.4",
843 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.4.tgz",
844 | "integrity": "sha512-g+3OJuRylV5qsXuuhrc6Cvs1NQluNioepYMM2fhnpYkNk7NgX+j0AFuevKSVKzTDmDyt9+Puju+zPdHNECzCNQ=="
845 | },
846 | "@codemirror/theme-one-dark": {
847 | "version": "6.1.0",
848 | "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.0.tgz",
849 | "integrity": "sha512-AiTHtFRu8+vWT9wWUWDM+cog6ZwgivJogB1Tm/g40NIpLwph7AnmxrSzWfvJN5fBVufsuwBxecQCNmdcR5D7Aw==",
850 | "requires": {
851 | "@codemirror/language": "^6.0.0",
852 | "@codemirror/state": "^6.0.0",
853 | "@codemirror/view": "^6.0.0",
854 | "@lezer/highlight": "^1.0.0"
855 | }
856 | },
857 | "@codemirror/view": {
858 | "version": "6.6.0",
859 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.6.0.tgz",
860 | "integrity": "sha512-40VaFVZI3rkyjO5GHFAbNwaW+YgZexjKyx5gxLU2DvfuXAEZX0kW0apOXb0SBRLnKIQJ+U/n2nPfxgBVFHERrg==",
861 | "requires": {
862 | "@codemirror/state": "^6.1.4",
863 | "style-mod": "^4.0.0",
864 | "w3c-keyname": "^2.2.4"
865 | }
866 | },
867 | "@jridgewell/gen-mapping": {
868 | "version": "0.3.2",
869 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
870 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
871 | "requires": {
872 | "@jridgewell/set-array": "^1.0.1",
873 | "@jridgewell/sourcemap-codec": "^1.4.10",
874 | "@jridgewell/trace-mapping": "^0.3.9"
875 | }
876 | },
877 | "@jridgewell/resolve-uri": {
878 | "version": "3.1.0",
879 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
880 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
881 | },
882 | "@jridgewell/set-array": {
883 | "version": "1.1.2",
884 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
885 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
886 | },
887 | "@jridgewell/source-map": {
888 | "version": "0.3.2",
889 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
890 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
891 | "requires": {
892 | "@jridgewell/gen-mapping": "^0.3.0",
893 | "@jridgewell/trace-mapping": "^0.3.9"
894 | }
895 | },
896 | "@jridgewell/sourcemap-codec": {
897 | "version": "1.4.14",
898 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
899 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
900 | },
901 | "@jridgewell/trace-mapping": {
902 | "version": "0.3.17",
903 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
904 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
905 | "requires": {
906 | "@jridgewell/resolve-uri": "3.1.0",
907 | "@jridgewell/sourcemap-codec": "1.4.14"
908 | }
909 | },
910 | "@lezer/common": {
911 | "version": "1.0.2",
912 | "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.2.tgz",
913 | "integrity": "sha512-SVgiGtMnMnW3ActR8SXgsDhw7a0w0ChHSYAyAUxxrOiJ1OqYWEKk/xJd84tTSPo1mo6DXLObAJALNnd0Hrv7Ng=="
914 | },
915 | "@lezer/highlight": {
916 | "version": "1.1.3",
917 | "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.3.tgz",
918 | "integrity": "sha512-3vLKLPThO4td43lYRBygmMY18JN3CPh9w+XS2j8WC30vR4yZeFG4z1iFe4jXE43NtGqe//zHW5q8ENLlHvz9gw==",
919 | "requires": {
920 | "@lezer/common": "^1.0.0"
921 | }
922 | },
923 | "@lezer/javascript": {
924 | "version": "1.3.1",
925 | "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.3.1.tgz",
926 | "integrity": "sha512-3Z6OggGxRuqMntAuadxW0Oy7Zbs56KJSwujDc6vwhVfbi5upHOEzNIrNLvphDU/HozLoTCGQcjNmjLkb2Zr5pg==",
927 | "requires": {
928 | "@lezer/highlight": "^1.0.0",
929 | "@lezer/lr": "^1.0.0"
930 | }
931 | },
932 | "@lezer/lr": {
933 | "version": "1.2.5",
934 | "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.2.5.tgz",
935 | "integrity": "sha512-f9319YG1A/3ysgUE3bqCHEd7g+3ZZ71MWlwEc42mpnLVYXgfJJgtu1XAyBB4Kz8FmqmnFe9caopDqKeMMMAU6g==",
936 | "requires": {
937 | "@lezer/common": "^1.0.0"
938 | }
939 | },
940 | "@rollup/plugin-node-resolve": {
941 | "version": "15.0.1",
942 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz",
943 | "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==",
944 | "requires": {
945 | "@rollup/pluginutils": "^5.0.1",
946 | "@types/resolve": "1.20.2",
947 | "deepmerge": "^4.2.2",
948 | "is-builtin-module": "^3.2.0",
949 | "is-module": "^1.0.0",
950 | "resolve": "^1.22.1"
951 | }
952 | },
953 | "@rollup/pluginutils": {
954 | "version": "5.0.2",
955 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
956 | "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
957 | "requires": {
958 | "@types/estree": "^1.0.0",
959 | "estree-walker": "^2.0.2",
960 | "picomatch": "^2.3.1"
961 | }
962 | },
963 | "@types/estree": {
964 | "version": "1.0.0",
965 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
966 | "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ=="
967 | },
968 | "@types/resolve": {
969 | "version": "1.20.2",
970 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
971 | "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="
972 | },
973 | "acorn": {
974 | "version": "8.8.1",
975 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
976 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA=="
977 | },
978 | "buffer-from": {
979 | "version": "1.1.2",
980 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
981 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
982 | },
983 | "builtin-modules": {
984 | "version": "3.3.0",
985 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
986 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw=="
987 | },
988 | "camel-case": {
989 | "version": "4.1.2",
990 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
991 | "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
992 | "requires": {
993 | "pascal-case": "^3.1.2",
994 | "tslib": "^2.0.3"
995 | }
996 | },
997 | "clean-css": {
998 | "version": "5.3.1",
999 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz",
1000 | "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==",
1001 | "requires": {
1002 | "source-map": "~0.6.0"
1003 | }
1004 | },
1005 | "commander": {
1006 | "version": "9.4.1",
1007 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz",
1008 | "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw=="
1009 | },
1010 | "crelt": {
1011 | "version": "1.0.5",
1012 | "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz",
1013 | "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA=="
1014 | },
1015 | "css-b64-images": {
1016 | "version": "0.2.5",
1017 | "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz",
1018 | "integrity": "sha512-TgQBEdP07adhrDfXvI5o6bHGukKBNMzp2Ngckc/6d09zpjD2gc1Hl3Ca1CKgb8FXjHi88+Phv2Uegs2kTL4zjg=="
1019 | },
1020 | "debug": {
1021 | "version": "4.3.4",
1022 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1023 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1024 | "requires": {
1025 | "ms": "2.1.2"
1026 | }
1027 | },
1028 | "deepmerge": {
1029 | "version": "4.2.2",
1030 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
1031 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
1032 | },
1033 | "dot-case": {
1034 | "version": "3.0.4",
1035 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
1036 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
1037 | "requires": {
1038 | "no-case": "^3.0.4",
1039 | "tslib": "^2.0.3"
1040 | }
1041 | },
1042 | "entities": {
1043 | "version": "4.4.0",
1044 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
1045 | "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA=="
1046 | },
1047 | "estree-walker": {
1048 | "version": "2.0.2",
1049 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
1050 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
1051 | },
1052 | "find-up": {
1053 | "version": "6.3.0",
1054 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
1055 | "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
1056 | "requires": {
1057 | "locate-path": "^7.1.0",
1058 | "path-exists": "^5.0.0"
1059 | }
1060 | },
1061 | "fsevents": {
1062 | "version": "2.3.2",
1063 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1064 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1065 | "optional": true
1066 | },
1067 | "function-bind": {
1068 | "version": "1.1.1",
1069 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1070 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
1071 | },
1072 | "has": {
1073 | "version": "1.0.3",
1074 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1075 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1076 | "requires": {
1077 | "function-bind": "^1.1.1"
1078 | }
1079 | },
1080 | "html-minifier-terser": {
1081 | "version": "7.1.0",
1082 | "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.1.0.tgz",
1083 | "integrity": "sha512-BvPO2S7Ip0Q5qt+Y8j/27Vclj6uHC6av0TMoDn7/bJPhMWHI2UtR2e/zEgJn3/qYAmxumrGp9q4UHurL6mtW9Q==",
1084 | "requires": {
1085 | "camel-case": "^4.1.2",
1086 | "clean-css": "5.2.0",
1087 | "commander": "^9.4.1",
1088 | "entities": "^4.4.0",
1089 | "param-case": "^3.0.4",
1090 | "relateurl": "^0.2.7",
1091 | "terser": "^5.15.1"
1092 | },
1093 | "dependencies": {
1094 | "clean-css": {
1095 | "version": "5.2.0",
1096 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.0.tgz",
1097 | "integrity": "sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==",
1098 | "requires": {
1099 | "source-map": "~0.6.0"
1100 | }
1101 | }
1102 | }
1103 | },
1104 | "is-builtin-module": {
1105 | "version": "3.2.0",
1106 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz",
1107 | "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==",
1108 | "requires": {
1109 | "builtin-modules": "^3.3.0"
1110 | }
1111 | },
1112 | "is-core-module": {
1113 | "version": "2.11.0",
1114 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
1115 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
1116 | "requires": {
1117 | "has": "^1.0.3"
1118 | }
1119 | },
1120 | "is-module": {
1121 | "version": "1.0.0",
1122 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
1123 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="
1124 | },
1125 | "jju": {
1126 | "version": "1.4.0",
1127 | "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
1128 | "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA=="
1129 | },
1130 | "locate-path": {
1131 | "version": "7.1.1",
1132 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
1133 | "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
1134 | "requires": {
1135 | "p-locate": "^6.0.0"
1136 | }
1137 | },
1138 | "lower-case": {
1139 | "version": "2.0.2",
1140 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
1141 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
1142 | "requires": {
1143 | "tslib": "^2.0.3"
1144 | }
1145 | },
1146 | "minify": {
1147 | "version": "9.1.0",
1148 | "resolved": "https://registry.npmjs.org/minify/-/minify-9.1.0.tgz",
1149 | "integrity": "sha512-1/VsCf9hNOE5dntVUaGGVfo5s2+k6LQsZx9HR2EX5/MUiNmDr0MTFGFD56ouz3yks8vjCVTrH1wir6gTF0anhw==",
1150 | "requires": {
1151 | "clean-css": "^5.0.1",
1152 | "css-b64-images": "~0.2.5",
1153 | "debug": "^4.1.0",
1154 | "find-up": "^6.1.0",
1155 | "html-minifier-terser": "^7.0.0-alpha.1",
1156 | "readjson": "^2.2.2",
1157 | "simport": "^1.2.0",
1158 | "terser": "^5.3.2",
1159 | "try-catch": "^3.0.0",
1160 | "try-to-catch": "^3.0.0"
1161 | }
1162 | },
1163 | "ms": {
1164 | "version": "2.1.2",
1165 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1166 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1167 | },
1168 | "no-case": {
1169 | "version": "3.0.4",
1170 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
1171 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
1172 | "requires": {
1173 | "lower-case": "^2.0.2",
1174 | "tslib": "^2.0.3"
1175 | }
1176 | },
1177 | "p-limit": {
1178 | "version": "4.0.0",
1179 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
1180 | "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
1181 | "requires": {
1182 | "yocto-queue": "^1.0.0"
1183 | }
1184 | },
1185 | "p-locate": {
1186 | "version": "6.0.0",
1187 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
1188 | "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
1189 | "requires": {
1190 | "p-limit": "^4.0.0"
1191 | }
1192 | },
1193 | "param-case": {
1194 | "version": "3.0.4",
1195 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
1196 | "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
1197 | "requires": {
1198 | "dot-case": "^3.0.4",
1199 | "tslib": "^2.0.3"
1200 | }
1201 | },
1202 | "pascal-case": {
1203 | "version": "3.1.2",
1204 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
1205 | "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
1206 | "requires": {
1207 | "no-case": "^3.0.4",
1208 | "tslib": "^2.0.3"
1209 | }
1210 | },
1211 | "path-exists": {
1212 | "version": "5.0.0",
1213 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
1214 | "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="
1215 | },
1216 | "path-parse": {
1217 | "version": "1.0.7",
1218 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1219 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
1220 | },
1221 | "picomatch": {
1222 | "version": "2.3.1",
1223 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1224 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
1225 | },
1226 | "readjson": {
1227 | "version": "2.2.2",
1228 | "resolved": "https://registry.npmjs.org/readjson/-/readjson-2.2.2.tgz",
1229 | "integrity": "sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==",
1230 | "requires": {
1231 | "jju": "^1.4.0",
1232 | "try-catch": "^3.0.0"
1233 | }
1234 | },
1235 | "relateurl": {
1236 | "version": "0.2.7",
1237 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
1238 | "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog=="
1239 | },
1240 | "resolve": {
1241 | "version": "1.22.1",
1242 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1243 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1244 | "requires": {
1245 | "is-core-module": "^2.9.0",
1246 | "path-parse": "^1.0.7",
1247 | "supports-preserve-symlinks-flag": "^1.0.0"
1248 | }
1249 | },
1250 | "rollup": {
1251 | "version": "3.5.1",
1252 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.5.1.tgz",
1253 | "integrity": "sha512-hdQWTvPeiAbM6SUkxV70HdGUVxsgsc+CLy5fuh4KdgUBJ0SowXiix8gANgXoG3wEuLwfoJhCT2V+WwxfWq9Ikw==",
1254 | "requires": {
1255 | "fsevents": "~2.3.2"
1256 | }
1257 | },
1258 | "simport": {
1259 | "version": "1.2.0",
1260 | "resolved": "https://registry.npmjs.org/simport/-/simport-1.2.0.tgz",
1261 | "integrity": "sha512-85Bm7pKsqiiQ8rmYCaPDdlXZjJvuW6/k/FY8MTtLFMgU7f8S00CgTHfRtWB6KwSb6ek4p9YyG2enG1+yJbl+CA==",
1262 | "requires": {
1263 | "readjson": "^2.2.0",
1264 | "try-to-catch": "^3.0.0"
1265 | }
1266 | },
1267 | "source-map": {
1268 | "version": "0.6.1",
1269 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1270 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
1271 | },
1272 | "source-map-support": {
1273 | "version": "0.5.21",
1274 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
1275 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
1276 | "requires": {
1277 | "buffer-from": "^1.0.0",
1278 | "source-map": "^0.6.0"
1279 | }
1280 | },
1281 | "style-mod": {
1282 | "version": "4.0.0",
1283 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz",
1284 | "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw=="
1285 | },
1286 | "supports-preserve-symlinks-flag": {
1287 | "version": "1.0.0",
1288 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1289 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
1290 | },
1291 | "terser": {
1292 | "version": "5.16.1",
1293 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz",
1294 | "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==",
1295 | "requires": {
1296 | "@jridgewell/source-map": "^0.3.2",
1297 | "acorn": "^8.5.0",
1298 | "commander": "^2.20.0",
1299 | "source-map-support": "~0.5.20"
1300 | },
1301 | "dependencies": {
1302 | "commander": {
1303 | "version": "2.20.3",
1304 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
1305 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
1306 | }
1307 | }
1308 | },
1309 | "try-catch": {
1310 | "version": "3.0.1",
1311 | "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-3.0.1.tgz",
1312 | "integrity": "sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ=="
1313 | },
1314 | "try-to-catch": {
1315 | "version": "3.0.1",
1316 | "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz",
1317 | "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ=="
1318 | },
1319 | "tslib": {
1320 | "version": "2.4.1",
1321 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
1322 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
1323 | },
1324 | "w3c-keyname": {
1325 | "version": "2.2.6",
1326 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
1327 | "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg=="
1328 | },
1329 | "yocto-queue": {
1330 | "version": "1.0.0",
1331 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
1332 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g=="
1333 | }
1334 | }
1335 | }
1336 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "@codemirror/commands": "^6.1.2",
4 | "@codemirror/lang-javascript": "^6.1.1",
5 | "@codemirror/search": "^6.2.3",
6 | "@codemirror/theme-one-dark": "^6.1.0",
7 | "@codemirror/view": "^6.6.0",
8 | "@rollup/plugin-node-resolve": "^15.0.1",
9 | "minify": "^9.1.0",
10 | "rollup": "^3.5.1"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/scripts/watch_and_bundle.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -ex
4 |
5 | reflex -g src/editor.js -- sh -c \
6 | 'npx rollup src/editor.js -f iife -o dist/cm6.bundle.js -p @rollup/plugin-node-resolve --output.name cm6 && \
7 | cd dist && \
8 | npx minify cm6.bundle.js > cm6.bundle.min.js && \
9 | echo ...done'
10 |
--------------------------------------------------------------------------------
/src/editor.js:
--------------------------------------------------------------------------------
1 | import { EditorState } from '@codemirror/state';
2 | import { openSearchPanel, highlightSelectionMatches } from '@codemirror/search';
3 | import { indentWithTab, history, defaultKeymap, historyKeymap } from '@codemirror/commands';
4 | import { foldGutter, indentOnInput, indentUnit, bracketMatching, foldKeymap, syntaxHighlighting, defaultHighlightStyle } from '@codemirror/language';
5 | import { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from '@codemirror/autocomplete';
6 | import { lineNumbers, highlightActiveLineGutter, highlightSpecialChars, drawSelection, dropCursor, rectangularSelection, crosshairCursor, highlightActiveLine, keymap, EditorView } from '@codemirror/view';
7 |
8 | // Theme
9 | import { oneDark } from "@codemirror/theme-one-dark";
10 |
11 | // Language
12 | import { javascript } from "@codemirror/lang-javascript";
13 |
14 | function createEditorState(initialContents, options = {}) {
15 | let extensions = [
16 | lineNumbers(),
17 | highlightActiveLineGutter(),
18 | highlightSpecialChars(),
19 | history(),
20 | foldGutter(),
21 | drawSelection(),
22 | indentUnit.of(" "),
23 | EditorState.allowMultipleSelections.of(true),
24 | indentOnInput(),
25 | bracketMatching(),
26 | closeBrackets(),
27 | autocompletion(),
28 | rectangularSelection(),
29 | crosshairCursor(),
30 | highlightActiveLine(),
31 | highlightSelectionMatches(),
32 | keymap.of([
33 | indentWithTab,
34 | ...closeBracketsKeymap,
35 | ...defaultKeymap,
36 | ...historyKeymap,
37 | ...foldKeymap,
38 | ...completionKeymap,
39 | ]),
40 | javascript(),
41 | syntaxHighlighting(defaultHighlightStyle, { fallback: true }),
42 | ];
43 |
44 | if (options.oneDark)
45 | extensions.push(oneDark);
46 |
47 | return EditorState.create({
48 | doc: initialContents,
49 | extensions
50 | });
51 | }
52 |
53 | function createEditorView(state, parent) {
54 | return new EditorView({ state, parent });
55 | }
56 |
57 | export { createEditorState, createEditorView, openSearchPanel };
--------------------------------------------------------------------------------