├── .editorconfig ├── .gitignore ├── CHANGELOG.md ├── LICENSE.txt ├── README.md ├── package-lock.json ├── package.json ├── src ├── classCollector.ts ├── cli.ts ├── commands │ └── build.ts ├── css.ts ├── postcssCollectorPlugin.ts ├── stringBuilder.ts └── utils.ts ├── tests ├── __snapshots__ │ └── main.test.ts.snap ├── fixtures │ ├── checkSupportedFormat │ │ ├── CSS.module.css │ │ ├── SASS.module.sass │ │ └── SCSS.module.scss │ ├── moduleWithDot │ │ └── User.Index.module.scss │ ├── multipleCssModules │ │ ├── App.module.scss │ │ └── Main.module.scss │ ├── nestedCss │ │ ├── CSS.module.css │ │ ├── SASS.module.sass │ │ └── SCSS.module.scss │ ├── nestedFolder │ │ ├── App.module.css │ │ └── Folder1 │ │ │ ├── App.module.css │ │ │ └── Folder1.1 │ │ │ └── App.module.css │ ├── notInternalModule │ │ └── App.module.scss │ ├── oneCssModule │ │ └── App.module.scss │ ├── sanitizeClasses │ │ └── App.module.css │ └── transformToCamelCase │ │ └── App.module.css └── main.test.ts └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: 2 | http://EditorConfig.org 3 | 4 | # top-most EditorConfig file 5 | root = true 6 | 7 | # Default settings: 8 | # A newline ending every file 9 | # Use 4 spaces as indentation 10 | [*] 11 | charset = utf-8 12 | insert_final_newline = true 13 | indent_style = space 14 | indent_size = 4 15 | trim_trailing_whitespace = true 16 | 17 | [*.fsproj] 18 | indent_size = 2 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | [Ll]og/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | *.VC.VC.opendb 85 | 86 | # Visual Studio profiler 87 | *.psess 88 | *.vsp 89 | *.vspx 90 | *.sap 91 | 92 | # TFS 2012 Local Workspace 93 | $tf/ 94 | 95 | # Guidance Automation Toolkit 96 | *.gpState 97 | 98 | # ReSharper is a .NET coding add-in 99 | _ReSharper*/ 100 | *.[Rr]e[Ss]harper 101 | *.DotSettings.user 102 | 103 | # JustCode is a .NET coding add-in 104 | .JustCode 105 | 106 | # TeamCity is a build add-in 107 | _TeamCity* 108 | 109 | # DotCover is a Code Coverage Tool 110 | *.dotCover 111 | 112 | # NCrunch 113 | _NCrunch_* 114 | .*crunch*.local.xml 115 | nCrunchTemp_* 116 | 117 | # MightyMoose 118 | *.mm.* 119 | AutoTest.Net/ 120 | 121 | # Web workbench (sass) 122 | .sass-cache/ 123 | 124 | # Installshield output folder 125 | [Ee]xpress/ 126 | 127 | # DocProject is a documentation generator add-in 128 | DocProject/buildhelp/ 129 | DocProject/Help/*.HxT 130 | DocProject/Help/*.HxC 131 | DocProject/Help/*.hhc 132 | DocProject/Help/*.hhk 133 | DocProject/Help/*.hhp 134 | DocProject/Help/Html2 135 | DocProject/Help/html 136 | 137 | # Click-Once directory 138 | publish/ 139 | 140 | # Publish Web Output 141 | *.[Pp]ublish.xml 142 | *.azurePubxml 143 | # TODO: Comment the next line if you want to checkin your web deploy settings 144 | # but database connection strings (with potential passwords) will be unencrypted 145 | *.pubxml 146 | *.publishproj 147 | 148 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 149 | # checkin your Azure Web App publish settings, but sensitive information contained 150 | # in these scripts will be unencrypted 151 | PublishScripts/ 152 | 153 | # NuGet Packages 154 | *.nupkg 155 | packages/ 156 | # The packages folder can be ignored because of Package Restore 157 | **/packages/* 158 | # except build/, which is used as an MSBuild target. 159 | !**/packages/build/ 160 | # Uncomment if necessary however generally it will be regenerated when needed 161 | #!**/packages/repositories.config 162 | # NuGet v3's project.json files produces more ignoreable files 163 | *.nuget.props 164 | *.nuget.targets 165 | 166 | # Microsoft Azure Build Output 167 | csx/ 168 | *.build.csdef 169 | 170 | # Microsoft Azure Emulator 171 | ecf/ 172 | rcf/ 173 | 174 | # Windows Store app package directories and files 175 | AppPackages/ 176 | BundleArtifacts/ 177 | Package.StoreAssociation.xml 178 | _pkginfo.txt 179 | 180 | # Visual Studio cache files 181 | # files ending in .cache can be ignored 182 | *.[Cc]ache 183 | # but keep track of directories ending in .cache 184 | !*.[Cc]ache/ 185 | 186 | # Others 187 | ClientBin/ 188 | ~$* 189 | *~ 190 | *.dbmdl 191 | *.dbproj.schemaview 192 | *.pfx 193 | *.publishsettings 194 | node_modules/ 195 | orleans.codegen.cs 196 | 197 | # Since there are multiple workflows, uncomment next line to ignore bower_components 198 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 199 | #bower_components/ 200 | 201 | # RIA/Silverlight projects 202 | Generated_Code/ 203 | 204 | # Backup & report files from converting an old project file 205 | # to a newer Visual Studio version. Backup files are not needed, 206 | # because we have git ;-) 207 | _UpgradeReport_Files/ 208 | Backup*/ 209 | UpgradeLog*.XML 210 | UpgradeLog*.htm 211 | 212 | # SQL Server files 213 | *.mdf 214 | *.ldf 215 | 216 | # Business Intelligence projects 217 | *.rdl.data 218 | *.bim.layout 219 | *.bim_*.settings 220 | 221 | # Microsoft Fakes 222 | FakesAssemblies/ 223 | 224 | # GhostDoc plugin setting file 225 | *.GhostDoc.xml 226 | 227 | # Node.js Tools for Visual Studio 228 | .ntvs_analysis.dat 229 | 230 | # Visual Studio 6 build log 231 | *.plg 232 | 233 | # Visual Studio 6 workspace options file 234 | *.opt 235 | 236 | # Visual Studio LightSwitch build output 237 | **/*.HTMLClient/GeneratedArtifacts 238 | **/*.DesktopClient/GeneratedArtifacts 239 | **/*.DesktopClient/ModelManifest.xml 240 | **/*.Server/GeneratedArtifacts 241 | **/*.Server/ModelManifest.xml 242 | _Pvt_Extensions 243 | 244 | # Paket dependency manager 245 | paket-files/ 246 | 247 | # FAKE - F# Make 248 | .fake/ 249 | 250 | # JetBrains Rider 251 | .idea/ 252 | *.sln.iml 253 | 254 | TestResults.xml 255 | 256 | dist/ 257 | 258 | 259 | docs/build/ 260 | docs/scss/extra/ 261 | temp/ 262 | 263 | \.DS_Store 264 | 265 | demos/Thoth\.Elmish\.Demo/output/ 266 | 267 | \.ionide/ 268 | fableBuild/ 269 | docs_deploy/ 270 | .nacara/ 271 | 272 | # Ignore generated API file 273 | docs/reference/ 274 | build/ 275 | 276 | # Don't track generated files 277 | tests/**/CssModules.fs 278 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## Unreleased 9 | 10 | ## 1.8.0 - 2024-03-08 11 | 12 | ### Fixed 13 | 14 | * Only package files that are in the `build` directory 15 | 16 | ## 1.7.0 - 2024-03-08 17 | 18 | ### Changed 19 | 20 | * [BREAKING-CHANGE] Don't transform to `camelCase` by default. Instead escape using double backticks 21 | 22 | ## 1.6.0 - 2024-03-06 23 | 24 | ### Changed 25 | 26 | * Do not sanitize `_` in class names 27 | 28 | ## 1.5.0 - 2024-02-01 29 | 30 | ### Fixed 31 | 32 | * [GH-2](https://github.com/MangelMaxime/fable-css-modules/issues/2) Support files with a `.` in their module name 33 | 34 | ## 1.4.1 - 2022-06-30 35 | 36 | ### Removed 37 | 38 | * Remove debug log 39 | 40 | ## 1.4.0 - 2022-06-30 41 | 42 | ### Fixed 43 | 44 | * Fix glob pattern to capture `css`, `scss` and `sass` files. 45 | * Try fix again the "skip mechanism", sometimes it was removing a module that should not be removed. 46 | 47 | ### Added 48 | 49 | * Add a log in case no classes are found. 50 | 51 | ## 1.3.1 - 2022-06-29 52 | 53 | ### Fixed 54 | 55 | * Fix bug when providing the positional argument. The "skip mechanism" was not working properly. 56 | 57 | ## 1.3.0 - 2022-06-29 58 | 59 | ### Added 60 | 61 | * Add message when the generation is done. 62 | * Generate nothing if no CSS modules are found. 63 | 64 | ## 1.2.0 - 2022-06-29 65 | 66 | ### Fixed 67 | 68 | * Make the positional arguments optional. Before we couldn't provide a value to it, it would crash the CLI saying `Unkown argument: XXX` 69 | * Better normalize the `source` and `destinationFile`. 70 | 71 | This help fix the "skip mechanism" of the `source` segment path from the generated `modules` 72 | 73 | ## 1.1.0 - 2022-06-29 74 | 75 | ### Changed 76 | 77 | * Change from `XXX.YYY.ModuleName.Classes` to `XXX.YYY.ModuleName` 78 | 79 | This makes the module path a bit less verbose. 80 | 81 | * Mark `CssModules` as `[]`. 82 | 83 | This will the simplification of module path, should make less verbose to access the classes and be still explicit enough. 84 | 85 | ## 1.0.0 - 2022-06-29 86 | 87 | ### Added 88 | 89 | * Initial release 90 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2024 Mangel Maxime 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fable-css-modules 2 | 3 | Generate Fable bindings for your CSS modules classes 4 | 5 | Allowing you to leverage CSS modules in your Fable projects, in a **safe way**. 6 | 7 | ```fs 8 | module Components.QRCode 9 | 10 | open Fable.Core.JsInterop 11 | open Feliz 12 | 13 | // Import the CSS module 14 | let private classes : CssModules.Components.QRCode = import "default" "./QRCode.module.scss" 15 | 16 | [] 17 | let QRCode () = 18 | Html.div [ 19 | prop.className classes.qrCode // Here you get completion of the defined CSS classes 20 | prop.children [ 21 | // .. 22 | ] 23 | ] 24 | ``` 25 | 26 | ## Prelude 27 | 28 | **fable-css-module** can be used with **any bundler** (Vite, Webpack, etc.) that supports CSS modules and **any framework** (React, Vue, etc.). 29 | 30 | This tools supports: 31 | 32 | - CSS modules identified by `*.module.scss` 33 | - SASS/SCSS modules identified by `*.module.sass` or `*.module.scss` 34 | 35 | ## Installation 36 | 37 | `fable-css-modules` is an NPM tool and can be installed using a Node.js package manager. 38 | 39 | Example: 40 | 41 | ```bash 42 | npm install fable-css-modules 43 | ``` 44 | 45 | ## Usage 46 | 47 | The tool can be call using `npx fable-css-modules` or `npx fcm`. 48 | 49 | ```shell 50 | fcm 51 | 52 | Generate bindings for all the CSS modules in folder to file 53 | 54 | Positionals: 55 | source Folder where the CSS modules are located [string] [default: "."] 56 | 57 | Options: 58 | --version Show version number [boolean] 59 | --outFile Output file where the binding will be written 60 | [string] [default: "CssModules.fs"] 61 | --internal Mark the generated module as internal[boolean] [default: true] 62 | -h, --help Show help [boolean] 63 | ``` 64 | 65 | Example: 66 | 67 | ```text 68 | src 69 | └─── Components 70 | │ QRCode.fs 71 | │ QRCode.module.scss 72 | └─── User 73 | History.fs 74 | History.module.scss 75 | ``` 76 | 77 | If you invoke `npx fcm` in the `src` folder, a file `CssModules.fs` will be generated in `src` with the following content: 78 | 79 | ```fs 80 | //----------------------------------------------------------------------------- 81 | // This code was generated by fable-css-modules. 82 | // Changes to this file will be lost when the code is regenerated. 83 | //----------------------------------------------------------------------------- 84 | 85 | [] 86 | module internal CssModules 87 | 88 | open Fable.Core 89 | 90 | module Components = 91 | 92 | type QRCode = 93 | 94 | /// 95 | /// Binding for qr-code class 96 | /// 97 | [] 98 | abstract qrCode : string 99 | 100 | module User = 101 | 102 | type History = 103 | 104 | /// 105 | /// Binding for history-container class 106 | /// 107 | [] 108 | abstract ``history-container`` : string 109 | ``` 110 | 111 | You should now add `` to your fsproj file. 112 | 113 | You can now use the `CssModules` module in your Fable code. 114 | 115 | *src/Components/QRCode.fs* 116 | 117 | ```fs 118 | module Components.QRCode 119 | 120 | open Fable.Core.JsInterop 121 | open Feliz 122 | 123 | let private classes : CssModules.Components.QRCode = import "default" "./QRCode.module.scss" 124 | 125 | [] 126 | let QRCode () = 127 | Html.div [ 128 | prop.className classes.qrCode 129 | prop.children [ 130 | // .. 131 | ] 132 | ] 133 | ``` 134 | 135 | ## Best practices 136 | 137 | You should avoid committing the generated files to your repository. This will force you to run `fable-css-modules` every time you want to build your project. 138 | 139 | This help make sure that your CSS modules bindings is up to date with the actual CSS modules. 140 | 141 | ## Watch mode 142 | 143 | Watch mode is not yet supported out of this box by fable-css-modules. 144 | 145 | But you can easily add using [nodemon](https://nodemon.io/). 146 | 147 | ```shell 148 | npx nodemon -e module.scss --exec "fcm" 149 | ``` 150 | 151 | This command will automatically run `fcm` every time a change to a `.module.scss` file is detected. 152 | 153 | ## IDE tips 154 | 155 | It can happen that IDEs takes a moment to reflect the changes in the generated file. 156 | 157 | Here are a few tips to help force them to update their references. 158 | 159 | ### Ionide 160 | 161 | Navigating to the `CssModules.fs` file seems to make it refresh the file. 162 | 163 | You can navigate to it by `Ctrl+Click` on the reference. 164 | 165 | If this is not enough, you can try to add a space to the file and saving it manually. 166 | 167 | *Remember, `CssModules.fs` should not be commited so adding non meaningful spaces don't really matter* 168 | 169 | ### Rider 170 | 171 | You can click to `File > Reload All from Disk` or press `Ctrl+Alt+Y` 172 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fable-css-modules", 3 | "version": "1.4.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "fable-css-modules", 9 | "version": "1.4.1", 10 | "license": "Apache-2.0", 11 | "dependencies": { 12 | "fast-glob": "^3.2.11", 13 | "postcss": "^8.4.14", 14 | "postcss-selector-parser": "^6.0.10", 15 | "sass": "^1.53.0", 16 | "yargs": "^17.5.1" 17 | }, 18 | "bin": { 19 | "fable-css-modules": "build/cli.js", 20 | "fcm": "build/cli.js" 21 | }, 22 | "devDependencies": { 23 | "@types/node": "^18.0.0", 24 | "@types/yargs": "^17.0.10", 25 | "rimraf": "^3.0.2", 26 | "typescript": "^4.7.4", 27 | "vitest": "^1.3.1" 28 | } 29 | }, 30 | "node_modules/@esbuild/aix-ppc64": { 31 | "version": "0.19.12", 32 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", 33 | "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", 34 | "cpu": [ 35 | "ppc64" 36 | ], 37 | "dev": true, 38 | "optional": true, 39 | "os": [ 40 | "aix" 41 | ], 42 | "engines": { 43 | "node": ">=12" 44 | } 45 | }, 46 | "node_modules/@esbuild/android-arm": { 47 | "version": "0.19.12", 48 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", 49 | "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", 50 | "cpu": [ 51 | "arm" 52 | ], 53 | "dev": true, 54 | "optional": true, 55 | "os": [ 56 | "android" 57 | ], 58 | "engines": { 59 | "node": ">=12" 60 | } 61 | }, 62 | "node_modules/@esbuild/android-arm64": { 63 | "version": "0.19.12", 64 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", 65 | "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", 66 | "cpu": [ 67 | "arm64" 68 | ], 69 | "dev": true, 70 | "optional": true, 71 | "os": [ 72 | "android" 73 | ], 74 | "engines": { 75 | "node": ">=12" 76 | } 77 | }, 78 | "node_modules/@esbuild/android-x64": { 79 | "version": "0.19.12", 80 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", 81 | "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", 82 | "cpu": [ 83 | "x64" 84 | ], 85 | "dev": true, 86 | "optional": true, 87 | "os": [ 88 | "android" 89 | ], 90 | "engines": { 91 | "node": ">=12" 92 | } 93 | }, 94 | "node_modules/@esbuild/darwin-arm64": { 95 | "version": "0.19.12", 96 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", 97 | "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", 98 | "cpu": [ 99 | "arm64" 100 | ], 101 | "dev": true, 102 | "optional": true, 103 | "os": [ 104 | "darwin" 105 | ], 106 | "engines": { 107 | "node": ">=12" 108 | } 109 | }, 110 | "node_modules/@esbuild/darwin-x64": { 111 | "version": "0.19.12", 112 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", 113 | "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", 114 | "cpu": [ 115 | "x64" 116 | ], 117 | "dev": true, 118 | "optional": true, 119 | "os": [ 120 | "darwin" 121 | ], 122 | "engines": { 123 | "node": ">=12" 124 | } 125 | }, 126 | "node_modules/@esbuild/freebsd-arm64": { 127 | "version": "0.19.12", 128 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", 129 | "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", 130 | "cpu": [ 131 | "arm64" 132 | ], 133 | "dev": true, 134 | "optional": true, 135 | "os": [ 136 | "freebsd" 137 | ], 138 | "engines": { 139 | "node": ">=12" 140 | } 141 | }, 142 | "node_modules/@esbuild/freebsd-x64": { 143 | "version": "0.19.12", 144 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", 145 | "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", 146 | "cpu": [ 147 | "x64" 148 | ], 149 | "dev": true, 150 | "optional": true, 151 | "os": [ 152 | "freebsd" 153 | ], 154 | "engines": { 155 | "node": ">=12" 156 | } 157 | }, 158 | "node_modules/@esbuild/linux-arm": { 159 | "version": "0.19.12", 160 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", 161 | "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", 162 | "cpu": [ 163 | "arm" 164 | ], 165 | "dev": true, 166 | "optional": true, 167 | "os": [ 168 | "linux" 169 | ], 170 | "engines": { 171 | "node": ">=12" 172 | } 173 | }, 174 | "node_modules/@esbuild/linux-arm64": { 175 | "version": "0.19.12", 176 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", 177 | "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", 178 | "cpu": [ 179 | "arm64" 180 | ], 181 | "dev": true, 182 | "optional": true, 183 | "os": [ 184 | "linux" 185 | ], 186 | "engines": { 187 | "node": ">=12" 188 | } 189 | }, 190 | "node_modules/@esbuild/linux-ia32": { 191 | "version": "0.19.12", 192 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", 193 | "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", 194 | "cpu": [ 195 | "ia32" 196 | ], 197 | "dev": true, 198 | "optional": true, 199 | "os": [ 200 | "linux" 201 | ], 202 | "engines": { 203 | "node": ">=12" 204 | } 205 | }, 206 | "node_modules/@esbuild/linux-loong64": { 207 | "version": "0.19.12", 208 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", 209 | "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", 210 | "cpu": [ 211 | "loong64" 212 | ], 213 | "dev": true, 214 | "optional": true, 215 | "os": [ 216 | "linux" 217 | ], 218 | "engines": { 219 | "node": ">=12" 220 | } 221 | }, 222 | "node_modules/@esbuild/linux-mips64el": { 223 | "version": "0.19.12", 224 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", 225 | "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", 226 | "cpu": [ 227 | "mips64el" 228 | ], 229 | "dev": true, 230 | "optional": true, 231 | "os": [ 232 | "linux" 233 | ], 234 | "engines": { 235 | "node": ">=12" 236 | } 237 | }, 238 | "node_modules/@esbuild/linux-ppc64": { 239 | "version": "0.19.12", 240 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", 241 | "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", 242 | "cpu": [ 243 | "ppc64" 244 | ], 245 | "dev": true, 246 | "optional": true, 247 | "os": [ 248 | "linux" 249 | ], 250 | "engines": { 251 | "node": ">=12" 252 | } 253 | }, 254 | "node_modules/@esbuild/linux-riscv64": { 255 | "version": "0.19.12", 256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", 257 | "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", 258 | "cpu": [ 259 | "riscv64" 260 | ], 261 | "dev": true, 262 | "optional": true, 263 | "os": [ 264 | "linux" 265 | ], 266 | "engines": { 267 | "node": ">=12" 268 | } 269 | }, 270 | "node_modules/@esbuild/linux-s390x": { 271 | "version": "0.19.12", 272 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", 273 | "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", 274 | "cpu": [ 275 | "s390x" 276 | ], 277 | "dev": true, 278 | "optional": true, 279 | "os": [ 280 | "linux" 281 | ], 282 | "engines": { 283 | "node": ">=12" 284 | } 285 | }, 286 | "node_modules/@esbuild/linux-x64": { 287 | "version": "0.19.12", 288 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", 289 | "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", 290 | "cpu": [ 291 | "x64" 292 | ], 293 | "dev": true, 294 | "optional": true, 295 | "os": [ 296 | "linux" 297 | ], 298 | "engines": { 299 | "node": ">=12" 300 | } 301 | }, 302 | "node_modules/@esbuild/netbsd-x64": { 303 | "version": "0.19.12", 304 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", 305 | "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", 306 | "cpu": [ 307 | "x64" 308 | ], 309 | "dev": true, 310 | "optional": true, 311 | "os": [ 312 | "netbsd" 313 | ], 314 | "engines": { 315 | "node": ">=12" 316 | } 317 | }, 318 | "node_modules/@esbuild/openbsd-x64": { 319 | "version": "0.19.12", 320 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", 321 | "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", 322 | "cpu": [ 323 | "x64" 324 | ], 325 | "dev": true, 326 | "optional": true, 327 | "os": [ 328 | "openbsd" 329 | ], 330 | "engines": { 331 | "node": ">=12" 332 | } 333 | }, 334 | "node_modules/@esbuild/sunos-x64": { 335 | "version": "0.19.12", 336 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", 337 | "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", 338 | "cpu": [ 339 | "x64" 340 | ], 341 | "dev": true, 342 | "optional": true, 343 | "os": [ 344 | "sunos" 345 | ], 346 | "engines": { 347 | "node": ">=12" 348 | } 349 | }, 350 | "node_modules/@esbuild/win32-arm64": { 351 | "version": "0.19.12", 352 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", 353 | "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", 354 | "cpu": [ 355 | "arm64" 356 | ], 357 | "dev": true, 358 | "optional": true, 359 | "os": [ 360 | "win32" 361 | ], 362 | "engines": { 363 | "node": ">=12" 364 | } 365 | }, 366 | "node_modules/@esbuild/win32-ia32": { 367 | "version": "0.19.12", 368 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", 369 | "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", 370 | "cpu": [ 371 | "ia32" 372 | ], 373 | "dev": true, 374 | "optional": true, 375 | "os": [ 376 | "win32" 377 | ], 378 | "engines": { 379 | "node": ">=12" 380 | } 381 | }, 382 | "node_modules/@esbuild/win32-x64": { 383 | "version": "0.19.12", 384 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", 385 | "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", 386 | "cpu": [ 387 | "x64" 388 | ], 389 | "dev": true, 390 | "optional": true, 391 | "os": [ 392 | "win32" 393 | ], 394 | "engines": { 395 | "node": ">=12" 396 | } 397 | }, 398 | "node_modules/@jest/schemas": { 399 | "version": "29.6.3", 400 | "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", 401 | "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", 402 | "dev": true, 403 | "dependencies": { 404 | "@sinclair/typebox": "^0.27.8" 405 | }, 406 | "engines": { 407 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 408 | } 409 | }, 410 | "node_modules/@jridgewell/sourcemap-codec": { 411 | "version": "1.4.15", 412 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 413 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 414 | "dev": true 415 | }, 416 | "node_modules/@nodelib/fs.scandir": { 417 | "version": "2.1.5", 418 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 419 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 420 | "dependencies": { 421 | "@nodelib/fs.stat": "2.0.5", 422 | "run-parallel": "^1.1.9" 423 | }, 424 | "engines": { 425 | "node": ">= 8" 426 | } 427 | }, 428 | "node_modules/@nodelib/fs.stat": { 429 | "version": "2.0.5", 430 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 431 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 432 | "engines": { 433 | "node": ">= 8" 434 | } 435 | }, 436 | "node_modules/@nodelib/fs.walk": { 437 | "version": "1.2.8", 438 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 439 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 440 | "dependencies": { 441 | "@nodelib/fs.scandir": "2.1.5", 442 | "fastq": "^1.6.0" 443 | }, 444 | "engines": { 445 | "node": ">= 8" 446 | } 447 | }, 448 | "node_modules/@rollup/rollup-android-arm-eabi": { 449 | "version": "4.12.0", 450 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", 451 | "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", 452 | "cpu": [ 453 | "arm" 454 | ], 455 | "dev": true, 456 | "optional": true, 457 | "os": [ 458 | "android" 459 | ] 460 | }, 461 | "node_modules/@rollup/rollup-android-arm64": { 462 | "version": "4.12.0", 463 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", 464 | "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", 465 | "cpu": [ 466 | "arm64" 467 | ], 468 | "dev": true, 469 | "optional": true, 470 | "os": [ 471 | "android" 472 | ] 473 | }, 474 | "node_modules/@rollup/rollup-darwin-arm64": { 475 | "version": "4.12.0", 476 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", 477 | "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", 478 | "cpu": [ 479 | "arm64" 480 | ], 481 | "dev": true, 482 | "optional": true, 483 | "os": [ 484 | "darwin" 485 | ] 486 | }, 487 | "node_modules/@rollup/rollup-darwin-x64": { 488 | "version": "4.12.0", 489 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", 490 | "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", 491 | "cpu": [ 492 | "x64" 493 | ], 494 | "dev": true, 495 | "optional": true, 496 | "os": [ 497 | "darwin" 498 | ] 499 | }, 500 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 501 | "version": "4.12.0", 502 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", 503 | "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", 504 | "cpu": [ 505 | "arm" 506 | ], 507 | "dev": true, 508 | "optional": true, 509 | "os": [ 510 | "linux" 511 | ] 512 | }, 513 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 514 | "version": "4.12.0", 515 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", 516 | "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", 517 | "cpu": [ 518 | "arm64" 519 | ], 520 | "dev": true, 521 | "optional": true, 522 | "os": [ 523 | "linux" 524 | ] 525 | }, 526 | "node_modules/@rollup/rollup-linux-arm64-musl": { 527 | "version": "4.12.0", 528 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", 529 | "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", 530 | "cpu": [ 531 | "arm64" 532 | ], 533 | "dev": true, 534 | "optional": true, 535 | "os": [ 536 | "linux" 537 | ] 538 | }, 539 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 540 | "version": "4.12.0", 541 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", 542 | "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", 543 | "cpu": [ 544 | "riscv64" 545 | ], 546 | "dev": true, 547 | "optional": true, 548 | "os": [ 549 | "linux" 550 | ] 551 | }, 552 | "node_modules/@rollup/rollup-linux-x64-gnu": { 553 | "version": "4.12.0", 554 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", 555 | "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", 556 | "cpu": [ 557 | "x64" 558 | ], 559 | "dev": true, 560 | "optional": true, 561 | "os": [ 562 | "linux" 563 | ] 564 | }, 565 | "node_modules/@rollup/rollup-linux-x64-musl": { 566 | "version": "4.12.0", 567 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", 568 | "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", 569 | "cpu": [ 570 | "x64" 571 | ], 572 | "dev": true, 573 | "optional": true, 574 | "os": [ 575 | "linux" 576 | ] 577 | }, 578 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 579 | "version": "4.12.0", 580 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", 581 | "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", 582 | "cpu": [ 583 | "arm64" 584 | ], 585 | "dev": true, 586 | "optional": true, 587 | "os": [ 588 | "win32" 589 | ] 590 | }, 591 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 592 | "version": "4.12.0", 593 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", 594 | "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", 595 | "cpu": [ 596 | "ia32" 597 | ], 598 | "dev": true, 599 | "optional": true, 600 | "os": [ 601 | "win32" 602 | ] 603 | }, 604 | "node_modules/@rollup/rollup-win32-x64-msvc": { 605 | "version": "4.12.0", 606 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", 607 | "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", 608 | "cpu": [ 609 | "x64" 610 | ], 611 | "dev": true, 612 | "optional": true, 613 | "os": [ 614 | "win32" 615 | ] 616 | }, 617 | "node_modules/@sinclair/typebox": { 618 | "version": "0.27.8", 619 | "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", 620 | "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", 621 | "dev": true 622 | }, 623 | "node_modules/@types/estree": { 624 | "version": "1.0.5", 625 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 626 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 627 | "dev": true 628 | }, 629 | "node_modules/@types/node": { 630 | "version": "18.0.0", 631 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", 632 | "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", 633 | "dev": true 634 | }, 635 | "node_modules/@types/yargs": { 636 | "version": "17.0.10", 637 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", 638 | "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", 639 | "dev": true, 640 | "dependencies": { 641 | "@types/yargs-parser": "*" 642 | } 643 | }, 644 | "node_modules/@types/yargs-parser": { 645 | "version": "21.0.0", 646 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", 647 | "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", 648 | "dev": true 649 | }, 650 | "node_modules/@vitest/expect": { 651 | "version": "1.3.1", 652 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", 653 | "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", 654 | "dev": true, 655 | "dependencies": { 656 | "@vitest/spy": "1.3.1", 657 | "@vitest/utils": "1.3.1", 658 | "chai": "^4.3.10" 659 | }, 660 | "funding": { 661 | "url": "https://opencollective.com/vitest" 662 | } 663 | }, 664 | "node_modules/@vitest/runner": { 665 | "version": "1.3.1", 666 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz", 667 | "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==", 668 | "dev": true, 669 | "dependencies": { 670 | "@vitest/utils": "1.3.1", 671 | "p-limit": "^5.0.0", 672 | "pathe": "^1.1.1" 673 | }, 674 | "funding": { 675 | "url": "https://opencollective.com/vitest" 676 | } 677 | }, 678 | "node_modules/@vitest/snapshot": { 679 | "version": "1.3.1", 680 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz", 681 | "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==", 682 | "dev": true, 683 | "dependencies": { 684 | "magic-string": "^0.30.5", 685 | "pathe": "^1.1.1", 686 | "pretty-format": "^29.7.0" 687 | }, 688 | "funding": { 689 | "url": "https://opencollective.com/vitest" 690 | } 691 | }, 692 | "node_modules/@vitest/spy": { 693 | "version": "1.3.1", 694 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", 695 | "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", 696 | "dev": true, 697 | "dependencies": { 698 | "tinyspy": "^2.2.0" 699 | }, 700 | "funding": { 701 | "url": "https://opencollective.com/vitest" 702 | } 703 | }, 704 | "node_modules/@vitest/utils": { 705 | "version": "1.3.1", 706 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", 707 | "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", 708 | "dev": true, 709 | "dependencies": { 710 | "diff-sequences": "^29.6.3", 711 | "estree-walker": "^3.0.3", 712 | "loupe": "^2.3.7", 713 | "pretty-format": "^29.7.0" 714 | }, 715 | "funding": { 716 | "url": "https://opencollective.com/vitest" 717 | } 718 | }, 719 | "node_modules/acorn": { 720 | "version": "8.11.3", 721 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 722 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 723 | "dev": true, 724 | "bin": { 725 | "acorn": "bin/acorn" 726 | }, 727 | "engines": { 728 | "node": ">=0.4.0" 729 | } 730 | }, 731 | "node_modules/acorn-walk": { 732 | "version": "8.3.2", 733 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", 734 | "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", 735 | "dev": true, 736 | "engines": { 737 | "node": ">=0.4.0" 738 | } 739 | }, 740 | "node_modules/ansi-regex": { 741 | "version": "5.0.1", 742 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 743 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 744 | "engines": { 745 | "node": ">=8" 746 | } 747 | }, 748 | "node_modules/ansi-styles": { 749 | "version": "4.3.0", 750 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 751 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 752 | "dependencies": { 753 | "color-convert": "^2.0.1" 754 | }, 755 | "engines": { 756 | "node": ">=8" 757 | }, 758 | "funding": { 759 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 760 | } 761 | }, 762 | "node_modules/anymatch": { 763 | "version": "3.1.2", 764 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 765 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 766 | "dependencies": { 767 | "normalize-path": "^3.0.0", 768 | "picomatch": "^2.0.4" 769 | }, 770 | "engines": { 771 | "node": ">= 8" 772 | } 773 | }, 774 | "node_modules/assertion-error": { 775 | "version": "1.1.0", 776 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 777 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 778 | "dev": true, 779 | "engines": { 780 | "node": "*" 781 | } 782 | }, 783 | "node_modules/balanced-match": { 784 | "version": "1.0.2", 785 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 786 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 787 | "dev": true 788 | }, 789 | "node_modules/binary-extensions": { 790 | "version": "2.2.0", 791 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 792 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 793 | "engines": { 794 | "node": ">=8" 795 | } 796 | }, 797 | "node_modules/brace-expansion": { 798 | "version": "1.1.11", 799 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 800 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 801 | "dev": true, 802 | "dependencies": { 803 | "balanced-match": "^1.0.0", 804 | "concat-map": "0.0.1" 805 | } 806 | }, 807 | "node_modules/braces": { 808 | "version": "3.0.2", 809 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 810 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 811 | "dependencies": { 812 | "fill-range": "^7.0.1" 813 | }, 814 | "engines": { 815 | "node": ">=8" 816 | } 817 | }, 818 | "node_modules/cac": { 819 | "version": "6.7.14", 820 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 821 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 822 | "dev": true, 823 | "engines": { 824 | "node": ">=8" 825 | } 826 | }, 827 | "node_modules/chai": { 828 | "version": "4.4.1", 829 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", 830 | "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", 831 | "dev": true, 832 | "dependencies": { 833 | "assertion-error": "^1.1.0", 834 | "check-error": "^1.0.3", 835 | "deep-eql": "^4.1.3", 836 | "get-func-name": "^2.0.2", 837 | "loupe": "^2.3.6", 838 | "pathval": "^1.1.1", 839 | "type-detect": "^4.0.8" 840 | }, 841 | "engines": { 842 | "node": ">=4" 843 | } 844 | }, 845 | "node_modules/check-error": { 846 | "version": "1.0.3", 847 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", 848 | "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", 849 | "dev": true, 850 | "dependencies": { 851 | "get-func-name": "^2.0.2" 852 | }, 853 | "engines": { 854 | "node": "*" 855 | } 856 | }, 857 | "node_modules/chokidar": { 858 | "version": "3.5.3", 859 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 860 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 861 | "funding": [ 862 | { 863 | "type": "individual", 864 | "url": "https://paulmillr.com/funding/" 865 | } 866 | ], 867 | "dependencies": { 868 | "anymatch": "~3.1.2", 869 | "braces": "~3.0.2", 870 | "glob-parent": "~5.1.2", 871 | "is-binary-path": "~2.1.0", 872 | "is-glob": "~4.0.1", 873 | "normalize-path": "~3.0.0", 874 | "readdirp": "~3.6.0" 875 | }, 876 | "engines": { 877 | "node": ">= 8.10.0" 878 | }, 879 | "optionalDependencies": { 880 | "fsevents": "~2.3.2" 881 | } 882 | }, 883 | "node_modules/cliui": { 884 | "version": "7.0.4", 885 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 886 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 887 | "dependencies": { 888 | "string-width": "^4.2.0", 889 | "strip-ansi": "^6.0.0", 890 | "wrap-ansi": "^7.0.0" 891 | } 892 | }, 893 | "node_modules/color-convert": { 894 | "version": "2.0.1", 895 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 896 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 897 | "dependencies": { 898 | "color-name": "~1.1.4" 899 | }, 900 | "engines": { 901 | "node": ">=7.0.0" 902 | } 903 | }, 904 | "node_modules/color-name": { 905 | "version": "1.1.4", 906 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 907 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 908 | }, 909 | "node_modules/concat-map": { 910 | "version": "0.0.1", 911 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 912 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 913 | "dev": true 914 | }, 915 | "node_modules/cross-spawn": { 916 | "version": "7.0.3", 917 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 918 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 919 | "dev": true, 920 | "dependencies": { 921 | "path-key": "^3.1.0", 922 | "shebang-command": "^2.0.0", 923 | "which": "^2.0.1" 924 | }, 925 | "engines": { 926 | "node": ">= 8" 927 | } 928 | }, 929 | "node_modules/cssesc": { 930 | "version": "3.0.0", 931 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 932 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 933 | "bin": { 934 | "cssesc": "bin/cssesc" 935 | }, 936 | "engines": { 937 | "node": ">=4" 938 | } 939 | }, 940 | "node_modules/debug": { 941 | "version": "4.3.4", 942 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 943 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 944 | "dev": true, 945 | "dependencies": { 946 | "ms": "2.1.2" 947 | }, 948 | "engines": { 949 | "node": ">=6.0" 950 | }, 951 | "peerDependenciesMeta": { 952 | "supports-color": { 953 | "optional": true 954 | } 955 | } 956 | }, 957 | "node_modules/deep-eql": { 958 | "version": "4.1.3", 959 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 960 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 961 | "dev": true, 962 | "dependencies": { 963 | "type-detect": "^4.0.0" 964 | }, 965 | "engines": { 966 | "node": ">=6" 967 | } 968 | }, 969 | "node_modules/diff-sequences": { 970 | "version": "29.6.3", 971 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", 972 | "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", 973 | "dev": true, 974 | "engines": { 975 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 976 | } 977 | }, 978 | "node_modules/emoji-regex": { 979 | "version": "8.0.0", 980 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 981 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 982 | }, 983 | "node_modules/esbuild": { 984 | "version": "0.19.12", 985 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", 986 | "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", 987 | "dev": true, 988 | "hasInstallScript": true, 989 | "bin": { 990 | "esbuild": "bin/esbuild" 991 | }, 992 | "engines": { 993 | "node": ">=12" 994 | }, 995 | "optionalDependencies": { 996 | "@esbuild/aix-ppc64": "0.19.12", 997 | "@esbuild/android-arm": "0.19.12", 998 | "@esbuild/android-arm64": "0.19.12", 999 | "@esbuild/android-x64": "0.19.12", 1000 | "@esbuild/darwin-arm64": "0.19.12", 1001 | "@esbuild/darwin-x64": "0.19.12", 1002 | "@esbuild/freebsd-arm64": "0.19.12", 1003 | "@esbuild/freebsd-x64": "0.19.12", 1004 | "@esbuild/linux-arm": "0.19.12", 1005 | "@esbuild/linux-arm64": "0.19.12", 1006 | "@esbuild/linux-ia32": "0.19.12", 1007 | "@esbuild/linux-loong64": "0.19.12", 1008 | "@esbuild/linux-mips64el": "0.19.12", 1009 | "@esbuild/linux-ppc64": "0.19.12", 1010 | "@esbuild/linux-riscv64": "0.19.12", 1011 | "@esbuild/linux-s390x": "0.19.12", 1012 | "@esbuild/linux-x64": "0.19.12", 1013 | "@esbuild/netbsd-x64": "0.19.12", 1014 | "@esbuild/openbsd-x64": "0.19.12", 1015 | "@esbuild/sunos-x64": "0.19.12", 1016 | "@esbuild/win32-arm64": "0.19.12", 1017 | "@esbuild/win32-ia32": "0.19.12", 1018 | "@esbuild/win32-x64": "0.19.12" 1019 | } 1020 | }, 1021 | "node_modules/escalade": { 1022 | "version": "3.1.1", 1023 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1024 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1025 | "engines": { 1026 | "node": ">=6" 1027 | } 1028 | }, 1029 | "node_modules/estree-walker": { 1030 | "version": "3.0.3", 1031 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1032 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1033 | "dev": true, 1034 | "dependencies": { 1035 | "@types/estree": "^1.0.0" 1036 | } 1037 | }, 1038 | "node_modules/execa": { 1039 | "version": "8.0.1", 1040 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", 1041 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", 1042 | "dev": true, 1043 | "dependencies": { 1044 | "cross-spawn": "^7.0.3", 1045 | "get-stream": "^8.0.1", 1046 | "human-signals": "^5.0.0", 1047 | "is-stream": "^3.0.0", 1048 | "merge-stream": "^2.0.0", 1049 | "npm-run-path": "^5.1.0", 1050 | "onetime": "^6.0.0", 1051 | "signal-exit": "^4.1.0", 1052 | "strip-final-newline": "^3.0.0" 1053 | }, 1054 | "engines": { 1055 | "node": ">=16.17" 1056 | }, 1057 | "funding": { 1058 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1059 | } 1060 | }, 1061 | "node_modules/fast-glob": { 1062 | "version": "3.2.11", 1063 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 1064 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 1065 | "dependencies": { 1066 | "@nodelib/fs.stat": "^2.0.2", 1067 | "@nodelib/fs.walk": "^1.2.3", 1068 | "glob-parent": "^5.1.2", 1069 | "merge2": "^1.3.0", 1070 | "micromatch": "^4.0.4" 1071 | }, 1072 | "engines": { 1073 | "node": ">=8.6.0" 1074 | } 1075 | }, 1076 | "node_modules/fastq": { 1077 | "version": "1.13.0", 1078 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1079 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1080 | "dependencies": { 1081 | "reusify": "^1.0.4" 1082 | } 1083 | }, 1084 | "node_modules/fill-range": { 1085 | "version": "7.0.1", 1086 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1087 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1088 | "dependencies": { 1089 | "to-regex-range": "^5.0.1" 1090 | }, 1091 | "engines": { 1092 | "node": ">=8" 1093 | } 1094 | }, 1095 | "node_modules/fs.realpath": { 1096 | "version": "1.0.0", 1097 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1098 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1099 | "dev": true 1100 | }, 1101 | "node_modules/fsevents": { 1102 | "version": "2.3.3", 1103 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1104 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1105 | "hasInstallScript": true, 1106 | "optional": true, 1107 | "os": [ 1108 | "darwin" 1109 | ], 1110 | "engines": { 1111 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1112 | } 1113 | }, 1114 | "node_modules/get-caller-file": { 1115 | "version": "2.0.5", 1116 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1117 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1118 | "engines": { 1119 | "node": "6.* || 8.* || >= 10.*" 1120 | } 1121 | }, 1122 | "node_modules/get-func-name": { 1123 | "version": "2.0.2", 1124 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", 1125 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", 1126 | "dev": true, 1127 | "engines": { 1128 | "node": "*" 1129 | } 1130 | }, 1131 | "node_modules/get-stream": { 1132 | "version": "8.0.1", 1133 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", 1134 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", 1135 | "dev": true, 1136 | "engines": { 1137 | "node": ">=16" 1138 | }, 1139 | "funding": { 1140 | "url": "https://github.com/sponsors/sindresorhus" 1141 | } 1142 | }, 1143 | "node_modules/glob": { 1144 | "version": "7.2.3", 1145 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1146 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1147 | "dev": true, 1148 | "dependencies": { 1149 | "fs.realpath": "^1.0.0", 1150 | "inflight": "^1.0.4", 1151 | "inherits": "2", 1152 | "minimatch": "^3.1.1", 1153 | "once": "^1.3.0", 1154 | "path-is-absolute": "^1.0.0" 1155 | }, 1156 | "engines": { 1157 | "node": "*" 1158 | }, 1159 | "funding": { 1160 | "url": "https://github.com/sponsors/isaacs" 1161 | } 1162 | }, 1163 | "node_modules/glob-parent": { 1164 | "version": "5.1.2", 1165 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1166 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1167 | "dependencies": { 1168 | "is-glob": "^4.0.1" 1169 | }, 1170 | "engines": { 1171 | "node": ">= 6" 1172 | } 1173 | }, 1174 | "node_modules/human-signals": { 1175 | "version": "5.0.0", 1176 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", 1177 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", 1178 | "dev": true, 1179 | "engines": { 1180 | "node": ">=16.17.0" 1181 | } 1182 | }, 1183 | "node_modules/immutable": { 1184 | "version": "4.1.0", 1185 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", 1186 | "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" 1187 | }, 1188 | "node_modules/inflight": { 1189 | "version": "1.0.6", 1190 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1191 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1192 | "dev": true, 1193 | "dependencies": { 1194 | "once": "^1.3.0", 1195 | "wrappy": "1" 1196 | } 1197 | }, 1198 | "node_modules/inherits": { 1199 | "version": "2.0.4", 1200 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1201 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1202 | "dev": true 1203 | }, 1204 | "node_modules/is-binary-path": { 1205 | "version": "2.1.0", 1206 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1207 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1208 | "dependencies": { 1209 | "binary-extensions": "^2.0.0" 1210 | }, 1211 | "engines": { 1212 | "node": ">=8" 1213 | } 1214 | }, 1215 | "node_modules/is-extglob": { 1216 | "version": "2.1.1", 1217 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1218 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1219 | "engines": { 1220 | "node": ">=0.10.0" 1221 | } 1222 | }, 1223 | "node_modules/is-fullwidth-code-point": { 1224 | "version": "3.0.0", 1225 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1226 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1227 | "engines": { 1228 | "node": ">=8" 1229 | } 1230 | }, 1231 | "node_modules/is-glob": { 1232 | "version": "4.0.3", 1233 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1234 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1235 | "dependencies": { 1236 | "is-extglob": "^2.1.1" 1237 | }, 1238 | "engines": { 1239 | "node": ">=0.10.0" 1240 | } 1241 | }, 1242 | "node_modules/is-number": { 1243 | "version": "7.0.0", 1244 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1245 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1246 | "engines": { 1247 | "node": ">=0.12.0" 1248 | } 1249 | }, 1250 | "node_modules/is-stream": { 1251 | "version": "3.0.0", 1252 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 1253 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 1254 | "dev": true, 1255 | "engines": { 1256 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1257 | }, 1258 | "funding": { 1259 | "url": "https://github.com/sponsors/sindresorhus" 1260 | } 1261 | }, 1262 | "node_modules/isexe": { 1263 | "version": "2.0.0", 1264 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1265 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1266 | "dev": true 1267 | }, 1268 | "node_modules/js-tokens": { 1269 | "version": "8.0.3", 1270 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", 1271 | "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", 1272 | "dev": true 1273 | }, 1274 | "node_modules/jsonc-parser": { 1275 | "version": "3.2.1", 1276 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", 1277 | "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", 1278 | "dev": true 1279 | }, 1280 | "node_modules/local-pkg": { 1281 | "version": "0.5.0", 1282 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", 1283 | "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", 1284 | "dev": true, 1285 | "dependencies": { 1286 | "mlly": "^1.4.2", 1287 | "pkg-types": "^1.0.3" 1288 | }, 1289 | "engines": { 1290 | "node": ">=14" 1291 | }, 1292 | "funding": { 1293 | "url": "https://github.com/sponsors/antfu" 1294 | } 1295 | }, 1296 | "node_modules/loupe": { 1297 | "version": "2.3.7", 1298 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", 1299 | "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", 1300 | "dev": true, 1301 | "dependencies": { 1302 | "get-func-name": "^2.0.1" 1303 | } 1304 | }, 1305 | "node_modules/magic-string": { 1306 | "version": "0.30.7", 1307 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", 1308 | "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", 1309 | "dev": true, 1310 | "dependencies": { 1311 | "@jridgewell/sourcemap-codec": "^1.4.15" 1312 | }, 1313 | "engines": { 1314 | "node": ">=12" 1315 | } 1316 | }, 1317 | "node_modules/merge-stream": { 1318 | "version": "2.0.0", 1319 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1320 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1321 | "dev": true 1322 | }, 1323 | "node_modules/merge2": { 1324 | "version": "1.4.1", 1325 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1326 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1327 | "engines": { 1328 | "node": ">= 8" 1329 | } 1330 | }, 1331 | "node_modules/micromatch": { 1332 | "version": "4.0.5", 1333 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1334 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1335 | "dependencies": { 1336 | "braces": "^3.0.2", 1337 | "picomatch": "^2.3.1" 1338 | }, 1339 | "engines": { 1340 | "node": ">=8.6" 1341 | } 1342 | }, 1343 | "node_modules/mimic-fn": { 1344 | "version": "4.0.0", 1345 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 1346 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 1347 | "dev": true, 1348 | "engines": { 1349 | "node": ">=12" 1350 | }, 1351 | "funding": { 1352 | "url": "https://github.com/sponsors/sindresorhus" 1353 | } 1354 | }, 1355 | "node_modules/minimatch": { 1356 | "version": "3.1.2", 1357 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1358 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1359 | "dev": true, 1360 | "dependencies": { 1361 | "brace-expansion": "^1.1.7" 1362 | }, 1363 | "engines": { 1364 | "node": "*" 1365 | } 1366 | }, 1367 | "node_modules/mlly": { 1368 | "version": "1.6.1", 1369 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", 1370 | "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", 1371 | "dev": true, 1372 | "dependencies": { 1373 | "acorn": "^8.11.3", 1374 | "pathe": "^1.1.2", 1375 | "pkg-types": "^1.0.3", 1376 | "ufo": "^1.3.2" 1377 | } 1378 | }, 1379 | "node_modules/ms": { 1380 | "version": "2.1.2", 1381 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1382 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1383 | "dev": true 1384 | }, 1385 | "node_modules/nanoid": { 1386 | "version": "3.3.7", 1387 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1388 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1389 | "funding": [ 1390 | { 1391 | "type": "github", 1392 | "url": "https://github.com/sponsors/ai" 1393 | } 1394 | ], 1395 | "bin": { 1396 | "nanoid": "bin/nanoid.cjs" 1397 | }, 1398 | "engines": { 1399 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1400 | } 1401 | }, 1402 | "node_modules/normalize-path": { 1403 | "version": "3.0.0", 1404 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1405 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1406 | "engines": { 1407 | "node": ">=0.10.0" 1408 | } 1409 | }, 1410 | "node_modules/npm-run-path": { 1411 | "version": "5.3.0", 1412 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", 1413 | "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", 1414 | "dev": true, 1415 | "dependencies": { 1416 | "path-key": "^4.0.0" 1417 | }, 1418 | "engines": { 1419 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1420 | }, 1421 | "funding": { 1422 | "url": "https://github.com/sponsors/sindresorhus" 1423 | } 1424 | }, 1425 | "node_modules/npm-run-path/node_modules/path-key": { 1426 | "version": "4.0.0", 1427 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 1428 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 1429 | "dev": true, 1430 | "engines": { 1431 | "node": ">=12" 1432 | }, 1433 | "funding": { 1434 | "url": "https://github.com/sponsors/sindresorhus" 1435 | } 1436 | }, 1437 | "node_modules/once": { 1438 | "version": "1.4.0", 1439 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1440 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1441 | "dev": true, 1442 | "dependencies": { 1443 | "wrappy": "1" 1444 | } 1445 | }, 1446 | "node_modules/onetime": { 1447 | "version": "6.0.0", 1448 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 1449 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 1450 | "dev": true, 1451 | "dependencies": { 1452 | "mimic-fn": "^4.0.0" 1453 | }, 1454 | "engines": { 1455 | "node": ">=12" 1456 | }, 1457 | "funding": { 1458 | "url": "https://github.com/sponsors/sindresorhus" 1459 | } 1460 | }, 1461 | "node_modules/p-limit": { 1462 | "version": "5.0.0", 1463 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", 1464 | "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", 1465 | "dev": true, 1466 | "dependencies": { 1467 | "yocto-queue": "^1.0.0" 1468 | }, 1469 | "engines": { 1470 | "node": ">=18" 1471 | }, 1472 | "funding": { 1473 | "url": "https://github.com/sponsors/sindresorhus" 1474 | } 1475 | }, 1476 | "node_modules/path-is-absolute": { 1477 | "version": "1.0.1", 1478 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1479 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1480 | "dev": true, 1481 | "engines": { 1482 | "node": ">=0.10.0" 1483 | } 1484 | }, 1485 | "node_modules/path-key": { 1486 | "version": "3.1.1", 1487 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1488 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1489 | "dev": true, 1490 | "engines": { 1491 | "node": ">=8" 1492 | } 1493 | }, 1494 | "node_modules/pathe": { 1495 | "version": "1.1.2", 1496 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 1497 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 1498 | "dev": true 1499 | }, 1500 | "node_modules/pathval": { 1501 | "version": "1.1.1", 1502 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 1503 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 1504 | "dev": true, 1505 | "engines": { 1506 | "node": "*" 1507 | } 1508 | }, 1509 | "node_modules/picocolors": { 1510 | "version": "1.0.0", 1511 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1512 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 1513 | }, 1514 | "node_modules/picomatch": { 1515 | "version": "2.3.1", 1516 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1517 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1518 | "engines": { 1519 | "node": ">=8.6" 1520 | }, 1521 | "funding": { 1522 | "url": "https://github.com/sponsors/jonschlinkert" 1523 | } 1524 | }, 1525 | "node_modules/pkg-types": { 1526 | "version": "1.0.3", 1527 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", 1528 | "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", 1529 | "dev": true, 1530 | "dependencies": { 1531 | "jsonc-parser": "^3.2.0", 1532 | "mlly": "^1.2.0", 1533 | "pathe": "^1.1.0" 1534 | } 1535 | }, 1536 | "node_modules/postcss": { 1537 | "version": "8.4.35", 1538 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", 1539 | "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", 1540 | "funding": [ 1541 | { 1542 | "type": "opencollective", 1543 | "url": "https://opencollective.com/postcss/" 1544 | }, 1545 | { 1546 | "type": "tidelift", 1547 | "url": "https://tidelift.com/funding/github/npm/postcss" 1548 | }, 1549 | { 1550 | "type": "github", 1551 | "url": "https://github.com/sponsors/ai" 1552 | } 1553 | ], 1554 | "dependencies": { 1555 | "nanoid": "^3.3.7", 1556 | "picocolors": "^1.0.0", 1557 | "source-map-js": "^1.0.2" 1558 | }, 1559 | "engines": { 1560 | "node": "^10 || ^12 || >=14" 1561 | } 1562 | }, 1563 | "node_modules/postcss-selector-parser": { 1564 | "version": "6.0.10", 1565 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 1566 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 1567 | "dependencies": { 1568 | "cssesc": "^3.0.0", 1569 | "util-deprecate": "^1.0.2" 1570 | }, 1571 | "engines": { 1572 | "node": ">=4" 1573 | } 1574 | }, 1575 | "node_modules/pretty-format": { 1576 | "version": "29.7.0", 1577 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", 1578 | "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", 1579 | "dev": true, 1580 | "dependencies": { 1581 | "@jest/schemas": "^29.6.3", 1582 | "ansi-styles": "^5.0.0", 1583 | "react-is": "^18.0.0" 1584 | }, 1585 | "engines": { 1586 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1587 | } 1588 | }, 1589 | "node_modules/pretty-format/node_modules/ansi-styles": { 1590 | "version": "5.2.0", 1591 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 1592 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 1593 | "dev": true, 1594 | "engines": { 1595 | "node": ">=10" 1596 | }, 1597 | "funding": { 1598 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1599 | } 1600 | }, 1601 | "node_modules/queue-microtask": { 1602 | "version": "1.2.3", 1603 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1604 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1605 | "funding": [ 1606 | { 1607 | "type": "github", 1608 | "url": "https://github.com/sponsors/feross" 1609 | }, 1610 | { 1611 | "type": "patreon", 1612 | "url": "https://www.patreon.com/feross" 1613 | }, 1614 | { 1615 | "type": "consulting", 1616 | "url": "https://feross.org/support" 1617 | } 1618 | ] 1619 | }, 1620 | "node_modules/react-is": { 1621 | "version": "18.2.0", 1622 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", 1623 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", 1624 | "dev": true 1625 | }, 1626 | "node_modules/readdirp": { 1627 | "version": "3.6.0", 1628 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1629 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1630 | "dependencies": { 1631 | "picomatch": "^2.2.1" 1632 | }, 1633 | "engines": { 1634 | "node": ">=8.10.0" 1635 | } 1636 | }, 1637 | "node_modules/require-directory": { 1638 | "version": "2.1.1", 1639 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1640 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1641 | "engines": { 1642 | "node": ">=0.10.0" 1643 | } 1644 | }, 1645 | "node_modules/reusify": { 1646 | "version": "1.0.4", 1647 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1648 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1649 | "engines": { 1650 | "iojs": ">=1.0.0", 1651 | "node": ">=0.10.0" 1652 | } 1653 | }, 1654 | "node_modules/rimraf": { 1655 | "version": "3.0.2", 1656 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1657 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1658 | "dev": true, 1659 | "dependencies": { 1660 | "glob": "^7.1.3" 1661 | }, 1662 | "bin": { 1663 | "rimraf": "bin.js" 1664 | }, 1665 | "funding": { 1666 | "url": "https://github.com/sponsors/isaacs" 1667 | } 1668 | }, 1669 | "node_modules/rollup": { 1670 | "version": "4.12.0", 1671 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", 1672 | "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", 1673 | "dev": true, 1674 | "dependencies": { 1675 | "@types/estree": "1.0.5" 1676 | }, 1677 | "bin": { 1678 | "rollup": "dist/bin/rollup" 1679 | }, 1680 | "engines": { 1681 | "node": ">=18.0.0", 1682 | "npm": ">=8.0.0" 1683 | }, 1684 | "optionalDependencies": { 1685 | "@rollup/rollup-android-arm-eabi": "4.12.0", 1686 | "@rollup/rollup-android-arm64": "4.12.0", 1687 | "@rollup/rollup-darwin-arm64": "4.12.0", 1688 | "@rollup/rollup-darwin-x64": "4.12.0", 1689 | "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", 1690 | "@rollup/rollup-linux-arm64-gnu": "4.12.0", 1691 | "@rollup/rollup-linux-arm64-musl": "4.12.0", 1692 | "@rollup/rollup-linux-riscv64-gnu": "4.12.0", 1693 | "@rollup/rollup-linux-x64-gnu": "4.12.0", 1694 | "@rollup/rollup-linux-x64-musl": "4.12.0", 1695 | "@rollup/rollup-win32-arm64-msvc": "4.12.0", 1696 | "@rollup/rollup-win32-ia32-msvc": "4.12.0", 1697 | "@rollup/rollup-win32-x64-msvc": "4.12.0", 1698 | "fsevents": "~2.3.2" 1699 | } 1700 | }, 1701 | "node_modules/run-parallel": { 1702 | "version": "1.2.0", 1703 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1704 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1705 | "funding": [ 1706 | { 1707 | "type": "github", 1708 | "url": "https://github.com/sponsors/feross" 1709 | }, 1710 | { 1711 | "type": "patreon", 1712 | "url": "https://www.patreon.com/feross" 1713 | }, 1714 | { 1715 | "type": "consulting", 1716 | "url": "https://feross.org/support" 1717 | } 1718 | ], 1719 | "dependencies": { 1720 | "queue-microtask": "^1.2.2" 1721 | } 1722 | }, 1723 | "node_modules/sass": { 1724 | "version": "1.53.0", 1725 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", 1726 | "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", 1727 | "dependencies": { 1728 | "chokidar": ">=3.0.0 <4.0.0", 1729 | "immutable": "^4.0.0", 1730 | "source-map-js": ">=0.6.2 <2.0.0" 1731 | }, 1732 | "bin": { 1733 | "sass": "sass.js" 1734 | }, 1735 | "engines": { 1736 | "node": ">=12.0.0" 1737 | } 1738 | }, 1739 | "node_modules/shebang-command": { 1740 | "version": "2.0.0", 1741 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1742 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1743 | "dev": true, 1744 | "dependencies": { 1745 | "shebang-regex": "^3.0.0" 1746 | }, 1747 | "engines": { 1748 | "node": ">=8" 1749 | } 1750 | }, 1751 | "node_modules/shebang-regex": { 1752 | "version": "3.0.0", 1753 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1754 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1755 | "dev": true, 1756 | "engines": { 1757 | "node": ">=8" 1758 | } 1759 | }, 1760 | "node_modules/siginfo": { 1761 | "version": "2.0.0", 1762 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 1763 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 1764 | "dev": true 1765 | }, 1766 | "node_modules/signal-exit": { 1767 | "version": "4.1.0", 1768 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1769 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1770 | "dev": true, 1771 | "engines": { 1772 | "node": ">=14" 1773 | }, 1774 | "funding": { 1775 | "url": "https://github.com/sponsors/isaacs" 1776 | } 1777 | }, 1778 | "node_modules/source-map-js": { 1779 | "version": "1.0.2", 1780 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1781 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1782 | "engines": { 1783 | "node": ">=0.10.0" 1784 | } 1785 | }, 1786 | "node_modules/stackback": { 1787 | "version": "0.0.2", 1788 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 1789 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 1790 | "dev": true 1791 | }, 1792 | "node_modules/std-env": { 1793 | "version": "3.7.0", 1794 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", 1795 | "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", 1796 | "dev": true 1797 | }, 1798 | "node_modules/string-width": { 1799 | "version": "4.2.3", 1800 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1801 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1802 | "dependencies": { 1803 | "emoji-regex": "^8.0.0", 1804 | "is-fullwidth-code-point": "^3.0.0", 1805 | "strip-ansi": "^6.0.1" 1806 | }, 1807 | "engines": { 1808 | "node": ">=8" 1809 | } 1810 | }, 1811 | "node_modules/strip-ansi": { 1812 | "version": "6.0.1", 1813 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1814 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1815 | "dependencies": { 1816 | "ansi-regex": "^5.0.1" 1817 | }, 1818 | "engines": { 1819 | "node": ">=8" 1820 | } 1821 | }, 1822 | "node_modules/strip-final-newline": { 1823 | "version": "3.0.0", 1824 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 1825 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 1826 | "dev": true, 1827 | "engines": { 1828 | "node": ">=12" 1829 | }, 1830 | "funding": { 1831 | "url": "https://github.com/sponsors/sindresorhus" 1832 | } 1833 | }, 1834 | "node_modules/strip-literal": { 1835 | "version": "2.0.0", 1836 | "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz", 1837 | "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==", 1838 | "dev": true, 1839 | "dependencies": { 1840 | "js-tokens": "^8.0.2" 1841 | }, 1842 | "funding": { 1843 | "url": "https://github.com/sponsors/antfu" 1844 | } 1845 | }, 1846 | "node_modules/tinybench": { 1847 | "version": "2.6.0", 1848 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", 1849 | "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", 1850 | "dev": true 1851 | }, 1852 | "node_modules/tinypool": { 1853 | "version": "0.8.2", 1854 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", 1855 | "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", 1856 | "dev": true, 1857 | "engines": { 1858 | "node": ">=14.0.0" 1859 | } 1860 | }, 1861 | "node_modules/tinyspy": { 1862 | "version": "2.2.1", 1863 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", 1864 | "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", 1865 | "dev": true, 1866 | "engines": { 1867 | "node": ">=14.0.0" 1868 | } 1869 | }, 1870 | "node_modules/to-regex-range": { 1871 | "version": "5.0.1", 1872 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1873 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1874 | "dependencies": { 1875 | "is-number": "^7.0.0" 1876 | }, 1877 | "engines": { 1878 | "node": ">=8.0" 1879 | } 1880 | }, 1881 | "node_modules/type-detect": { 1882 | "version": "4.0.8", 1883 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 1884 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 1885 | "dev": true, 1886 | "engines": { 1887 | "node": ">=4" 1888 | } 1889 | }, 1890 | "node_modules/typescript": { 1891 | "version": "4.7.4", 1892 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 1893 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 1894 | "dev": true, 1895 | "bin": { 1896 | "tsc": "bin/tsc", 1897 | "tsserver": "bin/tsserver" 1898 | }, 1899 | "engines": { 1900 | "node": ">=4.2.0" 1901 | } 1902 | }, 1903 | "node_modules/ufo": { 1904 | "version": "1.4.0", 1905 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", 1906 | "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", 1907 | "dev": true 1908 | }, 1909 | "node_modules/util-deprecate": { 1910 | "version": "1.0.2", 1911 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1912 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1913 | }, 1914 | "node_modules/vite": { 1915 | "version": "5.1.4", 1916 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz", 1917 | "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", 1918 | "dev": true, 1919 | "dependencies": { 1920 | "esbuild": "^0.19.3", 1921 | "postcss": "^8.4.35", 1922 | "rollup": "^4.2.0" 1923 | }, 1924 | "bin": { 1925 | "vite": "bin/vite.js" 1926 | }, 1927 | "engines": { 1928 | "node": "^18.0.0 || >=20.0.0" 1929 | }, 1930 | "funding": { 1931 | "url": "https://github.com/vitejs/vite?sponsor=1" 1932 | }, 1933 | "optionalDependencies": { 1934 | "fsevents": "~2.3.3" 1935 | }, 1936 | "peerDependencies": { 1937 | "@types/node": "^18.0.0 || >=20.0.0", 1938 | "less": "*", 1939 | "lightningcss": "^1.21.0", 1940 | "sass": "*", 1941 | "stylus": "*", 1942 | "sugarss": "*", 1943 | "terser": "^5.4.0" 1944 | }, 1945 | "peerDependenciesMeta": { 1946 | "@types/node": { 1947 | "optional": true 1948 | }, 1949 | "less": { 1950 | "optional": true 1951 | }, 1952 | "lightningcss": { 1953 | "optional": true 1954 | }, 1955 | "sass": { 1956 | "optional": true 1957 | }, 1958 | "stylus": { 1959 | "optional": true 1960 | }, 1961 | "sugarss": { 1962 | "optional": true 1963 | }, 1964 | "terser": { 1965 | "optional": true 1966 | } 1967 | } 1968 | }, 1969 | "node_modules/vite-node": { 1970 | "version": "1.3.1", 1971 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz", 1972 | "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==", 1973 | "dev": true, 1974 | "dependencies": { 1975 | "cac": "^6.7.14", 1976 | "debug": "^4.3.4", 1977 | "pathe": "^1.1.1", 1978 | "picocolors": "^1.0.0", 1979 | "vite": "^5.0.0" 1980 | }, 1981 | "bin": { 1982 | "vite-node": "vite-node.mjs" 1983 | }, 1984 | "engines": { 1985 | "node": "^18.0.0 || >=20.0.0" 1986 | }, 1987 | "funding": { 1988 | "url": "https://opencollective.com/vitest" 1989 | } 1990 | }, 1991 | "node_modules/vitest": { 1992 | "version": "1.3.1", 1993 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz", 1994 | "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==", 1995 | "dev": true, 1996 | "dependencies": { 1997 | "@vitest/expect": "1.3.1", 1998 | "@vitest/runner": "1.3.1", 1999 | "@vitest/snapshot": "1.3.1", 2000 | "@vitest/spy": "1.3.1", 2001 | "@vitest/utils": "1.3.1", 2002 | "acorn-walk": "^8.3.2", 2003 | "chai": "^4.3.10", 2004 | "debug": "^4.3.4", 2005 | "execa": "^8.0.1", 2006 | "local-pkg": "^0.5.0", 2007 | "magic-string": "^0.30.5", 2008 | "pathe": "^1.1.1", 2009 | "picocolors": "^1.0.0", 2010 | "std-env": "^3.5.0", 2011 | "strip-literal": "^2.0.0", 2012 | "tinybench": "^2.5.1", 2013 | "tinypool": "^0.8.2", 2014 | "vite": "^5.0.0", 2015 | "vite-node": "1.3.1", 2016 | "why-is-node-running": "^2.2.2" 2017 | }, 2018 | "bin": { 2019 | "vitest": "vitest.mjs" 2020 | }, 2021 | "engines": { 2022 | "node": "^18.0.0 || >=20.0.0" 2023 | }, 2024 | "funding": { 2025 | "url": "https://opencollective.com/vitest" 2026 | }, 2027 | "peerDependencies": { 2028 | "@edge-runtime/vm": "*", 2029 | "@types/node": "^18.0.0 || >=20.0.0", 2030 | "@vitest/browser": "1.3.1", 2031 | "@vitest/ui": "1.3.1", 2032 | "happy-dom": "*", 2033 | "jsdom": "*" 2034 | }, 2035 | "peerDependenciesMeta": { 2036 | "@edge-runtime/vm": { 2037 | "optional": true 2038 | }, 2039 | "@types/node": { 2040 | "optional": true 2041 | }, 2042 | "@vitest/browser": { 2043 | "optional": true 2044 | }, 2045 | "@vitest/ui": { 2046 | "optional": true 2047 | }, 2048 | "happy-dom": { 2049 | "optional": true 2050 | }, 2051 | "jsdom": { 2052 | "optional": true 2053 | } 2054 | } 2055 | }, 2056 | "node_modules/which": { 2057 | "version": "2.0.2", 2058 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2059 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2060 | "dev": true, 2061 | "dependencies": { 2062 | "isexe": "^2.0.0" 2063 | }, 2064 | "bin": { 2065 | "node-which": "bin/node-which" 2066 | }, 2067 | "engines": { 2068 | "node": ">= 8" 2069 | } 2070 | }, 2071 | "node_modules/why-is-node-running": { 2072 | "version": "2.2.2", 2073 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", 2074 | "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", 2075 | "dev": true, 2076 | "dependencies": { 2077 | "siginfo": "^2.0.0", 2078 | "stackback": "0.0.2" 2079 | }, 2080 | "bin": { 2081 | "why-is-node-running": "cli.js" 2082 | }, 2083 | "engines": { 2084 | "node": ">=8" 2085 | } 2086 | }, 2087 | "node_modules/wrap-ansi": { 2088 | "version": "7.0.0", 2089 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2090 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2091 | "dependencies": { 2092 | "ansi-styles": "^4.0.0", 2093 | "string-width": "^4.1.0", 2094 | "strip-ansi": "^6.0.0" 2095 | }, 2096 | "engines": { 2097 | "node": ">=10" 2098 | }, 2099 | "funding": { 2100 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2101 | } 2102 | }, 2103 | "node_modules/wrappy": { 2104 | "version": "1.0.2", 2105 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2106 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2107 | "dev": true 2108 | }, 2109 | "node_modules/y18n": { 2110 | "version": "5.0.8", 2111 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2112 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2113 | "engines": { 2114 | "node": ">=10" 2115 | } 2116 | }, 2117 | "node_modules/yargs": { 2118 | "version": "17.5.1", 2119 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", 2120 | "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", 2121 | "dependencies": { 2122 | "cliui": "^7.0.2", 2123 | "escalade": "^3.1.1", 2124 | "get-caller-file": "^2.0.5", 2125 | "require-directory": "^2.1.1", 2126 | "string-width": "^4.2.3", 2127 | "y18n": "^5.0.5", 2128 | "yargs-parser": "^21.0.0" 2129 | }, 2130 | "engines": { 2131 | "node": ">=12" 2132 | } 2133 | }, 2134 | "node_modules/yargs-parser": { 2135 | "version": "21.0.1", 2136 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", 2137 | "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", 2138 | "engines": { 2139 | "node": ">=12" 2140 | } 2141 | }, 2142 | "node_modules/yocto-queue": { 2143 | "version": "1.0.0", 2144 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 2145 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 2146 | "dev": true, 2147 | "engines": { 2148 | "node": ">=12.20" 2149 | }, 2150 | "funding": { 2151 | "url": "https://github.com/sponsors/sindresorhus" 2152 | } 2153 | } 2154 | }, 2155 | "dependencies": { 2156 | "@esbuild/aix-ppc64": { 2157 | "version": "0.19.12", 2158 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", 2159 | "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", 2160 | "dev": true, 2161 | "optional": true 2162 | }, 2163 | "@esbuild/android-arm": { 2164 | "version": "0.19.12", 2165 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", 2166 | "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", 2167 | "dev": true, 2168 | "optional": true 2169 | }, 2170 | "@esbuild/android-arm64": { 2171 | "version": "0.19.12", 2172 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", 2173 | "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", 2174 | "dev": true, 2175 | "optional": true 2176 | }, 2177 | "@esbuild/android-x64": { 2178 | "version": "0.19.12", 2179 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", 2180 | "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", 2181 | "dev": true, 2182 | "optional": true 2183 | }, 2184 | "@esbuild/darwin-arm64": { 2185 | "version": "0.19.12", 2186 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", 2187 | "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", 2188 | "dev": true, 2189 | "optional": true 2190 | }, 2191 | "@esbuild/darwin-x64": { 2192 | "version": "0.19.12", 2193 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", 2194 | "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", 2195 | "dev": true, 2196 | "optional": true 2197 | }, 2198 | "@esbuild/freebsd-arm64": { 2199 | "version": "0.19.12", 2200 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", 2201 | "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", 2202 | "dev": true, 2203 | "optional": true 2204 | }, 2205 | "@esbuild/freebsd-x64": { 2206 | "version": "0.19.12", 2207 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", 2208 | "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", 2209 | "dev": true, 2210 | "optional": true 2211 | }, 2212 | "@esbuild/linux-arm": { 2213 | "version": "0.19.12", 2214 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", 2215 | "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", 2216 | "dev": true, 2217 | "optional": true 2218 | }, 2219 | "@esbuild/linux-arm64": { 2220 | "version": "0.19.12", 2221 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", 2222 | "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", 2223 | "dev": true, 2224 | "optional": true 2225 | }, 2226 | "@esbuild/linux-ia32": { 2227 | "version": "0.19.12", 2228 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", 2229 | "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", 2230 | "dev": true, 2231 | "optional": true 2232 | }, 2233 | "@esbuild/linux-loong64": { 2234 | "version": "0.19.12", 2235 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", 2236 | "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", 2237 | "dev": true, 2238 | "optional": true 2239 | }, 2240 | "@esbuild/linux-mips64el": { 2241 | "version": "0.19.12", 2242 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", 2243 | "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", 2244 | "dev": true, 2245 | "optional": true 2246 | }, 2247 | "@esbuild/linux-ppc64": { 2248 | "version": "0.19.12", 2249 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", 2250 | "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", 2251 | "dev": true, 2252 | "optional": true 2253 | }, 2254 | "@esbuild/linux-riscv64": { 2255 | "version": "0.19.12", 2256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", 2257 | "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", 2258 | "dev": true, 2259 | "optional": true 2260 | }, 2261 | "@esbuild/linux-s390x": { 2262 | "version": "0.19.12", 2263 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", 2264 | "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", 2265 | "dev": true, 2266 | "optional": true 2267 | }, 2268 | "@esbuild/linux-x64": { 2269 | "version": "0.19.12", 2270 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", 2271 | "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", 2272 | "dev": true, 2273 | "optional": true 2274 | }, 2275 | "@esbuild/netbsd-x64": { 2276 | "version": "0.19.12", 2277 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", 2278 | "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", 2279 | "dev": true, 2280 | "optional": true 2281 | }, 2282 | "@esbuild/openbsd-x64": { 2283 | "version": "0.19.12", 2284 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", 2285 | "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", 2286 | "dev": true, 2287 | "optional": true 2288 | }, 2289 | "@esbuild/sunos-x64": { 2290 | "version": "0.19.12", 2291 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", 2292 | "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", 2293 | "dev": true, 2294 | "optional": true 2295 | }, 2296 | "@esbuild/win32-arm64": { 2297 | "version": "0.19.12", 2298 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", 2299 | "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", 2300 | "dev": true, 2301 | "optional": true 2302 | }, 2303 | "@esbuild/win32-ia32": { 2304 | "version": "0.19.12", 2305 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", 2306 | "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", 2307 | "dev": true, 2308 | "optional": true 2309 | }, 2310 | "@esbuild/win32-x64": { 2311 | "version": "0.19.12", 2312 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", 2313 | "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", 2314 | "dev": true, 2315 | "optional": true 2316 | }, 2317 | "@jest/schemas": { 2318 | "version": "29.6.3", 2319 | "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", 2320 | "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", 2321 | "dev": true, 2322 | "requires": { 2323 | "@sinclair/typebox": "^0.27.8" 2324 | } 2325 | }, 2326 | "@jridgewell/sourcemap-codec": { 2327 | "version": "1.4.15", 2328 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 2329 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 2330 | "dev": true 2331 | }, 2332 | "@nodelib/fs.scandir": { 2333 | "version": "2.1.5", 2334 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 2335 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 2336 | "requires": { 2337 | "@nodelib/fs.stat": "2.0.5", 2338 | "run-parallel": "^1.1.9" 2339 | } 2340 | }, 2341 | "@nodelib/fs.stat": { 2342 | "version": "2.0.5", 2343 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 2344 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" 2345 | }, 2346 | "@nodelib/fs.walk": { 2347 | "version": "1.2.8", 2348 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 2349 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 2350 | "requires": { 2351 | "@nodelib/fs.scandir": "2.1.5", 2352 | "fastq": "^1.6.0" 2353 | } 2354 | }, 2355 | "@rollup/rollup-android-arm-eabi": { 2356 | "version": "4.12.0", 2357 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", 2358 | "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", 2359 | "dev": true, 2360 | "optional": true 2361 | }, 2362 | "@rollup/rollup-android-arm64": { 2363 | "version": "4.12.0", 2364 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", 2365 | "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", 2366 | "dev": true, 2367 | "optional": true 2368 | }, 2369 | "@rollup/rollup-darwin-arm64": { 2370 | "version": "4.12.0", 2371 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", 2372 | "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", 2373 | "dev": true, 2374 | "optional": true 2375 | }, 2376 | "@rollup/rollup-darwin-x64": { 2377 | "version": "4.12.0", 2378 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", 2379 | "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", 2380 | "dev": true, 2381 | "optional": true 2382 | }, 2383 | "@rollup/rollup-linux-arm-gnueabihf": { 2384 | "version": "4.12.0", 2385 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", 2386 | "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", 2387 | "dev": true, 2388 | "optional": true 2389 | }, 2390 | "@rollup/rollup-linux-arm64-gnu": { 2391 | "version": "4.12.0", 2392 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", 2393 | "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", 2394 | "dev": true, 2395 | "optional": true 2396 | }, 2397 | "@rollup/rollup-linux-arm64-musl": { 2398 | "version": "4.12.0", 2399 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", 2400 | "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", 2401 | "dev": true, 2402 | "optional": true 2403 | }, 2404 | "@rollup/rollup-linux-riscv64-gnu": { 2405 | "version": "4.12.0", 2406 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", 2407 | "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", 2408 | "dev": true, 2409 | "optional": true 2410 | }, 2411 | "@rollup/rollup-linux-x64-gnu": { 2412 | "version": "4.12.0", 2413 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", 2414 | "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", 2415 | "dev": true, 2416 | "optional": true 2417 | }, 2418 | "@rollup/rollup-linux-x64-musl": { 2419 | "version": "4.12.0", 2420 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", 2421 | "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", 2422 | "dev": true, 2423 | "optional": true 2424 | }, 2425 | "@rollup/rollup-win32-arm64-msvc": { 2426 | "version": "4.12.0", 2427 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", 2428 | "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", 2429 | "dev": true, 2430 | "optional": true 2431 | }, 2432 | "@rollup/rollup-win32-ia32-msvc": { 2433 | "version": "4.12.0", 2434 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", 2435 | "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", 2436 | "dev": true, 2437 | "optional": true 2438 | }, 2439 | "@rollup/rollup-win32-x64-msvc": { 2440 | "version": "4.12.0", 2441 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", 2442 | "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", 2443 | "dev": true, 2444 | "optional": true 2445 | }, 2446 | "@sinclair/typebox": { 2447 | "version": "0.27.8", 2448 | "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", 2449 | "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", 2450 | "dev": true 2451 | }, 2452 | "@types/estree": { 2453 | "version": "1.0.5", 2454 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 2455 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 2456 | "dev": true 2457 | }, 2458 | "@types/node": { 2459 | "version": "18.0.0", 2460 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", 2461 | "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", 2462 | "dev": true 2463 | }, 2464 | "@types/yargs": { 2465 | "version": "17.0.10", 2466 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", 2467 | "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", 2468 | "dev": true, 2469 | "requires": { 2470 | "@types/yargs-parser": "*" 2471 | } 2472 | }, 2473 | "@types/yargs-parser": { 2474 | "version": "21.0.0", 2475 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", 2476 | "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", 2477 | "dev": true 2478 | }, 2479 | "@vitest/expect": { 2480 | "version": "1.3.1", 2481 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", 2482 | "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", 2483 | "dev": true, 2484 | "requires": { 2485 | "@vitest/spy": "1.3.1", 2486 | "@vitest/utils": "1.3.1", 2487 | "chai": "^4.3.10" 2488 | } 2489 | }, 2490 | "@vitest/runner": { 2491 | "version": "1.3.1", 2492 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz", 2493 | "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==", 2494 | "dev": true, 2495 | "requires": { 2496 | "@vitest/utils": "1.3.1", 2497 | "p-limit": "^5.0.0", 2498 | "pathe": "^1.1.1" 2499 | } 2500 | }, 2501 | "@vitest/snapshot": { 2502 | "version": "1.3.1", 2503 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz", 2504 | "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==", 2505 | "dev": true, 2506 | "requires": { 2507 | "magic-string": "^0.30.5", 2508 | "pathe": "^1.1.1", 2509 | "pretty-format": "^29.7.0" 2510 | } 2511 | }, 2512 | "@vitest/spy": { 2513 | "version": "1.3.1", 2514 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", 2515 | "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", 2516 | "dev": true, 2517 | "requires": { 2518 | "tinyspy": "^2.2.0" 2519 | } 2520 | }, 2521 | "@vitest/utils": { 2522 | "version": "1.3.1", 2523 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", 2524 | "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", 2525 | "dev": true, 2526 | "requires": { 2527 | "diff-sequences": "^29.6.3", 2528 | "estree-walker": "^3.0.3", 2529 | "loupe": "^2.3.7", 2530 | "pretty-format": "^29.7.0" 2531 | } 2532 | }, 2533 | "acorn": { 2534 | "version": "8.11.3", 2535 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 2536 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 2537 | "dev": true 2538 | }, 2539 | "acorn-walk": { 2540 | "version": "8.3.2", 2541 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", 2542 | "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", 2543 | "dev": true 2544 | }, 2545 | "ansi-regex": { 2546 | "version": "5.0.1", 2547 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2548 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2549 | }, 2550 | "ansi-styles": { 2551 | "version": "4.3.0", 2552 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2553 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2554 | "requires": { 2555 | "color-convert": "^2.0.1" 2556 | } 2557 | }, 2558 | "anymatch": { 2559 | "version": "3.1.2", 2560 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 2561 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 2562 | "requires": { 2563 | "normalize-path": "^3.0.0", 2564 | "picomatch": "^2.0.4" 2565 | } 2566 | }, 2567 | "assertion-error": { 2568 | "version": "1.1.0", 2569 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 2570 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 2571 | "dev": true 2572 | }, 2573 | "balanced-match": { 2574 | "version": "1.0.2", 2575 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2576 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2577 | "dev": true 2578 | }, 2579 | "binary-extensions": { 2580 | "version": "2.2.0", 2581 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 2582 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 2583 | }, 2584 | "brace-expansion": { 2585 | "version": "1.1.11", 2586 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2587 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2588 | "dev": true, 2589 | "requires": { 2590 | "balanced-match": "^1.0.0", 2591 | "concat-map": "0.0.1" 2592 | } 2593 | }, 2594 | "braces": { 2595 | "version": "3.0.2", 2596 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2597 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2598 | "requires": { 2599 | "fill-range": "^7.0.1" 2600 | } 2601 | }, 2602 | "cac": { 2603 | "version": "6.7.14", 2604 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 2605 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 2606 | "dev": true 2607 | }, 2608 | "chai": { 2609 | "version": "4.4.1", 2610 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", 2611 | "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", 2612 | "dev": true, 2613 | "requires": { 2614 | "assertion-error": "^1.1.0", 2615 | "check-error": "^1.0.3", 2616 | "deep-eql": "^4.1.3", 2617 | "get-func-name": "^2.0.2", 2618 | "loupe": "^2.3.6", 2619 | "pathval": "^1.1.1", 2620 | "type-detect": "^4.0.8" 2621 | } 2622 | }, 2623 | "check-error": { 2624 | "version": "1.0.3", 2625 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", 2626 | "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", 2627 | "dev": true, 2628 | "requires": { 2629 | "get-func-name": "^2.0.2" 2630 | } 2631 | }, 2632 | "chokidar": { 2633 | "version": "3.5.3", 2634 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 2635 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 2636 | "requires": { 2637 | "anymatch": "~3.1.2", 2638 | "braces": "~3.0.2", 2639 | "fsevents": "~2.3.2", 2640 | "glob-parent": "~5.1.2", 2641 | "is-binary-path": "~2.1.0", 2642 | "is-glob": "~4.0.1", 2643 | "normalize-path": "~3.0.0", 2644 | "readdirp": "~3.6.0" 2645 | } 2646 | }, 2647 | "cliui": { 2648 | "version": "7.0.4", 2649 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2650 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2651 | "requires": { 2652 | "string-width": "^4.2.0", 2653 | "strip-ansi": "^6.0.0", 2654 | "wrap-ansi": "^7.0.0" 2655 | } 2656 | }, 2657 | "color-convert": { 2658 | "version": "2.0.1", 2659 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2660 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2661 | "requires": { 2662 | "color-name": "~1.1.4" 2663 | } 2664 | }, 2665 | "color-name": { 2666 | "version": "1.1.4", 2667 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2668 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2669 | }, 2670 | "concat-map": { 2671 | "version": "0.0.1", 2672 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2673 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 2674 | "dev": true 2675 | }, 2676 | "cross-spawn": { 2677 | "version": "7.0.3", 2678 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 2679 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 2680 | "dev": true, 2681 | "requires": { 2682 | "path-key": "^3.1.0", 2683 | "shebang-command": "^2.0.0", 2684 | "which": "^2.0.1" 2685 | } 2686 | }, 2687 | "cssesc": { 2688 | "version": "3.0.0", 2689 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 2690 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" 2691 | }, 2692 | "debug": { 2693 | "version": "4.3.4", 2694 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2695 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2696 | "dev": true, 2697 | "requires": { 2698 | "ms": "2.1.2" 2699 | } 2700 | }, 2701 | "deep-eql": { 2702 | "version": "4.1.3", 2703 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 2704 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 2705 | "dev": true, 2706 | "requires": { 2707 | "type-detect": "^4.0.0" 2708 | } 2709 | }, 2710 | "diff-sequences": { 2711 | "version": "29.6.3", 2712 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", 2713 | "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", 2714 | "dev": true 2715 | }, 2716 | "emoji-regex": { 2717 | "version": "8.0.0", 2718 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2719 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 2720 | }, 2721 | "esbuild": { 2722 | "version": "0.19.12", 2723 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", 2724 | "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", 2725 | "dev": true, 2726 | "requires": { 2727 | "@esbuild/aix-ppc64": "0.19.12", 2728 | "@esbuild/android-arm": "0.19.12", 2729 | "@esbuild/android-arm64": "0.19.12", 2730 | "@esbuild/android-x64": "0.19.12", 2731 | "@esbuild/darwin-arm64": "0.19.12", 2732 | "@esbuild/darwin-x64": "0.19.12", 2733 | "@esbuild/freebsd-arm64": "0.19.12", 2734 | "@esbuild/freebsd-x64": "0.19.12", 2735 | "@esbuild/linux-arm": "0.19.12", 2736 | "@esbuild/linux-arm64": "0.19.12", 2737 | "@esbuild/linux-ia32": "0.19.12", 2738 | "@esbuild/linux-loong64": "0.19.12", 2739 | "@esbuild/linux-mips64el": "0.19.12", 2740 | "@esbuild/linux-ppc64": "0.19.12", 2741 | "@esbuild/linux-riscv64": "0.19.12", 2742 | "@esbuild/linux-s390x": "0.19.12", 2743 | "@esbuild/linux-x64": "0.19.12", 2744 | "@esbuild/netbsd-x64": "0.19.12", 2745 | "@esbuild/openbsd-x64": "0.19.12", 2746 | "@esbuild/sunos-x64": "0.19.12", 2747 | "@esbuild/win32-arm64": "0.19.12", 2748 | "@esbuild/win32-ia32": "0.19.12", 2749 | "@esbuild/win32-x64": "0.19.12" 2750 | } 2751 | }, 2752 | "escalade": { 2753 | "version": "3.1.1", 2754 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2755 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 2756 | }, 2757 | "estree-walker": { 2758 | "version": "3.0.3", 2759 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 2760 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 2761 | "dev": true, 2762 | "requires": { 2763 | "@types/estree": "^1.0.0" 2764 | } 2765 | }, 2766 | "execa": { 2767 | "version": "8.0.1", 2768 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", 2769 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", 2770 | "dev": true, 2771 | "requires": { 2772 | "cross-spawn": "^7.0.3", 2773 | "get-stream": "^8.0.1", 2774 | "human-signals": "^5.0.0", 2775 | "is-stream": "^3.0.0", 2776 | "merge-stream": "^2.0.0", 2777 | "npm-run-path": "^5.1.0", 2778 | "onetime": "^6.0.0", 2779 | "signal-exit": "^4.1.0", 2780 | "strip-final-newline": "^3.0.0" 2781 | } 2782 | }, 2783 | "fast-glob": { 2784 | "version": "3.2.11", 2785 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 2786 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 2787 | "requires": { 2788 | "@nodelib/fs.stat": "^2.0.2", 2789 | "@nodelib/fs.walk": "^1.2.3", 2790 | "glob-parent": "^5.1.2", 2791 | "merge2": "^1.3.0", 2792 | "micromatch": "^4.0.4" 2793 | } 2794 | }, 2795 | "fastq": { 2796 | "version": "1.13.0", 2797 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 2798 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 2799 | "requires": { 2800 | "reusify": "^1.0.4" 2801 | } 2802 | }, 2803 | "fill-range": { 2804 | "version": "7.0.1", 2805 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2806 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2807 | "requires": { 2808 | "to-regex-range": "^5.0.1" 2809 | } 2810 | }, 2811 | "fs.realpath": { 2812 | "version": "1.0.0", 2813 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2814 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2815 | "dev": true 2816 | }, 2817 | "fsevents": { 2818 | "version": "2.3.3", 2819 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2820 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2821 | "optional": true 2822 | }, 2823 | "get-caller-file": { 2824 | "version": "2.0.5", 2825 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2826 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 2827 | }, 2828 | "get-func-name": { 2829 | "version": "2.0.2", 2830 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", 2831 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", 2832 | "dev": true 2833 | }, 2834 | "get-stream": { 2835 | "version": "8.0.1", 2836 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", 2837 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", 2838 | "dev": true 2839 | }, 2840 | "glob": { 2841 | "version": "7.2.3", 2842 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2843 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2844 | "dev": true, 2845 | "requires": { 2846 | "fs.realpath": "^1.0.0", 2847 | "inflight": "^1.0.4", 2848 | "inherits": "2", 2849 | "minimatch": "^3.1.1", 2850 | "once": "^1.3.0", 2851 | "path-is-absolute": "^1.0.0" 2852 | } 2853 | }, 2854 | "glob-parent": { 2855 | "version": "5.1.2", 2856 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2857 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2858 | "requires": { 2859 | "is-glob": "^4.0.1" 2860 | } 2861 | }, 2862 | "human-signals": { 2863 | "version": "5.0.0", 2864 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", 2865 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", 2866 | "dev": true 2867 | }, 2868 | "immutable": { 2869 | "version": "4.1.0", 2870 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", 2871 | "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" 2872 | }, 2873 | "inflight": { 2874 | "version": "1.0.6", 2875 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2876 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2877 | "dev": true, 2878 | "requires": { 2879 | "once": "^1.3.0", 2880 | "wrappy": "1" 2881 | } 2882 | }, 2883 | "inherits": { 2884 | "version": "2.0.4", 2885 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2886 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2887 | "dev": true 2888 | }, 2889 | "is-binary-path": { 2890 | "version": "2.1.0", 2891 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2892 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2893 | "requires": { 2894 | "binary-extensions": "^2.0.0" 2895 | } 2896 | }, 2897 | "is-extglob": { 2898 | "version": "2.1.1", 2899 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2900 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 2901 | }, 2902 | "is-fullwidth-code-point": { 2903 | "version": "3.0.0", 2904 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2905 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 2906 | }, 2907 | "is-glob": { 2908 | "version": "4.0.3", 2909 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2910 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2911 | "requires": { 2912 | "is-extglob": "^2.1.1" 2913 | } 2914 | }, 2915 | "is-number": { 2916 | "version": "7.0.0", 2917 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2918 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 2919 | }, 2920 | "is-stream": { 2921 | "version": "3.0.0", 2922 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 2923 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 2924 | "dev": true 2925 | }, 2926 | "isexe": { 2927 | "version": "2.0.0", 2928 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2929 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2930 | "dev": true 2931 | }, 2932 | "js-tokens": { 2933 | "version": "8.0.3", 2934 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", 2935 | "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", 2936 | "dev": true 2937 | }, 2938 | "jsonc-parser": { 2939 | "version": "3.2.1", 2940 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", 2941 | "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", 2942 | "dev": true 2943 | }, 2944 | "local-pkg": { 2945 | "version": "0.5.0", 2946 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", 2947 | "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", 2948 | "dev": true, 2949 | "requires": { 2950 | "mlly": "^1.4.2", 2951 | "pkg-types": "^1.0.3" 2952 | } 2953 | }, 2954 | "loupe": { 2955 | "version": "2.3.7", 2956 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", 2957 | "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", 2958 | "dev": true, 2959 | "requires": { 2960 | "get-func-name": "^2.0.1" 2961 | } 2962 | }, 2963 | "magic-string": { 2964 | "version": "0.30.7", 2965 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", 2966 | "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", 2967 | "dev": true, 2968 | "requires": { 2969 | "@jridgewell/sourcemap-codec": "^1.4.15" 2970 | } 2971 | }, 2972 | "merge-stream": { 2973 | "version": "2.0.0", 2974 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2975 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2976 | "dev": true 2977 | }, 2978 | "merge2": { 2979 | "version": "1.4.1", 2980 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2981 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" 2982 | }, 2983 | "micromatch": { 2984 | "version": "4.0.5", 2985 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2986 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2987 | "requires": { 2988 | "braces": "^3.0.2", 2989 | "picomatch": "^2.3.1" 2990 | } 2991 | }, 2992 | "mimic-fn": { 2993 | "version": "4.0.0", 2994 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 2995 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 2996 | "dev": true 2997 | }, 2998 | "minimatch": { 2999 | "version": "3.1.2", 3000 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3001 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3002 | "dev": true, 3003 | "requires": { 3004 | "brace-expansion": "^1.1.7" 3005 | } 3006 | }, 3007 | "mlly": { 3008 | "version": "1.6.1", 3009 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", 3010 | "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", 3011 | "dev": true, 3012 | "requires": { 3013 | "acorn": "^8.11.3", 3014 | "pathe": "^1.1.2", 3015 | "pkg-types": "^1.0.3", 3016 | "ufo": "^1.3.2" 3017 | } 3018 | }, 3019 | "ms": { 3020 | "version": "2.1.2", 3021 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3022 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3023 | "dev": true 3024 | }, 3025 | "nanoid": { 3026 | "version": "3.3.7", 3027 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 3028 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" 3029 | }, 3030 | "normalize-path": { 3031 | "version": "3.0.0", 3032 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3033 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 3034 | }, 3035 | "npm-run-path": { 3036 | "version": "5.3.0", 3037 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", 3038 | "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", 3039 | "dev": true, 3040 | "requires": { 3041 | "path-key": "^4.0.0" 3042 | }, 3043 | "dependencies": { 3044 | "path-key": { 3045 | "version": "4.0.0", 3046 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 3047 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 3048 | "dev": true 3049 | } 3050 | } 3051 | }, 3052 | "once": { 3053 | "version": "1.4.0", 3054 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3055 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 3056 | "dev": true, 3057 | "requires": { 3058 | "wrappy": "1" 3059 | } 3060 | }, 3061 | "onetime": { 3062 | "version": "6.0.0", 3063 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 3064 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 3065 | "dev": true, 3066 | "requires": { 3067 | "mimic-fn": "^4.0.0" 3068 | } 3069 | }, 3070 | "p-limit": { 3071 | "version": "5.0.0", 3072 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", 3073 | "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", 3074 | "dev": true, 3075 | "requires": { 3076 | "yocto-queue": "^1.0.0" 3077 | } 3078 | }, 3079 | "path-is-absolute": { 3080 | "version": "1.0.1", 3081 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3082 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 3083 | "dev": true 3084 | }, 3085 | "path-key": { 3086 | "version": "3.1.1", 3087 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3088 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3089 | "dev": true 3090 | }, 3091 | "pathe": { 3092 | "version": "1.1.2", 3093 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 3094 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 3095 | "dev": true 3096 | }, 3097 | "pathval": { 3098 | "version": "1.1.1", 3099 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 3100 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 3101 | "dev": true 3102 | }, 3103 | "picocolors": { 3104 | "version": "1.0.0", 3105 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 3106 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 3107 | }, 3108 | "picomatch": { 3109 | "version": "2.3.1", 3110 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3111 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 3112 | }, 3113 | "pkg-types": { 3114 | "version": "1.0.3", 3115 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", 3116 | "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", 3117 | "dev": true, 3118 | "requires": { 3119 | "jsonc-parser": "^3.2.0", 3120 | "mlly": "^1.2.0", 3121 | "pathe": "^1.1.0" 3122 | } 3123 | }, 3124 | "postcss": { 3125 | "version": "8.4.35", 3126 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", 3127 | "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", 3128 | "requires": { 3129 | "nanoid": "^3.3.7", 3130 | "picocolors": "^1.0.0", 3131 | "source-map-js": "^1.0.2" 3132 | } 3133 | }, 3134 | "postcss-selector-parser": { 3135 | "version": "6.0.10", 3136 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 3137 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 3138 | "requires": { 3139 | "cssesc": "^3.0.0", 3140 | "util-deprecate": "^1.0.2" 3141 | } 3142 | }, 3143 | "pretty-format": { 3144 | "version": "29.7.0", 3145 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", 3146 | "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", 3147 | "dev": true, 3148 | "requires": { 3149 | "@jest/schemas": "^29.6.3", 3150 | "ansi-styles": "^5.0.0", 3151 | "react-is": "^18.0.0" 3152 | }, 3153 | "dependencies": { 3154 | "ansi-styles": { 3155 | "version": "5.2.0", 3156 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 3157 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 3158 | "dev": true 3159 | } 3160 | } 3161 | }, 3162 | "queue-microtask": { 3163 | "version": "1.2.3", 3164 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3165 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" 3166 | }, 3167 | "react-is": { 3168 | "version": "18.2.0", 3169 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", 3170 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", 3171 | "dev": true 3172 | }, 3173 | "readdirp": { 3174 | "version": "3.6.0", 3175 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3176 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3177 | "requires": { 3178 | "picomatch": "^2.2.1" 3179 | } 3180 | }, 3181 | "require-directory": { 3182 | "version": "2.1.1", 3183 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3184 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 3185 | }, 3186 | "reusify": { 3187 | "version": "1.0.4", 3188 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3189 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" 3190 | }, 3191 | "rimraf": { 3192 | "version": "3.0.2", 3193 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3194 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3195 | "dev": true, 3196 | "requires": { 3197 | "glob": "^7.1.3" 3198 | } 3199 | }, 3200 | "rollup": { 3201 | "version": "4.12.0", 3202 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", 3203 | "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", 3204 | "dev": true, 3205 | "requires": { 3206 | "@rollup/rollup-android-arm-eabi": "4.12.0", 3207 | "@rollup/rollup-android-arm64": "4.12.0", 3208 | "@rollup/rollup-darwin-arm64": "4.12.0", 3209 | "@rollup/rollup-darwin-x64": "4.12.0", 3210 | "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", 3211 | "@rollup/rollup-linux-arm64-gnu": "4.12.0", 3212 | "@rollup/rollup-linux-arm64-musl": "4.12.0", 3213 | "@rollup/rollup-linux-riscv64-gnu": "4.12.0", 3214 | "@rollup/rollup-linux-x64-gnu": "4.12.0", 3215 | "@rollup/rollup-linux-x64-musl": "4.12.0", 3216 | "@rollup/rollup-win32-arm64-msvc": "4.12.0", 3217 | "@rollup/rollup-win32-ia32-msvc": "4.12.0", 3218 | "@rollup/rollup-win32-x64-msvc": "4.12.0", 3219 | "@types/estree": "1.0.5", 3220 | "fsevents": "~2.3.2" 3221 | } 3222 | }, 3223 | "run-parallel": { 3224 | "version": "1.2.0", 3225 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3226 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3227 | "requires": { 3228 | "queue-microtask": "^1.2.2" 3229 | } 3230 | }, 3231 | "sass": { 3232 | "version": "1.53.0", 3233 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", 3234 | "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", 3235 | "requires": { 3236 | "chokidar": ">=3.0.0 <4.0.0", 3237 | "immutable": "^4.0.0", 3238 | "source-map-js": ">=0.6.2 <2.0.0" 3239 | } 3240 | }, 3241 | "shebang-command": { 3242 | "version": "2.0.0", 3243 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3244 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3245 | "dev": true, 3246 | "requires": { 3247 | "shebang-regex": "^3.0.0" 3248 | } 3249 | }, 3250 | "shebang-regex": { 3251 | "version": "3.0.0", 3252 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3253 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3254 | "dev": true 3255 | }, 3256 | "siginfo": { 3257 | "version": "2.0.0", 3258 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 3259 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 3260 | "dev": true 3261 | }, 3262 | "signal-exit": { 3263 | "version": "4.1.0", 3264 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 3265 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 3266 | "dev": true 3267 | }, 3268 | "source-map-js": { 3269 | "version": "1.0.2", 3270 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 3271 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" 3272 | }, 3273 | "stackback": { 3274 | "version": "0.0.2", 3275 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 3276 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 3277 | "dev": true 3278 | }, 3279 | "std-env": { 3280 | "version": "3.7.0", 3281 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", 3282 | "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", 3283 | "dev": true 3284 | }, 3285 | "string-width": { 3286 | "version": "4.2.3", 3287 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3288 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3289 | "requires": { 3290 | "emoji-regex": "^8.0.0", 3291 | "is-fullwidth-code-point": "^3.0.0", 3292 | "strip-ansi": "^6.0.1" 3293 | } 3294 | }, 3295 | "strip-ansi": { 3296 | "version": "6.0.1", 3297 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3298 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3299 | "requires": { 3300 | "ansi-regex": "^5.0.1" 3301 | } 3302 | }, 3303 | "strip-final-newline": { 3304 | "version": "3.0.0", 3305 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 3306 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 3307 | "dev": true 3308 | }, 3309 | "strip-literal": { 3310 | "version": "2.0.0", 3311 | "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz", 3312 | "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==", 3313 | "dev": true, 3314 | "requires": { 3315 | "js-tokens": "^8.0.2" 3316 | } 3317 | }, 3318 | "tinybench": { 3319 | "version": "2.6.0", 3320 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", 3321 | "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", 3322 | "dev": true 3323 | }, 3324 | "tinypool": { 3325 | "version": "0.8.2", 3326 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", 3327 | "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", 3328 | "dev": true 3329 | }, 3330 | "tinyspy": { 3331 | "version": "2.2.1", 3332 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", 3333 | "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", 3334 | "dev": true 3335 | }, 3336 | "to-regex-range": { 3337 | "version": "5.0.1", 3338 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3339 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3340 | "requires": { 3341 | "is-number": "^7.0.0" 3342 | } 3343 | }, 3344 | "type-detect": { 3345 | "version": "4.0.8", 3346 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 3347 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 3348 | "dev": true 3349 | }, 3350 | "typescript": { 3351 | "version": "4.7.4", 3352 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 3353 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 3354 | "dev": true 3355 | }, 3356 | "ufo": { 3357 | "version": "1.4.0", 3358 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", 3359 | "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", 3360 | "dev": true 3361 | }, 3362 | "util-deprecate": { 3363 | "version": "1.0.2", 3364 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3365 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 3366 | }, 3367 | "vite": { 3368 | "version": "5.1.4", 3369 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz", 3370 | "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", 3371 | "dev": true, 3372 | "requires": { 3373 | "esbuild": "^0.19.3", 3374 | "fsevents": "~2.3.3", 3375 | "postcss": "^8.4.35", 3376 | "rollup": "^4.2.0" 3377 | } 3378 | }, 3379 | "vite-node": { 3380 | "version": "1.3.1", 3381 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz", 3382 | "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==", 3383 | "dev": true, 3384 | "requires": { 3385 | "cac": "^6.7.14", 3386 | "debug": "^4.3.4", 3387 | "pathe": "^1.1.1", 3388 | "picocolors": "^1.0.0", 3389 | "vite": "^5.0.0" 3390 | } 3391 | }, 3392 | "vitest": { 3393 | "version": "1.3.1", 3394 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz", 3395 | "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==", 3396 | "dev": true, 3397 | "requires": { 3398 | "@vitest/expect": "1.3.1", 3399 | "@vitest/runner": "1.3.1", 3400 | "@vitest/snapshot": "1.3.1", 3401 | "@vitest/spy": "1.3.1", 3402 | "@vitest/utils": "1.3.1", 3403 | "acorn-walk": "^8.3.2", 3404 | "chai": "^4.3.10", 3405 | "debug": "^4.3.4", 3406 | "execa": "^8.0.1", 3407 | "local-pkg": "^0.5.0", 3408 | "magic-string": "^0.30.5", 3409 | "pathe": "^1.1.1", 3410 | "picocolors": "^1.0.0", 3411 | "std-env": "^3.5.0", 3412 | "strip-literal": "^2.0.0", 3413 | "tinybench": "^2.5.1", 3414 | "tinypool": "^0.8.2", 3415 | "vite": "^5.0.0", 3416 | "vite-node": "1.3.1", 3417 | "why-is-node-running": "^2.2.2" 3418 | } 3419 | }, 3420 | "which": { 3421 | "version": "2.0.2", 3422 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3423 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3424 | "dev": true, 3425 | "requires": { 3426 | "isexe": "^2.0.0" 3427 | } 3428 | }, 3429 | "why-is-node-running": { 3430 | "version": "2.2.2", 3431 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", 3432 | "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", 3433 | "dev": true, 3434 | "requires": { 3435 | "siginfo": "^2.0.0", 3436 | "stackback": "0.0.2" 3437 | } 3438 | }, 3439 | "wrap-ansi": { 3440 | "version": "7.0.0", 3441 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3442 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3443 | "requires": { 3444 | "ansi-styles": "^4.0.0", 3445 | "string-width": "^4.1.0", 3446 | "strip-ansi": "^6.0.0" 3447 | } 3448 | }, 3449 | "wrappy": { 3450 | "version": "1.0.2", 3451 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3452 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3453 | "dev": true 3454 | }, 3455 | "y18n": { 3456 | "version": "5.0.8", 3457 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3458 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 3459 | }, 3460 | "yargs": { 3461 | "version": "17.5.1", 3462 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", 3463 | "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", 3464 | "requires": { 3465 | "cliui": "^7.0.2", 3466 | "escalade": "^3.1.1", 3467 | "get-caller-file": "^2.0.5", 3468 | "require-directory": "^2.1.1", 3469 | "string-width": "^4.2.3", 3470 | "y18n": "^5.0.5", 3471 | "yargs-parser": "^21.0.0" 3472 | } 3473 | }, 3474 | "yargs-parser": { 3475 | "version": "21.0.1", 3476 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", 3477 | "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" 3478 | }, 3479 | "yocto-queue": { 3480 | "version": "1.0.0", 3481 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 3482 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 3483 | "dev": true 3484 | } 3485 | } 3486 | } 3487 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fable-css-modules", 3 | "version": "1.8.0", 4 | "description": "Generate Fable bindings for your CSS modules classes", 5 | "main": "index.js", 6 | "bin": { 7 | "fable-css-modules": "build/cli.js", 8 | "fcm": "build/cli.js" 9 | }, 10 | "files": [ 11 | "build" 12 | ], 13 | "scripts": { 14 | "build": "tsc", 15 | "watch": "tsc -w", 16 | "prepublishOnly": "npm run test && rimraf build && npm run build", 17 | "test": "cd tests && npx vitest run", 18 | "test:watch": "cd tests && npx vitest" 19 | }, 20 | "keywords": [ 21 | "css", 22 | "automation", 23 | "fable", 24 | "css-modules" 25 | ], 26 | "author": "Maxime Mangel", 27 | "license": "Apache-2.0", 28 | "devDependencies": { 29 | "@types/node": "^18.0.0", 30 | "@types/yargs": "^17.0.10", 31 | "rimraf": "^3.0.2", 32 | "typescript": "^4.7.4", 33 | "vitest": "^1.3.1" 34 | }, 35 | "dependencies": { 36 | "fast-glob": "^3.2.11", 37 | "postcss": "^8.4.14", 38 | "postcss-selector-parser": "^6.0.10", 39 | "sass": "^1.53.0", 40 | "yargs": "^17.5.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/classCollector.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import StringBuilder from "./stringBuilder" 3 | import { sanitizeClassName, isCssModule } from "./utils" 4 | import fs from "fs/promises" 5 | 6 | interface Module { 7 | name: string 8 | subModules: Module[] 9 | classes: string[] 10 | } 11 | 12 | export class ClassCollector { 13 | 14 | private _modules: Module[] = []; 15 | private _cwd: string; 16 | private _destination: string; 17 | private _sourceFolder : string; 18 | private _internal : boolean; 19 | private _toCamelCase : boolean; 20 | 21 | constructor(cwd: string, sourceFolder : string, destination: string, internal : boolean, toCamelCase : boolean) { 22 | this._cwd = cwd; 23 | this._sourceFolder = sourceFolder; 24 | this._destination = destination; 25 | this._internal = internal; 26 | this._toCamelCase = toCamelCase; 27 | } 28 | 29 | /** 30 | * Save the provide class into the arborescence of modules. 31 | * 32 | * @param filePath The path of the file to process 33 | * @param className The class name to store 34 | */ 35 | saveClass(filePath: string, className: string) { 36 | // Compute relative path compared to the CWD 37 | const relativePath = 38 | path.relative(this._cwd, filePath) 39 | .replace(/\\/g, "/"); 40 | 41 | let segments = []; 42 | 43 | if (relativePath.startsWith(this._sourceFolder)) { 44 | segments = 45 | relativePath.replace(this._sourceFolder, "") 46 | .split("/") 47 | .filter((segment) => segment !== ""); // Remove empty segments 48 | } else { 49 | segments = relativePath.split("/"); 50 | } 51 | 52 | this.save(undefined, this._modules, segments, className); 53 | } 54 | 55 | /** 56 | * Try to find the module where the class should be stored. 57 | * 58 | * If the module is unknown, this method will create them. 59 | * 60 | * @param knownModules The list of modules known 61 | * @param segments Segments of the path left to process 62 | * @param className The class name to store 63 | */ 64 | private save( 65 | parentModule: Module | undefined, 66 | knownModules: Module[], 67 | segments: string[], 68 | className: string) { 69 | const originalCurrentSegment = segments.shift(); 70 | 71 | if (!originalCurrentSegment) { 72 | throw "Panic: segments should not be empty"; 73 | } 74 | 75 | const currentSegment = 76 | originalCurrentSegment 77 | .replace(/\.module\.(css|scss|sass)/, "") 78 | // Replace . with _ to generate valid F# module/class names 79 | .replace(/\./, "_"); 80 | 81 | const destinationModuleCandidate = 82 | knownModules.find((module) => { 83 | return module.name === currentSegment; 84 | }); 85 | 86 | if (destinationModuleCandidate) { 87 | 88 | // If we didn't reach the end of the segments, keep looking for the destination module 89 | if (segments.length > 0) { 90 | this.save(destinationModuleCandidate, destinationModuleCandidate.subModules, segments, className); 91 | // This is the end of the segments, store the className in the module 92 | } else { 93 | destinationModuleCandidate.classes.push(className); 94 | } 95 | 96 | // The destination module does not exist yet 97 | } else { 98 | 99 | // It is possible that a CSS module is named the same as its parent folder 100 | // 101 | // Example: 102 | // src 103 | // |- CallCard 104 | // |- CallCard.module.scss 105 | // 106 | // In this case, we don't create a new sub module, but we add the class to the existing module 107 | // This will improve the code generation later by generating: 108 | // 109 | // module CallCard = 110 | // type Classes = 111 | // 112 | // instead of 113 | // 114 | // module CallCard = 115 | // module CallCard = 116 | // type Classes = 117 | if (isCssModule(originalCurrentSegment) && parentModule?.name === currentSegment) { 118 | parentModule.classes.push(className); 119 | } else { 120 | const newModule: Module = { 121 | name: currentSegment, 122 | subModules: [], 123 | classes: [] 124 | } 125 | 126 | knownModules.push(newModule); 127 | 128 | // If we didn't reach the end of the segments, keep looking for the destination module 129 | if (segments.length > 0) { 130 | this.save(newModule, newModule.subModules, segments, className); 131 | // This is the end of the segments, store the className in the module 132 | } else { 133 | newModule.classes.push(className); 134 | } 135 | } 136 | } 137 | } 138 | 139 | moduleToText(sb: StringBuilder, module: Module, indent: number) { 140 | 141 | if (module.classes.length > 0) { 142 | sb.indent(indent); 143 | sb.writeLine(`type ${module.name} =`); 144 | sb.writeLine(); 145 | 146 | // The same class can be present mutiple times, for example when doing: 147 | // .container { ... } 148 | // .container .sub-element { ... } 149 | const uniqueClassNames = module.classes.filter((v, i, a) => a.indexOf(v) === i); 150 | 151 | for (const className of uniqueClassNames) { 152 | sb.indent(indent + 1); 153 | sb.writeLine("/// ") 154 | sb.indent(indent + 1); 155 | sb.writeLine(`/// Binding for ${className} class`); 156 | sb.indent(indent + 1); 157 | sb.writeLine("/// ") 158 | sb.indent(indent + 1); 159 | sb.writeLine(`[]`); 160 | sb.indent(indent + 1); 161 | sb.writeLine(`abstract ${sanitizeClassName(className, this._toCamelCase)} : string`); 162 | sb.writeLine(); 163 | } 164 | } 165 | 166 | if (module.subModules.length > 0) { 167 | sb.indent(indent); 168 | sb.writeLine(`module ${module.name} =`); 169 | sb.writeLine(); 170 | } 171 | 172 | for (const subModule of module.subModules) { 173 | this.moduleToText(sb, subModule, indent + 1); 174 | }; 175 | } 176 | 177 | async writeToFile() { 178 | if (this._modules.length == 0) { 179 | console.log("No classes found"); 180 | return; 181 | } 182 | 183 | let sb = new StringBuilder(); 184 | 185 | const internalPrefix = this._internal ? "internal " : ""; 186 | 187 | // Add the prelude to the destination file 188 | sb.writeLine(`//------------------------------------------------------------------------------ 189 | // This code was generated by fable-css-modules. 190 | // Changes to this file will be lost when the code is regenerated. 191 | //------------------------------------------------------------------------------ 192 | 193 | [] 194 | module ${internalPrefix}CssModules 195 | 196 | open Fable.Core 197 | `); 198 | 199 | // Generate all the modules 200 | for (const module of this._modules) { 201 | this.moduleToText(sb, module, 0); 202 | } 203 | 204 | const content = sb.toString(); 205 | // Make sure the destination path exists 206 | await fs.mkdir(path.dirname(this._destination), { recursive: true }); 207 | // Write the content to the destination file 208 | await fs.writeFile(this._destination, content); 209 | } 210 | 211 | } 212 | -------------------------------------------------------------------------------- /src/cli.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import yargs from 'yargs'; 4 | import { hideBin } from 'yargs/helpers'; 5 | 6 | yargs(hideBin(process.argv)) 7 | // Use the commands directory to scaffold. 8 | .commandDir('commands') 9 | .scriptName("fcm") 10 | // Enable strict mode. 11 | .strict() 12 | // Useful aliases. 13 | .alias({ h: 'help' }) 14 | .argv; 15 | -------------------------------------------------------------------------------- /src/commands/build.ts: -------------------------------------------------------------------------------- 1 | import type { Arguments, CommandBuilder } from "yargs"; 2 | import fg from "fast-glob"; 3 | import postcss from "postcss"; 4 | import { ClassCollector } from "../classCollector"; 5 | import { PostcssCollectorPlugin } from "../postcssCollectorPlugin"; 6 | import { getCssContent } from "../css"; 7 | import path from "path"; 8 | 9 | type Options = { 10 | source: string; 11 | outFile: string; 12 | internal: boolean; 13 | camelCase: boolean; 14 | }; 15 | 16 | export const command: string = "$0 [source]"; 17 | export const desc: string = 'Generate bindings for all the CSS modules in folder to file'; 18 | 19 | export const builder: CommandBuilder = (yargs) => 20 | yargs 21 | .options({ 22 | outFile: { 23 | describe: 'Output file where the binding will be written', 24 | type: 'string', 25 | default: 'CssModules.fs' 26 | }, 27 | internal: { 28 | describe: 'Mark the generated module as internal', 29 | type: 'boolean', 30 | default: true 31 | }, 32 | camelCase: { 33 | describe: 'Transform the class names to camelCase', 34 | type: 'boolean', 35 | default: false 36 | } 37 | }) 38 | .positional("source", { 39 | describe: 'Folder where the CSS modules are located', 40 | type: 'string', 41 | default: '.' 42 | }); 43 | 44 | export const handler = async (argv: Arguments) => { 45 | const sourceFolder = path.normalize(argv.source).replace(/\\/g, '/'); 46 | const destinationFile = path.normalize(argv.outFile).replace(/\\/g, '/'); 47 | 48 | const entries = await fg(`${sourceFolder}/**/*.module.{css,scss,sass}`); 49 | 50 | const classCollector = 51 | new ClassCollector( 52 | process.cwd(), 53 | sourceFolder, 54 | destinationFile, 55 | argv.internal, 56 | argv.camelCase 57 | ); 58 | 59 | for (const entry of entries) { 60 | // Transform from SASS to CSS 61 | const cssContent = await getCssContent(entry); 62 | 63 | // Register the postcss plugins 64 | const plugins = [ 65 | PostcssCollectorPlugin({ collector: classCollector }) 66 | ]; 67 | 68 | // Run postcss to collect the classes 69 | await postcss(plugins).process(cssContent, { from: entry }) 70 | } 71 | 72 | // Write the content to the destination file 73 | await classCollector.writeToFile(); 74 | 75 | // Notify the user 76 | console.log("Generation completed"); 77 | }; 78 | -------------------------------------------------------------------------------- /src/css.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs/promises" 2 | import sass from "sass" 3 | 4 | export const getCssContent = async (entry : string) : Promise => { 5 | // If this a SCSS or SASS file, compile it to CSS 6 | if (entry.endsWith(".scss") || entry.endsWith(".sass")) { 7 | return sass.compile(entry).css; 8 | } else { 9 | const buffer = await fs.readFile(entry); 10 | 11 | return buffer.toString(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/postcssCollectorPlugin.ts: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | import { Plugin } from "postcss"; 3 | import createSelectorParser from "postcss-selector-parser"; 4 | import { ClassCollector } from "./classCollector"; 5 | 6 | type PluginOptions = { 7 | collector: ClassCollector 8 | } 9 | 10 | export function PostcssCollectorPlugin(opts: PluginOptions): Plugin { 11 | 12 | return { 13 | postcssPlugin: "postcss-fable-binding", 14 | Root: (root) => { 15 | if (root.source?.input.file) { 16 | const file = root.source.input.file; 17 | 18 | // Compute relative path compared to the CWD 19 | const relativePath = path.relative(process.cwd(), file).replace(/\\/g, "/"); 20 | 21 | const parser = createSelectorParser((selectors) => { 22 | selectors.each((selector) => { 23 | for (const node of selector.nodes) { 24 | if (node.type === "class") { 25 | opts.collector.saveClass(relativePath, node.value); 26 | } 27 | } 28 | }); 29 | }); 30 | 31 | root.walkRules((rule) => { 32 | parser.process(rule, { lossless: true }); 33 | }) 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/stringBuilder.ts: -------------------------------------------------------------------------------- 1 | export default class StringBuilder { 2 | private _lines: string[] = []; 3 | 4 | write(line: string = ""): void { 5 | this._lines.push(line); 6 | } 7 | 8 | writeLine(line: string = ""): void { 9 | this._lines.push(line); 10 | this._lines.push("\n"); 11 | } 12 | 13 | indent(factor : number = 1) : void { 14 | this.space(factor * 4); 15 | } 16 | 17 | space(factor : number = 1) : void { 18 | let space = " ".repeat(factor); 19 | this.write(space); 20 | } 21 | 22 | toString(): string { 23 | return this._lines.join(""); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | export const cssModuleRegex = /\.module\.(css|scss|sass)$/; 2 | 3 | export const isCssModule = (fileName : string) => { 4 | return cssModuleRegex.test(fileName); 5 | } 6 | 7 | export const hyphenToCamelCase = (str : string) => { 8 | return str.replace(/([-]+)(\w)/g, (_, _g1, g2) => g2.toUpperCase()); 9 | } 10 | 11 | export const sanitizeClassName = (str : string, transformToCamelCase : boolean) => { 12 | if (transformToCamelCase) { 13 | return hyphenToCamelCase(str); 14 | } else { 15 | if (str.indexOf("-") !== -1) { 16 | return "``" + str + "``"; 17 | } else { 18 | return str; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/__snapshots__/main.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`contains 1 class if there is one CSS Module 1`] = ` 4 | "//------------------------------------------------------------------------------ 5 | // This code was generated by fable-css-modules. 6 | // Changes to this file will be lost when the code is regenerated. 7 | //------------------------------------------------------------------------------ 8 | 9 | [] 10 | module internal CssModules 11 | 12 | open Fable.Core 13 | 14 | type App = 15 | 16 | /// 17 | /// Binding for red class 18 | /// 19 | [] 20 | abstract red : string 21 | 22 | " 23 | `; 24 | 25 | exports[`contains 1 class per CSS Module 1`] = ` 26 | "//------------------------------------------------------------------------------ 27 | // This code was generated by fable-css-modules. 28 | // Changes to this file will be lost when the code is regenerated. 29 | //------------------------------------------------------------------------------ 30 | 31 | [] 32 | module internal CssModules 33 | 34 | open Fable.Core 35 | 36 | type App = 37 | 38 | /// 39 | /// Binding for red class 40 | /// 41 | [] 42 | abstract red : string 43 | 44 | type Main = 45 | 46 | /// 47 | /// Binding for red class 48 | /// 49 | [] 50 | abstract red : string 51 | 52 | " 53 | `; 54 | 55 | exports[`if internal is set to false module should not be marked as internal 1`] = ` 56 | "//------------------------------------------------------------------------------ 57 | // This code was generated by fable-css-modules. 58 | // Changes to this file will be lost when the code is regenerated. 59 | //------------------------------------------------------------------------------ 60 | 61 | [] 62 | module CssModules 63 | 64 | open Fable.Core 65 | 66 | type App = 67 | 68 | /// 69 | /// Binding for red class 70 | /// 71 | [] 72 | abstract red : string 73 | 74 | " 75 | `; 76 | 77 | exports[`module name with a dot should be transformed to a valid F# identifier 1`] = ` 78 | "//------------------------------------------------------------------------------ 79 | // This code was generated by fable-css-modules. 80 | // Changes to this file will be lost when the code is regenerated. 81 | //------------------------------------------------------------------------------ 82 | 83 | [] 84 | module internal CssModules 85 | 86 | open Fable.Core 87 | 88 | type User_Index = 89 | 90 | /// 91 | /// Binding for list class 92 | /// 93 | [] 94 | abstract list : string 95 | 96 | " 97 | `; 98 | 99 | exports[`nested CSS is supported 1`] = ` 100 | "//------------------------------------------------------------------------------ 101 | // This code was generated by fable-css-modules. 102 | // Changes to this file will be lost when the code is regenerated. 103 | //------------------------------------------------------------------------------ 104 | 105 | [] 106 | module internal CssModules 107 | 108 | open Fable.Core 109 | 110 | type CSS = 111 | 112 | /// 113 | /// Binding for red class 114 | /// 115 | [] 116 | abstract red : string 117 | 118 | /// 119 | /// Binding for blue class 120 | /// 121 | [] 122 | abstract blue : string 123 | 124 | type SASS = 125 | 126 | /// 127 | /// Binding for red class 128 | /// 129 | [] 130 | abstract red : string 131 | 132 | /// 133 | /// Binding for blue class 134 | /// 135 | [] 136 | abstract blue : string 137 | 138 | type SCSS = 139 | 140 | /// 141 | /// Binding for red class 142 | /// 143 | [] 144 | abstract red : string 145 | 146 | /// 147 | /// Binding for blue class 148 | /// 149 | [] 150 | abstract blue : string 151 | 152 | " 153 | `; 154 | 155 | exports[`nested folder is supported 1`] = ` 156 | "//------------------------------------------------------------------------------ 157 | // This code was generated by fable-css-modules. 158 | // Changes to this file will be lost when the code is regenerated. 159 | //------------------------------------------------------------------------------ 160 | 161 | [] 162 | module internal CssModules 163 | 164 | open Fable.Core 165 | 166 | type App = 167 | 168 | /// 169 | /// Binding for red class 170 | /// 171 | [] 172 | abstract red : string 173 | 174 | module Folder1 = 175 | 176 | type App = 177 | 178 | /// 179 | /// Binding for red class 180 | /// 181 | [] 182 | abstract red : string 183 | 184 | module Folder1_1 = 185 | 186 | type App = 187 | 188 | /// 189 | /// Binding for red class 190 | /// 191 | [] 192 | abstract red : string 193 | 194 | " 195 | `; 196 | 197 | exports[`sanitize class name 1`] = ` 198 | "//------------------------------------------------------------------------------ 199 | // This code was generated by fable-css-modules. 200 | // Changes to this file will be lost when the code is regenerated. 201 | //------------------------------------------------------------------------------ 202 | 203 | [] 204 | module internal CssModules 205 | 206 | open Fable.Core 207 | 208 | type App = 209 | 210 | /// 211 | /// Binding for user-name class 212 | /// 213 | [] 214 | abstract \`\`user-name\`\` : string 215 | 216 | /// 217 | /// Binding for user__age class 218 | /// 219 | [] 220 | abstract user__age : string 221 | 222 | /// 223 | /// Binding for user--is-loading class 224 | /// 225 | [] 226 | abstract \`\`user--is-loading\`\` : string 227 | 228 | " 229 | `; 230 | 231 | exports[`support CSS/SASS/SCSS modules 1`] = ` 232 | "//------------------------------------------------------------------------------ 233 | // This code was generated by fable-css-modules. 234 | // Changes to this file will be lost when the code is regenerated. 235 | //------------------------------------------------------------------------------ 236 | 237 | [] 238 | module internal CssModules 239 | 240 | open Fable.Core 241 | 242 | type CSS = 243 | 244 | /// 245 | /// Binding for red class 246 | /// 247 | [] 248 | abstract red : string 249 | 250 | type SASS = 251 | 252 | /// 253 | /// Binding for red class 254 | /// 255 | [] 256 | abstract red : string 257 | 258 | type SCSS = 259 | 260 | /// 261 | /// Binding for red class 262 | /// 263 | [] 264 | abstract red : string 265 | 266 | " 267 | `; 268 | 269 | exports[`transformToCamelCase class name 1`] = ` 270 | "//------------------------------------------------------------------------------ 271 | // This code was generated by fable-css-modules. 272 | // Changes to this file will be lost when the code is regenerated. 273 | //------------------------------------------------------------------------------ 274 | 275 | [] 276 | module internal CssModules 277 | 278 | open Fable.Core 279 | 280 | type App = 281 | 282 | /// 283 | /// Binding for user-name class 284 | /// 285 | [] 286 | abstract userName : string 287 | 288 | /// 289 | /// Binding for user__age class 290 | /// 291 | [] 292 | abstract user__age : string 293 | 294 | /// 295 | /// Binding for user--is-loading class 296 | /// 297 | [] 298 | abstract userIsLoading : string 299 | 300 | " 301 | `; 302 | -------------------------------------------------------------------------------- /tests/fixtures/checkSupportedFormat/CSS.module.css: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/checkSupportedFormat/SASS.module.sass: -------------------------------------------------------------------------------- 1 | .red 2 | color: red 3 | -------------------------------------------------------------------------------- /tests/fixtures/checkSupportedFormat/SCSS.module.scss: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/moduleWithDot/User.Index.module.scss: -------------------------------------------------------------------------------- 1 | .list { 2 | display: flex; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/multipleCssModules/App.module.scss: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/multipleCssModules/Main.module.scss: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/nestedCss/CSS.module.css: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | 4 | &.blue { 5 | color: blue; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/fixtures/nestedCss/SASS.module.sass: -------------------------------------------------------------------------------- 1 | .red 2 | color: red 3 | 4 | &.blue 5 | color: blue 6 | -------------------------------------------------------------------------------- /tests/fixtures/nestedCss/SCSS.module.scss: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | 4 | &.blue { 5 | color: blue; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/fixtures/nestedFolder/App.module.css: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/nestedFolder/Folder1/App.module.css: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/nestedFolder/Folder1/Folder1.1/App.module.css: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/notInternalModule/App.module.scss: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/oneCssModule/App.module.scss: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /tests/fixtures/sanitizeClasses/App.module.css: -------------------------------------------------------------------------------- 1 | .user-name { 2 | color: red; 3 | } 4 | 5 | .user__age { 6 | color: red; 7 | } 8 | 9 | .user--is-loading { 10 | color: red; 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/transformToCamelCase/App.module.css: -------------------------------------------------------------------------------- 1 | .user-name { 2 | color: red; 3 | } 4 | 5 | .user__age { 6 | color: red; 7 | } 8 | 9 | .user--is-loading { 10 | color: red; 11 | } 12 | -------------------------------------------------------------------------------- /tests/main.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from 'vitest' 2 | import { handler } from '../src/commands/build' 3 | import { readFileSync } from "node:fs" 4 | 5 | test('contains 1 class if there is one CSS Module', async () => { 6 | await handler({ 7 | source: "fixtures/oneCssModule", 8 | outFile: 'fixtures/oneCssModule/CssModules.fs', 9 | internal: true, 10 | camelCase: false, 11 | _: [], 12 | $0: '' 13 | }) 14 | 15 | const content = readFileSync("fixtures/oneCssModule/CssModules.fs").toString() 16 | expect(content).toMatchSnapshot() 17 | }) 18 | 19 | test('contains 1 class per CSS Module', async () => { 20 | await handler({ 21 | source: "fixtures/multipleCssModules", 22 | outFile: 'fixtures/multipleCssModules/CssModules.fs', 23 | internal: true, 24 | camelCase: false, 25 | _: [], 26 | $0: '' 27 | }) 28 | 29 | const content = readFileSync("fixtures/multipleCssModules/CssModules.fs").toString() 30 | expect(content).toMatchSnapshot() 31 | }) 32 | 33 | test('support CSS/SASS/SCSS modules', async () => { 34 | await handler({ 35 | source: "fixtures/checkSupportedFormat", 36 | outFile: 'fixtures/checkSupportedFormat/CssModules.fs', 37 | internal: true, 38 | camelCase: false, 39 | _: [], 40 | $0: '' 41 | }) 42 | 43 | const content = readFileSync("fixtures/checkSupportedFormat/CssModules.fs").toString() 44 | expect(content).toMatchSnapshot() 45 | }) 46 | 47 | test('if internal is set to false module should not be marked as internal ', async () => { 48 | await handler({ 49 | source: "fixtures/notInternalModule", 50 | outFile: 'fixtures/notInternalModule/CssModules.fs', 51 | internal: false, 52 | camelCase: false, 53 | _: [], 54 | $0: '' 55 | }) 56 | 57 | const content = readFileSync("fixtures/notInternalModule/CssModules.fs").toString() 58 | expect(content).toMatchSnapshot() 59 | }) 60 | 61 | test('module name with a dot should be transformed to a valid F# identifier', async () => { 62 | await handler({ 63 | source: "fixtures/moduleWithDot", 64 | outFile: 'fixtures/moduleWithDot/CssModules.fs', 65 | internal: true, 66 | camelCase: false, 67 | _: [], 68 | $0: '' 69 | }) 70 | 71 | const content = readFileSync("fixtures/moduleWithDot/CssModules.fs").toString() 72 | expect(content).toMatchSnapshot() 73 | }) 74 | 75 | test('nested folder is supported', async () => { 76 | await handler({ 77 | source: "fixtures/nestedFolder", 78 | outFile: 'fixtures/nestedFolder/CssModules.fs', 79 | internal: true, 80 | camelCase: false, 81 | _: [], 82 | $0: '' 83 | }) 84 | 85 | const content = readFileSync("fixtures/nestedFolder/CssModules.fs").toString() 86 | expect(content).toMatchSnapshot() 87 | }) 88 | 89 | test("nested CSS is supported", async () => { 90 | await handler({ 91 | source: "fixtures/nestedCss", 92 | outFile: 'fixtures/nestedCss/CssModules.fs', 93 | internal: true, 94 | camelCase: false, 95 | _: [], 96 | $0: '' 97 | }) 98 | 99 | const content = readFileSync("fixtures/nestedCss/CssModules.fs").toString() 100 | expect(content).toMatchSnapshot() 101 | }) 102 | 103 | test("sanitize class name", async () => { 104 | await handler({ 105 | source: "fixtures/sanitizeClasses", 106 | outFile: 'fixtures/sanitizeClasses/CssModules.fs', 107 | internal: true, 108 | camelCase: false, 109 | _: [], 110 | $0: '' 111 | }) 112 | 113 | const content = readFileSync("fixtures/sanitizeClasses/CssModules.fs").toString() 114 | expect(content).toMatchSnapshot() 115 | }) 116 | 117 | test("transformToCamelCase class name", async () => { 118 | await handler({ 119 | source: "fixtures/transformToCamelCase", 120 | outFile: 'fixtures/transformToCamelCase/CssModules.fs', 121 | internal: true, 122 | camelCase: true, 123 | _: [], 124 | $0: '' 125 | }) 126 | 127 | const content = readFileSync("fixtures/transformToCamelCase/CssModules.fs").toString() 128 | expect(content).toMatchSnapshot() 129 | }) 130 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ES5" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs" /* Specify what module code is generated. */, 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "resolveJsonModule": true, /* Enable importing .json files. */ 39 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 40 | 41 | /* JavaScript Support */ 42 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 43 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 44 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 45 | 46 | /* Emit */ 47 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 51 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 52 | "outDir": "./build" /* Specify an output folder for all emitted files. */, 53 | // "removeComments": true, /* Disable emitting comments. */ 54 | // "noEmit": true, /* Disable emitting files from a compilation. */ 55 | "importHelpers": false /* Allow importing helper functions from tslib once per project, instead of including them per-file. */, 56 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 57 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 58 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 60 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 63 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 64 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 67 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 70 | 71 | /* Interop Constraints */ 72 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 74 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 76 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 77 | 78 | /* Type Checking */ 79 | "strict": true /* Enable all strict type-checking options. */, 80 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 81 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 82 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 83 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 84 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 85 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 86 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 87 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 88 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 89 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 90 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 91 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 92 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 93 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 94 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 95 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 96 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 97 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 98 | 99 | /* Completeness */ 100 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 101 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 102 | }, 103 | "include": ["src/**/*"], 104 | "exclude": ["node_modules"] 105 | } 106 | --------------------------------------------------------------------------------