├── .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 | 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 | 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 }; --------------------------------------------------------------------------------