Mirror of Steamdown (Markdown -> Steam Markup converter)
0

Configure Feed

Select the types of activity you want to include in your feed.

Initial commit

Spenser Black (Nov 7, 2024, 4:28 PM EST) 4c2e62f6

+8995
+14
.devcontainer/devcontainer.json
··· 1 + { 2 + "name": "Node.js", 3 + "image": "mcr.microsoft.com/devcontainers/typescript-node:22", 4 + "customizations": { 5 + "vscode": { 6 + "extensions": ["EditorConfig.EditorConfig", "esbenp.prettier-vscode"], 7 + "settings": { 8 + "editor.formatOnSave": true 9 + } 10 + } 11 + }, 12 + "postCreateCommand": ".devcontainer/postCreate.sh", 13 + "remoteUser": "node" 14 + }
+2
.devcontainer/postCreate.sh
··· 1 + #!/bin/bash 2 + pnpm install
+17
.editorconfig
··· 1 + root = true 2 + 3 + [*] 4 + end_of_line = LF 5 + indent_style = space 6 + indent_size = 2 7 + charset = utf-8 8 + trim_trailing_whitespace = true 9 + insert_final_newline = true 10 + 11 + # Unset rules for test assets 12 + [*.test.txt] 13 + end_of_line = unset 14 + indent_style = unset 15 + indent_size = unset 16 + trim_trailing_whitespace = unset 17 + insert_final_newline = unset
+2
.gitattributes
··· 1 + # Prevent line ending conversion of test assets 2 + *.test.txt -text
+117
.gitignore
··· 1 + # Logs 2 + logs 3 + *.log 4 + npm-debug.log* 5 + yarn-debug.log* 6 + yarn-error.log* 7 + lerna-debug.log* 8 + 9 + # Diagnostic reports (https://nodejs.org/api/report.html) 10 + report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 + 12 + # Runtime data 13 + pids 14 + *.pid 15 + *.seed 16 + *.pid.lock 17 + 18 + # Directory for instrumented libs generated by jscoverage/JSCover 19 + lib-cov 20 + 21 + # Coverage directory used by tools like istanbul 22 + coverage 23 + *.lcov 24 + 25 + # nyc test coverage 26 + .nyc_output 27 + 28 + # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 + .grunt 30 + 31 + # Bower dependency directory (https://bower.io/) 32 + bower_components 33 + 34 + # node-waf configuration 35 + .lock-wscript 36 + 37 + # Compiled binary addons (https://nodejs.org/api/addons.html) 38 + build/Release 39 + 40 + # Dependency directories 41 + node_modules/ 42 + jspm_packages/ 43 + 44 + # TypeScript v1 declaration files 45 + typings/ 46 + 47 + # TypeScript cache 48 + *.tsbuildinfo 49 + 50 + # Optional npm cache directory 51 + .npm 52 + 53 + # Optional eslint cache 54 + .eslintcache 55 + 56 + # Microbundle cache 57 + .rpt2_cache/ 58 + .rts2_cache_cjs/ 59 + .rts2_cache_es/ 60 + .rts2_cache_umd/ 61 + 62 + # Optional REPL history 63 + .node_repl_history 64 + 65 + # Output of 'npm pack' 66 + *.tgz 67 + 68 + # Yarn Integrity file 69 + .yarn-integrity 70 + 71 + # dotenv environment variables file 72 + .env 73 + .env.test 74 + 75 + # parcel-bundler cache (https://parceljs.org/) 76 + .cache 77 + 78 + # Next.js build output 79 + .next 80 + 81 + # Nuxt.js build / generate output 82 + .nuxt 83 + dist 84 + 85 + # Gatsby files 86 + .cache/ 87 + # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 + # https://nextjs.org/blog/next-9-1#public-directory-support 89 + # public 90 + 91 + # vuepress build output 92 + .vuepress/dist 93 + 94 + # Serverless directories 95 + .serverless/ 96 + 97 + # FuseBox cache 98 + .fusebox/ 99 + 100 + # DynamoDB Local files 101 + .dynamodb/ 102 + 103 + # TernJS port file 104 + .tern-port 105 + 106 + # Yarn Zero-config files 107 + .pnp.* 108 + .yarn/* 109 + !.yarn/patches 110 + !.yarn/plugins 111 + !.yarn/releases 112 + !.yarn/sdks 113 + !.yarn/versions 114 + 115 + # Ignore build mistakes 116 + **/src/*.js 117 + **/src/*.d.ts
+4
.prettierignore
··· 1 + *.md 2 + dist 3 + coverage 4 + pnpm-lock.yaml
+6
.prettierrc.json
··· 1 + { 2 + "printWidth": 88, 3 + "trailingComma": "all", 4 + "tabWidth": 2, 5 + "semi": true 6 + }
+6
.vscode/settings.json
··· 1 + { 2 + "prettier.requireConfig": true, 3 + "prettier.configPath": ".prettierrc.json", 4 + "editor.defaultFormatter": "esbenp.prettier-vscode", 5 + "cSpell.words": ["noparse", "steamdown"] 6 + }
+1
CODEOWNERS
··· 1 + * @spenserblack
+21
HACKING.md
··· 1 + # Hacking 2 + 3 + How to develop for this project. 4 + 5 + ## Testing 6 + 7 + ```shell 8 + pnpm -w run test 9 + ``` 10 + 11 + ## Formatting 12 + 13 + ```shell 14 + pnpm -w run format 15 + ``` 16 + 17 + ## Building 18 + 19 + ```shell 20 + pnpm -r run build 21 + ```
+21
LICENSE
··· 1 + MIT License 2 + 3 + Copyright (c) 2022 Spenser Black 4 + 5 + Permission is hereby granted, free of charge, to any person obtaining a copy 6 + of this software and associated documentation files (the "Software"), to deal 7 + in the Software without restriction, including without limitation the rights 8 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 + copies of the Software, and to permit persons to whom the Software is 10 + furnished to do so, subject to the following conditions: 11 + 12 + The above copyright notice and this permission notice shall be included in all 13 + copies or substantial portions of the Software. 14 + 15 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 + SOFTWARE.
+1
README.md
··· 1 + packages/steamdown/README.md
+6
babel.config.js
··· 1 + module.exports = { 2 + presets: [ 3 + ["@babel/preset-env", { targets: { node: "current" } }], 4 + "@babel/preset-typescript", 5 + ], 6 + };
+9
eslint.config.mjs
··· 1 + import pluginJs from "@eslint/js"; 2 + import tseslint from "typescript-eslint"; 3 + 4 + export default [ 5 + { files: ["**/*.{js,mjs,cjs,ts}"] }, 6 + { ignores: ["babel.config.js", "jest.config.js", "**/*.test.js", "**/dist/"] }, 7 + pluginJs.configs.recommended, 8 + ...tseslint.configs.recommended, 9 + ];
+7
jest.config.js
··· 1 + module.exports = { 2 + collectCoverage: true, 3 + coverageDirectory: "coverage", 4 + coverageProvider: "v8", 5 + // NOTE Disables node_modules from being ignored during transformation. 6 + transformIgnorePatterns: [], 7 + };
+26
package.json
··· 1 + { 2 + "private": true, 3 + "scripts": { 4 + "build": "pnpm run -r build", 5 + "test": "jest", 6 + "format": "prettier --write .", 7 + "format-check": "prettier --check .", 8 + "lint": "eslint", 9 + "lint-fix": "eslint --fix" 10 + }, 11 + "devDependencies": { 12 + "@babel/core": "^7.24.7", 13 + "@babel/preset-env": "^7.24.7", 14 + "@babel/preset-typescript": "^7.24.7", 15 + "@eslint/js": "^9.12.0", 16 + "@tsconfig/recommended": "^1.0.6", 17 + "babel-jest": "^29.7.0", 18 + "jest": "^29.7.0", 19 + "prettier": "^3.3.1", 20 + "typescript": "^5.4.5", 21 + "typescript-eslint": "^8.8.1" 22 + }, 23 + "dependencies": { 24 + "@types/jest": "^29.5.12" 25 + } 26 + }
+2
packages/cli/index.mjs
··· 1 + #!/usr/bin/env node 2 + console.log("Hello, world!");
+32
packages/cli/package.json
··· 1 + { 2 + "name": "@steamdown/cli", 3 + "version": "1.0.0", 4 + "author": "Spenser Black <spenserblack01@gmail.com>", 5 + "license": "MIT", 6 + "description": "A simple wrapper around the Steamdown parser/renderer for the command line.", 7 + "keywords": [ 8 + "steam", 9 + "markdown", 10 + "cli" 11 + ], 12 + "type": "module", 13 + "main": "index.mjs", 14 + "files": [ 15 + "index.mjs" 16 + ], 17 + "bin": { 18 + "steamdown": "./index.mjs", 19 + "stmd": "./index.mjs" 20 + }, 21 + "bugs": { 22 + "url": "https://github.com/spenserblack/steamdown/issues" 23 + }, 24 + "homepage": "https://github.com/spenserblack/steamdown#readme", 25 + "repository": { 26 + "type": "git", 27 + "url": "git+https://github.com/spenserblack/steamdown.git" 28 + }, 29 + "dependencies": { 30 + "@steamdown/core": "workspace:^" 31 + } 32 + }
+33
packages/html/package.json
··· 1 + { 2 + "name": "@steamdown/html", 3 + "version": "1.0.0", 4 + "author": "Spenser Black <spenserblack01@gmail.com>", 5 + "license": "MIT", 6 + "description": "Generate HTML from Steamdown", 7 + "keywords": [ 8 + "steam", 9 + "markdown", 10 + "html" 11 + ], 12 + "type": "module", 13 + "main": "dist/index.js", 14 + "types": "dist/index.d.ts", 15 + "files": [ 16 + "dist", 17 + "steamdown.css" 18 + ], 19 + "scripts": { 20 + "build": "tsc" 21 + }, 22 + "bugs": { 23 + "url": "https://github.com/spenserblack/steamdown/issues" 24 + }, 25 + "homepage": "https://github.com/spenserblack/steamdown#readme", 26 + "repository": { 27 + "type": "git", 28 + "url": "git+https://github.com/spenserblack/steamdown.git" 29 + }, 30 + "dependencies": { 31 + "@steamdown/core": "workspace:^" 32 + } 33 + }
+6
packages/html/src/index.ts
··· 1 + import { parse } from "@steamdown/core"; 2 + 3 + export const render = (text: string): string => { 4 + const parsed = parse(text); 5 + throw new Error("Not implemented"); 6 + };
+8
packages/html/steamdown.css
··· 1 + table.noborder { 2 + border-collapse: collapse; 3 + border: none; 4 + } 5 + 6 + table.equalcells { 7 + /* TODO */ 8 + }
+12
packages/html/tsconfig.json
··· 1 + { 2 + "extends": "../../tsconfig.json", 3 + "compilerOptions": { 4 + "baseUrl": ".", 5 + "outDir": "dist", 6 + "rootDir": "src", 7 + "module": "esnext", 8 + "moduleResolution": "bundler" 9 + }, 10 + "include": ["./src"], 11 + "exclude": ["node_modules", "./dist"] 12 + }
+201
packages/steamdown/README.md
··· 1 + # Steamdown 2 + 3 + A Markdown-like language that renders to Steam's markup language. 4 + 5 + ## Differences from Markdown 6 + 7 + This language should be familiar to anyone who has used Markdown, but there are some key 8 + differences. This section acts as a sort of "cheat sheet" for those who are already 9 + familiar with Markdown and just want to know what's different. 10 + 11 + ### Added syntax 12 + 13 + #### Spoilers 14 + 15 + Some sites support this syntax, so it might be familiar to you, but it's not part of 16 + the original Markdown spec. 17 + 18 + You can spoiler text by wrapping it in `>!` and `!<`. 19 + 20 + ##### Example 21 + 22 + ###### Input 23 + 24 + ``` 25 + >!This is a spoiler!< 26 + ``` 27 + 28 + ###### Output 29 + 30 + ``` 31 + [spoiler]This is a spoiler[/spoiler] 32 + ``` 33 + 34 + #### Noparse 35 + 36 + Steam has the `[noparse]` tag, which causes any text inside it to be rendered as plain 37 + text. Steamdown supports this in both an inline and block form. 38 + 39 + ##### Examples 40 + 41 + ###### Input 42 + 43 + ``` 44 + With noparse {[i]} will not be converted to italics. 45 + 46 + Steamdown will also treat {*text inside noparse tags*} as plain text. 47 + 48 + You can {{ {nest} }} inline noparse spans. 49 + 50 + {{{ 51 + You can use noparse blocks for larger sections of text. 52 + }}} 53 + 54 + {{{{ 55 + {{{ 56 + You can nest noparse blocks. 57 + }}} 58 + }}}} 59 + ``` 60 + 61 + ###### Output 62 + 63 + ``` 64 + With noparse [noparse][i][/noparse] will not be converted to italics. 65 + 66 + Steamdown will also treat [noparse]*text inside noparse tags*[/noparse] as plain text. 67 + 68 + You can [noparse]{nest}[/noparse] inline noparse spans. 69 + 70 + [noparse] 71 + You can use noparse blocks for larger sections of text. 72 + [/noparse] 73 + 74 + [noparse] 75 + {{{ 76 + You can nest noparse blocks. 77 + }}} 78 + [/noparse] 79 + ``` 80 + 81 + ### Changed syntax 82 + 83 + #### Blockquotes 84 + 85 + Some Markdown renders allow you to use `>text` (no space after the `>`) to create a 86 + blockquote. To avoid conflicts with spoiler text, a space is required after the `>` in 87 + Steamdown. 88 + 89 + In Steamdown, quotes can also have an author, with an optional post ID, by adding 90 + `(author;post ID)` after the quote. Quotes are *not* continued on newlines to avoid 91 + syntax conflicts. 92 + 93 + ##### Examples 94 + 95 + ###### Input 96 + 97 + ``` 98 + > quote without an author 99 + 100 + > quote with an author 101 + (author) 102 + 103 + > quote with an author and post ID 104 + (author;12345) 105 + 106 + > quotes can continue 107 + > on multiple lines 108 + 109 + > quotes cannot 110 + continue without another > 111 + ``` 112 + 113 + ###### Output 114 + 115 + ``` 116 + [quote] 117 + quote without an author 118 + [/quote] 119 + 120 + [quote=author] 121 + quote with an author 122 + [/quote] 123 + 124 + [quote=author;12345] 125 + quote with an author and post ID 126 + [/quote] 127 + 128 + [quote] 129 + quotes can continue 130 + on multiple lines 131 + [/quote] 132 + 133 + [quote] 134 + quotes cannot 135 + [/quote] 136 + 137 + continue without another > 138 + ``` 139 + 140 + #### Tables 141 + 142 + Steam does *not* support cell alignment. It does, however, support `equalcells=1` and 143 + `noborder=1`, but apparently not for normal users. For `noborder=1`, use spaces instead 144 + of `-` in the alignment row. For `equalcells=1`, use `:---:` in the alignment row, as 145 + if you were centering a column in normal Markdown. "Alignment row" isn't really accurate 146 + for Steamdown, though, so it should perhaps be called the "attribute row". 147 + 148 + ##### Examples 149 + 150 + In the following examples, it should be noted that the "Attribute row" affects the 151 + *entire table,* not just a column. For this reason, the first cell in an attribute row 152 + takes precedence, and the following only need to be the same for clearer plain-text. 153 + 154 + ###### "Plain" table 155 + 156 + ``` 157 + | one | two | 158 + | --- | --- | 159 + | a | b | 160 + ``` 161 + 162 + ###### `noborder=1` table 163 + 164 + ``` 165 + | one | two | 166 + | | | 167 + | a | b | 168 + ``` 169 + 170 + **NOTE:** Omitting the left and right `|` was considered as a better visual 171 + representation of no borders, but was decided against because it could cause issues with 172 + tables that are 1 cell wide. 173 + 174 + ###### `equalcells=1` table 175 + 176 + ``` 177 + | one | two | 178 + | :-: | :-: | 179 + | a | b | 180 + ``` 181 + 182 + ###### Both `noborder=1` and `equalcells=1` table 183 + 184 + ``` 185 + | one | two | 186 + | : : | : : | 187 + | a | b | 188 + ``` 189 + 190 + ### Removed syntax 191 + 192 + #### Images (`![alt text](url)`) 193 + 194 + Steam doesn't have an equivalent (the closest is `[url=link]text[/url]`), so images 195 + are not supported. Consider using either links `[alt text](url)` or the plain-text link 196 + instead. 197 + 198 + #### Inline code (`` `code` ``) 199 + 200 + Steam seems to render all `[code]` tags as blocks, so inline code is not supported. 201 + Consider using a code block instead.
+2338
packages/steamdown/__tests__/__snapshots__/parser.test.js.snap
··· 1 + // Jest Snapshot v1, https://goo.gl/fbAQLP 2 + 3 + exports[`parser parse() .tree backslashes in noparse are not escapes 1`] = ` 4 + { 5 + "nodes": [ 6 + { 7 + "nodes": [ 8 + { 9 + "text": "\\{no escape\\", 10 + "type": "noparse-span", 11 + }, 12 + { 13 + "text": "}", 14 + "type": "text", 15 + }, 16 + ], 17 + "type": "paragraph", 18 + }, 19 + ], 20 + "type": "root", 21 + } 22 + `; 23 + 24 + exports[`parser parse() .tree blank lines 1`] = ` 25 + { 26 + "nodes": [], 27 + "type": "root", 28 + } 29 + `; 30 + 31 + exports[`parser parse() .tree blank lines followed by paragraph 1`] = ` 32 + { 33 + "nodes": [ 34 + { 35 + "nodes": [ 36 + { 37 + "text": "Hello, World!", 38 + "type": "text", 39 + }, 40 + ], 41 + "type": "paragraph", 42 + }, 43 + ], 44 + "type": "root", 45 + } 46 + `; 47 + 48 + exports[`parser parse() .tree bold 1`] = ` 49 + { 50 + "nodes": [ 51 + { 52 + "nodes": [ 53 + { 54 + "nodes": [ 55 + { 56 + "text": "Bold text", 57 + "type": "text", 58 + }, 59 + ], 60 + "type": "bold", 61 + }, 62 + ], 63 + "type": "paragraph", 64 + }, 65 + ], 66 + "type": "root", 67 + } 68 + `; 69 + 70 + exports[`parser parse() .tree bold and italicized 1`] = ` 71 + { 72 + "nodes": [ 73 + { 74 + "nodes": [ 75 + { 76 + "nodes": [ 77 + { 78 + "text": "Bold and italicized text", 79 + "type": "text", 80 + }, 81 + ], 82 + "type": "bold-italics", 83 + }, 84 + ], 85 + "type": "paragraph", 86 + }, 87 + ], 88 + "type": "root", 89 + } 90 + `; 91 + 92 + exports[`parser parse() .tree braces can be used in noparse with space 1`] = ` 93 + { 94 + "nodes": [ 95 + { 96 + "nodes": [ 97 + { 98 + "text": "{optional inner space for delimiting}", 99 + "type": "noparse-span", 100 + }, 101 + ], 102 + "type": "paragraph", 103 + }, 104 + ], 105 + "type": "root", 106 + } 107 + `; 108 + 109 + exports[`parser parse() .tree code block 1`] = ` 110 + { 111 + "nodes": [ 112 + { 113 + "text": "This is a code block", 114 + "type": "code-block", 115 + }, 116 + ], 117 + "type": "root", 118 + } 119 + `; 120 + 121 + exports[`parser parse() .tree complex list 1`] = ` 122 + { 123 + "nodes": [ 124 + { 125 + "items": [ 126 + { 127 + "nodes": [ 128 + { 129 + "nodes": [ 130 + { 131 + "text": "item one:", 132 + "type": "text", 133 + }, 134 + ], 135 + "type": "paragraph", 136 + }, 137 + { 138 + "items": [ 139 + { 140 + "nodes": [ 141 + { 142 + "nodes": [ 143 + { 144 + "text": "sub-item one", 145 + "type": "text", 146 + }, 147 + ], 148 + "type": "paragraph", 149 + }, 150 + ], 151 + "type": "list-item", 152 + }, 153 + { 154 + "nodes": [ 155 + { 156 + "nodes": [ 157 + { 158 + "text": "sub-item two", 159 + "type": "text", 160 + }, 161 + ], 162 + "type": "paragraph", 163 + }, 164 + ], 165 + "type": "list-item", 166 + }, 167 + ], 168 + "ordered": false, 169 + "type": "list", 170 + }, 171 + ], 172 + "type": "list-item", 173 + }, 174 + { 175 + "nodes": [ 176 + { 177 + "author": undefined, 178 + "nodes": [ 179 + { 180 + "nodes": [ 181 + { 182 + "text": "a quote in a list", 183 + "type": "text", 184 + }, 185 + ], 186 + "type": "paragraph", 187 + }, 188 + ], 189 + "type": "quote", 190 + }, 191 + ], 192 + "type": "list-item", 193 + }, 194 + ], 195 + "ordered": false, 196 + "type": "list", 197 + }, 198 + ], 199 + "type": "root", 200 + } 201 + `; 202 + 203 + exports[`parser parse() .tree escaped asterisks 1`] = ` 204 + { 205 + "nodes": [ 206 + { 207 + "nodes": [ 208 + { 209 + "character": "*", 210 + "type": "escaped", 211 + }, 212 + { 213 + "text": "escaped", 214 + "type": "text", 215 + }, 216 + { 217 + "character": "*", 218 + "type": "escaped", 219 + }, 220 + ], 221 + "type": "paragraph", 222 + }, 223 + ], 224 + "type": "root", 225 + } 226 + `; 227 + 228 + exports[`parser parse() .tree escaped asterisks in bold 1`] = ` 229 + { 230 + "nodes": [ 231 + { 232 + "nodes": [ 233 + { 234 + "nodes": [ 235 + { 236 + "text": "bold ", 237 + "type": "text", 238 + }, 239 + { 240 + "character": "*", 241 + "type": "escaped", 242 + }, 243 + { 244 + "text": "escaped", 245 + "type": "text", 246 + }, 247 + { 248 + "character": "*", 249 + "type": "escaped", 250 + }, 251 + ], 252 + "type": "bold", 253 + }, 254 + ], 255 + "type": "paragraph", 256 + }, 257 + ], 258 + "type": "root", 259 + } 260 + `; 261 + 262 + exports[`parser parse() .tree escaped asterisks in italics 1`] = ` 263 + { 264 + "nodes": [ 265 + { 266 + "nodes": [ 267 + { 268 + "nodes": [ 269 + { 270 + "text": "italics ", 271 + "type": "text", 272 + }, 273 + { 274 + "character": "*", 275 + "type": "escaped", 276 + }, 277 + { 278 + "text": "escaped", 279 + "type": "text", 280 + }, 281 + { 282 + "character": "*", 283 + "type": "escaped", 284 + }, 285 + ], 286 + "type": "italics", 287 + }, 288 + ], 289 + "type": "paragraph", 290 + }, 291 + ], 292 + "type": "root", 293 + } 294 + `; 295 + 296 + exports[`parser parse() .tree escaped backslash 1`] = ` 297 + { 298 + "nodes": [ 299 + { 300 + "nodes": [ 301 + { 302 + "text": "Use a ", 303 + "type": "text", 304 + }, 305 + { 306 + "character": "\\", 307 + "type": "escaped", 308 + }, 309 + { 310 + "text": " to escape special characters", 311 + "type": "text", 312 + }, 313 + ], 314 + "type": "paragraph", 315 + }, 316 + ], 317 + "type": "root", 318 + } 319 + `; 320 + 321 + exports[`parser parse() .tree heading 1`] = ` 322 + { 323 + "nodes": [ 324 + { 325 + "level": 1, 326 + "nodes": [ 327 + { 328 + "text": "Heading 1", 329 + "type": "text", 330 + }, 331 + ], 332 + "type": "heading", 333 + }, 334 + { 335 + "level": 2, 336 + "nodes": [ 337 + { 338 + "text": "Heading 2", 339 + "type": "text", 340 + }, 341 + ], 342 + "type": "heading", 343 + }, 344 + { 345 + "level": 3, 346 + "nodes": [ 347 + { 348 + "text": "Heading 3", 349 + "type": "text", 350 + }, 351 + ], 352 + "type": "heading", 353 + }, 354 + { 355 + "level": 4, 356 + "nodes": [ 357 + { 358 + "text": "Heading 4", 359 + "type": "text", 360 + }, 361 + ], 362 + "type": "heading", 363 + }, 364 + { 365 + "level": 5, 366 + "nodes": [ 367 + { 368 + "text": "Heading 5", 369 + "type": "text", 370 + }, 371 + ], 372 + "type": "heading", 373 + }, 374 + { 375 + "level": 6, 376 + "nodes": [ 377 + { 378 + "text": "Heading 6", 379 + "type": "text", 380 + }, 381 + ], 382 + "type": "heading", 383 + }, 384 + ], 385 + "type": "root", 386 + } 387 + `; 388 + 389 + exports[`parser parse() .tree heading alternative 1`] = ` 390 + { 391 + "nodes": [ 392 + { 393 + "level": 1, 394 + "nodes": [ 395 + { 396 + "text": "Alt heading 1", 397 + "type": "text", 398 + }, 399 + ], 400 + "type": "heading", 401 + }, 402 + { 403 + "level": 2, 404 + "nodes": [ 405 + { 406 + "text": "Alt heading 2", 407 + "type": "text", 408 + }, 409 + ], 410 + "type": "heading", 411 + }, 412 + ], 413 + "type": "root", 414 + } 415 + `; 416 + 417 + exports[`parser parse() .tree heading alternative followed by paragraph 1`] = ` 418 + { 419 + "nodes": [ 420 + { 421 + "level": 1, 422 + "nodes": [ 423 + { 424 + "text": "Alt heading 1", 425 + "type": "text", 426 + }, 427 + ], 428 + "type": "heading", 429 + }, 430 + { 431 + "nodes": [ 432 + { 433 + "text": "Paragraph", 434 + "type": "text", 435 + }, 436 + ], 437 + "type": "paragraph", 438 + }, 439 + { 440 + "level": 1, 441 + "nodes": [ 442 + { 443 + "text": "Alt heading 1", 444 + "type": "text", 445 + }, 446 + ], 447 + "type": "heading", 448 + }, 449 + { 450 + "nodes": [ 451 + { 452 + "text": "Paragraph", 453 + "type": "text", 454 + }, 455 + ], 456 + "type": "paragraph", 457 + }, 458 + ], 459 + "type": "root", 460 + } 461 + `; 462 + 463 + exports[`parser parse() .tree heading alternative with style 1`] = ` 464 + { 465 + "nodes": [ 466 + { 467 + "level": 1, 468 + "nodes": [ 469 + { 470 + "nodes": [ 471 + { 472 + "text": "styled alt heading 1", 473 + "type": "text", 474 + }, 475 + ], 476 + "type": "italics", 477 + }, 478 + ], 479 + "type": "heading", 480 + }, 481 + ], 482 + "type": "root", 483 + } 484 + `; 485 + 486 + exports[`parser parse() .tree heading followed by paragraph 1`] = ` 487 + { 488 + "nodes": [ 489 + { 490 + "level": 1, 491 + "nodes": [ 492 + { 493 + "text": "Heading", 494 + "type": "text", 495 + }, 496 + ], 497 + "type": "heading", 498 + }, 499 + { 500 + "nodes": [ 501 + { 502 + "text": "Paragraph", 503 + "type": "text", 504 + }, 505 + ], 506 + "type": "paragraph", 507 + }, 508 + { 509 + "level": 2, 510 + "nodes": [ 511 + { 512 + "text": "Heading", 513 + "type": "text", 514 + }, 515 + ], 516 + "type": "heading", 517 + }, 518 + { 519 + "nodes": [ 520 + { 521 + "text": "Paragraph", 522 + "type": "text", 523 + }, 524 + ], 525 + "type": "paragraph", 526 + }, 527 + ], 528 + "type": "root", 529 + } 530 + `; 531 + 532 + exports[`parser parse() .tree heading with style 1`] = ` 533 + { 534 + "nodes": [ 535 + { 536 + "level": 1, 537 + "nodes": [ 538 + { 539 + "nodes": [ 540 + { 541 + "text": "styled heading", 542 + "type": "text", 543 + }, 544 + ], 545 + "type": "italics", 546 + }, 547 + ], 548 + "type": "heading", 549 + }, 550 + ], 551 + "type": "root", 552 + } 553 + `; 554 + 555 + exports[`parser parse() .tree horizontal rule 1`] = ` 556 + { 557 + "nodes": [ 558 + { 559 + "type": "horizontal-rule", 560 + }, 561 + { 562 + "type": "horizontal-rule", 563 + }, 564 + { 565 + "type": "horizontal-rule", 566 + }, 567 + ], 568 + "type": "root", 569 + } 570 + `; 571 + 572 + exports[`parser parse() .tree imbalanced strike leaning left 1`] = ` 573 + { 574 + "nodes": [ 575 + { 576 + "nodes": [ 577 + { 578 + "text": "~~strike~", 579 + "type": "text", 580 + }, 581 + ], 582 + "type": "paragraph", 583 + }, 584 + ], 585 + "type": "root", 586 + } 587 + `; 588 + 589 + exports[`parser parse() .tree imbalanced strike leaning right 1`] = ` 590 + { 591 + "nodes": [ 592 + { 593 + "nodes": [ 594 + { 595 + "nodes": [ 596 + { 597 + "text": "strike", 598 + "type": "text", 599 + }, 600 + ], 601 + "type": "strike", 602 + }, 603 + { 604 + "text": "~", 605 + "type": "text", 606 + }, 607 + ], 608 + "type": "paragraph", 609 + }, 610 + ], 611 + "type": "root", 612 + } 613 + `; 614 + 615 + exports[`parser parse() .tree invalid italicized text broken into two paragraphs 1`] = ` 616 + { 617 + "nodes": [ 618 + { 619 + "nodes": [ 620 + { 621 + "text": "Invalid *italicized", 622 + "type": "text", 623 + }, 624 + ], 625 + "type": "paragraph", 626 + }, 627 + { 628 + "nodes": [ 629 + { 630 + "text": "text* with newlines", 631 + "type": "text", 632 + }, 633 + ], 634 + "type": "paragraph", 635 + }, 636 + ], 637 + "type": "root", 638 + } 639 + `; 640 + 641 + exports[`parser parse() .tree invalid italics with spaces 1`] = ` 642 + { 643 + "nodes": [ 644 + { 645 + "nodes": [ 646 + { 647 + "text": "Invalid * italicized * text with spaces", 648 + "type": "text", 649 + }, 650 + ], 651 + "type": "paragraph", 652 + }, 653 + ], 654 + "type": "root", 655 + } 656 + `; 657 + 658 + exports[`parser parse() .tree italicized text 1`] = ` 659 + { 660 + "nodes": [ 661 + { 662 + "nodes": [ 663 + { 664 + "nodes": [ 665 + { 666 + "text": "Italicized text", 667 + "type": "text", 668 + }, 669 + ], 670 + "type": "italics", 671 + }, 672 + ], 673 + "type": "paragraph", 674 + }, 675 + ], 676 + "type": "root", 677 + } 678 + `; 679 + 680 + exports[`parser parse() .tree italics inside word 1`] = ` 681 + { 682 + "nodes": [ 683 + { 684 + "nodes": [ 685 + { 686 + "text": "a", 687 + "type": "text", 688 + }, 689 + { 690 + "nodes": [ 691 + { 692 + "text": "b", 693 + "type": "text", 694 + }, 695 + ], 696 + "type": "italics", 697 + }, 698 + { 699 + "text": "c", 700 + "type": "text", 701 + }, 702 + ], 703 + "type": "paragraph", 704 + }, 705 + ], 706 + "type": "root", 707 + } 708 + `; 709 + 710 + exports[`parser parse() .tree italics plain then more italics 1`] = ` 711 + { 712 + "nodes": [ 713 + { 714 + "nodes": [ 715 + { 716 + "nodes": [ 717 + { 718 + "text": "Italics", 719 + "type": "text", 720 + }, 721 + ], 722 + "type": "italics", 723 + }, 724 + { 725 + "text": " and ", 726 + "type": "text", 727 + }, 728 + { 729 + "nodes": [ 730 + { 731 + "text": "more italics", 732 + "type": "text", 733 + }, 734 + ], 735 + "type": "italics", 736 + }, 737 + ], 738 + "type": "paragraph", 739 + }, 740 + ], 741 + "type": "root", 742 + } 743 + `; 744 + 745 + exports[`parser parse() .tree mixed lists 1`] = ` 746 + { 747 + "nodes": [ 748 + { 749 + "items": [ 750 + { 751 + "nodes": [ 752 + { 753 + "nodes": [ 754 + { 755 + "text": "using an asterisk", 756 + "type": "text", 757 + }, 758 + ], 759 + "type": "paragraph", 760 + }, 761 + ], 762 + "type": "list-item", 763 + }, 764 + ], 765 + "ordered": false, 766 + "type": "list", 767 + }, 768 + { 769 + "items": [ 770 + { 771 + "nodes": [ 772 + { 773 + "nodes": [ 774 + { 775 + "text": "using a dash", 776 + "type": "text", 777 + }, 778 + ], 779 + "type": "paragraph", 780 + }, 781 + ], 782 + "type": "list-item", 783 + }, 784 + ], 785 + "ordered": false, 786 + "type": "list", 787 + }, 788 + { 789 + "items": [ 790 + { 791 + "nodes": [ 792 + { 793 + "nodes": [ 794 + { 795 + "text": "using a number", 796 + "type": "text", 797 + }, 798 + ], 799 + "type": "paragraph", 800 + }, 801 + ], 802 + "type": "list-item", 803 + }, 804 + ], 805 + "ordered": true, 806 + "type": "list", 807 + }, 808 + ], 809 + "type": "root", 810 + } 811 + `; 812 + 813 + exports[`parser parse() .tree nested italicized text 1`] = ` 814 + { 815 + "nodes": [ 816 + { 817 + "nodes": [ 818 + { 819 + "text": "Nested ", 820 + "type": "text", 821 + }, 822 + { 823 + "nodes": [ 824 + { 825 + "text": "italicized", 826 + "type": "text", 827 + }, 828 + ], 829 + "type": "italics", 830 + }, 831 + { 832 + "text": " text", 833 + "type": "text", 834 + }, 835 + ], 836 + "type": "paragraph", 837 + }, 838 + ], 839 + "type": "root", 840 + } 841 + `; 842 + 843 + exports[`parser parse() .tree noparse block 1`] = ` 844 + { 845 + "nodes": [ 846 + { 847 + "text": "not parsed", 848 + "type": "noparse-block", 849 + }, 850 + ], 851 + "type": "root", 852 + } 853 + `; 854 + 855 + exports[`parser parse() .tree noparse block followed by paragraph 1`] = ` 856 + { 857 + "nodes": [ 858 + { 859 + "text": "noparse", 860 + "type": "noparse-block", 861 + }, 862 + { 863 + "nodes": [ 864 + { 865 + "text": "paragraph", 866 + "type": "text", 867 + }, 868 + ], 869 + "type": "paragraph", 870 + }, 871 + { 872 + "text": "noparse", 873 + "type": "noparse-block", 874 + }, 875 + { 876 + "nodes": [ 877 + { 878 + "text": "paragraph", 879 + "type": "text", 880 + }, 881 + ], 882 + "type": "paragraph", 883 + }, 884 + ], 885 + "type": "root", 886 + } 887 + `; 888 + 889 + exports[`parser parse() .tree noparse block with inner braces 1`] = ` 890 + { 891 + "nodes": [ 892 + { 893 + "text": "{{{ 894 + here's how to noparse 895 + }}}", 896 + "type": "noparse-block", 897 + }, 898 + ], 899 + "type": "root", 900 + } 901 + `; 902 + 903 + exports[`parser parse() .tree noparse inline 1`] = ` 904 + { 905 + "nodes": [ 906 + { 907 + "nodes": [ 908 + { 909 + "text": "not parsed", 910 + "type": "noparse-span", 911 + }, 912 + ], 913 + "type": "paragraph", 914 + }, 915 + ], 916 + "type": "root", 917 + } 918 + `; 919 + 920 + exports[`parser parse() .tree noparse inline and another noparse inline 1`] = ` 921 + { 922 + "nodes": [ 923 + { 924 + "nodes": [ 925 + { 926 + "text": "not parsed", 927 + "type": "noparse-span", 928 + }, 929 + { 930 + "text": " ", 931 + "type": "text", 932 + }, 933 + { 934 + "text": "also not parsed", 935 + "type": "noparse-span", 936 + }, 937 + ], 938 + "type": "paragraph", 939 + }, 940 + ], 941 + "type": "root", 942 + } 943 + `; 944 + 945 + exports[`parser parse() .tree noparse inline with special contents 1`] = ` 946 + { 947 + "nodes": [ 948 + { 949 + "nodes": [ 950 + { 951 + "text": "*not italicized*", 952 + "type": "noparse-span", 953 + }, 954 + ], 955 + "type": "paragraph", 956 + }, 957 + ], 958 + "type": "root", 959 + } 960 + `; 961 + 962 + exports[`parser parse() .tree noparse inline with two braces 1`] = ` 963 + { 964 + "nodes": [ 965 + { 966 + "nodes": [ 967 + { 968 + "text": "not parsed", 969 + "type": "noparse-span", 970 + }, 971 + ], 972 + "type": "paragraph", 973 + }, 974 + ], 975 + "type": "root", 976 + } 977 + `; 978 + 979 + exports[`parser parse() .tree ordered list 1`] = ` 980 + { 981 + "nodes": [ 982 + { 983 + "items": [ 984 + { 985 + "nodes": [ 986 + { 987 + "nodes": [ 988 + { 989 + "text": "one", 990 + "type": "text", 991 + }, 992 + ], 993 + "type": "paragraph", 994 + }, 995 + ], 996 + "type": "list-item", 997 + }, 998 + { 999 + "nodes": [ 1000 + { 1001 + "nodes": [ 1002 + { 1003 + "text": "two", 1004 + "type": "text", 1005 + }, 1006 + ], 1007 + "type": "paragraph", 1008 + }, 1009 + ], 1010 + "type": "list-item", 1011 + }, 1012 + { 1013 + "nodes": [ 1014 + { 1015 + "nodes": [ 1016 + { 1017 + "text": "three", 1018 + "type": "text", 1019 + }, 1020 + ], 1021 + "type": "paragraph", 1022 + }, 1023 + ], 1024 + "type": "list-item", 1025 + }, 1026 + ], 1027 + "ordered": true, 1028 + "type": "list", 1029 + }, 1030 + ], 1031 + "type": "root", 1032 + } 1033 + `; 1034 + 1035 + exports[`parser parse() .tree ordered list with deep indentation 1`] = ` 1036 + { 1037 + "nodes": [ 1038 + { 1039 + "items": [ 1040 + { 1041 + "nodes": [ 1042 + { 1043 + "nodes": [ 1044 + { 1045 + "text": "a line 1046 + that continues.", 1047 + "type": "text", 1048 + }, 1049 + ], 1050 + "type": "paragraph", 1051 + }, 1052 + ], 1053 + "type": "list-item", 1054 + }, 1055 + { 1056 + "nodes": [ 1057 + { 1058 + "nodes": [ 1059 + { 1060 + "text": "Two paragraphs...", 1061 + "type": "text", 1062 + }, 1063 + ], 1064 + "type": "paragraph", 1065 + }, 1066 + { 1067 + "nodes": [ 1068 + { 1069 + "text": "One item.", 1070 + "type": "text", 1071 + }, 1072 + ], 1073 + "type": "paragraph", 1074 + }, 1075 + ], 1076 + "type": "list-item", 1077 + }, 1078 + { 1079 + "nodes": [ 1080 + { 1081 + "nodes": [ 1082 + { 1083 + "text": "10 uses 1084 + extra indentation", 1085 + "type": "text", 1086 + }, 1087 + ], 1088 + "type": "paragraph", 1089 + }, 1090 + ], 1091 + "type": "list-item", 1092 + }, 1093 + ], 1094 + "ordered": true, 1095 + "type": "list", 1096 + }, 1097 + ], 1098 + "type": "root", 1099 + } 1100 + `; 1101 + 1102 + exports[`parser parse() .tree paragraph and another paragraph 1`] = ` 1103 + { 1104 + "nodes": [ 1105 + { 1106 + "nodes": [ 1107 + { 1108 + "text": "One paragraph", 1109 + "type": "text", 1110 + }, 1111 + ], 1112 + "type": "paragraph", 1113 + }, 1114 + { 1115 + "nodes": [ 1116 + { 1117 + "text": "Another paragraph", 1118 + "type": "text", 1119 + }, 1120 + ], 1121 + "type": "paragraph", 1122 + }, 1123 + ], 1124 + "type": "root", 1125 + } 1126 + `; 1127 + 1128 + exports[`parser parse() .tree paragraph spanning lines 1`] = ` 1129 + { 1130 + "nodes": [ 1131 + { 1132 + "nodes": [ 1133 + { 1134 + "text": "one 1135 + paragraph 1136 + spanning lines", 1137 + "type": "text", 1138 + }, 1139 + ], 1140 + "type": "paragraph", 1141 + }, 1142 + ], 1143 + "type": "root", 1144 + } 1145 + `; 1146 + 1147 + exports[`parser parse() .tree paragraph with extra newlines 1`] = ` 1148 + { 1149 + "nodes": [ 1150 + { 1151 + "nodes": [ 1152 + { 1153 + "text": "paragraph with extra newlines", 1154 + "type": "text", 1155 + }, 1156 + ], 1157 + "type": "paragraph", 1158 + }, 1159 + ], 1160 + "type": "root", 1161 + } 1162 + `; 1163 + 1164 + exports[`parser parse() .tree paragraph without trailing newline 1`] = ` 1165 + { 1166 + "nodes": [ 1167 + { 1168 + "nodes": [ 1169 + { 1170 + "text": "paragraph without trailing newline", 1171 + "type": "text", 1172 + }, 1173 + ], 1174 + "type": "paragraph", 1175 + }, 1176 + ], 1177 + "type": "root", 1178 + } 1179 + `; 1180 + 1181 + exports[`parser parse() .tree paragraphs separated by horizontal rule 1`] = ` 1182 + { 1183 + "nodes": [ 1184 + { 1185 + "nodes": [ 1186 + { 1187 + "text": "Text before a horizontal rule", 1188 + "type": "text", 1189 + }, 1190 + ], 1191 + "type": "paragraph", 1192 + }, 1193 + { 1194 + "type": "horizontal-rule", 1195 + }, 1196 + { 1197 + "nodes": [ 1198 + { 1199 + "text": "Text after a horizontal rule", 1200 + "type": "text", 1201 + }, 1202 + ], 1203 + "type": "paragraph", 1204 + }, 1205 + ], 1206 + "type": "root", 1207 + } 1208 + `; 1209 + 1210 + exports[`parser parse() .tree plain text followed by url 1`] = ` 1211 + { 1212 + "nodes": [ 1213 + { 1214 + "nodes": [ 1215 + { 1216 + "text": "plain text followed by ", 1217 + "type": "text", 1218 + }, 1219 + { 1220 + "link": "https://example.com", 1221 + "nodes": [ 1222 + { 1223 + "text": "url", 1224 + "type": "text", 1225 + }, 1226 + ], 1227 + "type": "link-url", 1228 + }, 1229 + { 1230 + "text": ".", 1231 + "type": "text", 1232 + }, 1233 + ], 1234 + "type": "paragraph", 1235 + }, 1236 + ], 1237 + "type": "root", 1238 + } 1239 + `; 1240 + 1241 + exports[`parser parse() .tree quote 1`] = ` 1242 + { 1243 + "nodes": [ 1244 + { 1245 + "author": undefined, 1246 + "nodes": [ 1247 + { 1248 + "nodes": [ 1249 + { 1250 + "text": "This is a quote.", 1251 + "type": "text", 1252 + }, 1253 + ], 1254 + "type": "paragraph", 1255 + }, 1256 + { 1257 + "nodes": [ 1258 + { 1259 + "text": "It quotes things.", 1260 + "type": "text", 1261 + }, 1262 + ], 1263 + "type": "paragraph", 1264 + }, 1265 + ], 1266 + "type": "quote", 1267 + }, 1268 + ], 1269 + "type": "root", 1270 + } 1271 + `; 1272 + 1273 + exports[`parser parse() .tree quote nested 1`] = ` 1274 + { 1275 + "nodes": [ 1276 + { 1277 + "author": undefined, 1278 + "nodes": [ 1279 + { 1280 + "nodes": [ 1281 + { 1282 + "text": "You said...", 1283 + "type": "text", 1284 + }, 1285 + ], 1286 + "type": "paragraph", 1287 + }, 1288 + { 1289 + "author": undefined, 1290 + "nodes": [ 1291 + { 1292 + "nodes": [ 1293 + { 1294 + "text": "This is a test.", 1295 + "type": "text", 1296 + }, 1297 + ], 1298 + "type": "paragraph", 1299 + }, 1300 + ], 1301 + "type": "quote", 1302 + }, 1303 + { 1304 + "nodes": [ 1305 + { 1306 + "text": "I said...", 1307 + "type": "text", 1308 + }, 1309 + ], 1310 + "type": "paragraph", 1311 + }, 1312 + { 1313 + "author": undefined, 1314 + "nodes": [ 1315 + { 1316 + "nodes": [ 1317 + { 1318 + "text": "Yes it is.", 1319 + "type": "text", 1320 + }, 1321 + ], 1322 + "type": "paragraph", 1323 + }, 1324 + ], 1325 + "type": "quote", 1326 + }, 1327 + ], 1328 + "type": "quote", 1329 + }, 1330 + ], 1331 + "type": "root", 1332 + } 1333 + `; 1334 + 1335 + exports[`parser parse() .tree quote with author 1`] = ` 1336 + { 1337 + "nodes": [ 1338 + { 1339 + "author": [ 1340 + "me", 1341 + undefined, 1342 + ], 1343 + "nodes": [ 1344 + { 1345 + "nodes": [ 1346 + { 1347 + "text": "I hope quotes work...", 1348 + "type": "text", 1349 + }, 1350 + ], 1351 + "type": "paragraph", 1352 + }, 1353 + ], 1354 + "type": "quote", 1355 + }, 1356 + { 1357 + "author": [ 1358 + "me", 1359 + "123", 1360 + ], 1361 + "nodes": [ 1362 + { 1363 + "nodes": [ 1364 + { 1365 + "text": "I hope they work with post IDs, too...", 1366 + "type": "text", 1367 + }, 1368 + ], 1369 + "type": "paragraph", 1370 + }, 1371 + ], 1372 + "type": "quote", 1373 + }, 1374 + ], 1375 + "type": "root", 1376 + } 1377 + `; 1378 + 1379 + exports[`parser parse() .tree reference 1`] = ` 1380 + { 1381 + "nodes": [ 1382 + { 1383 + "id": "reference", 1384 + "type": "reference", 1385 + "url": "https://example.com", 1386 + }, 1387 + ], 1388 + "type": "root", 1389 + } 1390 + `; 1391 + 1392 + exports[`parser parse() .tree reference after paragraph 1`] = ` 1393 + { 1394 + "nodes": [ 1395 + { 1396 + "nodes": [ 1397 + { 1398 + "text": "paragraph", 1399 + "type": "text", 1400 + }, 1401 + ], 1402 + "type": "paragraph", 1403 + }, 1404 + { 1405 + "id": "reference", 1406 + "type": "reference", 1407 + "url": "https://example.com", 1408 + }, 1409 + ], 1410 + "type": "root", 1411 + } 1412 + `; 1413 + 1414 + exports[`parser parse() .tree reference before paragraph 1`] = ` 1415 + { 1416 + "nodes": [ 1417 + { 1418 + "id": "reference", 1419 + "type": "reference", 1420 + "url": "https://example.com", 1421 + }, 1422 + { 1423 + "nodes": [ 1424 + { 1425 + "text": "paragraph", 1426 + "type": "text", 1427 + }, 1428 + ], 1429 + "type": "paragraph", 1430 + }, 1431 + ], 1432 + "type": "root", 1433 + } 1434 + `; 1435 + 1436 + exports[`parser parse() .tree simple 1`] = ` 1437 + { 1438 + "nodes": [ 1439 + { 1440 + "nodes": [ 1441 + { 1442 + "text": "Hello, World!", 1443 + "type": "text", 1444 + }, 1445 + ], 1446 + "type": "paragraph", 1447 + }, 1448 + ], 1449 + "type": "root", 1450 + } 1451 + `; 1452 + 1453 + exports[`parser parse() .tree spoiler 1`] = ` 1454 + { 1455 + "nodes": [ 1456 + { 1457 + "nodes": [ 1458 + { 1459 + "text": ">!spoiler<!", 1460 + "type": "text", 1461 + }, 1462 + ], 1463 + "type": "paragraph", 1464 + }, 1465 + ], 1466 + "type": "root", 1467 + } 1468 + `; 1469 + 1470 + exports[`parser parse() .tree strike with one tilde 1`] = ` 1471 + { 1472 + "nodes": [ 1473 + { 1474 + "nodes": [ 1475 + { 1476 + "nodes": [ 1477 + { 1478 + "text": "strike", 1479 + "type": "text", 1480 + }, 1481 + ], 1482 + "type": "strike", 1483 + }, 1484 + ], 1485 + "type": "paragraph", 1486 + }, 1487 + ], 1488 + "type": "root", 1489 + } 1490 + `; 1491 + 1492 + exports[`parser parse() .tree strike with two tilde 1`] = ` 1493 + { 1494 + "nodes": [ 1495 + { 1496 + "nodes": [ 1497 + { 1498 + "nodes": [ 1499 + { 1500 + "text": "strike", 1501 + "type": "text", 1502 + }, 1503 + ], 1504 + "type": "strike", 1505 + }, 1506 + ], 1507 + "type": "paragraph", 1508 + }, 1509 + ], 1510 + "type": "root", 1511 + } 1512 + `; 1513 + 1514 + exports[`parser parse() .tree table 1`] = ` 1515 + { 1516 + "nodes": [ 1517 + { 1518 + "attributes": { 1519 + "equalCells": false, 1520 + "noBorder": false, 1521 + "type": "table-attribute-row", 1522 + }, 1523 + "body": [ 1524 + { 1525 + "cells": [ 1526 + { 1527 + "nodes": [ 1528 + { 1529 + "text": "a", 1530 + "type": "text", 1531 + }, 1532 + ], 1533 + "type": "table-cell", 1534 + }, 1535 + { 1536 + "nodes": [ 1537 + { 1538 + "text": "b", 1539 + "type": "text", 1540 + }, 1541 + ], 1542 + "type": "table-cell", 1543 + }, 1544 + ], 1545 + "type": "table-row", 1546 + }, 1547 + ], 1548 + "head": { 1549 + "cells": [ 1550 + { 1551 + "nodes": [ 1552 + { 1553 + "text": "one", 1554 + "type": "text", 1555 + }, 1556 + ], 1557 + "type": "table-cell", 1558 + }, 1559 + { 1560 + "nodes": [ 1561 + { 1562 + "text": "two", 1563 + "type": "text", 1564 + }, 1565 + ], 1566 + "type": "table-cell", 1567 + }, 1568 + ], 1569 + "type": "table-row", 1570 + }, 1571 + "type": "table", 1572 + }, 1573 + ], 1574 + "type": "root", 1575 + } 1576 + `; 1577 + 1578 + exports[`parser parse() .tree table equalcells 1`] = ` 1579 + { 1580 + "nodes": [ 1581 + { 1582 + "attributes": { 1583 + "equalCells": true, 1584 + "noBorder": false, 1585 + "type": "table-attribute-row", 1586 + }, 1587 + "body": [ 1588 + { 1589 + "cells": [ 1590 + { 1591 + "nodes": [ 1592 + { 1593 + "text": "a", 1594 + "type": "text", 1595 + }, 1596 + ], 1597 + "type": "table-cell", 1598 + }, 1599 + { 1600 + "nodes": [ 1601 + { 1602 + "text": "b", 1603 + "type": "text", 1604 + }, 1605 + ], 1606 + "type": "table-cell", 1607 + }, 1608 + ], 1609 + "type": "table-row", 1610 + }, 1611 + ], 1612 + "head": { 1613 + "cells": [ 1614 + { 1615 + "nodes": [ 1616 + { 1617 + "text": "one", 1618 + "type": "text", 1619 + }, 1620 + ], 1621 + "type": "table-cell", 1622 + }, 1623 + { 1624 + "nodes": [ 1625 + { 1626 + "text": "two", 1627 + "type": "text", 1628 + }, 1629 + ], 1630 + "type": "table-cell", 1631 + }, 1632 + ], 1633 + "type": "table-row", 1634 + }, 1635 + "type": "table", 1636 + }, 1637 + ], 1638 + "type": "root", 1639 + } 1640 + `; 1641 + 1642 + exports[`parser parse() .tree table equalcells noborder 1`] = ` 1643 + { 1644 + "nodes": [ 1645 + { 1646 + "attributes": { 1647 + "equalCells": true, 1648 + "noBorder": true, 1649 + "type": "table-attribute-row", 1650 + }, 1651 + "body": [ 1652 + { 1653 + "cells": [ 1654 + { 1655 + "nodes": [ 1656 + { 1657 + "text": "a", 1658 + "type": "text", 1659 + }, 1660 + ], 1661 + "type": "table-cell", 1662 + }, 1663 + { 1664 + "nodes": [ 1665 + { 1666 + "text": "b", 1667 + "type": "text", 1668 + }, 1669 + ], 1670 + "type": "table-cell", 1671 + }, 1672 + ], 1673 + "type": "table-row", 1674 + }, 1675 + ], 1676 + "head": { 1677 + "cells": [ 1678 + { 1679 + "nodes": [ 1680 + { 1681 + "text": "one", 1682 + "type": "text", 1683 + }, 1684 + ], 1685 + "type": "table-cell", 1686 + }, 1687 + { 1688 + "nodes": [ 1689 + { 1690 + "text": "two", 1691 + "type": "text", 1692 + }, 1693 + ], 1694 + "type": "table-cell", 1695 + }, 1696 + ], 1697 + "type": "table-row", 1698 + }, 1699 + "type": "table", 1700 + }, 1701 + ], 1702 + "type": "root", 1703 + } 1704 + `; 1705 + 1706 + exports[`parser parse() .tree table extra head 1`] = ` 1707 + { 1708 + "nodes": [ 1709 + { 1710 + "nodes": [ 1711 + { 1712 + "text": "| one | two | 1713 + | three | four | 1714 + | ----- | ---- |", 1715 + "type": "text", 1716 + }, 1717 + ], 1718 + "type": "paragraph", 1719 + }, 1720 + ], 1721 + "type": "root", 1722 + } 1723 + `; 1724 + 1725 + exports[`parser parse() .tree table no attributes 1`] = ` 1726 + { 1727 + "nodes": [ 1728 + { 1729 + "nodes": [ 1730 + { 1731 + "text": "| one | two | 1732 + | a | b |", 1733 + "type": "text", 1734 + }, 1735 + ], 1736 + "type": "paragraph", 1737 + }, 1738 + ], 1739 + "type": "root", 1740 + } 1741 + `; 1742 + 1743 + exports[`parser parse() .tree table no body 1`] = ` 1744 + { 1745 + "nodes": [ 1746 + { 1747 + "attributes": { 1748 + "equalCells": false, 1749 + "noBorder": false, 1750 + "type": "table-attribute-row", 1751 + }, 1752 + "body": [], 1753 + "head": { 1754 + "cells": [ 1755 + { 1756 + "nodes": [ 1757 + { 1758 + "text": "one", 1759 + "type": "text", 1760 + }, 1761 + ], 1762 + "type": "table-cell", 1763 + }, 1764 + { 1765 + "nodes": [ 1766 + { 1767 + "text": "two", 1768 + "type": "text", 1769 + }, 1770 + ], 1771 + "type": "table-cell", 1772 + }, 1773 + ], 1774 + "type": "table-row", 1775 + }, 1776 + "type": "table", 1777 + }, 1778 + ], 1779 + "type": "root", 1780 + } 1781 + `; 1782 + 1783 + exports[`parser parse() .tree table noborder 1`] = ` 1784 + { 1785 + "nodes": [ 1786 + { 1787 + "attributes": { 1788 + "equalCells": false, 1789 + "noBorder": true, 1790 + "type": "table-attribute-row", 1791 + }, 1792 + "body": [ 1793 + { 1794 + "cells": [ 1795 + { 1796 + "nodes": [ 1797 + { 1798 + "text": "a", 1799 + "type": "text", 1800 + }, 1801 + ], 1802 + "type": "table-cell", 1803 + }, 1804 + { 1805 + "nodes": [ 1806 + { 1807 + "text": "b", 1808 + "type": "text", 1809 + }, 1810 + ], 1811 + "type": "table-cell", 1812 + }, 1813 + ], 1814 + "type": "table-row", 1815 + }, 1816 + ], 1817 + "head": { 1818 + "cells": [ 1819 + { 1820 + "nodes": [ 1821 + { 1822 + "text": "one", 1823 + "type": "text", 1824 + }, 1825 + ], 1826 + "type": "table-cell", 1827 + }, 1828 + { 1829 + "nodes": [ 1830 + { 1831 + "text": "two", 1832 + "type": "text", 1833 + }, 1834 + ], 1835 + "type": "table-cell", 1836 + }, 1837 + ], 1838 + "type": "table-row", 1839 + }, 1840 + "type": "table", 1841 + }, 1842 + ], 1843 + "type": "root", 1844 + } 1845 + `; 1846 + 1847 + exports[`parser parse() .tree table with multiple rows 1`] = ` 1848 + { 1849 + "nodes": [ 1850 + { 1851 + "attributes": { 1852 + "equalCells": false, 1853 + "noBorder": false, 1854 + "type": "table-attribute-row", 1855 + }, 1856 + "body": [ 1857 + { 1858 + "cells": [ 1859 + { 1860 + "nodes": [ 1861 + { 1862 + "text": "a", 1863 + "type": "text", 1864 + }, 1865 + ], 1866 + "type": "table-cell", 1867 + }, 1868 + { 1869 + "nodes": [ 1870 + { 1871 + "text": "b", 1872 + "type": "text", 1873 + }, 1874 + ], 1875 + "type": "table-cell", 1876 + }, 1877 + ], 1878 + "type": "table-row", 1879 + }, 1880 + { 1881 + "cells": [ 1882 + { 1883 + "nodes": [ 1884 + { 1885 + "text": "c", 1886 + "type": "text", 1887 + }, 1888 + ], 1889 + "type": "table-cell", 1890 + }, 1891 + { 1892 + "nodes": [ 1893 + { 1894 + "text": "d", 1895 + "type": "text", 1896 + }, 1897 + ], 1898 + "type": "table-cell", 1899 + }, 1900 + ], 1901 + "type": "table-row", 1902 + }, 1903 + { 1904 + "cells": [ 1905 + { 1906 + "nodes": [ 1907 + { 1908 + "text": "e", 1909 + "type": "text", 1910 + }, 1911 + ], 1912 + "type": "table-cell", 1913 + }, 1914 + { 1915 + "nodes": [ 1916 + { 1917 + "text": "f", 1918 + "type": "text", 1919 + }, 1920 + ], 1921 + "type": "table-cell", 1922 + }, 1923 + ], 1924 + "type": "table-row", 1925 + }, 1926 + ], 1927 + "head": { 1928 + "cells": [ 1929 + { 1930 + "nodes": [ 1931 + { 1932 + "text": "one", 1933 + "type": "text", 1934 + }, 1935 + ], 1936 + "type": "table-cell", 1937 + }, 1938 + { 1939 + "nodes": [ 1940 + { 1941 + "text": "two", 1942 + "type": "text", 1943 + }, 1944 + ], 1945 + "type": "table-cell", 1946 + }, 1947 + ], 1948 + "type": "table-row", 1949 + }, 1950 + "type": "table", 1951 + }, 1952 + ], 1953 + "type": "root", 1954 + } 1955 + `; 1956 + 1957 + exports[`parser parse() .tree two paragraphs 1`] = ` 1958 + { 1959 + "nodes": [ 1960 + { 1961 + "nodes": [ 1962 + { 1963 + "text": "Foo", 1964 + "type": "text", 1965 + }, 1966 + ], 1967 + "type": "paragraph", 1968 + }, 1969 + { 1970 + "nodes": [ 1971 + { 1972 + "text": "Bar", 1973 + "type": "text", 1974 + }, 1975 + ], 1976 + "type": "paragraph", 1977 + }, 1978 + ], 1979 + "type": "root", 1980 + } 1981 + `; 1982 + 1983 + exports[`parser parse() .tree underlined 1`] = ` 1984 + { 1985 + "nodes": [ 1986 + { 1987 + "nodes": [ 1988 + { 1989 + "nodes": [ 1990 + { 1991 + "text": "Underlined text", 1992 + "type": "text", 1993 + }, 1994 + ], 1995 + "type": "underline", 1996 + }, 1997 + ], 1998 + "type": "paragraph", 1999 + }, 2000 + ], 2001 + "type": "root", 2002 + } 2003 + `; 2004 + 2005 + exports[`parser parse() .tree underlined in italicized 1`] = ` 2006 + { 2007 + "nodes": [ 2008 + { 2009 + "nodes": [ 2010 + { 2011 + "nodes": [ 2012 + { 2013 + "text": "Italicized and ", 2014 + "type": "text", 2015 + }, 2016 + { 2017 + "nodes": [ 2018 + { 2019 + "text": "underlined", 2020 + "type": "text", 2021 + }, 2022 + ], 2023 + "type": "underline", 2024 + }, 2025 + ], 2026 + "type": "italics", 2027 + }, 2028 + ], 2029 + "type": "paragraph", 2030 + }, 2031 + ], 2032 + "type": "root", 2033 + } 2034 + `; 2035 + 2036 + exports[`parser parse() .tree unordered list with asterisks 1`] = ` 2037 + { 2038 + "nodes": [ 2039 + { 2040 + "items": [ 2041 + { 2042 + "nodes": [ 2043 + { 2044 + "nodes": [ 2045 + { 2046 + "text": "1", 2047 + "type": "text", 2048 + }, 2049 + ], 2050 + "type": "paragraph", 2051 + }, 2052 + ], 2053 + "type": "list-item", 2054 + }, 2055 + { 2056 + "nodes": [ 2057 + { 2058 + "nodes": [ 2059 + { 2060 + "text": "2", 2061 + "type": "text", 2062 + }, 2063 + ], 2064 + "type": "paragraph", 2065 + }, 2066 + ], 2067 + "type": "list-item", 2068 + }, 2069 + { 2070 + "nodes": [ 2071 + { 2072 + "nodes": [ 2073 + { 2074 + "text": "3", 2075 + "type": "text", 2076 + }, 2077 + ], 2078 + "type": "paragraph", 2079 + }, 2080 + ], 2081 + "type": "list-item", 2082 + }, 2083 + ], 2084 + "ordered": false, 2085 + "type": "list", 2086 + }, 2087 + ], 2088 + "type": "root", 2089 + } 2090 + `; 2091 + 2092 + exports[`parser parse() .tree unordered list with dashes 1`] = ` 2093 + { 2094 + "nodes": [ 2095 + { 2096 + "items": [ 2097 + { 2098 + "nodes": [ 2099 + { 2100 + "nodes": [ 2101 + { 2102 + "text": "1", 2103 + "type": "text", 2104 + }, 2105 + ], 2106 + "type": "paragraph", 2107 + }, 2108 + ], 2109 + "type": "list-item", 2110 + }, 2111 + { 2112 + "nodes": [ 2113 + { 2114 + "nodes": [ 2115 + { 2116 + "text": "2", 2117 + "type": "text", 2118 + }, 2119 + ], 2120 + "type": "paragraph", 2121 + }, 2122 + ], 2123 + "type": "list-item", 2124 + }, 2125 + { 2126 + "nodes": [ 2127 + { 2128 + "nodes": [ 2129 + { 2130 + "text": "3", 2131 + "type": "text", 2132 + }, 2133 + ], 2134 + "type": "paragraph", 2135 + }, 2136 + ], 2137 + "type": "list-item", 2138 + }, 2139 + ], 2140 + "ordered": false, 2141 + "type": "list", 2142 + }, 2143 + ], 2144 + "type": "root", 2145 + } 2146 + `; 2147 + 2148 + exports[`parser parse() .tree url link 1`] = ` 2149 + { 2150 + "nodes": [ 2151 + { 2152 + "nodes": [ 2153 + { 2154 + "link": "https://example.com", 2155 + "nodes": [ 2156 + { 2157 + "text": "url with link", 2158 + "type": "text", 2159 + }, 2160 + ], 2161 + "type": "link-url", 2162 + }, 2163 + ], 2164 + "type": "paragraph", 2165 + }, 2166 + ], 2167 + "type": "root", 2168 + } 2169 + `; 2170 + 2171 + exports[`parser parse() .tree url link with style 1`] = ` 2172 + { 2173 + "nodes": [ 2174 + { 2175 + "nodes": [ 2176 + { 2177 + "link": "https://example.com", 2178 + "nodes": [ 2179 + { 2180 + "nodes": [ 2181 + { 2182 + "text": "styled url", 2183 + "type": "text", 2184 + }, 2185 + ], 2186 + "type": "italics", 2187 + }, 2188 + { 2189 + "text": " with link", 2190 + "type": "text", 2191 + }, 2192 + ], 2193 + "type": "link-url", 2194 + }, 2195 + ], 2196 + "type": "paragraph", 2197 + }, 2198 + ], 2199 + "type": "root", 2200 + } 2201 + `; 2202 + 2203 + exports[`parser parse() .tree url ref with id 1`] = ` 2204 + { 2205 + "nodes": [ 2206 + { 2207 + "nodes": [ 2208 + { 2209 + "id": "id", 2210 + "nodes": [ 2211 + { 2212 + "text": "url with id", 2213 + "type": "text", 2214 + }, 2215 + ], 2216 + "type": "id-url", 2217 + }, 2218 + ], 2219 + "type": "paragraph", 2220 + }, 2221 + ], 2222 + "type": "root", 2223 + } 2224 + `; 2225 + 2226 + exports[`parser parse() .tree url ref with id and style 1`] = ` 2227 + { 2228 + "nodes": [ 2229 + { 2230 + "nodes": [ 2231 + { 2232 + "id": "id", 2233 + "nodes": [ 2234 + { 2235 + "nodes": [ 2236 + { 2237 + "text": "styled url", 2238 + "type": "text", 2239 + }, 2240 + ], 2241 + "type": "italics", 2242 + }, 2243 + { 2244 + "text": " with id", 2245 + "type": "text", 2246 + }, 2247 + ], 2248 + "type": "id-url", 2249 + }, 2250 + ], 2251 + "type": "paragraph", 2252 + }, 2253 + ], 2254 + "type": "root", 2255 + } 2256 + `; 2257 + 2258 + exports[`parser parse() .tree url ref without id 1`] = ` 2259 + { 2260 + "nodes": [ 2261 + { 2262 + "nodes": [ 2263 + { 2264 + "id": "plain-url", 2265 + "nodes": [ 2266 + { 2267 + "text": "plain-url", 2268 + "type": "text", 2269 + }, 2270 + ], 2271 + "type": "id-url", 2272 + }, 2273 + ], 2274 + "type": "paragraph", 2275 + }, 2276 + ], 2277 + "type": "root", 2278 + } 2279 + `; 2280 + 2281 + exports[`parser parse() .tree url ref without id with style 1`] = ` 2282 + { 2283 + "nodes": [ 2284 + { 2285 + "nodes": [ 2286 + { 2287 + "id": "*styled url*", 2288 + "nodes": [ 2289 + { 2290 + "nodes": [ 2291 + { 2292 + "text": "styled url", 2293 + "type": "text", 2294 + }, 2295 + ], 2296 + "type": "italics", 2297 + }, 2298 + ], 2299 + "type": "id-url", 2300 + }, 2301 + ], 2302 + "type": "paragraph", 2303 + }, 2304 + ], 2305 + "type": "root", 2306 + } 2307 + `; 2308 + 2309 + exports[`parser parse() .tree valid italicized text with a newline 1`] = ` 2310 + { 2311 + "nodes": [ 2312 + { 2313 + "nodes": [ 2314 + { 2315 + "text": "Valid ", 2316 + "type": "text", 2317 + }, 2318 + { 2319 + "nodes": [ 2320 + { 2321 + "text": "italicized 2322 + text", 2323 + "type": "text", 2324 + }, 2325 + ], 2326 + "type": "italics", 2327 + }, 2328 + { 2329 + "text": " with a newline", 2330 + "type": "text", 2331 + }, 2332 + ], 2333 + "type": "paragraph", 2334 + }, 2335 + ], 2336 + "type": "root", 2337 + } 2338 + `;
+1
packages/steamdown/__tests__/assets/backslashes in noparse are not escapes.test.txt
··· 1 + {\{no escape\}}
+3
packages/steamdown/__tests__/assets/blank lines followed by paragraph.test.txt
··· 1 + 2 + 3 + Hello, World!
+2
packages/steamdown/__tests__/assets/blank lines.test.txt
··· 1 + 2 +
+1
packages/steamdown/__tests__/assets/bold and italicized.test.txt
··· 1 + ***Bold and italicized text***
+1
packages/steamdown/__tests__/assets/bold.test.txt
··· 1 + **Bold text**
+1
packages/steamdown/__tests__/assets/braces can be used in noparse with space.test.txt
··· 1 + {{ {optional inner space for delimiting} }}
+3
packages/steamdown/__tests__/assets/code block.test.txt
··· 1 + ``` 2 + This is a code block 3 + ```
+5
packages/steamdown/__tests__/assets/complex list.test.txt
··· 1 + * item one: 2 + 3 + * sub-item one 4 + * sub-item two 5 + * > a quote in a list
+1
packages/steamdown/__tests__/assets/escaped asterisks in bold.test.txt
··· 1 + **bold \*escaped\***
+1
packages/steamdown/__tests__/assets/escaped asterisks in italics.test.txt
··· 1 + *italics \*escaped\**
+1
packages/steamdown/__tests__/assets/escaped asterisks.test.txt
··· 1 + \*escaped\*
+1
packages/steamdown/__tests__/assets/escaped backslash.test.txt
··· 1 + Use a \\ to escape special characters
+8
packages/steamdown/__tests__/assets/heading alternative followed by paragraph.test.txt
··· 1 + Alt heading 1 2 + ============= 3 + Paragraph 4 + 5 + Alt heading 1 6 + ============= 7 + 8 + Paragraph
+2
packages/steamdown/__tests__/assets/heading alternative with style.test.txt
··· 1 + *styled alt heading 1* 2 + ======================
+5
packages/steamdown/__tests__/assets/heading alternative.test.txt
··· 1 + Alt heading 1 2 + ============= 3 + 4 + Alt heading 2 5 + -------------
+6
packages/steamdown/__tests__/assets/heading followed by paragraph.test.txt
··· 1 + # Heading 2 + Paragraph 3 + 4 + ## Heading 5 + 6 + Paragraph
+1
packages/steamdown/__tests__/assets/heading with style.test.txt
··· 1 + # *styled heading*
+11
packages/steamdown/__tests__/assets/heading.test.txt
··· 1 + # Heading 1 2 + 3 + ## Heading 2 4 + 5 + ### Heading 3 6 + 7 + #### Heading 4 8 + 9 + ##### Heading 5 10 + 11 + ###### Heading 6
+3
packages/steamdown/__tests__/assets/horizontal rule.test.txt
··· 1 + --- 2 + *** 3 + ___
+1
packages/steamdown/__tests__/assets/imbalanced strike leaning left.test.txt
··· 1 + ~~strike~
+1
packages/steamdown/__tests__/assets/imbalanced strike leaning right.test.txt
··· 1 + ~strike~~
+25
packages/steamdown/__tests__/assets/index.cjs
··· 1 + const fs = require('node:fs'); 2 + const path = require('node:path'); 3 + 4 + const testExt = /\.test\.txt$/; 5 + 6 + // TODO Make this async so the files aren't read one by one 7 + const assets = fs.readdirSync(__dirname).filter((filename) => testExt.test(filename)).map((filename) => { 8 + const filepath = path.join(__dirname, filename); 9 + const name = filename.replace(testExt, ''); 10 + const content = fs.promises.readFile(filepath, 'utf-8'); 11 + return { 12 + path: filepath, 13 + name, 14 + content, 15 + }; 16 + }); 17 + 18 + /** 19 + * Get all assets in this directory. 20 + */ 21 + const useAssets = () => { 22 + return assets; 23 + } 24 + 25 + module.exports = useAssets;
+3
packages/steamdown/__tests__/assets/invalid italicized text broken into two paragraphs.test.txt
··· 1 + Invalid *italicized 2 + 3 + text* with newlines
+1
packages/steamdown/__tests__/assets/invalid italics with spaces.test.txt
··· 1 + Invalid * italicized * text with spaces
+1
packages/steamdown/__tests__/assets/italicized text.test.txt
··· 1 + *Italicized text*
+1
packages/steamdown/__tests__/assets/italics inside word.test.txt
··· 1 + a*b*c
+1
packages/steamdown/__tests__/assets/italics plain then more italics.test.txt
··· 1 + *Italics* and *more italics*
+3
packages/steamdown/__tests__/assets/mixed lists.test.txt
··· 1 + * using an asterisk 2 + - using a dash 3 + 1. using a number
+1
packages/steamdown/__tests__/assets/nested italicized text.test.txt
··· 1 + Nested *italicized* text
+10
packages/steamdown/__tests__/assets/noparse block followed by paragraph.test.txt
··· 1 + {{{ 2 + noparse 3 + }}} 4 + paragraph 5 + 6 + {{{ 7 + noparse 8 + }}} 9 + 10 + paragraph
+5
packages/steamdown/__tests__/assets/noparse block with inner braces.test.txt
··· 1 + {{{{ 2 + {{{ 3 + here's how to noparse 4 + }}} 5 + }}}}
+3
packages/steamdown/__tests__/assets/noparse block.test.txt
··· 1 + {{{ 2 + not parsed 3 + }}}
+1
packages/steamdown/__tests__/assets/noparse inline and another noparse inline.test.txt
··· 1 + {not parsed} {also not parsed}
+1
packages/steamdown/__tests__/assets/noparse inline with special contents.test.txt
··· 1 + {{*not italicized*}}
+1
packages/steamdown/__tests__/assets/noparse inline with two braces.test.txt
··· 1 + {{not parsed}}
+1
packages/steamdown/__tests__/assets/noparse inline.test.txt
··· 1 + {not parsed}
+7
packages/steamdown/__tests__/assets/ordered list with deep indentation.test.txt
··· 1 + 1. a line 2 + that continues. 3 + 2. Two paragraphs... 4 + 5 + One item. 6 + 10. 10 uses 7 + extra indentation
+3
packages/steamdown/__tests__/assets/ordered list.test.txt
··· 1 + 1. one 2 + 2. two 3 + 3. three
+3
packages/steamdown/__tests__/assets/paragraph and another paragraph.test.txt
··· 1 + One paragraph 2 + 3 + Another paragraph
+3
packages/steamdown/__tests__/assets/paragraph spanning lines.test.txt
··· 1 + one 2 + paragraph 3 + spanning lines
+3
packages/steamdown/__tests__/assets/paragraph with extra newlines.test.txt
··· 1 + paragraph with extra newlines 2 + 3 +
+1
packages/steamdown/__tests__/assets/paragraph without trailing newline.test.txt
··· 1 + paragraph without trailing newline
+5
packages/steamdown/__tests__/assets/paragraphs separated by horizontal rule.test.txt
··· 1 + Text before a horizontal rule 2 + 3 + ***************************** 4 + 5 + Text after a horizontal rule
+1
packages/steamdown/__tests__/assets/plain text followed by url.test.txt
··· 1 + plain text followed by [url](https://example.com).
+6
packages/steamdown/__tests__/assets/quote nested.test.txt
··· 1 + > You said... 2 + > > This is a test. 3 + > 4 + > I said... 5 + > 6 + > > Yes it is.
+5
packages/steamdown/__tests__/assets/quote with author.test.txt
··· 1 + > I hope quotes work... 2 + (me) 3 + 4 + > I hope they work with post IDs, too... 5 + (me;123)
+3
packages/steamdown/__tests__/assets/quote.test.txt
··· 1 + > This is a quote. 2 + > 3 + > It quotes things.
+3
packages/steamdown/__tests__/assets/reference after paragraph.test.txt
··· 1 + paragraph 2 + 3 + [reference]: https://example.com
+3
packages/steamdown/__tests__/assets/reference before paragraph.test.txt
··· 1 + [reference]: https://example.com 2 + 3 + paragraph
+1
packages/steamdown/__tests__/assets/reference.test.txt
··· 1 + [reference]: https://example.com
+1
packages/steamdown/__tests__/assets/simple.test.txt
··· 1 + Hello, World!
+1
packages/steamdown/__tests__/assets/spoiler.test.txt
··· 1 + >!spoiler<!
+1
packages/steamdown/__tests__/assets/strike with one tilde.test.txt
··· 1 + ~strike~
+1
packages/steamdown/__tests__/assets/strike with two tilde.test.txt
··· 1 + ~~strike~~
+3
packages/steamdown/__tests__/assets/table equalcells noborder.test.txt
··· 1 + | one | two | 2 + | : : | : : | 3 + | a | b |
+3
packages/steamdown/__tests__/assets/table equalcells.test.txt
··· 1 + | one | two | 2 + | :-: | :-: | 3 + | a | b |
+3
packages/steamdown/__tests__/assets/table extra head.test.txt
··· 1 + | one | two | 2 + | three | four | 3 + | ----- | ---- |
+2
packages/steamdown/__tests__/assets/table no attributes.test.txt
··· 1 + | one | two | 2 + | a | b |
+2
packages/steamdown/__tests__/assets/table no body.test.txt
··· 1 + | one | two | 2 + | --- | --- |
+3
packages/steamdown/__tests__/assets/table noborder.test.txt
··· 1 + | one | two | 2 + | | | 3 + | a | b |
+5
packages/steamdown/__tests__/assets/table with multiple rows.test.txt
··· 1 + | one | two | 2 + | --- | --- | 3 + | a | b | 4 + | c | d | 5 + | e | f |
+3
packages/steamdown/__tests__/assets/table.test.txt
··· 1 + | one | two | 2 + | --- | --- | 3 + | a | b |
+3
packages/steamdown/__tests__/assets/two paragraphs.test.txt
··· 1 + Foo 2 + 3 + Bar
+1
packages/steamdown/__tests__/assets/underlined in italicized.test.txt
··· 1 + *Italicized and _underlined_*
+1
packages/steamdown/__tests__/assets/underlined.test.txt
··· 1 + _Underlined text_
+3
packages/steamdown/__tests__/assets/unordered list with asterisks.test.txt
··· 1 + * 1 2 + * 2 3 + * 3
+3
packages/steamdown/__tests__/assets/unordered list with dashes.test.txt
··· 1 + - 1 2 + - 2 3 + - 3
+1
packages/steamdown/__tests__/assets/url link.test.txt
··· 1 + [url with link](https://example.com)
+1
packages/steamdown/__tests__/assets/url ref with id and style.test.txt
··· 1 + [*styled url* with id][id]
+1
packages/steamdown/__tests__/assets/url ref with id.test.txt
··· 1 + [url with id][id]
+1
packages/steamdown/__tests__/assets/url ref without id with style.test.txt
··· 1 + [*styled url*]
+1
packages/steamdown/__tests__/assets/url ref without id.test.txt
··· 1 + [plain-url]
+2
packages/steamdown/__tests__/assets/valid italicized text with a newline.test.txt
··· 1 + Valid *italicized 2 + text* with a newline
+21
packages/steamdown/__tests__/parser.test.js
··· 1 + const { parse } = require("../src/parser"); 2 + const useAssets = require('./assets'); 3 + 4 + describe("parser", () => { 5 + describe("parse()", () => { 6 + describe(".tree", () => { 7 + const assets = useAssets(); 8 + test.each(assets)("$name", async ({ content }) => { 9 + const parsed = parse(await content); 10 + expect(parsed.tree).toMatchSnapshot(); 11 + }); 12 + }); 13 + }); 14 + 15 + describe('parse()', () => { 16 + test("adds context when a reference is found", () => { 17 + const { context } = parse("[reference]: https://example.com"); 18 + expect(context.getLink("reference")).toBe("https://example.com"); 19 + }); 20 + }); 21 + });
+31
packages/steamdown/package.json
··· 1 + { 2 + "name": "@steamdown/core", 3 + "version": "1.0.0", 4 + "author": "Spenser Black <spenserblack01@gmail.com>", 5 + "license": "MIT", 6 + "description": "A Markdown-like language that renders to Steam's markup language.", 7 + "keywords": [ 8 + "steam", 9 + "markdown" 10 + ], 11 + "type": "module", 12 + "main": "dist/index.js", 13 + "types": "dist/index.d.ts", 14 + "files": [ 15 + "dist" 16 + ], 17 + "scripts": { 18 + "build": "tsc" 19 + }, 20 + "bugs": { 21 + "url": "https://github.com/spenserblack/steamdown/issues" 22 + }, 23 + "homepage": "https://github.com/spenserblack/steamdown#readme", 24 + "repository": { 25 + "type": "git", 26 + "url": "git+https://github.com/spenserblack/steamdown.git" 27 + }, 28 + "dependencies": { 29 + "escape-string-regexp": "^5.0.0" 30 + } 31 + }
+14
packages/steamdown/src/context.ts
··· 1 + /** 2 + * Context (items that aren't rendered and shouldn't be part of the syntax tree). 3 + */ 4 + export class Context { 5 + private links = new Map<string, string>(); 6 + 7 + public addLink(id: string, url: string) { 8 + this.links.set(id, url); 9 + } 10 + 11 + public getLink(id: string) { 12 + return this.links.get(id); 13 + } 14 + }
+3
packages/steamdown/src/index.ts
··· 1 + export * from "./context"; 2 + export * from "./parser"; 3 + export * from "./nodes";
+242
packages/steamdown/src/nodes.ts
··· 1 + /** 2 + * Base node type. 3 + */ 4 + export interface BaseNode { 5 + type: string; 6 + } 7 + 8 + /** 9 + * Root node. All nodes should be children of this node. 10 + */ 11 + export interface Root extends BaseNode { 12 + type: "root"; 13 + nodes: Block[]; 14 + } 15 + 16 + /** 17 + * A table node. 18 + */ 19 + export interface Table extends BaseNode { 20 + type: "table"; 21 + head: TableRow; 22 + attributes: TableAttributeRow; 23 + body: TableRow[]; 24 + } 25 + 26 + /** 27 + * A table row node. 28 + */ 29 + export interface TableRow extends BaseNode { 30 + type: "table-row"; 31 + cells: TableCell[]; 32 + } 33 + 34 + /** 35 + * A table attribute row node. 36 + */ 37 + export interface TableAttributeRow extends BaseNode { 38 + type: "table-attribute-row"; 39 + /** 40 + * If the table should have `equalcells=1` set. 41 + */ 42 + equalCells: boolean; 43 + /** 44 + * If the table should have `noborder=1` set. 45 + */ 46 + noBorder: boolean; 47 + } 48 + 49 + /** 50 + * A table cell node. 51 + */ 52 + export interface TableCell extends BaseNode { 53 + type: "table-cell"; 54 + nodes: Inline[]; 55 + } 56 + 57 + /** A noparse block node. */ 58 + export interface NoparseBlock extends BaseNode { 59 + type: "noparse-block"; 60 + text: string; 61 + } 62 + 63 + /** 64 + * A code block node. 65 + */ 66 + export interface CodeBlock extends BaseNode { 67 + type: "code-block"; 68 + text: string; 69 + } 70 + 71 + /** 72 + * A heading node. 73 + */ 74 + export interface Heading extends BaseNode { 75 + type: "heading"; 76 + level: 1 | 2 | 3 | 4 | 5 | 6; 77 + nodes: Inline[]; 78 + } 79 + 80 + /** 81 + * A reference matching an ID to a URL. 82 + * 83 + * Unlike most other nodes, this does *not* get rendered. 84 + */ 85 + export interface Reference extends BaseNode { 86 + type: "reference", 87 + id: string, 88 + url: string, 89 + } 90 + 91 + /** 92 + * A horizontal rule node. 93 + */ 94 + export interface HorizontalRule extends BaseNode { 95 + type: "horizontal-rule"; 96 + } 97 + 98 + /** 99 + * A list node. 100 + */ 101 + export interface List extends BaseNode { 102 + type: "list"; 103 + ordered: boolean; 104 + items: ListItem[]; 105 + } 106 + 107 + /** 108 + * A list item node. 109 + */ 110 + export interface ListItem extends BaseNode { 111 + type: "list-item"; 112 + nodes: Block[]; 113 + } 114 + 115 + /** 116 + * A quote node. 117 + */ 118 + export interface Quote extends BaseNode { 119 + type: "quote"; 120 + nodes: Block[]; 121 + author?: [username: string, postId?: string]; 122 + } 123 + 124 + /** 125 + * A paragraph node. 126 + */ 127 + export interface Paragraph extends BaseNode { 128 + type: "paragraph"; 129 + nodes: Inline[]; 130 + } 131 + 132 + /** 133 + * A noparse span node. 134 + */ 135 + export interface NoparseSpan extends BaseNode { 136 + type: "noparse-span"; 137 + text: string; 138 + } 139 + 140 + /** 141 + * A url node in the format `[text](url)`. 142 + */ 143 + export interface LinkUrl extends BaseNode { 144 + type: "link-url"; 145 + link: string; 146 + nodes: Inline[]; 147 + } 148 + 149 + /** 150 + * A url in the format `[text][id]` or `[id]`. 151 + */ 152 + export interface IdUrl extends BaseNode { 153 + type: "id-url"; 154 + id: string; 155 + nodes?: Inline[]; 156 + } 157 + 158 + /** 159 + * A url node. 160 + */ 161 + export type Url = LinkUrl | IdUrl; 162 + 163 + /** 164 + * A spoiler node. 165 + */ 166 + export interface Spoiler extends BaseNode { 167 + type: "spoiler"; 168 + nodes: Inline[]; 169 + } 170 + 171 + /** 172 + * A bold node. 173 + */ 174 + export interface Bold extends BaseNode { 175 + type: "bold"; 176 + nodes: Inline[]; 177 + } 178 + 179 + /** 180 + * An italics node. 181 + */ 182 + export interface Italics extends BaseNode { 183 + type: "italics"; 184 + nodes: Inline[]; 185 + } 186 + 187 + /** 188 + * A bold + italics node. 189 + */ 190 + export interface BoldItalics extends BaseNode { 191 + type: "bold-italics"; 192 + nodes: Inline[]; 193 + } 194 + 195 + /** 196 + * An underline node. 197 + */ 198 + export interface Underline extends BaseNode { 199 + type: "underline"; 200 + nodes: Inline[]; 201 + } 202 + 203 + /** 204 + * A strike node. 205 + */ 206 + export interface Strike extends BaseNode { 207 + type: "strike"; 208 + nodes: Inline[]; 209 + } 210 + 211 + /** 212 + * A text node. 213 + */ 214 + export interface Text extends BaseNode { 215 + type: "text"; 216 + text: string; 217 + } 218 + 219 + /** 220 + * An escaped character node. 221 + */ 222 + export interface Escaped extends BaseNode { 223 + type: "escaped"; 224 + character: string; 225 + } 226 + 227 + export type Inline = 228 + | NoparseSpan 229 + | Url 230 + | Spoiler 231 + | BoldItalics 232 + | Bold 233 + | Italics 234 + | Underline 235 + | Strike 236 + | Text 237 + | Escaped; 238 + export type Block = NoparseBlock | CodeBlock | Table | Heading | Reference | HorizontalRule | List | Quote | Paragraph; 239 + /** 240 + * A node in the syntax tree. 241 + */ 242 + export type Node = Block | Inline;
+42
packages/steamdown/src/parser/block/code.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { UnreachableError, ParseError } from "../errors"; 3 + import { Parser } from "../types"; 4 + import { Memoizer } from "../util"; 5 + import escapeRegExp from "escape-string-regexp"; 6 + 7 + const memo = new Memoizer<string, RegExp>(); 8 + 9 + /** 10 + * Parser for a code block node. 11 + */ 12 + export const code = { 13 + hint: (text: string) => /^```+\r?\n/.test(text), 14 + parse: (text: string): [nodes.CodeBlock, remainder: string] => { 15 + const open = /^(```+)\r?\n/.exec(text); 16 + if (!open) { 17 + throw new UnreachableError(); 18 + } 19 + 20 + const openBraces = open[1]; 21 + 22 + const close = memo.getOrCreate(openBraces, () => { 23 + const closeBraces = "`".repeat(openBraces.length); 24 + return new RegExp(`\\r?\\n${escapeRegExp(closeBraces)}(?:$|(?:\r?\n)+)`) 25 + }).exec(text); 26 + 27 + if (!close) { 28 + throw new ParseError("code block must be closed"); 29 + } 30 + 31 + const closeIndex = close.index; 32 + const innerText = text.slice(open[0].length, closeIndex); 33 + const remainder = text.slice(closeIndex + close[0].length); 34 + 35 + const node: nodes.CodeBlock = { 36 + type: "code-block", 37 + text: innerText, 38 + }; 39 + 40 + return [node, remainder]; 41 + }, 42 + } satisfies Parser<nodes.CodeBlock>;
+68
packages/steamdown/src/parser/block/heading.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { ParseError, UnreachableError } from "../errors"; 3 + import { parse as parseInline } from "../inline"; 4 + import { Parser } from "../types"; 5 + 6 + /** 7 + * Parser for a heading node starting with a `#`. 8 + */ 9 + export const heading = { 10 + hint: (text: string) => text.startsWith("#"), 11 + parse: (text: string): [nodes.Heading, remainder: string] => { 12 + const match = /^(#{1,6})\s(.+)(?:(?:\r?\n){1,2}|$)/.exec(text); 13 + 14 + if (!match) { 15 + throw new ParseError("Invalid heading"); 16 + } 17 + 18 + const headingText = match[2]; 19 + const remainder = text.slice(match[0].length); 20 + 21 + const nodes = parseInline(headingText); 22 + 23 + const node: nodes.Heading = { 24 + type: "heading", 25 + level: match[1].length as 1 | 2 | 3 | 4 | 5 | 6, 26 + nodes, 27 + }; 28 + 29 + return [node, remainder]; 30 + }, 31 + } satisfies Parser<nodes.Heading>; 32 + 33 + /** 34 + * Alternative format for heading. 35 + * 36 + * ```markdown 37 + * Heading 1 38 + * ========= 39 + * ``` 40 + * 41 + * ```markdown 42 + * Heading 2 43 + * --------- 44 + * ``` 45 + */ 46 + export const altHeading = { 47 + hint: (text: string) => /^.+\r?\n(?:===+|---+)/.test(text), 48 + parse: (text: string): [nodes.Heading, remainder: string] => { 49 + const match = /^(.+)\r?\n(===+|---+)(?:(?:\r?\n){1,2}|$)/.exec(text); 50 + 51 + if (!match) { 52 + throw new ParseError("Invalid heading"); 53 + } 54 + 55 + const headingText = match[1]; 56 + const remainder = text.slice(match[0].length); 57 + 58 + const nodes = parseInline(headingText); 59 + 60 + const node: nodes.Heading = { 61 + type: "heading", 62 + level: match[2].startsWith("=") ? 1 : 2, 63 + nodes, 64 + }; 65 + 66 + return [node, remainder]; 67 + } 68 + } satisfies Parser<nodes.Heading>;
+25
packages/steamdown/src/parser/block/horizontal-rule.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { ParseError, UnreachableError } from "../errors"; 3 + import { parse as parseInline } from "../inline"; 4 + import { Parser } from "../types"; 5 + 6 + /** 7 + * Parser for a horizontal rule node. 8 + */ 9 + export const horizontalRule = { 10 + hint: (text: string) => ["---", "***", "___"].some((rule) => text.startsWith(rule)), 11 + parse: (text: string): [nodes.HorizontalRule, remainder: string] => { 12 + const match = /^(?:---+|___+|\*\*\*+)(?:(?:\r?\n)+|$)/.exec(text); 13 + 14 + if (!match) { 15 + throw new ParseError("Invalid horizontal rule"); 16 + } 17 + 18 + const remainder = text.slice(match[0].length); 19 + const node: nodes.HorizontalRule = { 20 + type: "horizontal-rule", 21 + }; 22 + 23 + return [node, remainder]; 24 + }, 25 + } satisfies Parser<nodes.HorizontalRule>;
+27
packages/steamdown/src/parser/block/index.ts
··· 1 + import { addParser, useParsers, parse } from "./parse"; 2 + import { noparse } from "./noparse"; 3 + import { code } from "./code"; 4 + import { table } from "./table"; 5 + import { reference } from "./reference"; 6 + import { heading, altHeading } from "./heading"; 7 + import { horizontalRule } from "./horizontal-rule"; 8 + import { list } from "./list"; 9 + import { quote } from "./quote"; 10 + import { paragraph } from "./paragraph"; 11 + 12 + [ 13 + noparse, 14 + code, 15 + table, 16 + reference, 17 + heading, 18 + altHeading, 19 + horizontalRule, 20 + list, 21 + quote, 22 + paragraph, 23 + ].forEach((parser) => { 24 + addParser(parser); 25 + }); 26 + 27 + export { useParsers, parse };
+87
packages/steamdown/src/parser/block/list.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { parse as parseBlocks } from "./parse"; 3 + import { UnreachableError, ParseError } from "../errors"; 4 + import { Parser } from "../types"; 5 + 6 + const numerical = Symbol("numerical"); 7 + type ListType = "-" | "*" | typeof numerical; 8 + 9 + const listTypeValidators: Record<ListType, RegExp> = { 10 + "-": /^- /, 11 + "*": /^\* /, 12 + [numerical]: /^\d+\. /, 13 + }; 14 + 15 + /** 16 + * Parses a list item. 17 + */ 18 + const parseItem = ( 19 + text: string, 20 + listType: ListType, 21 + ): [nodes.ListItem, remainder: string] | null => { 22 + if (!listTypeValidators[listType].test(text)) { 23 + return null; 24 + } 25 + 26 + const indentLevel = listType === numerical ? /^\d+/.exec(text)![0].length + 2 : 2; 27 + 28 + const indent = " ".repeat(indentLevel); 29 + let content = ""; 30 + 31 + // NOTE Empty lines are accepted (e.g. paragraph separators in a list item) 32 + do { 33 + const line = /[^\n]*(?:\r?\n|$)/.exec(text)?.[0]; 34 + 35 + if (line == null) { 36 + throw new UnreachableError("The regex should always match"); 37 + } 38 + 39 + text = text.slice(line.length); 40 + // HACK If the line is just a newline, we shouldn't slice it. 41 + content += /^\r?\n/.test(line) ? line : line.slice(indentLevel); 42 + } while (text.startsWith(indent) || /^\r?\n/.test(text)); 43 + 44 + const nodes = parseBlocks(content); 45 + 46 + const item: nodes.ListItem = { 47 + type: "list-item", 48 + nodes, 49 + }; 50 + 51 + return [item, text]; 52 + }; 53 + 54 + /** 55 + * Parser for a list node. 56 + */ 57 + export const list = { 58 + hint: (text: string) => /^(?:\-|\*|\d+\.) /.test(text), 59 + parse: (text: string): [nodes.List, remainder: string] => { 60 + const match = /^(\-|\*|\d+\.) /.exec(text); 61 + 62 + if (!match) { 63 + throw new UnreachableError( 64 + "The hint should ensure that there is at least 1 bullet", 65 + ); 66 + } 67 + const bullet = match[1]; 68 + const listType: ListType = bullet === "-" ? "-" : bullet === "*" ? "*" : numerical; 69 + 70 + const items: nodes.ListItem[] = []; 71 + let item = parseItem(text, listType); 72 + 73 + while (item != null) { 74 + items.push(item[0]); 75 + text = item[1]; 76 + item = parseItem(text, listType); 77 + } 78 + 79 + const node: nodes.List = { 80 + type: "list", 81 + ordered: listType === numerical, 82 + items, 83 + }; 84 + 85 + return [node, text]; 86 + }, 87 + };
+42
packages/steamdown/src/parser/block/noparse.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { UnreachableError, ParseError } from "../errors"; 3 + import { Parser } from "../types"; 4 + import { Memoizer } from "../util"; 5 + import escapeRegExp from "escape-string-regexp"; 6 + 7 + const memo = new Memoizer<string, RegExp>(); 8 + 9 + /** 10 + * Parser for a noparse block node. 11 + */ 12 + export const noparse = { 13 + hint: (text: string) => /^{{{+\r?\n/.test(text), 14 + parse: (text: string): [nodes.NoparseBlock, remainder: string] => { 15 + const open = /^({{{+)\r?\n/.exec(text); 16 + if (!open) { 17 + throw new UnreachableError(); 18 + } 19 + 20 + const openBraces = open[1]; 21 + 22 + const close = memo.getOrCreate(openBraces, () => { 23 + const closeBraces = "}".repeat(openBraces.length); 24 + return new RegExp(`\\r?\\n${escapeRegExp(closeBraces)}(?:$|(?:\r?\n)+)`); 25 + }).exec(text); 26 + 27 + if (!close) { 28 + throw new ParseError("noparse block must be closed"); 29 + } 30 + 31 + const closeIndex = close.index; 32 + const innerText = text.slice(open[0].length, closeIndex); 33 + const remainder = text.slice(closeIndex + close[0].length); 34 + 35 + const node: nodes.NoparseBlock = { 36 + type: "noparse-block", 37 + text: innerText, 38 + }; 39 + 40 + return [node, remainder]; 41 + }, 42 + } satisfies Parser<nodes.NoparseBlock>;
+34
packages/steamdown/src/parser/block/paragraph.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { UnreachableError } from "../errors"; 3 + import { parse as parseInline } from "../inline"; 4 + import { Parser } from "../types"; 5 + 6 + /** 7 + * Parser for a paragraph node. 8 + */ 9 + export const paragraph = { 10 + hint: () => true, 11 + parse: (text: string): [nodes.Paragraph, remainder: string] => { 12 + // NOTE Double-newlines, EOF, quotes, and lists are all valid paragraph breaks. 13 + const end = /\r?\n^(?:> |\- |\* |\d+\. |\r?\n)/m.exec(text) ?? /(?:\r?\n)?$/.exec(text); 14 + 15 + if (!end) { 16 + throw new UnreachableError("Paragraph must have an end"); 17 + } 18 + 19 + const content = text.slice(0, end.index); 20 + 21 + // NOTE We want to remove leading newlines from the remainder. 22 + const newlineCount = /^\n+/.exec(end[0])?.[0].length ?? 0; 23 + const remainder = text.slice(end.index + newlineCount); 24 + 25 + const nodes = parseInline(content); 26 + 27 + const node: nodes.Paragraph = { 28 + type: "paragraph", 29 + nodes, 30 + }; 31 + 32 + return [node, remainder]; 33 + }, 34 + } satisfies Parser<nodes.Paragraph>;
+48
packages/steamdown/src/parser/block/parse.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { firstSuccessfulParse } from "../util"; 3 + import { UnreachableError } from "../errors"; 4 + import { BlockParser } from "../types"; 5 + import type { Context } from "../../context"; 6 + 7 + const parsers: BlockParser[] = []; 8 + 9 + export const addParser = (parser: BlockParser, index?: number) => { 10 + if (index != null) { 11 + parsers.splice(index, 0, parser); 12 + } else { 13 + parsers.push(parser); 14 + } 15 + }; 16 + 17 + export const useParsers = (): BlockParser[] => parsers; 18 + 19 + /** 20 + * Parses the given text into a syntax tree. 21 + * 22 + * Can mutate the provided context. 23 + */ 24 + export const parse = (text: string, context?: Context): nodes.Block[] => { 25 + const nodes: nodes.Block[] = []; 26 + 27 + while (text.length > 0) { 28 + // NOTE Skip blank lines (we'll consider trailing spaces to be intentional) 29 + const blankLineMatch = text.match(/^\r?\n/); 30 + if (blankLineMatch) { 31 + text = text.slice(blankLineMatch[0].length); 32 + continue; 33 + } 34 + const result = firstSuccessfulParse(parsers, text); 35 + if (!result) { 36 + throw new UnreachableError("should always be able to parse text"); 37 + } 38 + const [node, remainder] = result; 39 + nodes.push(node); 40 + text = remainder; 41 + 42 + if (context && node.type === 'reference') { 43 + context.addLink(node.id, node.url); 44 + } 45 + } 46 + 47 + return nodes; 48 + };
+46
packages/steamdown/src/parser/block/quote.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { parse as parseBlocks } from "./parse"; 3 + import { UnreachableError, ParseError } from "../errors"; 4 + import { Parser } from "../types"; 5 + 6 + type Author = NonNullable<nodes.Quote["author"]>; 7 + const parseAuthor = ( 8 + text: string, 9 + ): [author: nodes.Quote["author"], remainder: string] => { 10 + const match = /^\(([^;)]+)(?:;(\d+))?\)(?:\r?\n|$)/.exec(text); 11 + if (!match) { 12 + return [undefined, text]; 13 + } 14 + const author: Author = [match[1], match[2]]; 15 + const remainder = text.slice(match[0].length); 16 + 17 + return [author, remainder]; 18 + }; 19 + 20 + /** 21 + * Parser for a quote node. 22 + */ 23 + export const quote = { 24 + hint: (text: string) => text.startsWith("> "), 25 + parse: (text: string): [nodes.Quote, remainder: string] => { 26 + const lines = /^(?:>(?: [^\n]*(?:\r?\n|$)|\r?\n|$))+/.exec(text); 27 + if (!lines) { 28 + throw new UnreachableError( 29 + "The hint should ensure that there is at least 1 line", 30 + ); 31 + } 32 + const content = lines[0].replace(/^> ?/gm, ""); 33 + const nodes = parseBlocks(content); 34 + const afterQuote = text.slice(lines[0].length); 35 + 36 + const [author, remainder] = parseAuthor(afterQuote); 37 + 38 + const node: nodes.Quote = { 39 + type: "quote", 40 + nodes, 41 + author, 42 + }; 43 + 44 + return [node, remainder]; 45 + }, 46 + } satisfies Parser<nodes.Quote>;
+28
packages/steamdown/src/parser/block/reference.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { ParseError } from "../errors"; 3 + import { Parser } from "../types"; 4 + 5 + /** 6 + * Parser for a reference (`[ref]: https://example.com`). 7 + */ 8 + export const reference = { 9 + hint: (text: string) => text.startsWith("["), 10 + parse: (text: string): [nodes.Reference, remainder: string] => { 11 + const match = /\[((?:[^\]]|\\\])+)(?<!\\)\]:\s+(.+)(?:\r?\n)*/.exec(text); 12 + 13 + if (!match) { 14 + throw new ParseError("invalid reference"); 15 + } 16 + 17 + const [all, id, url] = match; 18 + const remainder = text.slice(all.length); 19 + 20 + const node: nodes.Reference = { 21 + type: "reference", 22 + id, 23 + url, 24 + }; 25 + 26 + return [node, remainder]; 27 + }, 28 + } satisfies Parser<nodes.Reference>;
+114
packages/steamdown/src/parser/block/table.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { ParseError, UnreachableError } from "../errors"; 3 + import { parse as parseInline } from "../inline"; 4 + import { Parser } from "../types"; 5 + 6 + const head = Symbol("head"); 7 + type HeadSym = typeof head; 8 + const attributes = Symbol("attributes"); 9 + type AttributesSym = typeof attributes; 10 + const body = Symbol("body"); 11 + type BodySym = typeof body; 12 + 13 + const borderedAttrRe = /^:?-+:?$/; 14 + const borderlessAttrRe = /^:? *:?$/; 15 + 16 + type TablePart = HeadSym | AttributesSym | BodySym; 17 + 18 + /** 19 + * Parser for a table row. 20 + */ 21 + function parseTableRow(text: string, part: AttributesSym): [nodes.TableAttributeRow, remainder: string]; 22 + function parseTableRow(text: string, part: Exclude<TablePart, AttributesSym>): [nodes.TableRow, remainder: string]; 23 + function parseTableRow(text: string, part: TablePart): [nodes.TableRow | nodes.TableAttributeRow, remainder: string] { 24 + if (text == "" || /^\r?\n/.test(text)) { 25 + throw new ParseError("Empty table row"); 26 + } 27 + 28 + 29 + const endLine = /$/m.exec(text)?.index; 30 + 31 + if (endLine == null) { 32 + throw new UnreachableError("The regex should always match"); 33 + } 34 + 35 + let line = text.slice(0, endLine); 36 + if (!line.includes("|")) { 37 + throw new ParseError("Invalid table row"); 38 + } 39 + // NOTE If the user didn't add `|` to the beginning or end of the row, we add it. 40 + if (!line.startsWith("|")) { 41 + line = "|" + line; 42 + } 43 + if (!line.endsWith("|")) { 44 + line = line + "|"; 45 + } 46 + 47 + // TODO Improve performance with lazy iteration or `.reduce` 48 + const rawCells = text.slice(0, endLine).split("|"); 49 + // NOTE Beginning and ending `|` are empty strings, so we remove them. 50 + rawCells.shift(); 51 + rawCells.pop(); 52 + const trimmedRawCells = rawCells.map((cell) => cell.trim()); 53 + if (part === attributes && !trimmedRawCells.every((cell) => borderedAttrRe.test(cell) || borderlessAttrRe.test(cell))) { 54 + throw new ParseError("Invalid table attributes"); 55 + } 56 + 57 + text = text.slice(endLine); 58 + const offset = /^\r\n/.test(text) ? 2 : 1; 59 + const remainder = text.slice(offset); 60 + 61 + if (part === attributes) { 62 + // NOTE Because we possibly remove the left and right sides of the row if they're 63 + // empty, we use a fallback. 64 + const firstCell = trimmedRawCells[0] ?? ""; 65 + const equalCells = firstCell.startsWith(":") && firstCell.endsWith(":"); 66 + const noBorder = borderlessAttrRe.test(firstCell); 67 + return [{ type: "table-attribute-row", equalCells, noBorder }, remainder]; 68 + } 69 + 70 + const cells: nodes.TableCell[] = trimmedRawCells.map((cell) => ({ 71 + type: "table-cell", 72 + nodes: parseInline(cell), 73 + })); 74 + 75 + return [{ type: "table-row", cells }, remainder]; 76 + } 77 + 78 + /** 79 + * Parser for tables. 80 + */ 81 + export const table = { 82 + hint: (text: string) => /^\|[^\n\|]/.test(text), 83 + parse: (text: string): [nodes.Table, remainder: string] => { 84 + const headMatch = parseTableRow(text, head); 85 + const tHead = headMatch[0]; 86 + text = headMatch[1]; 87 + const attributesMatch = parseTableRow(text, attributes); 88 + const tAttributes = attributesMatch[0]; 89 + text = attributesMatch[1]; 90 + 91 + const tBody: nodes.TableRow[] = []; 92 + while (true) { 93 + try { 94 + const [row, remainder] = parseTableRow(text, body); 95 + text = remainder; 96 + tBody.push(row); 97 + } catch (e) { 98 + if (e instanceof ParseError) { 99 + break; 100 + } 101 + throw e; 102 + } 103 + } 104 + 105 + const node: nodes.Table = { 106 + type: "table", 107 + head: tHead, 108 + attributes: tAttributes, 109 + body: tBody, 110 + }; 111 + 112 + return [node, text]; 113 + }, 114 + } satisfies Parser<nodes.Table>;
+7
packages/steamdown/src/parser/errors.ts
··· 1 + export class ParseError extends Error {} 2 + 3 + export class UnreachableError extends Error { 4 + constructor(msg?: string) { 5 + super(msg ?? "Unreachable"); 6 + } 7 + }
+19
packages/steamdown/src/parser/index.ts
··· 1 + import { Context } from "../context"; 2 + import type { Parsed } from "./types"; 3 + import { parse as parseBlocks } from "./block"; 4 + import type { Root } from "../nodes"; 5 + 6 + /** 7 + * Parses the given text into a syntax tree. 8 + */ 9 + export const parse = (text: string): Parsed => { 10 + const context = new Context(); 11 + const nodes = parseBlocks(text, context); 12 + 13 + const tree: Root = { 14 + type: "root", 15 + nodes, 16 + }; 17 + 18 + return { tree, context }; 19 + };
+13
packages/steamdown/src/parser/inline/bold-italics.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { Parser } from "../types"; 3 + import { makeWrappedTextParser } from "./util"; 4 + 5 + /** 6 + * Parser for bold italics. 7 + * 8 + * HACK This is a hack to make it easier to parse italics nested in bold (or is it bold nested in italics?). 9 + */ 10 + export const boldItalics = makeWrappedTextParser<nodes.BoldItalics>( 11 + "***", 12 + "bold-italics", 13 + ) satisfies Parser<nodes.BoldItalics>;
+11
packages/steamdown/src/parser/inline/bold.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { Parser } from "../types"; 3 + import { makeWrappedTextParser } from "./util"; 4 + 5 + /** 6 + * Parser for a bold node. 7 + */ 8 + export const bold = makeWrappedTextParser<nodes.Bold>( 9 + "**", 10 + "bold", 11 + ) satisfies Parser<nodes.Bold>;
+23
packages/steamdown/src/parser/inline/escaped.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { ParseError } from "../errors"; 3 + import { Parser } from "../types"; 4 + 5 + const escapable = new Set(["*", "_", "~", "\\", "{", "}", "!", "<", ">", "`", "[", "]"]); 6 + /** 7 + * Parser for an escaped character. 8 + */ 9 + export const escaped = { 10 + hint: (text: string) => text.startsWith("\\"), 11 + parse: (text: string): [nodes.Escaped, remainder: string] => { 12 + const nextChar = text[1]; 13 + if (!escapable.has(nextChar)) { 14 + throw new ParseError(`cannot escape ${nextChar}`); 15 + } 16 + const node: nodes.Escaped = { 17 + type: "escaped", 18 + character: nextChar, 19 + }; 20 + const remainder = text.slice(2); 21 + return [node, remainder]; 22 + }, 23 + } satisfies Parser<nodes.Escaped>;
+28
packages/steamdown/src/parser/inline/index.ts
··· 1 + import { useParsers, parse, addParser } from "./parse"; 2 + import { noparse } from "./noparse"; 3 + import { url } from "./url"; 4 + import { spoiler } from "./spoiler"; 5 + import { boldItalics } from "./bold-italics"; 6 + import { bold } from "./bold"; 7 + import { italics } from "./italics"; 8 + import { underline } from "./underline"; 9 + import { strike } from "./strike"; 10 + import { escaped } from "./escaped"; 11 + import { text } from "./text"; 12 + 13 + [ 14 + noparse, 15 + url, 16 + spoiler, 17 + boldItalics, 18 + bold, 19 + italics, 20 + underline, 21 + strike, 22 + escaped, 23 + text, 24 + ].forEach((parser) => { 25 + addParser(parser); 26 + }); 27 + 28 + export { useParsers, parse };
+11
packages/steamdown/src/parser/inline/italics.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { Parser } from "../types"; 3 + import { makeWrappedTextParser } from "./util"; 4 + 5 + /** 6 + * Parser for an italics node. 7 + */ 8 + export const italics = makeWrappedTextParser<nodes.Italics>( 9 + "*", 10 + "italics", 11 + ) satisfies Parser<nodes.Italics>;
+41
packages/steamdown/src/parser/inline/noparse.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { UnreachableError, ParseError } from "../errors"; 3 + import escapeRegExp from "escape-string-regexp"; 4 + import { Parser } from "../types"; 5 + 6 + /** 7 + * Parser for noparse spans. 8 + */ 9 + export const noparse = { 10 + hint: (text: string) => text.startsWith("{"), 11 + parse: (text: string): [nodes.NoparseSpan, remainder: string] => { 12 + const openingMatch = /^\{+/.exec(text); 13 + 14 + if (!openingMatch) { 15 + throw new UnreachableError("noparse span must start with {"); 16 + } 17 + const opening = openingMatch[0]; 18 + const closing = new RegExp(`${escapeRegExp("}".repeat(opening.length))}`); 19 + 20 + const closingIndex = closing.exec(text)?.index; 21 + if (closingIndex == null) { 22 + throw new ParseError("noparse span must be closed"); 23 + } 24 + 25 + let innerText = text.slice(opening.length, closingIndex); 26 + 27 + // If innerText is surrounded by whitespace, remove it. 28 + if (innerText.startsWith(" ") && innerText.endsWith(" ")) { 29 + innerText = innerText.trim(); 30 + } 31 + 32 + const remainder = text.slice(closingIndex + opening.length); 33 + 34 + const node: nodes.NoparseSpan = { 35 + type: "noparse-span", 36 + text: innerText, 37 + }; 38 + 39 + return [node, remainder]; 40 + }, 41 + } satisfies Parser<nodes.NoparseSpan>;
+48
packages/steamdown/src/parser/inline/parse.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { firstSuccessfulParse } from "../util"; 3 + import { UnreachableError } from "../errors"; 4 + import { InlineParser } from "../types"; 5 + 6 + const inlineParsers: InlineParser[] = []; 7 + 8 + export const addParser = (parser: InlineParser, index?: number) => { 9 + if (index != null) { 10 + inlineParsers.splice(index, 0, parser); 11 + } else { 12 + inlineParsers.push(parser); 13 + } 14 + }; 15 + 16 + export const useParsers = (): InlineParser[] => inlineParsers; 17 + 18 + /** 19 + * Parses text into inline nodes. 20 + */ 21 + export const parse = (text: string): nodes.Inline[] => { 22 + let parsedText = text; 23 + const nodes: nodes.Inline[] = []; 24 + 25 + while (parsedText.length > 0) { 26 + const parsed = firstSuccessfulParse(inlineParsers, parsedText); 27 + 28 + if (!parsed) { 29 + throw new UnreachableError(); 30 + } 31 + 32 + const [node, remainder] = parsed; 33 + 34 + parsedText = remainder; 35 + 36 + // HACK If the last node is a text node and this node is a text node, 37 + // merge them together. 38 + // NOTE undefined to handle the very start of iteration. 39 + const lastNode: nodes.Inline | undefined = nodes[nodes.length - 1]; 40 + if (lastNode && lastNode.type === "text" && node.type === "text") { 41 + lastNode.text += node.text; 42 + } else { 43 + nodes.push(node); 44 + } 45 + } 46 + 47 + return nodes; 48 + };
+11
packages/steamdown/src/parser/inline/spoiler.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { Parser } from "../types"; 3 + import { makeWrappedTextParser } from "./util"; 4 + 5 + /** 6 + * Parser for a spoiler. 7 + */ 8 + export const spoiler = makeWrappedTextParser<nodes.Spoiler>( 9 + [">!", "!<"], 10 + "spoiler", 11 + ) satisfies Parser<nodes.Spoiler>;
+36
packages/steamdown/src/parser/inline/strike.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { ParseError } from "../errors"; 3 + import { Parser } from "../types"; 4 + import { variableLengthInlineHelper } from "./util"; 5 + import { parse } from "./parse"; 6 + 7 + const helper = variableLengthInlineHelper("~"); 8 + 9 + /** 10 + * Parser for a strike node. 11 + */ 12 + export const strike = { 13 + hint: (text: string) => text.startsWith("~"), 14 + parse: (text: string): [nodes.Strike, remainder: string] => { 15 + const result = helper(text); 16 + switch (result) { 17 + case "no match": 18 + throw new ParseError("strike must start with ~"); 19 + case "not closed": 20 + throw new ParseError("strike must be closed"); 21 + } 22 + const { wrapper, text: innerText } = result; 23 + const consumedCharCount = wrapper.length + innerText.length + wrapper.length; 24 + if ([innerText[0], innerText[innerText.length - 1]].some((s) => /\s/.test(s))) { 25 + throw new ParseError("strike cannot start or end with whitespace"); 26 + } 27 + const nodes = parse(innerText); 28 + 29 + const node: nodes.Strike = { 30 + type: "strike", 31 + nodes, 32 + }; 33 + const remainder = text.slice(consumedCharCount); 34 + return [node, remainder]; 35 + }, 36 + } satisfies Parser<nodes.Strike>;
+27
packages/steamdown/src/parser/inline/text.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { Parser } from "../types"; 3 + 4 + /** 5 + * Parser for a text node. This should never fail to parse. 6 + */ 7 + export const text = { 8 + hint: () => true, 9 + parse: (text: string): [nodes.Text, remainder: string] => { 10 + let remainder = ""; 11 + // NOTE End on special chars to allow for parsing of other nodes, but only if that 12 + // special char is not the first character. 13 + const end = /[\\*_~{\[]/.exec(text); 14 + 15 + if (end && end.index > 0) { 16 + remainder = text.slice(end.index); 17 + text = text.slice(0, end.index); 18 + } 19 + 20 + const node: nodes.Text = { 21 + type: "text", 22 + text, 23 + }; 24 + 25 + return [node, remainder]; 26 + }, 27 + } satisfies Parser<nodes.Text>;
+11
packages/steamdown/src/parser/inline/underline.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { Parser } from "../types"; 3 + import { makeWrappedTextParser } from "./util"; 4 + 5 + /** 6 + * Parser for an underline node. 7 + */ 8 + export const underline = makeWrappedTextParser<nodes.Underline>( 9 + "_", 10 + "underline", 11 + ) satisfies Parser<nodes.Underline>;
+42
packages/steamdown/src/parser/inline/url.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { UnreachableError, ParseError } from "../errors"; 3 + import escapeRegExp from "escape-string-regexp"; 4 + import { Parser } from "../types"; 5 + import { parse } from "./parse"; 6 + 7 + /** 8 + * Parser for url. 9 + */ 10 + export const url = { 11 + hint: (text: string) => text.startsWith("["), 12 + parse: (text: string): [nodes.Url, remainder: string] => { 13 + // TODO Break this up into something more readable. 14 + const match = 15 + /^\[((?:[^\]]|\\\])+)(?<!\\)\](?:(?:\(([^)\n]+)\))|\[((?:[^\]\n]|\\\])+)\])?/.exec( 16 + text, 17 + ); 18 + 19 + if (!match) { 20 + throw new ParseError("invalid url"); 21 + } 22 + 23 + const [all, content, link, id] = match; 24 + const remainder = text.slice(all.length); 25 + const nodes = parse(content); 26 + 27 + const node: nodes.Url = 28 + link != null 29 + ? { 30 + type: "link-url", 31 + link, 32 + nodes, 33 + } 34 + : { 35 + type: "id-url", 36 + id: id ?? content, 37 + nodes, 38 + }; 39 + 40 + return [node, remainder]; 41 + }, 42 + } satisfies Parser<nodes.Url>;
+97
packages/steamdown/src/parser/inline/util.ts
··· 1 + import * as nodes from "../../nodes"; 2 + import { ParseError, UnreachableError } from "../errors"; 3 + import escapeRegExp from "escape-string-regexp"; 4 + import { parse } from "./parse"; 5 + 6 + /** 7 + * Helper for `makeWrappedTextParser`. 8 + */ 9 + export type WrappedNode = Exclude<nodes.Inline, nodes.Text>; 10 + 11 + /** 12 + * Creates a parser for wrapped text. 13 + * 14 + * For example, `*foo*` is `foo` wrapped in `*`. 15 + */ 16 + export const makeWrappedTextParser = <N extends WrappedNode>( 17 + wrapper: string | [string, string], 18 + type: N["type"], 19 + ) => { 20 + const wrappers = typeof wrapper === "string" ? [wrapper, wrapper] : wrapper; 21 + const [startWrapper, endWrapper] = wrappers; 22 + const endRegex = new RegExp(`(?<!\\\\)${escapeRegExp(endWrapper)}`); 23 + return { 24 + hint: (text: string) => text.startsWith(startWrapper), 25 + parse: (text: string): [N, remainder: string] => { 26 + text = text.slice(wrapper.length); 27 + 28 + const endMatch = endRegex.exec(text); 29 + if (!endMatch) { 30 + throw new ParseError(`${type} must be closed`); 31 + } 32 + const innerEndIndex = endMatch.index; 33 + 34 + const innerText = text.slice(0, endMatch.index); 35 + 36 + if (innerText.length === 0) { 37 + throw new ParseError(`${type} must have content`); 38 + } 39 + 40 + if ([innerText[0], innerText[innerText.length - 1]].some((s) => /\s/.test(s))) { 41 + throw new ParseError(`${type} cannot start or end with whitespace`); 42 + } 43 + 44 + const remainder = text.slice(innerEndIndex + endWrapper.length); 45 + 46 + const nodes = parse(innerText); 47 + 48 + const node = { 49 + type, 50 + nodes, 51 + }; 52 + 53 + return [node as N, remainder]; 54 + }, 55 + }; 56 + }; 57 + 58 + /** 59 + * Creates a helper for wrapped text for inline formatting, where the wrapper can be variable length. 60 + * 61 + * For example, both `~foo~` and `~~foo~~` would be `[strike]foo[/strike]`. 62 + * 63 + * This will return a helper that returns the text used for wrapping (`~~`) and the wrapped text. 64 + * It will not perform much validation besides asserting that the text is wrapped. 65 + * 66 + * # Example 67 + * 68 + * ```typescript 69 + * const helper = variableLengthInlineHelper("~"); 70 + * helper("foo ~~bar~~ baz"); // { wrapper: "~~", text: "bar" } 71 + * ``` 72 + */ 73 + export const variableLengthInlineHelper = (wrapperChar: string) => { 74 + if (wrapperChar.length !== 1) { 75 + throw new UnreachableError("wrapperChar must be a single character"); 76 + } 77 + const regex = new RegExp(`^(?:(?!<\\\\)${escapeRegExp(wrapperChar)})+`); 78 + 79 + return (text: string) => { 80 + const wrapperMatch = regex.exec(text); 81 + if (!wrapperMatch) { 82 + return "no match"; 83 + } 84 + const wrapper = wrapperMatch[0]; 85 + const endRegex = new RegExp(`(?<!\\\\)${escapeRegExp(wrapper)}`); 86 + text = text.slice(wrapper.length); 87 + const endMatch = endRegex.exec(text); 88 + 89 + if (!endMatch) { 90 + return "not closed"; 91 + } 92 + 93 + text = text.slice(0, endMatch.index); 94 + 95 + return { wrapper, text }; 96 + }; 97 + };
+28
packages/steamdown/src/parser/types.ts
··· 1 + import * as nodes from "../nodes"; 2 + import type { Context } from "../context"; 3 + 4 + /** 5 + * A parser for the syntax. 6 + */ 7 + export interface Parser<N extends nodes.Node> { 8 + /** 9 + * Hints if the parser can parse the given syntax. 10 + * This doesn't guarantee that the text can be parsed if 11 + * it returns `true`, but if it returns `false` it can't 12 + * be parsed. 13 + */ 14 + hint(text: string): boolean; 15 + /** 16 + * Parses the given syntax, returning the root node of the 17 + * syntax tree and the remaining text. Can optionally mutate context. 18 + */ 19 + parse(text: string): [node: N, remainder: string]; 20 + } 21 + 22 + export type InlineParser = Parser<nodes.Inline>; 23 + export type BlockParser = Parser<nodes.Block>; 24 + 25 + export type Parsed = { 26 + tree: nodes.Root; 27 + context: Context; 28 + };
+37
packages/steamdown/src/parser/util.ts
··· 1 + import * as nodes from "../nodes"; 2 + import { Parser } from "./types"; 3 + import { ParseError } from "./errors"; 4 + 5 + /** 6 + * Returns the first successful parse from the given parsers. 7 + */ 8 + export const firstSuccessfulParse = <N extends nodes.Node>( 9 + parsers: Parser<N>[], 10 + text: string, 11 + ): [N, remainder: string] | null => { 12 + for (const parser of parsers) { 13 + if (parser.hint(text)) { 14 + try { 15 + return parser.parse(text); 16 + } catch (error) { 17 + if (!(error instanceof ParseError)) { 18 + throw error; 19 + } 20 + } 21 + } 22 + } 23 + return null; 24 + }; 25 + 26 + export class Memoizer<T, U> extends Map<T, U> { 27 + /** 28 + * Returns the value associated with the key, or creates a new value using the 29 + * given function and associates it with the key. 30 + */ 31 + public getOrCreate(key: T, create: () => U): U { 32 + if (!this.has(key)) { 33 + this.set(key, create()); 34 + } 35 + return this.get(key)!; 36 + } 37 + }
+12
packages/steamdown/tsconfig.json
··· 1 + { 2 + "extends": "../../tsconfig.json", 3 + "compilerOptions": { 4 + "baseUrl": ".", 5 + "outDir": "dist", 6 + "rootDir": "src", 7 + "module": "esnext", 8 + "moduleResolution": "bundler" 9 + }, 10 + "include": ["./src"], 11 + "exclude": ["node_modules", "./dist"] 12 + }
+4509
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + dependencies: 11 + '@types/jest': 12 + specifier: ^29.5.12 13 + version: 29.5.12 14 + devDependencies: 15 + '@babel/core': 16 + specifier: ^7.24.7 17 + version: 7.24.7 18 + '@babel/preset-env': 19 + specifier: ^7.24.7 20 + version: 7.24.7(@babel/core@7.24.7) 21 + '@babel/preset-typescript': 22 + specifier: ^7.24.7 23 + version: 7.24.7(@babel/core@7.24.7) 24 + '@eslint/js': 25 + specifier: ^9.12.0 26 + version: 9.12.0 27 + '@tsconfig/recommended': 28 + specifier: ^1.0.6 29 + version: 1.0.6 30 + babel-jest: 31 + specifier: ^29.7.0 32 + version: 29.7.0(@babel/core@7.24.7) 33 + jest: 34 + specifier: ^29.7.0 35 + version: 29.7.0(@types/node@20.14.2) 36 + prettier: 37 + specifier: ^3.3.1 38 + version: 3.3.1 39 + typescript: 40 + specifier: ^5.4.5 41 + version: 5.4.5 42 + typescript-eslint: 43 + specifier: ^8.8.1 44 + version: 8.8.1(eslint@9.12.0)(typescript@5.4.5) 45 + 46 + packages/cli: 47 + dependencies: 48 + '@steamdown/core': 49 + specifier: workspace:^ 50 + version: link:../steamdown 51 + 52 + packages/html: 53 + dependencies: 54 + '@steamdown/core': 55 + specifier: workspace:^ 56 + version: link:../steamdown 57 + 58 + packages/steamdown: 59 + dependencies: 60 + escape-string-regexp: 61 + specifier: ^5.0.0 62 + version: 5.0.0 63 + 64 + packages: 65 + 66 + '@ampproject/remapping@2.3.0': 67 + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 68 + engines: {node: '>=6.0.0'} 69 + 70 + '@babel/code-frame@7.24.7': 71 + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} 72 + engines: {node: '>=6.9.0'} 73 + 74 + '@babel/compat-data@7.24.7': 75 + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} 76 + engines: {node: '>=6.9.0'} 77 + 78 + '@babel/core@7.24.7': 79 + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} 80 + engines: {node: '>=6.9.0'} 81 + 82 + '@babel/generator@7.24.7': 83 + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} 84 + engines: {node: '>=6.9.0'} 85 + 86 + '@babel/helper-annotate-as-pure@7.24.7': 87 + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} 88 + engines: {node: '>=6.9.0'} 89 + 90 + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': 91 + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} 92 + engines: {node: '>=6.9.0'} 93 + 94 + '@babel/helper-compilation-targets@7.24.7': 95 + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} 96 + engines: {node: '>=6.9.0'} 97 + 98 + '@babel/helper-create-class-features-plugin@7.24.7': 99 + resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} 100 + engines: {node: '>=6.9.0'} 101 + peerDependencies: 102 + '@babel/core': ^7.0.0 103 + 104 + '@babel/helper-create-regexp-features-plugin@7.24.7': 105 + resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} 106 + engines: {node: '>=6.9.0'} 107 + peerDependencies: 108 + '@babel/core': ^7.0.0 109 + 110 + '@babel/helper-define-polyfill-provider@0.6.2': 111 + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} 112 + peerDependencies: 113 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 114 + 115 + '@babel/helper-environment-visitor@7.24.7': 116 + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} 117 + engines: {node: '>=6.9.0'} 118 + 119 + '@babel/helper-function-name@7.24.7': 120 + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} 121 + engines: {node: '>=6.9.0'} 122 + 123 + '@babel/helper-hoist-variables@7.24.7': 124 + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} 125 + engines: {node: '>=6.9.0'} 126 + 127 + '@babel/helper-member-expression-to-functions@7.24.7': 128 + resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} 129 + engines: {node: '>=6.9.0'} 130 + 131 + '@babel/helper-module-imports@7.24.7': 132 + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} 133 + engines: {node: '>=6.9.0'} 134 + 135 + '@babel/helper-module-transforms@7.24.7': 136 + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} 137 + engines: {node: '>=6.9.0'} 138 + peerDependencies: 139 + '@babel/core': ^7.0.0 140 + 141 + '@babel/helper-optimise-call-expression@7.24.7': 142 + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} 143 + engines: {node: '>=6.9.0'} 144 + 145 + '@babel/helper-plugin-utils@7.24.7': 146 + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} 147 + engines: {node: '>=6.9.0'} 148 + 149 + '@babel/helper-remap-async-to-generator@7.24.7': 150 + resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} 151 + engines: {node: '>=6.9.0'} 152 + peerDependencies: 153 + '@babel/core': ^7.0.0 154 + 155 + '@babel/helper-replace-supers@7.24.7': 156 + resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} 157 + engines: {node: '>=6.9.0'} 158 + peerDependencies: 159 + '@babel/core': ^7.0.0 160 + 161 + '@babel/helper-simple-access@7.24.7': 162 + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} 163 + engines: {node: '>=6.9.0'} 164 + 165 + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': 166 + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} 167 + engines: {node: '>=6.9.0'} 168 + 169 + '@babel/helper-split-export-declaration@7.24.7': 170 + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} 171 + engines: {node: '>=6.9.0'} 172 + 173 + '@babel/helper-string-parser@7.24.7': 174 + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} 175 + engines: {node: '>=6.9.0'} 176 + 177 + '@babel/helper-validator-identifier@7.24.7': 178 + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} 179 + engines: {node: '>=6.9.0'} 180 + 181 + '@babel/helper-validator-option@7.24.7': 182 + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} 183 + engines: {node: '>=6.9.0'} 184 + 185 + '@babel/helper-wrap-function@7.24.7': 186 + resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} 187 + engines: {node: '>=6.9.0'} 188 + 189 + '@babel/helpers@7.24.7': 190 + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} 191 + engines: {node: '>=6.9.0'} 192 + 193 + '@babel/highlight@7.24.7': 194 + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} 195 + engines: {node: '>=6.9.0'} 196 + 197 + '@babel/parser@7.24.7': 198 + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} 199 + engines: {node: '>=6.0.0'} 200 + hasBin: true 201 + 202 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': 203 + resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} 204 + engines: {node: '>=6.9.0'} 205 + peerDependencies: 206 + '@babel/core': ^7.0.0 207 + 208 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': 209 + resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} 210 + engines: {node: '>=6.9.0'} 211 + peerDependencies: 212 + '@babel/core': ^7.0.0 213 + 214 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': 215 + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} 216 + engines: {node: '>=6.9.0'} 217 + peerDependencies: 218 + '@babel/core': ^7.13.0 219 + 220 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': 221 + resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} 222 + engines: {node: '>=6.9.0'} 223 + peerDependencies: 224 + '@babel/core': ^7.0.0 225 + 226 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': 227 + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} 228 + engines: {node: '>=6.9.0'} 229 + peerDependencies: 230 + '@babel/core': ^7.0.0-0 231 + 232 + '@babel/plugin-syntax-async-generators@7.8.4': 233 + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 234 + peerDependencies: 235 + '@babel/core': ^7.0.0-0 236 + 237 + '@babel/plugin-syntax-bigint@7.8.3': 238 + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 239 + peerDependencies: 240 + '@babel/core': ^7.0.0-0 241 + 242 + '@babel/plugin-syntax-class-properties@7.12.13': 243 + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 244 + peerDependencies: 245 + '@babel/core': ^7.0.0-0 246 + 247 + '@babel/plugin-syntax-class-static-block@7.14.5': 248 + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} 249 + engines: {node: '>=6.9.0'} 250 + peerDependencies: 251 + '@babel/core': ^7.0.0-0 252 + 253 + '@babel/plugin-syntax-dynamic-import@7.8.3': 254 + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} 255 + peerDependencies: 256 + '@babel/core': ^7.0.0-0 257 + 258 + '@babel/plugin-syntax-export-namespace-from@7.8.3': 259 + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} 260 + peerDependencies: 261 + '@babel/core': ^7.0.0-0 262 + 263 + '@babel/plugin-syntax-import-assertions@7.24.7': 264 + resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} 265 + engines: {node: '>=6.9.0'} 266 + peerDependencies: 267 + '@babel/core': ^7.0.0-0 268 + 269 + '@babel/plugin-syntax-import-attributes@7.24.7': 270 + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} 271 + engines: {node: '>=6.9.0'} 272 + peerDependencies: 273 + '@babel/core': ^7.0.0-0 274 + 275 + '@babel/plugin-syntax-import-meta@7.10.4': 276 + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 277 + peerDependencies: 278 + '@babel/core': ^7.0.0-0 279 + 280 + '@babel/plugin-syntax-json-strings@7.8.3': 281 + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 282 + peerDependencies: 283 + '@babel/core': ^7.0.0-0 284 + 285 + '@babel/plugin-syntax-jsx@7.24.7': 286 + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} 287 + engines: {node: '>=6.9.0'} 288 + peerDependencies: 289 + '@babel/core': ^7.0.0-0 290 + 291 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': 292 + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 293 + peerDependencies: 294 + '@babel/core': ^7.0.0-0 295 + 296 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': 297 + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 298 + peerDependencies: 299 + '@babel/core': ^7.0.0-0 300 + 301 + '@babel/plugin-syntax-numeric-separator@7.10.4': 302 + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 303 + peerDependencies: 304 + '@babel/core': ^7.0.0-0 305 + 306 + '@babel/plugin-syntax-object-rest-spread@7.8.3': 307 + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 308 + peerDependencies: 309 + '@babel/core': ^7.0.0-0 310 + 311 + '@babel/plugin-syntax-optional-catch-binding@7.8.3': 312 + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 313 + peerDependencies: 314 + '@babel/core': ^7.0.0-0 315 + 316 + '@babel/plugin-syntax-optional-chaining@7.8.3': 317 + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 318 + peerDependencies: 319 + '@babel/core': ^7.0.0-0 320 + 321 + '@babel/plugin-syntax-private-property-in-object@7.14.5': 322 + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} 323 + engines: {node: '>=6.9.0'} 324 + peerDependencies: 325 + '@babel/core': ^7.0.0-0 326 + 327 + '@babel/plugin-syntax-top-level-await@7.14.5': 328 + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 329 + engines: {node: '>=6.9.0'} 330 + peerDependencies: 331 + '@babel/core': ^7.0.0-0 332 + 333 + '@babel/plugin-syntax-typescript@7.24.7': 334 + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} 335 + engines: {node: '>=6.9.0'} 336 + peerDependencies: 337 + '@babel/core': ^7.0.0-0 338 + 339 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': 340 + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} 341 + engines: {node: '>=6.9.0'} 342 + peerDependencies: 343 + '@babel/core': ^7.0.0 344 + 345 + '@babel/plugin-transform-arrow-functions@7.24.7': 346 + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} 347 + engines: {node: '>=6.9.0'} 348 + peerDependencies: 349 + '@babel/core': ^7.0.0-0 350 + 351 + '@babel/plugin-transform-async-generator-functions@7.24.7': 352 + resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} 353 + engines: {node: '>=6.9.0'} 354 + peerDependencies: 355 + '@babel/core': ^7.0.0-0 356 + 357 + '@babel/plugin-transform-async-to-generator@7.24.7': 358 + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} 359 + engines: {node: '>=6.9.0'} 360 + peerDependencies: 361 + '@babel/core': ^7.0.0-0 362 + 363 + '@babel/plugin-transform-block-scoped-functions@7.24.7': 364 + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} 365 + engines: {node: '>=6.9.0'} 366 + peerDependencies: 367 + '@babel/core': ^7.0.0-0 368 + 369 + '@babel/plugin-transform-block-scoping@7.24.7': 370 + resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} 371 + engines: {node: '>=6.9.0'} 372 + peerDependencies: 373 + '@babel/core': ^7.0.0-0 374 + 375 + '@babel/plugin-transform-class-properties@7.24.7': 376 + resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} 377 + engines: {node: '>=6.9.0'} 378 + peerDependencies: 379 + '@babel/core': ^7.0.0-0 380 + 381 + '@babel/plugin-transform-class-static-block@7.24.7': 382 + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} 383 + engines: {node: '>=6.9.0'} 384 + peerDependencies: 385 + '@babel/core': ^7.12.0 386 + 387 + '@babel/plugin-transform-classes@7.24.7': 388 + resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==} 389 + engines: {node: '>=6.9.0'} 390 + peerDependencies: 391 + '@babel/core': ^7.0.0-0 392 + 393 + '@babel/plugin-transform-computed-properties@7.24.7': 394 + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} 395 + engines: {node: '>=6.9.0'} 396 + peerDependencies: 397 + '@babel/core': ^7.0.0-0 398 + 399 + '@babel/plugin-transform-destructuring@7.24.7': 400 + resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==} 401 + engines: {node: '>=6.9.0'} 402 + peerDependencies: 403 + '@babel/core': ^7.0.0-0 404 + 405 + '@babel/plugin-transform-dotall-regex@7.24.7': 406 + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} 407 + engines: {node: '>=6.9.0'} 408 + peerDependencies: 409 + '@babel/core': ^7.0.0-0 410 + 411 + '@babel/plugin-transform-duplicate-keys@7.24.7': 412 + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} 413 + engines: {node: '>=6.9.0'} 414 + peerDependencies: 415 + '@babel/core': ^7.0.0-0 416 + 417 + '@babel/plugin-transform-dynamic-import@7.24.7': 418 + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} 419 + engines: {node: '>=6.9.0'} 420 + peerDependencies: 421 + '@babel/core': ^7.0.0-0 422 + 423 + '@babel/plugin-transform-exponentiation-operator@7.24.7': 424 + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} 425 + engines: {node: '>=6.9.0'} 426 + peerDependencies: 427 + '@babel/core': ^7.0.0-0 428 + 429 + '@babel/plugin-transform-export-namespace-from@7.24.7': 430 + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} 431 + engines: {node: '>=6.9.0'} 432 + peerDependencies: 433 + '@babel/core': ^7.0.0-0 434 + 435 + '@babel/plugin-transform-for-of@7.24.7': 436 + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} 437 + engines: {node: '>=6.9.0'} 438 + peerDependencies: 439 + '@babel/core': ^7.0.0-0 440 + 441 + '@babel/plugin-transform-function-name@7.24.7': 442 + resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} 443 + engines: {node: '>=6.9.0'} 444 + peerDependencies: 445 + '@babel/core': ^7.0.0-0 446 + 447 + '@babel/plugin-transform-json-strings@7.24.7': 448 + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} 449 + engines: {node: '>=6.9.0'} 450 + peerDependencies: 451 + '@babel/core': ^7.0.0-0 452 + 453 + '@babel/plugin-transform-literals@7.24.7': 454 + resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} 455 + engines: {node: '>=6.9.0'} 456 + peerDependencies: 457 + '@babel/core': ^7.0.0-0 458 + 459 + '@babel/plugin-transform-logical-assignment-operators@7.24.7': 460 + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} 461 + engines: {node: '>=6.9.0'} 462 + peerDependencies: 463 + '@babel/core': ^7.0.0-0 464 + 465 + '@babel/plugin-transform-member-expression-literals@7.24.7': 466 + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} 467 + engines: {node: '>=6.9.0'} 468 + peerDependencies: 469 + '@babel/core': ^7.0.0-0 470 + 471 + '@babel/plugin-transform-modules-amd@7.24.7': 472 + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} 473 + engines: {node: '>=6.9.0'} 474 + peerDependencies: 475 + '@babel/core': ^7.0.0-0 476 + 477 + '@babel/plugin-transform-modules-commonjs@7.24.7': 478 + resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} 479 + engines: {node: '>=6.9.0'} 480 + peerDependencies: 481 + '@babel/core': ^7.0.0-0 482 + 483 + '@babel/plugin-transform-modules-systemjs@7.24.7': 484 + resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} 485 + engines: {node: '>=6.9.0'} 486 + peerDependencies: 487 + '@babel/core': ^7.0.0-0 488 + 489 + '@babel/plugin-transform-modules-umd@7.24.7': 490 + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} 491 + engines: {node: '>=6.9.0'} 492 + peerDependencies: 493 + '@babel/core': ^7.0.0-0 494 + 495 + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': 496 + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} 497 + engines: {node: '>=6.9.0'} 498 + peerDependencies: 499 + '@babel/core': ^7.0.0 500 + 501 + '@babel/plugin-transform-new-target@7.24.7': 502 + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} 503 + engines: {node: '>=6.9.0'} 504 + peerDependencies: 505 + '@babel/core': ^7.0.0-0 506 + 507 + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': 508 + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} 509 + engines: {node: '>=6.9.0'} 510 + peerDependencies: 511 + '@babel/core': ^7.0.0-0 512 + 513 + '@babel/plugin-transform-numeric-separator@7.24.7': 514 + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} 515 + engines: {node: '>=6.9.0'} 516 + peerDependencies: 517 + '@babel/core': ^7.0.0-0 518 + 519 + '@babel/plugin-transform-object-rest-spread@7.24.7': 520 + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} 521 + engines: {node: '>=6.9.0'} 522 + peerDependencies: 523 + '@babel/core': ^7.0.0-0 524 + 525 + '@babel/plugin-transform-object-super@7.24.7': 526 + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} 527 + engines: {node: '>=6.9.0'} 528 + peerDependencies: 529 + '@babel/core': ^7.0.0-0 530 + 531 + '@babel/plugin-transform-optional-catch-binding@7.24.7': 532 + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} 533 + engines: {node: '>=6.9.0'} 534 + peerDependencies: 535 + '@babel/core': ^7.0.0-0 536 + 537 + '@babel/plugin-transform-optional-chaining@7.24.7': 538 + resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} 539 + engines: {node: '>=6.9.0'} 540 + peerDependencies: 541 + '@babel/core': ^7.0.0-0 542 + 543 + '@babel/plugin-transform-parameters@7.24.7': 544 + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} 545 + engines: {node: '>=6.9.0'} 546 + peerDependencies: 547 + '@babel/core': ^7.0.0-0 548 + 549 + '@babel/plugin-transform-private-methods@7.24.7': 550 + resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} 551 + engines: {node: '>=6.9.0'} 552 + peerDependencies: 553 + '@babel/core': ^7.0.0-0 554 + 555 + '@babel/plugin-transform-private-property-in-object@7.24.7': 556 + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} 557 + engines: {node: '>=6.9.0'} 558 + peerDependencies: 559 + '@babel/core': ^7.0.0-0 560 + 561 + '@babel/plugin-transform-property-literals@7.24.7': 562 + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} 563 + engines: {node: '>=6.9.0'} 564 + peerDependencies: 565 + '@babel/core': ^7.0.0-0 566 + 567 + '@babel/plugin-transform-regenerator@7.24.7': 568 + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} 569 + engines: {node: '>=6.9.0'} 570 + peerDependencies: 571 + '@babel/core': ^7.0.0-0 572 + 573 + '@babel/plugin-transform-reserved-words@7.24.7': 574 + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} 575 + engines: {node: '>=6.9.0'} 576 + peerDependencies: 577 + '@babel/core': ^7.0.0-0 578 + 579 + '@babel/plugin-transform-shorthand-properties@7.24.7': 580 + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} 581 + engines: {node: '>=6.9.0'} 582 + peerDependencies: 583 + '@babel/core': ^7.0.0-0 584 + 585 + '@babel/plugin-transform-spread@7.24.7': 586 + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} 587 + engines: {node: '>=6.9.0'} 588 + peerDependencies: 589 + '@babel/core': ^7.0.0-0 590 + 591 + '@babel/plugin-transform-sticky-regex@7.24.7': 592 + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} 593 + engines: {node: '>=6.9.0'} 594 + peerDependencies: 595 + '@babel/core': ^7.0.0-0 596 + 597 + '@babel/plugin-transform-template-literals@7.24.7': 598 + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} 599 + engines: {node: '>=6.9.0'} 600 + peerDependencies: 601 + '@babel/core': ^7.0.0-0 602 + 603 + '@babel/plugin-transform-typeof-symbol@7.24.7': 604 + resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} 605 + engines: {node: '>=6.9.0'} 606 + peerDependencies: 607 + '@babel/core': ^7.0.0-0 608 + 609 + '@babel/plugin-transform-typescript@7.24.7': 610 + resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} 611 + engines: {node: '>=6.9.0'} 612 + peerDependencies: 613 + '@babel/core': ^7.0.0-0 614 + 615 + '@babel/plugin-transform-unicode-escapes@7.24.7': 616 + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} 617 + engines: {node: '>=6.9.0'} 618 + peerDependencies: 619 + '@babel/core': ^7.0.0-0 620 + 621 + '@babel/plugin-transform-unicode-property-regex@7.24.7': 622 + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} 623 + engines: {node: '>=6.9.0'} 624 + peerDependencies: 625 + '@babel/core': ^7.0.0-0 626 + 627 + '@babel/plugin-transform-unicode-regex@7.24.7': 628 + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} 629 + engines: {node: '>=6.9.0'} 630 + peerDependencies: 631 + '@babel/core': ^7.0.0-0 632 + 633 + '@babel/plugin-transform-unicode-sets-regex@7.24.7': 634 + resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} 635 + engines: {node: '>=6.9.0'} 636 + peerDependencies: 637 + '@babel/core': ^7.0.0 638 + 639 + '@babel/preset-env@7.24.7': 640 + resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==} 641 + engines: {node: '>=6.9.0'} 642 + peerDependencies: 643 + '@babel/core': ^7.0.0-0 644 + 645 + '@babel/preset-modules@0.1.6-no-external-plugins': 646 + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} 647 + peerDependencies: 648 + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 649 + 650 + '@babel/preset-typescript@7.24.7': 651 + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} 652 + engines: {node: '>=6.9.0'} 653 + peerDependencies: 654 + '@babel/core': ^7.0.0-0 655 + 656 + '@babel/regjsgen@0.8.0': 657 + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} 658 + 659 + '@babel/runtime@7.24.7': 660 + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} 661 + engines: {node: '>=6.9.0'} 662 + 663 + '@babel/template@7.24.7': 664 + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} 665 + engines: {node: '>=6.9.0'} 666 + 667 + '@babel/traverse@7.24.7': 668 + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} 669 + engines: {node: '>=6.9.0'} 670 + 671 + '@babel/types@7.24.7': 672 + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} 673 + engines: {node: '>=6.9.0'} 674 + 675 + '@bcoe/v8-coverage@0.2.3': 676 + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 677 + 678 + '@eslint-community/eslint-utils@4.4.0': 679 + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 680 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 681 + peerDependencies: 682 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 683 + 684 + '@eslint-community/regexpp@4.11.1': 685 + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} 686 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 687 + 688 + '@eslint/config-array@0.18.0': 689 + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} 690 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 691 + 692 + '@eslint/core@0.6.0': 693 + resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} 694 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 695 + 696 + '@eslint/eslintrc@3.1.0': 697 + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} 698 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 699 + 700 + '@eslint/js@9.12.0': 701 + resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} 702 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 703 + 704 + '@eslint/object-schema@2.1.4': 705 + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} 706 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 707 + 708 + '@eslint/plugin-kit@0.2.0': 709 + resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} 710 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 711 + 712 + '@humanfs/core@0.19.0': 713 + resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} 714 + engines: {node: '>=18.18.0'} 715 + 716 + '@humanfs/node@0.16.5': 717 + resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} 718 + engines: {node: '>=18.18.0'} 719 + 720 + '@humanwhocodes/module-importer@1.0.1': 721 + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 722 + engines: {node: '>=12.22'} 723 + 724 + '@humanwhocodes/retry@0.3.1': 725 + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 726 + engines: {node: '>=18.18'} 727 + 728 + '@istanbuljs/load-nyc-config@1.1.0': 729 + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 730 + engines: {node: '>=8'} 731 + 732 + '@istanbuljs/schema@0.1.3': 733 + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 734 + engines: {node: '>=8'} 735 + 736 + '@jest/console@29.7.0': 737 + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} 738 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 739 + 740 + '@jest/core@29.7.0': 741 + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} 742 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 743 + peerDependencies: 744 + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 745 + peerDependenciesMeta: 746 + node-notifier: 747 + optional: true 748 + 749 + '@jest/environment@29.7.0': 750 + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} 751 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 752 + 753 + '@jest/expect-utils@29.7.0': 754 + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} 755 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 756 + 757 + '@jest/expect@29.7.0': 758 + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} 759 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 760 + 761 + '@jest/fake-timers@29.7.0': 762 + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} 763 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 764 + 765 + '@jest/globals@29.7.0': 766 + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} 767 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 768 + 769 + '@jest/reporters@29.7.0': 770 + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} 771 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 772 + peerDependencies: 773 + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 774 + peerDependenciesMeta: 775 + node-notifier: 776 + optional: true 777 + 778 + '@jest/schemas@29.6.3': 779 + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 780 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 781 + 782 + '@jest/source-map@29.6.3': 783 + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} 784 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 785 + 786 + '@jest/test-result@29.7.0': 787 + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} 788 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 789 + 790 + '@jest/test-sequencer@29.7.0': 791 + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} 792 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 793 + 794 + '@jest/transform@29.7.0': 795 + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} 796 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 797 + 798 + '@jest/types@29.6.3': 799 + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} 800 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 801 + 802 + '@jridgewell/gen-mapping@0.3.5': 803 + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 804 + engines: {node: '>=6.0.0'} 805 + 806 + '@jridgewell/resolve-uri@3.1.2': 807 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 808 + engines: {node: '>=6.0.0'} 809 + 810 + '@jridgewell/set-array@1.2.1': 811 + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 812 + engines: {node: '>=6.0.0'} 813 + 814 + '@jridgewell/sourcemap-codec@1.4.15': 815 + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 816 + 817 + '@jridgewell/trace-mapping@0.3.25': 818 + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 819 + 820 + '@nodelib/fs.scandir@2.1.5': 821 + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 822 + engines: {node: '>= 8'} 823 + 824 + '@nodelib/fs.stat@2.0.5': 825 + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 826 + engines: {node: '>= 8'} 827 + 828 + '@nodelib/fs.walk@1.2.8': 829 + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 830 + engines: {node: '>= 8'} 831 + 832 + '@sinclair/typebox@0.27.8': 833 + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 834 + 835 + '@sinonjs/commons@3.0.1': 836 + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} 837 + 838 + '@sinonjs/fake-timers@10.3.0': 839 + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} 840 + 841 + '@tsconfig/recommended@1.0.6': 842 + resolution: {integrity: sha512-0IKu9GHYF1NGTJiYgfWwqnOQSlnE9V9R7YohHNNf0/fj/SyOZWzdd06JFr0fLpg1Mqw0kGbYg8w5xdkSqLKM9g==} 843 + 844 + '@types/babel__core@7.20.5': 845 + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 846 + 847 + '@types/babel__generator@7.6.8': 848 + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 849 + 850 + '@types/babel__template@7.4.4': 851 + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 852 + 853 + '@types/babel__traverse@7.20.6': 854 + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 855 + 856 + '@types/estree@1.0.6': 857 + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 858 + 859 + '@types/graceful-fs@4.1.9': 860 + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} 861 + 862 + '@types/istanbul-lib-coverage@2.0.6': 863 + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 864 + 865 + '@types/istanbul-lib-report@3.0.3': 866 + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} 867 + 868 + '@types/istanbul-reports@3.0.4': 869 + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} 870 + 871 + '@types/jest@29.5.12': 872 + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} 873 + 874 + '@types/json-schema@7.0.15': 875 + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 876 + 877 + '@types/node@20.14.2': 878 + resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} 879 + 880 + '@types/stack-utils@2.0.3': 881 + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} 882 + 883 + '@types/yargs-parser@21.0.3': 884 + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} 885 + 886 + '@types/yargs@17.0.32': 887 + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} 888 + 889 + '@typescript-eslint/eslint-plugin@8.8.1': 890 + resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} 891 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 892 + peerDependencies: 893 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 894 + eslint: ^8.57.0 || ^9.0.0 895 + typescript: '*' 896 + peerDependenciesMeta: 897 + typescript: 898 + optional: true 899 + 900 + '@typescript-eslint/parser@8.8.1': 901 + resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} 902 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 903 + peerDependencies: 904 + eslint: ^8.57.0 || ^9.0.0 905 + typescript: '*' 906 + peerDependenciesMeta: 907 + typescript: 908 + optional: true 909 + 910 + '@typescript-eslint/scope-manager@8.8.1': 911 + resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} 912 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 913 + 914 + '@typescript-eslint/type-utils@8.8.1': 915 + resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} 916 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 917 + peerDependencies: 918 + typescript: '*' 919 + peerDependenciesMeta: 920 + typescript: 921 + optional: true 922 + 923 + '@typescript-eslint/types@8.8.1': 924 + resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} 925 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 926 + 927 + '@typescript-eslint/typescript-estree@8.8.1': 928 + resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} 929 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 930 + peerDependencies: 931 + typescript: '*' 932 + peerDependenciesMeta: 933 + typescript: 934 + optional: true 935 + 936 + '@typescript-eslint/utils@8.8.1': 937 + resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} 938 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 939 + peerDependencies: 940 + eslint: ^8.57.0 || ^9.0.0 941 + 942 + '@typescript-eslint/visitor-keys@8.8.1': 943 + resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} 944 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 945 + 946 + acorn-jsx@5.3.2: 947 + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 948 + peerDependencies: 949 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 950 + 951 + acorn@8.12.1: 952 + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 953 + engines: {node: '>=0.4.0'} 954 + hasBin: true 955 + 956 + ajv@6.12.6: 957 + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 958 + 959 + ansi-escapes@4.3.2: 960 + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 961 + engines: {node: '>=8'} 962 + 963 + ansi-regex@5.0.1: 964 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 965 + engines: {node: '>=8'} 966 + 967 + ansi-styles@3.2.1: 968 + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 969 + engines: {node: '>=4'} 970 + 971 + ansi-styles@4.3.0: 972 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 973 + engines: {node: '>=8'} 974 + 975 + ansi-styles@5.2.0: 976 + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 977 + engines: {node: '>=10'} 978 + 979 + anymatch@3.1.3: 980 + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 981 + engines: {node: '>= 8'} 982 + 983 + argparse@1.0.10: 984 + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 985 + 986 + argparse@2.0.1: 987 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 988 + 989 + babel-jest@29.7.0: 990 + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} 991 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 992 + peerDependencies: 993 + '@babel/core': ^7.8.0 994 + 995 + babel-plugin-istanbul@6.1.1: 996 + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 997 + engines: {node: '>=8'} 998 + 999 + babel-plugin-jest-hoist@29.6.3: 1000 + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} 1001 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1002 + 1003 + babel-plugin-polyfill-corejs2@0.4.11: 1004 + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} 1005 + peerDependencies: 1006 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 1007 + 1008 + babel-plugin-polyfill-corejs3@0.10.4: 1009 + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} 1010 + peerDependencies: 1011 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 1012 + 1013 + babel-plugin-polyfill-regenerator@0.6.2: 1014 + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} 1015 + peerDependencies: 1016 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 1017 + 1018 + babel-preset-current-node-syntax@1.0.1: 1019 + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} 1020 + peerDependencies: 1021 + '@babel/core': ^7.0.0 1022 + 1023 + babel-preset-jest@29.6.3: 1024 + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} 1025 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1026 + peerDependencies: 1027 + '@babel/core': ^7.0.0 1028 + 1029 + balanced-match@1.0.2: 1030 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1031 + 1032 + brace-expansion@1.1.11: 1033 + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1034 + 1035 + brace-expansion@2.0.1: 1036 + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 1037 + 1038 + braces@3.0.3: 1039 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 1040 + engines: {node: '>=8'} 1041 + 1042 + browserslist@4.23.0: 1043 + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} 1044 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1045 + hasBin: true 1046 + 1047 + bser@2.1.1: 1048 + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 1049 + 1050 + buffer-from@1.1.2: 1051 + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 1052 + 1053 + callsites@3.1.0: 1054 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1055 + engines: {node: '>=6'} 1056 + 1057 + camelcase@5.3.1: 1058 + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 1059 + engines: {node: '>=6'} 1060 + 1061 + camelcase@6.3.0: 1062 + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 1063 + engines: {node: '>=10'} 1064 + 1065 + caniuse-lite@1.0.30001629: 1066 + resolution: {integrity: sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==} 1067 + 1068 + chalk@2.4.2: 1069 + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1070 + engines: {node: '>=4'} 1071 + 1072 + chalk@4.1.2: 1073 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1074 + engines: {node: '>=10'} 1075 + 1076 + char-regex@1.0.2: 1077 + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 1078 + engines: {node: '>=10'} 1079 + 1080 + ci-info@3.9.0: 1081 + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 1082 + engines: {node: '>=8'} 1083 + 1084 + cjs-module-lexer@1.3.1: 1085 + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} 1086 + 1087 + cliui@8.0.1: 1088 + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 1089 + engines: {node: '>=12'} 1090 + 1091 + co@4.6.0: 1092 + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 1093 + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 1094 + 1095 + collect-v8-coverage@1.0.2: 1096 + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} 1097 + 1098 + color-convert@1.9.3: 1099 + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1100 + 1101 + color-convert@2.0.1: 1102 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1103 + engines: {node: '>=7.0.0'} 1104 + 1105 + color-name@1.1.3: 1106 + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1107 + 1108 + color-name@1.1.4: 1109 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1110 + 1111 + concat-map@0.0.1: 1112 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1113 + 1114 + convert-source-map@2.0.0: 1115 + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 1116 + 1117 + core-js-compat@3.37.1: 1118 + resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} 1119 + 1120 + create-jest@29.7.0: 1121 + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} 1122 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1123 + hasBin: true 1124 + 1125 + cross-spawn@7.0.3: 1126 + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1127 + engines: {node: '>= 8'} 1128 + 1129 + debug@4.3.5: 1130 + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} 1131 + engines: {node: '>=6.0'} 1132 + peerDependencies: 1133 + supports-color: '*' 1134 + peerDependenciesMeta: 1135 + supports-color: 1136 + optional: true 1137 + 1138 + dedent@1.5.3: 1139 + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} 1140 + peerDependencies: 1141 + babel-plugin-macros: ^3.1.0 1142 + peerDependenciesMeta: 1143 + babel-plugin-macros: 1144 + optional: true 1145 + 1146 + deep-is@0.1.4: 1147 + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1148 + 1149 + deepmerge@4.3.1: 1150 + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1151 + engines: {node: '>=0.10.0'} 1152 + 1153 + detect-newline@3.1.0: 1154 + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 1155 + engines: {node: '>=8'} 1156 + 1157 + diff-sequences@29.6.3: 1158 + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 1159 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1160 + 1161 + electron-to-chromium@1.4.795: 1162 + resolution: {integrity: sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw==} 1163 + 1164 + emittery@0.13.1: 1165 + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} 1166 + engines: {node: '>=12'} 1167 + 1168 + emoji-regex@8.0.0: 1169 + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1170 + 1171 + error-ex@1.3.2: 1172 + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1173 + 1174 + escalade@3.1.2: 1175 + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 1176 + engines: {node: '>=6'} 1177 + 1178 + escape-string-regexp@1.0.5: 1179 + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1180 + engines: {node: '>=0.8.0'} 1181 + 1182 + escape-string-regexp@2.0.0: 1183 + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1184 + engines: {node: '>=8'} 1185 + 1186 + escape-string-regexp@4.0.0: 1187 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1188 + engines: {node: '>=10'} 1189 + 1190 + escape-string-regexp@5.0.0: 1191 + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 1192 + engines: {node: '>=12'} 1193 + 1194 + eslint-scope@8.1.0: 1195 + resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} 1196 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1197 + 1198 + eslint-visitor-keys@3.4.3: 1199 + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1200 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1201 + 1202 + eslint-visitor-keys@4.1.0: 1203 + resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} 1204 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1205 + 1206 + eslint@9.12.0: 1207 + resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} 1208 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1209 + hasBin: true 1210 + peerDependencies: 1211 + jiti: '*' 1212 + peerDependenciesMeta: 1213 + jiti: 1214 + optional: true 1215 + 1216 + espree@10.2.0: 1217 + resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} 1218 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1219 + 1220 + esprima@4.0.1: 1221 + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1222 + engines: {node: '>=4'} 1223 + hasBin: true 1224 + 1225 + esquery@1.6.0: 1226 + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1227 + engines: {node: '>=0.10'} 1228 + 1229 + esrecurse@4.3.0: 1230 + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1231 + engines: {node: '>=4.0'} 1232 + 1233 + estraverse@5.3.0: 1234 + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1235 + engines: {node: '>=4.0'} 1236 + 1237 + esutils@2.0.3: 1238 + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1239 + engines: {node: '>=0.10.0'} 1240 + 1241 + execa@5.1.1: 1242 + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1243 + engines: {node: '>=10'} 1244 + 1245 + exit@0.1.2: 1246 + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 1247 + engines: {node: '>= 0.8.0'} 1248 + 1249 + expect@29.7.0: 1250 + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} 1251 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1252 + 1253 + fast-deep-equal@3.1.3: 1254 + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1255 + 1256 + fast-glob@3.3.2: 1257 + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1258 + engines: {node: '>=8.6.0'} 1259 + 1260 + fast-json-stable-stringify@2.1.0: 1261 + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1262 + 1263 + fast-levenshtein@2.0.6: 1264 + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1265 + 1266 + fastq@1.17.1: 1267 + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1268 + 1269 + fb-watchman@2.0.2: 1270 + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 1271 + 1272 + file-entry-cache@8.0.0: 1273 + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1274 + engines: {node: '>=16.0.0'} 1275 + 1276 + fill-range@7.1.1: 1277 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1278 + engines: {node: '>=8'} 1279 + 1280 + find-up@4.1.0: 1281 + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1282 + engines: {node: '>=8'} 1283 + 1284 + find-up@5.0.0: 1285 + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1286 + engines: {node: '>=10'} 1287 + 1288 + flat-cache@4.0.1: 1289 + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1290 + engines: {node: '>=16'} 1291 + 1292 + flatted@3.3.1: 1293 + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1294 + 1295 + fs.realpath@1.0.0: 1296 + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1297 + 1298 + fsevents@2.3.3: 1299 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1300 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1301 + os: [darwin] 1302 + 1303 + function-bind@1.1.2: 1304 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1305 + 1306 + gensync@1.0.0-beta.2: 1307 + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1308 + engines: {node: '>=6.9.0'} 1309 + 1310 + get-caller-file@2.0.5: 1311 + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1312 + engines: {node: 6.* || 8.* || >= 10.*} 1313 + 1314 + get-package-type@0.1.0: 1315 + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1316 + engines: {node: '>=8.0.0'} 1317 + 1318 + get-stream@6.0.1: 1319 + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1320 + engines: {node: '>=10'} 1321 + 1322 + glob-parent@5.1.2: 1323 + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1324 + engines: {node: '>= 6'} 1325 + 1326 + glob-parent@6.0.2: 1327 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1328 + engines: {node: '>=10.13.0'} 1329 + 1330 + glob@7.2.3: 1331 + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1332 + deprecated: Glob versions prior to v9 are no longer supported 1333 + 1334 + globals@11.12.0: 1335 + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1336 + engines: {node: '>=4'} 1337 + 1338 + globals@14.0.0: 1339 + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1340 + engines: {node: '>=18'} 1341 + 1342 + graceful-fs@4.2.11: 1343 + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1344 + 1345 + graphemer@1.4.0: 1346 + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1347 + 1348 + has-flag@3.0.0: 1349 + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1350 + engines: {node: '>=4'} 1351 + 1352 + has-flag@4.0.0: 1353 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1354 + engines: {node: '>=8'} 1355 + 1356 + hasown@2.0.2: 1357 + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1358 + engines: {node: '>= 0.4'} 1359 + 1360 + html-escaper@2.0.2: 1361 + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1362 + 1363 + human-signals@2.1.0: 1364 + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1365 + engines: {node: '>=10.17.0'} 1366 + 1367 + ignore@5.3.2: 1368 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1369 + engines: {node: '>= 4'} 1370 + 1371 + import-fresh@3.3.0: 1372 + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1373 + engines: {node: '>=6'} 1374 + 1375 + import-local@3.1.0: 1376 + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 1377 + engines: {node: '>=8'} 1378 + hasBin: true 1379 + 1380 + imurmurhash@0.1.4: 1381 + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1382 + engines: {node: '>=0.8.19'} 1383 + 1384 + inflight@1.0.6: 1385 + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1386 + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 1387 + 1388 + inherits@2.0.4: 1389 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1390 + 1391 + is-arrayish@0.2.1: 1392 + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1393 + 1394 + is-core-module@2.13.1: 1395 + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1396 + 1397 + is-extglob@2.1.1: 1398 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1399 + engines: {node: '>=0.10.0'} 1400 + 1401 + is-fullwidth-code-point@3.0.0: 1402 + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1403 + engines: {node: '>=8'} 1404 + 1405 + is-generator-fn@2.1.0: 1406 + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 1407 + engines: {node: '>=6'} 1408 + 1409 + is-glob@4.0.3: 1410 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1411 + engines: {node: '>=0.10.0'} 1412 + 1413 + is-number@7.0.0: 1414 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1415 + engines: {node: '>=0.12.0'} 1416 + 1417 + is-stream@2.0.1: 1418 + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1419 + engines: {node: '>=8'} 1420 + 1421 + isexe@2.0.0: 1422 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1423 + 1424 + istanbul-lib-coverage@3.2.2: 1425 + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1426 + engines: {node: '>=8'} 1427 + 1428 + istanbul-lib-instrument@5.2.1: 1429 + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 1430 + engines: {node: '>=8'} 1431 + 1432 + istanbul-lib-instrument@6.0.2: 1433 + resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} 1434 + engines: {node: '>=10'} 1435 + 1436 + istanbul-lib-report@3.0.1: 1437 + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1438 + engines: {node: '>=10'} 1439 + 1440 + istanbul-lib-source-maps@4.0.1: 1441 + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1442 + engines: {node: '>=10'} 1443 + 1444 + istanbul-reports@3.1.7: 1445 + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 1446 + engines: {node: '>=8'} 1447 + 1448 + jest-changed-files@29.7.0: 1449 + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} 1450 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1451 + 1452 + jest-circus@29.7.0: 1453 + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} 1454 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1455 + 1456 + jest-cli@29.7.0: 1457 + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} 1458 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1459 + hasBin: true 1460 + peerDependencies: 1461 + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1462 + peerDependenciesMeta: 1463 + node-notifier: 1464 + optional: true 1465 + 1466 + jest-config@29.7.0: 1467 + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} 1468 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1469 + peerDependencies: 1470 + '@types/node': '*' 1471 + ts-node: '>=9.0.0' 1472 + peerDependenciesMeta: 1473 + '@types/node': 1474 + optional: true 1475 + ts-node: 1476 + optional: true 1477 + 1478 + jest-diff@29.7.0: 1479 + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 1480 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1481 + 1482 + jest-docblock@29.7.0: 1483 + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} 1484 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1485 + 1486 + jest-each@29.7.0: 1487 + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} 1488 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1489 + 1490 + jest-environment-node@29.7.0: 1491 + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} 1492 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1493 + 1494 + jest-get-type@29.6.3: 1495 + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 1496 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1497 + 1498 + jest-haste-map@29.7.0: 1499 + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} 1500 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1501 + 1502 + jest-leak-detector@29.7.0: 1503 + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} 1504 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1505 + 1506 + jest-matcher-utils@29.7.0: 1507 + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} 1508 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1509 + 1510 + jest-message-util@29.7.0: 1511 + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} 1512 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1513 + 1514 + jest-mock@29.7.0: 1515 + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} 1516 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1517 + 1518 + jest-pnp-resolver@1.2.3: 1519 + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 1520 + engines: {node: '>=6'} 1521 + peerDependencies: 1522 + jest-resolve: '*' 1523 + peerDependenciesMeta: 1524 + jest-resolve: 1525 + optional: true 1526 + 1527 + jest-regex-util@29.6.3: 1528 + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} 1529 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1530 + 1531 + jest-resolve-dependencies@29.7.0: 1532 + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} 1533 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1534 + 1535 + jest-resolve@29.7.0: 1536 + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} 1537 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1538 + 1539 + jest-runner@29.7.0: 1540 + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} 1541 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1542 + 1543 + jest-runtime@29.7.0: 1544 + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} 1545 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1546 + 1547 + jest-snapshot@29.7.0: 1548 + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} 1549 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1550 + 1551 + jest-util@29.7.0: 1552 + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} 1553 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1554 + 1555 + jest-validate@29.7.0: 1556 + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} 1557 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1558 + 1559 + jest-watcher@29.7.0: 1560 + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} 1561 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1562 + 1563 + jest-worker@29.7.0: 1564 + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} 1565 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1566 + 1567 + jest@29.7.0: 1568 + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} 1569 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1570 + hasBin: true 1571 + peerDependencies: 1572 + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1573 + peerDependenciesMeta: 1574 + node-notifier: 1575 + optional: true 1576 + 1577 + js-tokens@4.0.0: 1578 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1579 + 1580 + js-yaml@3.14.1: 1581 + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1582 + hasBin: true 1583 + 1584 + js-yaml@4.1.0: 1585 + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1586 + hasBin: true 1587 + 1588 + jsesc@0.5.0: 1589 + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 1590 + hasBin: true 1591 + 1592 + jsesc@2.5.2: 1593 + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1594 + engines: {node: '>=4'} 1595 + hasBin: true 1596 + 1597 + json-buffer@3.0.1: 1598 + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1599 + 1600 + json-parse-even-better-errors@2.3.1: 1601 + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1602 + 1603 + json-schema-traverse@0.4.1: 1604 + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1605 + 1606 + json-stable-stringify-without-jsonify@1.0.1: 1607 + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1608 + 1609 + json5@2.2.3: 1610 + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1611 + engines: {node: '>=6'} 1612 + hasBin: true 1613 + 1614 + keyv@4.5.4: 1615 + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1616 + 1617 + kleur@3.0.3: 1618 + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1619 + engines: {node: '>=6'} 1620 + 1621 + leven@3.1.0: 1622 + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 1623 + engines: {node: '>=6'} 1624 + 1625 + levn@0.4.1: 1626 + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1627 + engines: {node: '>= 0.8.0'} 1628 + 1629 + lines-and-columns@1.2.4: 1630 + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1631 + 1632 + locate-path@5.0.0: 1633 + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1634 + engines: {node: '>=8'} 1635 + 1636 + locate-path@6.0.0: 1637 + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1638 + engines: {node: '>=10'} 1639 + 1640 + lodash.debounce@4.0.8: 1641 + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} 1642 + 1643 + lodash.merge@4.6.2: 1644 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1645 + 1646 + lru-cache@5.1.1: 1647 + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1648 + 1649 + make-dir@4.0.0: 1650 + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1651 + engines: {node: '>=10'} 1652 + 1653 + makeerror@1.0.12: 1654 + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 1655 + 1656 + merge-stream@2.0.0: 1657 + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1658 + 1659 + merge2@1.4.1: 1660 + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1661 + engines: {node: '>= 8'} 1662 + 1663 + micromatch@4.0.7: 1664 + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} 1665 + engines: {node: '>=8.6'} 1666 + 1667 + mimic-fn@2.1.0: 1668 + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1669 + engines: {node: '>=6'} 1670 + 1671 + minimatch@3.1.2: 1672 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1673 + 1674 + minimatch@9.0.5: 1675 + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1676 + engines: {node: '>=16 || 14 >=14.17'} 1677 + 1678 + ms@2.1.2: 1679 + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1680 + 1681 + natural-compare@1.4.0: 1682 + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1683 + 1684 + node-int64@0.4.0: 1685 + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 1686 + 1687 + node-releases@2.0.14: 1688 + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 1689 + 1690 + normalize-path@3.0.0: 1691 + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1692 + engines: {node: '>=0.10.0'} 1693 + 1694 + npm-run-path@4.0.1: 1695 + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1696 + engines: {node: '>=8'} 1697 + 1698 + once@1.4.0: 1699 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1700 + 1701 + onetime@5.1.2: 1702 + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1703 + engines: {node: '>=6'} 1704 + 1705 + optionator@0.9.4: 1706 + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1707 + engines: {node: '>= 0.8.0'} 1708 + 1709 + p-limit@2.3.0: 1710 + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1711 + engines: {node: '>=6'} 1712 + 1713 + p-limit@3.1.0: 1714 + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1715 + engines: {node: '>=10'} 1716 + 1717 + p-locate@4.1.0: 1718 + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1719 + engines: {node: '>=8'} 1720 + 1721 + p-locate@5.0.0: 1722 + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1723 + engines: {node: '>=10'} 1724 + 1725 + p-try@2.2.0: 1726 + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1727 + engines: {node: '>=6'} 1728 + 1729 + parent-module@1.0.1: 1730 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1731 + engines: {node: '>=6'} 1732 + 1733 + parse-json@5.2.0: 1734 + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1735 + engines: {node: '>=8'} 1736 + 1737 + path-exists@4.0.0: 1738 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1739 + engines: {node: '>=8'} 1740 + 1741 + path-is-absolute@1.0.1: 1742 + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1743 + engines: {node: '>=0.10.0'} 1744 + 1745 + path-key@3.1.1: 1746 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1747 + engines: {node: '>=8'} 1748 + 1749 + path-parse@1.0.7: 1750 + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1751 + 1752 + picocolors@1.0.1: 1753 + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 1754 + 1755 + picomatch@2.3.1: 1756 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1757 + engines: {node: '>=8.6'} 1758 + 1759 + pirates@4.0.6: 1760 + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1761 + engines: {node: '>= 6'} 1762 + 1763 + pkg-dir@4.2.0: 1764 + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1765 + engines: {node: '>=8'} 1766 + 1767 + prelude-ls@1.2.1: 1768 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1769 + engines: {node: '>= 0.8.0'} 1770 + 1771 + prettier@3.3.1: 1772 + resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} 1773 + engines: {node: '>=14'} 1774 + hasBin: true 1775 + 1776 + pretty-format@29.7.0: 1777 + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1778 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1779 + 1780 + prompts@2.4.2: 1781 + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1782 + engines: {node: '>= 6'} 1783 + 1784 + punycode@2.3.1: 1785 + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1786 + engines: {node: '>=6'} 1787 + 1788 + pure-rand@6.1.0: 1789 + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} 1790 + 1791 + queue-microtask@1.2.3: 1792 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1793 + 1794 + react-is@18.3.1: 1795 + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1796 + 1797 + regenerate-unicode-properties@10.1.1: 1798 + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} 1799 + engines: {node: '>=4'} 1800 + 1801 + regenerate@1.4.2: 1802 + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} 1803 + 1804 + regenerator-runtime@0.14.1: 1805 + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1806 + 1807 + regenerator-transform@0.15.2: 1808 + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} 1809 + 1810 + regexpu-core@5.3.2: 1811 + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} 1812 + engines: {node: '>=4'} 1813 + 1814 + regjsparser@0.9.1: 1815 + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} 1816 + hasBin: true 1817 + 1818 + require-directory@2.1.1: 1819 + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1820 + engines: {node: '>=0.10.0'} 1821 + 1822 + resolve-cwd@3.0.0: 1823 + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 1824 + engines: {node: '>=8'} 1825 + 1826 + resolve-from@4.0.0: 1827 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1828 + engines: {node: '>=4'} 1829 + 1830 + resolve-from@5.0.0: 1831 + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1832 + engines: {node: '>=8'} 1833 + 1834 + resolve.exports@2.0.2: 1835 + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} 1836 + engines: {node: '>=10'} 1837 + 1838 + resolve@1.22.8: 1839 + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1840 + hasBin: true 1841 + 1842 + reusify@1.0.4: 1843 + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1844 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1845 + 1846 + run-parallel@1.2.0: 1847 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1848 + 1849 + semver@6.3.1: 1850 + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1851 + hasBin: true 1852 + 1853 + semver@7.6.2: 1854 + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} 1855 + engines: {node: '>=10'} 1856 + hasBin: true 1857 + 1858 + shebang-command@2.0.0: 1859 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1860 + engines: {node: '>=8'} 1861 + 1862 + shebang-regex@3.0.0: 1863 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1864 + engines: {node: '>=8'} 1865 + 1866 + signal-exit@3.0.7: 1867 + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1868 + 1869 + sisteransi@1.0.5: 1870 + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1871 + 1872 + slash@3.0.0: 1873 + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1874 + engines: {node: '>=8'} 1875 + 1876 + source-map-support@0.5.13: 1877 + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 1878 + 1879 + source-map@0.6.1: 1880 + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1881 + engines: {node: '>=0.10.0'} 1882 + 1883 + sprintf-js@1.0.3: 1884 + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1885 + 1886 + stack-utils@2.0.6: 1887 + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 1888 + engines: {node: '>=10'} 1889 + 1890 + string-length@4.0.2: 1891 + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 1892 + engines: {node: '>=10'} 1893 + 1894 + string-width@4.2.3: 1895 + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1896 + engines: {node: '>=8'} 1897 + 1898 + strip-ansi@6.0.1: 1899 + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1900 + engines: {node: '>=8'} 1901 + 1902 + strip-bom@4.0.0: 1903 + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 1904 + engines: {node: '>=8'} 1905 + 1906 + strip-final-newline@2.0.0: 1907 + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1908 + engines: {node: '>=6'} 1909 + 1910 + strip-json-comments@3.1.1: 1911 + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1912 + engines: {node: '>=8'} 1913 + 1914 + supports-color@5.5.0: 1915 + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1916 + engines: {node: '>=4'} 1917 + 1918 + supports-color@7.2.0: 1919 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1920 + engines: {node: '>=8'} 1921 + 1922 + supports-color@8.1.1: 1923 + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1924 + engines: {node: '>=10'} 1925 + 1926 + supports-preserve-symlinks-flag@1.0.0: 1927 + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1928 + engines: {node: '>= 0.4'} 1929 + 1930 + test-exclude@6.0.0: 1931 + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 1932 + engines: {node: '>=8'} 1933 + 1934 + text-table@0.2.0: 1935 + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1936 + 1937 + tmpl@1.0.5: 1938 + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 1939 + 1940 + to-fast-properties@2.0.0: 1941 + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1942 + engines: {node: '>=4'} 1943 + 1944 + to-regex-range@5.0.1: 1945 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1946 + engines: {node: '>=8.0'} 1947 + 1948 + ts-api-utils@1.3.0: 1949 + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1950 + engines: {node: '>=16'} 1951 + peerDependencies: 1952 + typescript: '>=4.2.0' 1953 + 1954 + type-check@0.4.0: 1955 + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1956 + engines: {node: '>= 0.8.0'} 1957 + 1958 + type-detect@4.0.8: 1959 + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1960 + engines: {node: '>=4'} 1961 + 1962 + type-fest@0.21.3: 1963 + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 1964 + engines: {node: '>=10'} 1965 + 1966 + typescript-eslint@8.8.1: 1967 + resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} 1968 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1969 + peerDependencies: 1970 + typescript: '*' 1971 + peerDependenciesMeta: 1972 + typescript: 1973 + optional: true 1974 + 1975 + typescript@5.4.5: 1976 + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 1977 + engines: {node: '>=14.17'} 1978 + hasBin: true 1979 + 1980 + undici-types@5.26.5: 1981 + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1982 + 1983 + unicode-canonical-property-names-ecmascript@2.0.0: 1984 + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} 1985 + engines: {node: '>=4'} 1986 + 1987 + unicode-match-property-ecmascript@2.0.0: 1988 + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} 1989 + engines: {node: '>=4'} 1990 + 1991 + unicode-match-property-value-ecmascript@2.1.0: 1992 + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} 1993 + engines: {node: '>=4'} 1994 + 1995 + unicode-property-aliases-ecmascript@2.1.0: 1996 + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} 1997 + engines: {node: '>=4'} 1998 + 1999 + update-browserslist-db@1.0.16: 2000 + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} 2001 + hasBin: true 2002 + peerDependencies: 2003 + browserslist: '>= 4.21.0' 2004 + 2005 + uri-js@4.4.1: 2006 + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2007 + 2008 + v8-to-istanbul@9.2.0: 2009 + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} 2010 + engines: {node: '>=10.12.0'} 2011 + 2012 + walker@1.0.8: 2013 + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 2014 + 2015 + which@2.0.2: 2016 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2017 + engines: {node: '>= 8'} 2018 + hasBin: true 2019 + 2020 + word-wrap@1.2.5: 2021 + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2022 + engines: {node: '>=0.10.0'} 2023 + 2024 + wrap-ansi@7.0.0: 2025 + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2026 + engines: {node: '>=10'} 2027 + 2028 + wrappy@1.0.2: 2029 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2030 + 2031 + write-file-atomic@4.0.2: 2032 + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} 2033 + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2034 + 2035 + y18n@5.0.8: 2036 + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2037 + engines: {node: '>=10'} 2038 + 2039 + yallist@3.1.1: 2040 + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2041 + 2042 + yargs-parser@21.1.1: 2043 + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2044 + engines: {node: '>=12'} 2045 + 2046 + yargs@17.7.2: 2047 + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 2048 + engines: {node: '>=12'} 2049 + 2050 + yocto-queue@0.1.0: 2051 + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2052 + engines: {node: '>=10'} 2053 + 2054 + snapshots: 2055 + 2056 + '@ampproject/remapping@2.3.0': 2057 + dependencies: 2058 + '@jridgewell/gen-mapping': 0.3.5 2059 + '@jridgewell/trace-mapping': 0.3.25 2060 + 2061 + '@babel/code-frame@7.24.7': 2062 + dependencies: 2063 + '@babel/highlight': 7.24.7 2064 + picocolors: 1.0.1 2065 + 2066 + '@babel/compat-data@7.24.7': {} 2067 + 2068 + '@babel/core@7.24.7': 2069 + dependencies: 2070 + '@ampproject/remapping': 2.3.0 2071 + '@babel/code-frame': 7.24.7 2072 + '@babel/generator': 7.24.7 2073 + '@babel/helper-compilation-targets': 7.24.7 2074 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) 2075 + '@babel/helpers': 7.24.7 2076 + '@babel/parser': 7.24.7 2077 + '@babel/template': 7.24.7 2078 + '@babel/traverse': 7.24.7 2079 + '@babel/types': 7.24.7 2080 + convert-source-map: 2.0.0 2081 + debug: 4.3.5 2082 + gensync: 1.0.0-beta.2 2083 + json5: 2.2.3 2084 + semver: 6.3.1 2085 + transitivePeerDependencies: 2086 + - supports-color 2087 + 2088 + '@babel/generator@7.24.7': 2089 + dependencies: 2090 + '@babel/types': 7.24.7 2091 + '@jridgewell/gen-mapping': 0.3.5 2092 + '@jridgewell/trace-mapping': 0.3.25 2093 + jsesc: 2.5.2 2094 + 2095 + '@babel/helper-annotate-as-pure@7.24.7': 2096 + dependencies: 2097 + '@babel/types': 7.24.7 2098 + 2099 + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': 2100 + dependencies: 2101 + '@babel/traverse': 7.24.7 2102 + '@babel/types': 7.24.7 2103 + transitivePeerDependencies: 2104 + - supports-color 2105 + 2106 + '@babel/helper-compilation-targets@7.24.7': 2107 + dependencies: 2108 + '@babel/compat-data': 7.24.7 2109 + '@babel/helper-validator-option': 7.24.7 2110 + browserslist: 4.23.0 2111 + lru-cache: 5.1.1 2112 + semver: 6.3.1 2113 + 2114 + '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7)': 2115 + dependencies: 2116 + '@babel/core': 7.24.7 2117 + '@babel/helper-annotate-as-pure': 7.24.7 2118 + '@babel/helper-environment-visitor': 7.24.7 2119 + '@babel/helper-function-name': 7.24.7 2120 + '@babel/helper-member-expression-to-functions': 7.24.7 2121 + '@babel/helper-optimise-call-expression': 7.24.7 2122 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) 2123 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 2124 + '@babel/helper-split-export-declaration': 7.24.7 2125 + semver: 6.3.1 2126 + transitivePeerDependencies: 2127 + - supports-color 2128 + 2129 + '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7)': 2130 + dependencies: 2131 + '@babel/core': 7.24.7 2132 + '@babel/helper-annotate-as-pure': 7.24.7 2133 + regexpu-core: 5.3.2 2134 + semver: 6.3.1 2135 + 2136 + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)': 2137 + dependencies: 2138 + '@babel/core': 7.24.7 2139 + '@babel/helper-compilation-targets': 7.24.7 2140 + '@babel/helper-plugin-utils': 7.24.7 2141 + debug: 4.3.5 2142 + lodash.debounce: 4.0.8 2143 + resolve: 1.22.8 2144 + transitivePeerDependencies: 2145 + - supports-color 2146 + 2147 + '@babel/helper-environment-visitor@7.24.7': 2148 + dependencies: 2149 + '@babel/types': 7.24.7 2150 + 2151 + '@babel/helper-function-name@7.24.7': 2152 + dependencies: 2153 + '@babel/template': 7.24.7 2154 + '@babel/types': 7.24.7 2155 + 2156 + '@babel/helper-hoist-variables@7.24.7': 2157 + dependencies: 2158 + '@babel/types': 7.24.7 2159 + 2160 + '@babel/helper-member-expression-to-functions@7.24.7': 2161 + dependencies: 2162 + '@babel/traverse': 7.24.7 2163 + '@babel/types': 7.24.7 2164 + transitivePeerDependencies: 2165 + - supports-color 2166 + 2167 + '@babel/helper-module-imports@7.24.7': 2168 + dependencies: 2169 + '@babel/traverse': 7.24.7 2170 + '@babel/types': 7.24.7 2171 + transitivePeerDependencies: 2172 + - supports-color 2173 + 2174 + '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': 2175 + dependencies: 2176 + '@babel/core': 7.24.7 2177 + '@babel/helper-environment-visitor': 7.24.7 2178 + '@babel/helper-module-imports': 7.24.7 2179 + '@babel/helper-simple-access': 7.24.7 2180 + '@babel/helper-split-export-declaration': 7.24.7 2181 + '@babel/helper-validator-identifier': 7.24.7 2182 + transitivePeerDependencies: 2183 + - supports-color 2184 + 2185 + '@babel/helper-optimise-call-expression@7.24.7': 2186 + dependencies: 2187 + '@babel/types': 7.24.7 2188 + 2189 + '@babel/helper-plugin-utils@7.24.7': {} 2190 + 2191 + '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)': 2192 + dependencies: 2193 + '@babel/core': 7.24.7 2194 + '@babel/helper-annotate-as-pure': 7.24.7 2195 + '@babel/helper-environment-visitor': 7.24.7 2196 + '@babel/helper-wrap-function': 7.24.7 2197 + transitivePeerDependencies: 2198 + - supports-color 2199 + 2200 + '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': 2201 + dependencies: 2202 + '@babel/core': 7.24.7 2203 + '@babel/helper-environment-visitor': 7.24.7 2204 + '@babel/helper-member-expression-to-functions': 7.24.7 2205 + '@babel/helper-optimise-call-expression': 7.24.7 2206 + transitivePeerDependencies: 2207 + - supports-color 2208 + 2209 + '@babel/helper-simple-access@7.24.7': 2210 + dependencies: 2211 + '@babel/traverse': 7.24.7 2212 + '@babel/types': 7.24.7 2213 + transitivePeerDependencies: 2214 + - supports-color 2215 + 2216 + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': 2217 + dependencies: 2218 + '@babel/traverse': 7.24.7 2219 + '@babel/types': 7.24.7 2220 + transitivePeerDependencies: 2221 + - supports-color 2222 + 2223 + '@babel/helper-split-export-declaration@7.24.7': 2224 + dependencies: 2225 + '@babel/types': 7.24.7 2226 + 2227 + '@babel/helper-string-parser@7.24.7': {} 2228 + 2229 + '@babel/helper-validator-identifier@7.24.7': {} 2230 + 2231 + '@babel/helper-validator-option@7.24.7': {} 2232 + 2233 + '@babel/helper-wrap-function@7.24.7': 2234 + dependencies: 2235 + '@babel/helper-function-name': 7.24.7 2236 + '@babel/template': 7.24.7 2237 + '@babel/traverse': 7.24.7 2238 + '@babel/types': 7.24.7 2239 + transitivePeerDependencies: 2240 + - supports-color 2241 + 2242 + '@babel/helpers@7.24.7': 2243 + dependencies: 2244 + '@babel/template': 7.24.7 2245 + '@babel/types': 7.24.7 2246 + 2247 + '@babel/highlight@7.24.7': 2248 + dependencies: 2249 + '@babel/helper-validator-identifier': 7.24.7 2250 + chalk: 2.4.2 2251 + js-tokens: 4.0.0 2252 + picocolors: 1.0.1 2253 + 2254 + '@babel/parser@7.24.7': 2255 + dependencies: 2256 + '@babel/types': 7.24.7 2257 + 2258 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': 2259 + dependencies: 2260 + '@babel/core': 7.24.7 2261 + '@babel/helper-environment-visitor': 7.24.7 2262 + '@babel/helper-plugin-utils': 7.24.7 2263 + 2264 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)': 2265 + dependencies: 2266 + '@babel/core': 7.24.7 2267 + '@babel/helper-plugin-utils': 7.24.7 2268 + 2269 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)': 2270 + dependencies: 2271 + '@babel/core': 7.24.7 2272 + '@babel/helper-plugin-utils': 7.24.7 2273 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 2274 + '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) 2275 + transitivePeerDependencies: 2276 + - supports-color 2277 + 2278 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7)': 2279 + dependencies: 2280 + '@babel/core': 7.24.7 2281 + '@babel/helper-environment-visitor': 7.24.7 2282 + '@babel/helper-plugin-utils': 7.24.7 2283 + 2284 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)': 2285 + dependencies: 2286 + '@babel/core': 7.24.7 2287 + 2288 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': 2289 + dependencies: 2290 + '@babel/core': 7.24.7 2291 + '@babel/helper-plugin-utils': 7.24.7 2292 + 2293 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7)': 2294 + dependencies: 2295 + '@babel/core': 7.24.7 2296 + '@babel/helper-plugin-utils': 7.24.7 2297 + 2298 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': 2299 + dependencies: 2300 + '@babel/core': 7.24.7 2301 + '@babel/helper-plugin-utils': 7.24.7 2302 + 2303 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': 2304 + dependencies: 2305 + '@babel/core': 7.24.7 2306 + '@babel/helper-plugin-utils': 7.24.7 2307 + 2308 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': 2309 + dependencies: 2310 + '@babel/core': 7.24.7 2311 + '@babel/helper-plugin-utils': 7.24.7 2312 + 2313 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': 2314 + dependencies: 2315 + '@babel/core': 7.24.7 2316 + '@babel/helper-plugin-utils': 7.24.7 2317 + 2318 + '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)': 2319 + dependencies: 2320 + '@babel/core': 7.24.7 2321 + '@babel/helper-plugin-utils': 7.24.7 2322 + 2323 + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)': 2324 + dependencies: 2325 + '@babel/core': 7.24.7 2326 + '@babel/helper-plugin-utils': 7.24.7 2327 + 2328 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': 2329 + dependencies: 2330 + '@babel/core': 7.24.7 2331 + '@babel/helper-plugin-utils': 7.24.7 2332 + 2333 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': 2334 + dependencies: 2335 + '@babel/core': 7.24.7 2336 + '@babel/helper-plugin-utils': 7.24.7 2337 + 2338 + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': 2339 + dependencies: 2340 + '@babel/core': 7.24.7 2341 + '@babel/helper-plugin-utils': 7.24.7 2342 + 2343 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': 2344 + dependencies: 2345 + '@babel/core': 7.24.7 2346 + '@babel/helper-plugin-utils': 7.24.7 2347 + 2348 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': 2349 + dependencies: 2350 + '@babel/core': 7.24.7 2351 + '@babel/helper-plugin-utils': 7.24.7 2352 + 2353 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': 2354 + dependencies: 2355 + '@babel/core': 7.24.7 2356 + '@babel/helper-plugin-utils': 7.24.7 2357 + 2358 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': 2359 + dependencies: 2360 + '@babel/core': 7.24.7 2361 + '@babel/helper-plugin-utils': 7.24.7 2362 + 2363 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': 2364 + dependencies: 2365 + '@babel/core': 7.24.7 2366 + '@babel/helper-plugin-utils': 7.24.7 2367 + 2368 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': 2369 + dependencies: 2370 + '@babel/core': 7.24.7 2371 + '@babel/helper-plugin-utils': 7.24.7 2372 + 2373 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': 2374 + dependencies: 2375 + '@babel/core': 7.24.7 2376 + '@babel/helper-plugin-utils': 7.24.7 2377 + 2378 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': 2379 + dependencies: 2380 + '@babel/core': 7.24.7 2381 + '@babel/helper-plugin-utils': 7.24.7 2382 + 2383 + '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)': 2384 + dependencies: 2385 + '@babel/core': 7.24.7 2386 + '@babel/helper-plugin-utils': 7.24.7 2387 + 2388 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7)': 2389 + dependencies: 2390 + '@babel/core': 7.24.7 2391 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) 2392 + '@babel/helper-plugin-utils': 7.24.7 2393 + 2394 + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': 2395 + dependencies: 2396 + '@babel/core': 7.24.7 2397 + '@babel/helper-plugin-utils': 7.24.7 2398 + 2399 + '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)': 2400 + dependencies: 2401 + '@babel/core': 7.24.7 2402 + '@babel/helper-environment-visitor': 7.24.7 2403 + '@babel/helper-plugin-utils': 7.24.7 2404 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) 2405 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) 2406 + transitivePeerDependencies: 2407 + - supports-color 2408 + 2409 + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7)': 2410 + dependencies: 2411 + '@babel/core': 7.24.7 2412 + '@babel/helper-module-imports': 7.24.7 2413 + '@babel/helper-plugin-utils': 7.24.7 2414 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) 2415 + transitivePeerDependencies: 2416 + - supports-color 2417 + 2418 + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)': 2419 + dependencies: 2420 + '@babel/core': 7.24.7 2421 + '@babel/helper-plugin-utils': 7.24.7 2422 + 2423 + '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)': 2424 + dependencies: 2425 + '@babel/core': 7.24.7 2426 + '@babel/helper-plugin-utils': 7.24.7 2427 + 2428 + '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)': 2429 + dependencies: 2430 + '@babel/core': 7.24.7 2431 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) 2432 + '@babel/helper-plugin-utils': 7.24.7 2433 + transitivePeerDependencies: 2434 + - supports-color 2435 + 2436 + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)': 2437 + dependencies: 2438 + '@babel/core': 7.24.7 2439 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) 2440 + '@babel/helper-plugin-utils': 7.24.7 2441 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) 2442 + transitivePeerDependencies: 2443 + - supports-color 2444 + 2445 + '@babel/plugin-transform-classes@7.24.7(@babel/core@7.24.7)': 2446 + dependencies: 2447 + '@babel/core': 7.24.7 2448 + '@babel/helper-annotate-as-pure': 7.24.7 2449 + '@babel/helper-compilation-targets': 7.24.7 2450 + '@babel/helper-environment-visitor': 7.24.7 2451 + '@babel/helper-function-name': 7.24.7 2452 + '@babel/helper-plugin-utils': 7.24.7 2453 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) 2454 + '@babel/helper-split-export-declaration': 7.24.7 2455 + globals: 11.12.0 2456 + transitivePeerDependencies: 2457 + - supports-color 2458 + 2459 + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)': 2460 + dependencies: 2461 + '@babel/core': 7.24.7 2462 + '@babel/helper-plugin-utils': 7.24.7 2463 + '@babel/template': 7.24.7 2464 + 2465 + '@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.24.7)': 2466 + dependencies: 2467 + '@babel/core': 7.24.7 2468 + '@babel/helper-plugin-utils': 7.24.7 2469 + 2470 + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)': 2471 + dependencies: 2472 + '@babel/core': 7.24.7 2473 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) 2474 + '@babel/helper-plugin-utils': 7.24.7 2475 + 2476 + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)': 2477 + dependencies: 2478 + '@babel/core': 7.24.7 2479 + '@babel/helper-plugin-utils': 7.24.7 2480 + 2481 + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)': 2482 + dependencies: 2483 + '@babel/core': 7.24.7 2484 + '@babel/helper-plugin-utils': 7.24.7 2485 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) 2486 + 2487 + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)': 2488 + dependencies: 2489 + '@babel/core': 7.24.7 2490 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 2491 + '@babel/helper-plugin-utils': 7.24.7 2492 + transitivePeerDependencies: 2493 + - supports-color 2494 + 2495 + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)': 2496 + dependencies: 2497 + '@babel/core': 7.24.7 2498 + '@babel/helper-plugin-utils': 7.24.7 2499 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) 2500 + 2501 + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)': 2502 + dependencies: 2503 + '@babel/core': 7.24.7 2504 + '@babel/helper-plugin-utils': 7.24.7 2505 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 2506 + transitivePeerDependencies: 2507 + - supports-color 2508 + 2509 + '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)': 2510 + dependencies: 2511 + '@babel/core': 7.24.7 2512 + '@babel/helper-compilation-targets': 7.24.7 2513 + '@babel/helper-function-name': 7.24.7 2514 + '@babel/helper-plugin-utils': 7.24.7 2515 + 2516 + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)': 2517 + dependencies: 2518 + '@babel/core': 7.24.7 2519 + '@babel/helper-plugin-utils': 7.24.7 2520 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) 2521 + 2522 + '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)': 2523 + dependencies: 2524 + '@babel/core': 7.24.7 2525 + '@babel/helper-plugin-utils': 7.24.7 2526 + 2527 + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)': 2528 + dependencies: 2529 + '@babel/core': 7.24.7 2530 + '@babel/helper-plugin-utils': 7.24.7 2531 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) 2532 + 2533 + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)': 2534 + dependencies: 2535 + '@babel/core': 7.24.7 2536 + '@babel/helper-plugin-utils': 7.24.7 2537 + 2538 + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': 2539 + dependencies: 2540 + '@babel/core': 7.24.7 2541 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) 2542 + '@babel/helper-plugin-utils': 7.24.7 2543 + transitivePeerDependencies: 2544 + - supports-color 2545 + 2546 + '@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.7)': 2547 + dependencies: 2548 + '@babel/core': 7.24.7 2549 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) 2550 + '@babel/helper-plugin-utils': 7.24.7 2551 + '@babel/helper-simple-access': 7.24.7 2552 + transitivePeerDependencies: 2553 + - supports-color 2554 + 2555 + '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7)': 2556 + dependencies: 2557 + '@babel/core': 7.24.7 2558 + '@babel/helper-hoist-variables': 7.24.7 2559 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) 2560 + '@babel/helper-plugin-utils': 7.24.7 2561 + '@babel/helper-validator-identifier': 7.24.7 2562 + transitivePeerDependencies: 2563 + - supports-color 2564 + 2565 + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': 2566 + dependencies: 2567 + '@babel/core': 7.24.7 2568 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) 2569 + '@babel/helper-plugin-utils': 7.24.7 2570 + transitivePeerDependencies: 2571 + - supports-color 2572 + 2573 + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7)': 2574 + dependencies: 2575 + '@babel/core': 7.24.7 2576 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) 2577 + '@babel/helper-plugin-utils': 7.24.7 2578 + 2579 + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)': 2580 + dependencies: 2581 + '@babel/core': 7.24.7 2582 + '@babel/helper-plugin-utils': 7.24.7 2583 + 2584 + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)': 2585 + dependencies: 2586 + '@babel/core': 7.24.7 2587 + '@babel/helper-plugin-utils': 7.24.7 2588 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) 2589 + 2590 + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)': 2591 + dependencies: 2592 + '@babel/core': 7.24.7 2593 + '@babel/helper-plugin-utils': 7.24.7 2594 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) 2595 + 2596 + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)': 2597 + dependencies: 2598 + '@babel/core': 7.24.7 2599 + '@babel/helper-compilation-targets': 7.24.7 2600 + '@babel/helper-plugin-utils': 7.24.7 2601 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) 2602 + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) 2603 + 2604 + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)': 2605 + dependencies: 2606 + '@babel/core': 7.24.7 2607 + '@babel/helper-plugin-utils': 7.24.7 2608 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) 2609 + transitivePeerDependencies: 2610 + - supports-color 2611 + 2612 + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)': 2613 + dependencies: 2614 + '@babel/core': 7.24.7 2615 + '@babel/helper-plugin-utils': 7.24.7 2616 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) 2617 + 2618 + '@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.24.7)': 2619 + dependencies: 2620 + '@babel/core': 7.24.7 2621 + '@babel/helper-plugin-utils': 7.24.7 2622 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 2623 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) 2624 + transitivePeerDependencies: 2625 + - supports-color 2626 + 2627 + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)': 2628 + dependencies: 2629 + '@babel/core': 7.24.7 2630 + '@babel/helper-plugin-utils': 7.24.7 2631 + 2632 + '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)': 2633 + dependencies: 2634 + '@babel/core': 7.24.7 2635 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) 2636 + '@babel/helper-plugin-utils': 7.24.7 2637 + transitivePeerDependencies: 2638 + - supports-color 2639 + 2640 + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7)': 2641 + dependencies: 2642 + '@babel/core': 7.24.7 2643 + '@babel/helper-annotate-as-pure': 7.24.7 2644 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) 2645 + '@babel/helper-plugin-utils': 7.24.7 2646 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) 2647 + transitivePeerDependencies: 2648 + - supports-color 2649 + 2650 + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)': 2651 + dependencies: 2652 + '@babel/core': 7.24.7 2653 + '@babel/helper-plugin-utils': 7.24.7 2654 + 2655 + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)': 2656 + dependencies: 2657 + '@babel/core': 7.24.7 2658 + '@babel/helper-plugin-utils': 7.24.7 2659 + regenerator-transform: 0.15.2 2660 + 2661 + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)': 2662 + dependencies: 2663 + '@babel/core': 7.24.7 2664 + '@babel/helper-plugin-utils': 7.24.7 2665 + 2666 + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)': 2667 + dependencies: 2668 + '@babel/core': 7.24.7 2669 + '@babel/helper-plugin-utils': 7.24.7 2670 + 2671 + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)': 2672 + dependencies: 2673 + '@babel/core': 7.24.7 2674 + '@babel/helper-plugin-utils': 7.24.7 2675 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 2676 + transitivePeerDependencies: 2677 + - supports-color 2678 + 2679 + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)': 2680 + dependencies: 2681 + '@babel/core': 7.24.7 2682 + '@babel/helper-plugin-utils': 7.24.7 2683 + 2684 + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)': 2685 + dependencies: 2686 + '@babel/core': 7.24.7 2687 + '@babel/helper-plugin-utils': 7.24.7 2688 + 2689 + '@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.24.7)': 2690 + dependencies: 2691 + '@babel/core': 7.24.7 2692 + '@babel/helper-plugin-utils': 7.24.7 2693 + 2694 + '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7)': 2695 + dependencies: 2696 + '@babel/core': 7.24.7 2697 + '@babel/helper-annotate-as-pure': 7.24.7 2698 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) 2699 + '@babel/helper-plugin-utils': 7.24.7 2700 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) 2701 + transitivePeerDependencies: 2702 + - supports-color 2703 + 2704 + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)': 2705 + dependencies: 2706 + '@babel/core': 7.24.7 2707 + '@babel/helper-plugin-utils': 7.24.7 2708 + 2709 + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)': 2710 + dependencies: 2711 + '@babel/core': 7.24.7 2712 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) 2713 + '@babel/helper-plugin-utils': 7.24.7 2714 + 2715 + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)': 2716 + dependencies: 2717 + '@babel/core': 7.24.7 2718 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) 2719 + '@babel/helper-plugin-utils': 7.24.7 2720 + 2721 + '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)': 2722 + dependencies: 2723 + '@babel/core': 7.24.7 2724 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) 2725 + '@babel/helper-plugin-utils': 7.24.7 2726 + 2727 + '@babel/preset-env@7.24.7(@babel/core@7.24.7)': 2728 + dependencies: 2729 + '@babel/compat-data': 7.24.7 2730 + '@babel/core': 7.24.7 2731 + '@babel/helper-compilation-targets': 7.24.7 2732 + '@babel/helper-plugin-utils': 7.24.7 2733 + '@babel/helper-validator-option': 7.24.7 2734 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) 2735 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) 2736 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) 2737 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) 2738 + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) 2739 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) 2740 + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) 2741 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) 2742 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) 2743 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) 2744 + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) 2745 + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) 2746 + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) 2747 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) 2748 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) 2749 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) 2750 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) 2751 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) 2752 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) 2753 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) 2754 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) 2755 + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) 2756 + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) 2757 + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) 2758 + '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) 2759 + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) 2760 + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) 2761 + '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) 2762 + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) 2763 + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) 2764 + '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.24.7) 2765 + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) 2766 + '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.24.7) 2767 + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) 2768 + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) 2769 + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) 2770 + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) 2771 + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) 2772 + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) 2773 + '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) 2774 + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) 2775 + '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) 2776 + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) 2777 + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) 2778 + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) 2779 + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) 2780 + '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) 2781 + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) 2782 + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) 2783 + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) 2784 + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) 2785 + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) 2786 + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) 2787 + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) 2788 + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) 2789 + '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) 2790 + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) 2791 + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) 2792 + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) 2793 + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) 2794 + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) 2795 + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) 2796 + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) 2797 + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) 2798 + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) 2799 + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) 2800 + '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.24.7) 2801 + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) 2802 + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) 2803 + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) 2804 + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) 2805 + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) 2806 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) 2807 + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) 2808 + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) 2809 + core-js-compat: 3.37.1 2810 + semver: 6.3.1 2811 + transitivePeerDependencies: 2812 + - supports-color 2813 + 2814 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': 2815 + dependencies: 2816 + '@babel/core': 7.24.7 2817 + '@babel/helper-plugin-utils': 7.24.7 2818 + '@babel/types': 7.24.7 2819 + esutils: 2.0.3 2820 + 2821 + '@babel/preset-typescript@7.24.7(@babel/core@7.24.7)': 2822 + dependencies: 2823 + '@babel/core': 7.24.7 2824 + '@babel/helper-plugin-utils': 7.24.7 2825 + '@babel/helper-validator-option': 7.24.7 2826 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) 2827 + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) 2828 + '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) 2829 + transitivePeerDependencies: 2830 + - supports-color 2831 + 2832 + '@babel/regjsgen@0.8.0': {} 2833 + 2834 + '@babel/runtime@7.24.7': 2835 + dependencies: 2836 + regenerator-runtime: 0.14.1 2837 + 2838 + '@babel/template@7.24.7': 2839 + dependencies: 2840 + '@babel/code-frame': 7.24.7 2841 + '@babel/parser': 7.24.7 2842 + '@babel/types': 7.24.7 2843 + 2844 + '@babel/traverse@7.24.7': 2845 + dependencies: 2846 + '@babel/code-frame': 7.24.7 2847 + '@babel/generator': 7.24.7 2848 + '@babel/helper-environment-visitor': 7.24.7 2849 + '@babel/helper-function-name': 7.24.7 2850 + '@babel/helper-hoist-variables': 7.24.7 2851 + '@babel/helper-split-export-declaration': 7.24.7 2852 + '@babel/parser': 7.24.7 2853 + '@babel/types': 7.24.7 2854 + debug: 4.3.5 2855 + globals: 11.12.0 2856 + transitivePeerDependencies: 2857 + - supports-color 2858 + 2859 + '@babel/types@7.24.7': 2860 + dependencies: 2861 + '@babel/helper-string-parser': 7.24.7 2862 + '@babel/helper-validator-identifier': 7.24.7 2863 + to-fast-properties: 2.0.0 2864 + 2865 + '@bcoe/v8-coverage@0.2.3': {} 2866 + 2867 + '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': 2868 + dependencies: 2869 + eslint: 9.12.0 2870 + eslint-visitor-keys: 3.4.3 2871 + 2872 + '@eslint-community/regexpp@4.11.1': {} 2873 + 2874 + '@eslint/config-array@0.18.0': 2875 + dependencies: 2876 + '@eslint/object-schema': 2.1.4 2877 + debug: 4.3.5 2878 + minimatch: 3.1.2 2879 + transitivePeerDependencies: 2880 + - supports-color 2881 + 2882 + '@eslint/core@0.6.0': {} 2883 + 2884 + '@eslint/eslintrc@3.1.0': 2885 + dependencies: 2886 + ajv: 6.12.6 2887 + debug: 4.3.5 2888 + espree: 10.2.0 2889 + globals: 14.0.0 2890 + ignore: 5.3.2 2891 + import-fresh: 3.3.0 2892 + js-yaml: 4.1.0 2893 + minimatch: 3.1.2 2894 + strip-json-comments: 3.1.1 2895 + transitivePeerDependencies: 2896 + - supports-color 2897 + 2898 + '@eslint/js@9.12.0': {} 2899 + 2900 + '@eslint/object-schema@2.1.4': {} 2901 + 2902 + '@eslint/plugin-kit@0.2.0': 2903 + dependencies: 2904 + levn: 0.4.1 2905 + 2906 + '@humanfs/core@0.19.0': {} 2907 + 2908 + '@humanfs/node@0.16.5': 2909 + dependencies: 2910 + '@humanfs/core': 0.19.0 2911 + '@humanwhocodes/retry': 0.3.1 2912 + 2913 + '@humanwhocodes/module-importer@1.0.1': {} 2914 + 2915 + '@humanwhocodes/retry@0.3.1': {} 2916 + 2917 + '@istanbuljs/load-nyc-config@1.1.0': 2918 + dependencies: 2919 + camelcase: 5.3.1 2920 + find-up: 4.1.0 2921 + get-package-type: 0.1.0 2922 + js-yaml: 3.14.1 2923 + resolve-from: 5.0.0 2924 + 2925 + '@istanbuljs/schema@0.1.3': {} 2926 + 2927 + '@jest/console@29.7.0': 2928 + dependencies: 2929 + '@jest/types': 29.6.3 2930 + '@types/node': 20.14.2 2931 + chalk: 4.1.2 2932 + jest-message-util: 29.7.0 2933 + jest-util: 29.7.0 2934 + slash: 3.0.0 2935 + 2936 + '@jest/core@29.7.0': 2937 + dependencies: 2938 + '@jest/console': 29.7.0 2939 + '@jest/reporters': 29.7.0 2940 + '@jest/test-result': 29.7.0 2941 + '@jest/transform': 29.7.0 2942 + '@jest/types': 29.6.3 2943 + '@types/node': 20.14.2 2944 + ansi-escapes: 4.3.2 2945 + chalk: 4.1.2 2946 + ci-info: 3.9.0 2947 + exit: 0.1.2 2948 + graceful-fs: 4.2.11 2949 + jest-changed-files: 29.7.0 2950 + jest-config: 29.7.0(@types/node@20.14.2) 2951 + jest-haste-map: 29.7.0 2952 + jest-message-util: 29.7.0 2953 + jest-regex-util: 29.6.3 2954 + jest-resolve: 29.7.0 2955 + jest-resolve-dependencies: 29.7.0 2956 + jest-runner: 29.7.0 2957 + jest-runtime: 29.7.0 2958 + jest-snapshot: 29.7.0 2959 + jest-util: 29.7.0 2960 + jest-validate: 29.7.0 2961 + jest-watcher: 29.7.0 2962 + micromatch: 4.0.7 2963 + pretty-format: 29.7.0 2964 + slash: 3.0.0 2965 + strip-ansi: 6.0.1 2966 + transitivePeerDependencies: 2967 + - babel-plugin-macros 2968 + - supports-color 2969 + - ts-node 2970 + 2971 + '@jest/environment@29.7.0': 2972 + dependencies: 2973 + '@jest/fake-timers': 29.7.0 2974 + '@jest/types': 29.6.3 2975 + '@types/node': 20.14.2 2976 + jest-mock: 29.7.0 2977 + 2978 + '@jest/expect-utils@29.7.0': 2979 + dependencies: 2980 + jest-get-type: 29.6.3 2981 + 2982 + '@jest/expect@29.7.0': 2983 + dependencies: 2984 + expect: 29.7.0 2985 + jest-snapshot: 29.7.0 2986 + transitivePeerDependencies: 2987 + - supports-color 2988 + 2989 + '@jest/fake-timers@29.7.0': 2990 + dependencies: 2991 + '@jest/types': 29.6.3 2992 + '@sinonjs/fake-timers': 10.3.0 2993 + '@types/node': 20.14.2 2994 + jest-message-util: 29.7.0 2995 + jest-mock: 29.7.0 2996 + jest-util: 29.7.0 2997 + 2998 + '@jest/globals@29.7.0': 2999 + dependencies: 3000 + '@jest/environment': 29.7.0 3001 + '@jest/expect': 29.7.0 3002 + '@jest/types': 29.6.3 3003 + jest-mock: 29.7.0 3004 + transitivePeerDependencies: 3005 + - supports-color 3006 + 3007 + '@jest/reporters@29.7.0': 3008 + dependencies: 3009 + '@bcoe/v8-coverage': 0.2.3 3010 + '@jest/console': 29.7.0 3011 + '@jest/test-result': 29.7.0 3012 + '@jest/transform': 29.7.0 3013 + '@jest/types': 29.6.3 3014 + '@jridgewell/trace-mapping': 0.3.25 3015 + '@types/node': 20.14.2 3016 + chalk: 4.1.2 3017 + collect-v8-coverage: 1.0.2 3018 + exit: 0.1.2 3019 + glob: 7.2.3 3020 + graceful-fs: 4.2.11 3021 + istanbul-lib-coverage: 3.2.2 3022 + istanbul-lib-instrument: 6.0.2 3023 + istanbul-lib-report: 3.0.1 3024 + istanbul-lib-source-maps: 4.0.1 3025 + istanbul-reports: 3.1.7 3026 + jest-message-util: 29.7.0 3027 + jest-util: 29.7.0 3028 + jest-worker: 29.7.0 3029 + slash: 3.0.0 3030 + string-length: 4.0.2 3031 + strip-ansi: 6.0.1 3032 + v8-to-istanbul: 9.2.0 3033 + transitivePeerDependencies: 3034 + - supports-color 3035 + 3036 + '@jest/schemas@29.6.3': 3037 + dependencies: 3038 + '@sinclair/typebox': 0.27.8 3039 + 3040 + '@jest/source-map@29.6.3': 3041 + dependencies: 3042 + '@jridgewell/trace-mapping': 0.3.25 3043 + callsites: 3.1.0 3044 + graceful-fs: 4.2.11 3045 + 3046 + '@jest/test-result@29.7.0': 3047 + dependencies: 3048 + '@jest/console': 29.7.0 3049 + '@jest/types': 29.6.3 3050 + '@types/istanbul-lib-coverage': 2.0.6 3051 + collect-v8-coverage: 1.0.2 3052 + 3053 + '@jest/test-sequencer@29.7.0': 3054 + dependencies: 3055 + '@jest/test-result': 29.7.0 3056 + graceful-fs: 4.2.11 3057 + jest-haste-map: 29.7.0 3058 + slash: 3.0.0 3059 + 3060 + '@jest/transform@29.7.0': 3061 + dependencies: 3062 + '@babel/core': 7.24.7 3063 + '@jest/types': 29.6.3 3064 + '@jridgewell/trace-mapping': 0.3.25 3065 + babel-plugin-istanbul: 6.1.1 3066 + chalk: 4.1.2 3067 + convert-source-map: 2.0.0 3068 + fast-json-stable-stringify: 2.1.0 3069 + graceful-fs: 4.2.11 3070 + jest-haste-map: 29.7.0 3071 + jest-regex-util: 29.6.3 3072 + jest-util: 29.7.0 3073 + micromatch: 4.0.7 3074 + pirates: 4.0.6 3075 + slash: 3.0.0 3076 + write-file-atomic: 4.0.2 3077 + transitivePeerDependencies: 3078 + - supports-color 3079 + 3080 + '@jest/types@29.6.3': 3081 + dependencies: 3082 + '@jest/schemas': 29.6.3 3083 + '@types/istanbul-lib-coverage': 2.0.6 3084 + '@types/istanbul-reports': 3.0.4 3085 + '@types/node': 20.14.2 3086 + '@types/yargs': 17.0.32 3087 + chalk: 4.1.2 3088 + 3089 + '@jridgewell/gen-mapping@0.3.5': 3090 + dependencies: 3091 + '@jridgewell/set-array': 1.2.1 3092 + '@jridgewell/sourcemap-codec': 1.4.15 3093 + '@jridgewell/trace-mapping': 0.3.25 3094 + 3095 + '@jridgewell/resolve-uri@3.1.2': {} 3096 + 3097 + '@jridgewell/set-array@1.2.1': {} 3098 + 3099 + '@jridgewell/sourcemap-codec@1.4.15': {} 3100 + 3101 + '@jridgewell/trace-mapping@0.3.25': 3102 + dependencies: 3103 + '@jridgewell/resolve-uri': 3.1.2 3104 + '@jridgewell/sourcemap-codec': 1.4.15 3105 + 3106 + '@nodelib/fs.scandir@2.1.5': 3107 + dependencies: 3108 + '@nodelib/fs.stat': 2.0.5 3109 + run-parallel: 1.2.0 3110 + 3111 + '@nodelib/fs.stat@2.0.5': {} 3112 + 3113 + '@nodelib/fs.walk@1.2.8': 3114 + dependencies: 3115 + '@nodelib/fs.scandir': 2.1.5 3116 + fastq: 1.17.1 3117 + 3118 + '@sinclair/typebox@0.27.8': {} 3119 + 3120 + '@sinonjs/commons@3.0.1': 3121 + dependencies: 3122 + type-detect: 4.0.8 3123 + 3124 + '@sinonjs/fake-timers@10.3.0': 3125 + dependencies: 3126 + '@sinonjs/commons': 3.0.1 3127 + 3128 + '@tsconfig/recommended@1.0.6': {} 3129 + 3130 + '@types/babel__core@7.20.5': 3131 + dependencies: 3132 + '@babel/parser': 7.24.7 3133 + '@babel/types': 7.24.7 3134 + '@types/babel__generator': 7.6.8 3135 + '@types/babel__template': 7.4.4 3136 + '@types/babel__traverse': 7.20.6 3137 + 3138 + '@types/babel__generator@7.6.8': 3139 + dependencies: 3140 + '@babel/types': 7.24.7 3141 + 3142 + '@types/babel__template@7.4.4': 3143 + dependencies: 3144 + '@babel/parser': 7.24.7 3145 + '@babel/types': 7.24.7 3146 + 3147 + '@types/babel__traverse@7.20.6': 3148 + dependencies: 3149 + '@babel/types': 7.24.7 3150 + 3151 + '@types/estree@1.0.6': {} 3152 + 3153 + '@types/graceful-fs@4.1.9': 3154 + dependencies: 3155 + '@types/node': 20.14.2 3156 + 3157 + '@types/istanbul-lib-coverage@2.0.6': {} 3158 + 3159 + '@types/istanbul-lib-report@3.0.3': 3160 + dependencies: 3161 + '@types/istanbul-lib-coverage': 2.0.6 3162 + 3163 + '@types/istanbul-reports@3.0.4': 3164 + dependencies: 3165 + '@types/istanbul-lib-report': 3.0.3 3166 + 3167 + '@types/jest@29.5.12': 3168 + dependencies: 3169 + expect: 29.7.0 3170 + pretty-format: 29.7.0 3171 + 3172 + '@types/json-schema@7.0.15': {} 3173 + 3174 + '@types/node@20.14.2': 3175 + dependencies: 3176 + undici-types: 5.26.5 3177 + 3178 + '@types/stack-utils@2.0.3': {} 3179 + 3180 + '@types/yargs-parser@21.0.3': {} 3181 + 3182 + '@types/yargs@17.0.32': 3183 + dependencies: 3184 + '@types/yargs-parser': 21.0.3 3185 + 3186 + '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.4.5))(eslint@9.12.0)(typescript@5.4.5)': 3187 + dependencies: 3188 + '@eslint-community/regexpp': 4.11.1 3189 + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.4.5) 3190 + '@typescript-eslint/scope-manager': 8.8.1 3191 + '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0)(typescript@5.4.5) 3192 + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.4.5) 3193 + '@typescript-eslint/visitor-keys': 8.8.1 3194 + eslint: 9.12.0 3195 + graphemer: 1.4.0 3196 + ignore: 5.3.2 3197 + natural-compare: 1.4.0 3198 + ts-api-utils: 1.3.0(typescript@5.4.5) 3199 + optionalDependencies: 3200 + typescript: 5.4.5 3201 + transitivePeerDependencies: 3202 + - supports-color 3203 + 3204 + '@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.4.5)': 3205 + dependencies: 3206 + '@typescript-eslint/scope-manager': 8.8.1 3207 + '@typescript-eslint/types': 8.8.1 3208 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) 3209 + '@typescript-eslint/visitor-keys': 8.8.1 3210 + debug: 4.3.5 3211 + eslint: 9.12.0 3212 + optionalDependencies: 3213 + typescript: 5.4.5 3214 + transitivePeerDependencies: 3215 + - supports-color 3216 + 3217 + '@typescript-eslint/scope-manager@8.8.1': 3218 + dependencies: 3219 + '@typescript-eslint/types': 8.8.1 3220 + '@typescript-eslint/visitor-keys': 8.8.1 3221 + 3222 + '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0)(typescript@5.4.5)': 3223 + dependencies: 3224 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) 3225 + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.4.5) 3226 + debug: 4.3.5 3227 + ts-api-utils: 1.3.0(typescript@5.4.5) 3228 + optionalDependencies: 3229 + typescript: 5.4.5 3230 + transitivePeerDependencies: 3231 + - eslint 3232 + - supports-color 3233 + 3234 + '@typescript-eslint/types@8.8.1': {} 3235 + 3236 + '@typescript-eslint/typescript-estree@8.8.1(typescript@5.4.5)': 3237 + dependencies: 3238 + '@typescript-eslint/types': 8.8.1 3239 + '@typescript-eslint/visitor-keys': 8.8.1 3240 + debug: 4.3.5 3241 + fast-glob: 3.3.2 3242 + is-glob: 4.0.3 3243 + minimatch: 9.0.5 3244 + semver: 7.6.2 3245 + ts-api-utils: 1.3.0(typescript@5.4.5) 3246 + optionalDependencies: 3247 + typescript: 5.4.5 3248 + transitivePeerDependencies: 3249 + - supports-color 3250 + 3251 + '@typescript-eslint/utils@8.8.1(eslint@9.12.0)(typescript@5.4.5)': 3252 + dependencies: 3253 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) 3254 + '@typescript-eslint/scope-manager': 8.8.1 3255 + '@typescript-eslint/types': 8.8.1 3256 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) 3257 + eslint: 9.12.0 3258 + transitivePeerDependencies: 3259 + - supports-color 3260 + - typescript 3261 + 3262 + '@typescript-eslint/visitor-keys@8.8.1': 3263 + dependencies: 3264 + '@typescript-eslint/types': 8.8.1 3265 + eslint-visitor-keys: 3.4.3 3266 + 3267 + acorn-jsx@5.3.2(acorn@8.12.1): 3268 + dependencies: 3269 + acorn: 8.12.1 3270 + 3271 + acorn@8.12.1: {} 3272 + 3273 + ajv@6.12.6: 3274 + dependencies: 3275 + fast-deep-equal: 3.1.3 3276 + fast-json-stable-stringify: 2.1.0 3277 + json-schema-traverse: 0.4.1 3278 + uri-js: 4.4.1 3279 + 3280 + ansi-escapes@4.3.2: 3281 + dependencies: 3282 + type-fest: 0.21.3 3283 + 3284 + ansi-regex@5.0.1: {} 3285 + 3286 + ansi-styles@3.2.1: 3287 + dependencies: 3288 + color-convert: 1.9.3 3289 + 3290 + ansi-styles@4.3.0: 3291 + dependencies: 3292 + color-convert: 2.0.1 3293 + 3294 + ansi-styles@5.2.0: {} 3295 + 3296 + anymatch@3.1.3: 3297 + dependencies: 3298 + normalize-path: 3.0.0 3299 + picomatch: 2.3.1 3300 + 3301 + argparse@1.0.10: 3302 + dependencies: 3303 + sprintf-js: 1.0.3 3304 + 3305 + argparse@2.0.1: {} 3306 + 3307 + babel-jest@29.7.0(@babel/core@7.24.7): 3308 + dependencies: 3309 + '@babel/core': 7.24.7 3310 + '@jest/transform': 29.7.0 3311 + '@types/babel__core': 7.20.5 3312 + babel-plugin-istanbul: 6.1.1 3313 + babel-preset-jest: 29.6.3(@babel/core@7.24.7) 3314 + chalk: 4.1.2 3315 + graceful-fs: 4.2.11 3316 + slash: 3.0.0 3317 + transitivePeerDependencies: 3318 + - supports-color 3319 + 3320 + babel-plugin-istanbul@6.1.1: 3321 + dependencies: 3322 + '@babel/helper-plugin-utils': 7.24.7 3323 + '@istanbuljs/load-nyc-config': 1.1.0 3324 + '@istanbuljs/schema': 0.1.3 3325 + istanbul-lib-instrument: 5.2.1 3326 + test-exclude: 6.0.0 3327 + transitivePeerDependencies: 3328 + - supports-color 3329 + 3330 + babel-plugin-jest-hoist@29.6.3: 3331 + dependencies: 3332 + '@babel/template': 7.24.7 3333 + '@babel/types': 7.24.7 3334 + '@types/babel__core': 7.20.5 3335 + '@types/babel__traverse': 7.20.6 3336 + 3337 + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): 3338 + dependencies: 3339 + '@babel/compat-data': 7.24.7 3340 + '@babel/core': 7.24.7 3341 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) 3342 + semver: 6.3.1 3343 + transitivePeerDependencies: 3344 + - supports-color 3345 + 3346 + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): 3347 + dependencies: 3348 + '@babel/core': 7.24.7 3349 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) 3350 + core-js-compat: 3.37.1 3351 + transitivePeerDependencies: 3352 + - supports-color 3353 + 3354 + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): 3355 + dependencies: 3356 + '@babel/core': 7.24.7 3357 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) 3358 + transitivePeerDependencies: 3359 + - supports-color 3360 + 3361 + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.7): 3362 + dependencies: 3363 + '@babel/core': 7.24.7 3364 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) 3365 + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.7) 3366 + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) 3367 + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) 3368 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) 3369 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) 3370 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) 3371 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) 3372 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) 3373 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) 3374 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) 3375 + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) 3376 + 3377 + babel-preset-jest@29.6.3(@babel/core@7.24.7): 3378 + dependencies: 3379 + '@babel/core': 7.24.7 3380 + babel-plugin-jest-hoist: 29.6.3 3381 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) 3382 + 3383 + balanced-match@1.0.2: {} 3384 + 3385 + brace-expansion@1.1.11: 3386 + dependencies: 3387 + balanced-match: 1.0.2 3388 + concat-map: 0.0.1 3389 + 3390 + brace-expansion@2.0.1: 3391 + dependencies: 3392 + balanced-match: 1.0.2 3393 + 3394 + braces@3.0.3: 3395 + dependencies: 3396 + fill-range: 7.1.1 3397 + 3398 + browserslist@4.23.0: 3399 + dependencies: 3400 + caniuse-lite: 1.0.30001629 3401 + electron-to-chromium: 1.4.795 3402 + node-releases: 2.0.14 3403 + update-browserslist-db: 1.0.16(browserslist@4.23.0) 3404 + 3405 + bser@2.1.1: 3406 + dependencies: 3407 + node-int64: 0.4.0 3408 + 3409 + buffer-from@1.1.2: {} 3410 + 3411 + callsites@3.1.0: {} 3412 + 3413 + camelcase@5.3.1: {} 3414 + 3415 + camelcase@6.3.0: {} 3416 + 3417 + caniuse-lite@1.0.30001629: {} 3418 + 3419 + chalk@2.4.2: 3420 + dependencies: 3421 + ansi-styles: 3.2.1 3422 + escape-string-regexp: 1.0.5 3423 + supports-color: 5.5.0 3424 + 3425 + chalk@4.1.2: 3426 + dependencies: 3427 + ansi-styles: 4.3.0 3428 + supports-color: 7.2.0 3429 + 3430 + char-regex@1.0.2: {} 3431 + 3432 + ci-info@3.9.0: {} 3433 + 3434 + cjs-module-lexer@1.3.1: {} 3435 + 3436 + cliui@8.0.1: 3437 + dependencies: 3438 + string-width: 4.2.3 3439 + strip-ansi: 6.0.1 3440 + wrap-ansi: 7.0.0 3441 + 3442 + co@4.6.0: {} 3443 + 3444 + collect-v8-coverage@1.0.2: {} 3445 + 3446 + color-convert@1.9.3: 3447 + dependencies: 3448 + color-name: 1.1.3 3449 + 3450 + color-convert@2.0.1: 3451 + dependencies: 3452 + color-name: 1.1.4 3453 + 3454 + color-name@1.1.3: {} 3455 + 3456 + color-name@1.1.4: {} 3457 + 3458 + concat-map@0.0.1: {} 3459 + 3460 + convert-source-map@2.0.0: {} 3461 + 3462 + core-js-compat@3.37.1: 3463 + dependencies: 3464 + browserslist: 4.23.0 3465 + 3466 + create-jest@29.7.0(@types/node@20.14.2): 3467 + dependencies: 3468 + '@jest/types': 29.6.3 3469 + chalk: 4.1.2 3470 + exit: 0.1.2 3471 + graceful-fs: 4.2.11 3472 + jest-config: 29.7.0(@types/node@20.14.2) 3473 + jest-util: 29.7.0 3474 + prompts: 2.4.2 3475 + transitivePeerDependencies: 3476 + - '@types/node' 3477 + - babel-plugin-macros 3478 + - supports-color 3479 + - ts-node 3480 + 3481 + cross-spawn@7.0.3: 3482 + dependencies: 3483 + path-key: 3.1.1 3484 + shebang-command: 2.0.0 3485 + which: 2.0.2 3486 + 3487 + debug@4.3.5: 3488 + dependencies: 3489 + ms: 2.1.2 3490 + 3491 + dedent@1.5.3: {} 3492 + 3493 + deep-is@0.1.4: {} 3494 + 3495 + deepmerge@4.3.1: {} 3496 + 3497 + detect-newline@3.1.0: {} 3498 + 3499 + diff-sequences@29.6.3: {} 3500 + 3501 + electron-to-chromium@1.4.795: {} 3502 + 3503 + emittery@0.13.1: {} 3504 + 3505 + emoji-regex@8.0.0: {} 3506 + 3507 + error-ex@1.3.2: 3508 + dependencies: 3509 + is-arrayish: 0.2.1 3510 + 3511 + escalade@3.1.2: {} 3512 + 3513 + escape-string-regexp@1.0.5: {} 3514 + 3515 + escape-string-regexp@2.0.0: {} 3516 + 3517 + escape-string-regexp@4.0.0: {} 3518 + 3519 + escape-string-regexp@5.0.0: {} 3520 + 3521 + eslint-scope@8.1.0: 3522 + dependencies: 3523 + esrecurse: 4.3.0 3524 + estraverse: 5.3.0 3525 + 3526 + eslint-visitor-keys@3.4.3: {} 3527 + 3528 + eslint-visitor-keys@4.1.0: {} 3529 + 3530 + eslint@9.12.0: 3531 + dependencies: 3532 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) 3533 + '@eslint-community/regexpp': 4.11.1 3534 + '@eslint/config-array': 0.18.0 3535 + '@eslint/core': 0.6.0 3536 + '@eslint/eslintrc': 3.1.0 3537 + '@eslint/js': 9.12.0 3538 + '@eslint/plugin-kit': 0.2.0 3539 + '@humanfs/node': 0.16.5 3540 + '@humanwhocodes/module-importer': 1.0.1 3541 + '@humanwhocodes/retry': 0.3.1 3542 + '@types/estree': 1.0.6 3543 + '@types/json-schema': 7.0.15 3544 + ajv: 6.12.6 3545 + chalk: 4.1.2 3546 + cross-spawn: 7.0.3 3547 + debug: 4.3.5 3548 + escape-string-regexp: 4.0.0 3549 + eslint-scope: 8.1.0 3550 + eslint-visitor-keys: 4.1.0 3551 + espree: 10.2.0 3552 + esquery: 1.6.0 3553 + esutils: 2.0.3 3554 + fast-deep-equal: 3.1.3 3555 + file-entry-cache: 8.0.0 3556 + find-up: 5.0.0 3557 + glob-parent: 6.0.2 3558 + ignore: 5.3.2 3559 + imurmurhash: 0.1.4 3560 + is-glob: 4.0.3 3561 + json-stable-stringify-without-jsonify: 1.0.1 3562 + lodash.merge: 4.6.2 3563 + minimatch: 3.1.2 3564 + natural-compare: 1.4.0 3565 + optionator: 0.9.4 3566 + text-table: 0.2.0 3567 + transitivePeerDependencies: 3568 + - supports-color 3569 + 3570 + espree@10.2.0: 3571 + dependencies: 3572 + acorn: 8.12.1 3573 + acorn-jsx: 5.3.2(acorn@8.12.1) 3574 + eslint-visitor-keys: 4.1.0 3575 + 3576 + esprima@4.0.1: {} 3577 + 3578 + esquery@1.6.0: 3579 + dependencies: 3580 + estraverse: 5.3.0 3581 + 3582 + esrecurse@4.3.0: 3583 + dependencies: 3584 + estraverse: 5.3.0 3585 + 3586 + estraverse@5.3.0: {} 3587 + 3588 + esutils@2.0.3: {} 3589 + 3590 + execa@5.1.1: 3591 + dependencies: 3592 + cross-spawn: 7.0.3 3593 + get-stream: 6.0.1 3594 + human-signals: 2.1.0 3595 + is-stream: 2.0.1 3596 + merge-stream: 2.0.0 3597 + npm-run-path: 4.0.1 3598 + onetime: 5.1.2 3599 + signal-exit: 3.0.7 3600 + strip-final-newline: 2.0.0 3601 + 3602 + exit@0.1.2: {} 3603 + 3604 + expect@29.7.0: 3605 + dependencies: 3606 + '@jest/expect-utils': 29.7.0 3607 + jest-get-type: 29.6.3 3608 + jest-matcher-utils: 29.7.0 3609 + jest-message-util: 29.7.0 3610 + jest-util: 29.7.0 3611 + 3612 + fast-deep-equal@3.1.3: {} 3613 + 3614 + fast-glob@3.3.2: 3615 + dependencies: 3616 + '@nodelib/fs.stat': 2.0.5 3617 + '@nodelib/fs.walk': 1.2.8 3618 + glob-parent: 5.1.2 3619 + merge2: 1.4.1 3620 + micromatch: 4.0.7 3621 + 3622 + fast-json-stable-stringify@2.1.0: {} 3623 + 3624 + fast-levenshtein@2.0.6: {} 3625 + 3626 + fastq@1.17.1: 3627 + dependencies: 3628 + reusify: 1.0.4 3629 + 3630 + fb-watchman@2.0.2: 3631 + dependencies: 3632 + bser: 2.1.1 3633 + 3634 + file-entry-cache@8.0.0: 3635 + dependencies: 3636 + flat-cache: 4.0.1 3637 + 3638 + fill-range@7.1.1: 3639 + dependencies: 3640 + to-regex-range: 5.0.1 3641 + 3642 + find-up@4.1.0: 3643 + dependencies: 3644 + locate-path: 5.0.0 3645 + path-exists: 4.0.0 3646 + 3647 + find-up@5.0.0: 3648 + dependencies: 3649 + locate-path: 6.0.0 3650 + path-exists: 4.0.0 3651 + 3652 + flat-cache@4.0.1: 3653 + dependencies: 3654 + flatted: 3.3.1 3655 + keyv: 4.5.4 3656 + 3657 + flatted@3.3.1: {} 3658 + 3659 + fs.realpath@1.0.0: {} 3660 + 3661 + fsevents@2.3.3: 3662 + optional: true 3663 + 3664 + function-bind@1.1.2: {} 3665 + 3666 + gensync@1.0.0-beta.2: {} 3667 + 3668 + get-caller-file@2.0.5: {} 3669 + 3670 + get-package-type@0.1.0: {} 3671 + 3672 + get-stream@6.0.1: {} 3673 + 3674 + glob-parent@5.1.2: 3675 + dependencies: 3676 + is-glob: 4.0.3 3677 + 3678 + glob-parent@6.0.2: 3679 + dependencies: 3680 + is-glob: 4.0.3 3681 + 3682 + glob@7.2.3: 3683 + dependencies: 3684 + fs.realpath: 1.0.0 3685 + inflight: 1.0.6 3686 + inherits: 2.0.4 3687 + minimatch: 3.1.2 3688 + once: 1.4.0 3689 + path-is-absolute: 1.0.1 3690 + 3691 + globals@11.12.0: {} 3692 + 3693 + globals@14.0.0: {} 3694 + 3695 + graceful-fs@4.2.11: {} 3696 + 3697 + graphemer@1.4.0: {} 3698 + 3699 + has-flag@3.0.0: {} 3700 + 3701 + has-flag@4.0.0: {} 3702 + 3703 + hasown@2.0.2: 3704 + dependencies: 3705 + function-bind: 1.1.2 3706 + 3707 + html-escaper@2.0.2: {} 3708 + 3709 + human-signals@2.1.0: {} 3710 + 3711 + ignore@5.3.2: {} 3712 + 3713 + import-fresh@3.3.0: 3714 + dependencies: 3715 + parent-module: 1.0.1 3716 + resolve-from: 4.0.0 3717 + 3718 + import-local@3.1.0: 3719 + dependencies: 3720 + pkg-dir: 4.2.0 3721 + resolve-cwd: 3.0.0 3722 + 3723 + imurmurhash@0.1.4: {} 3724 + 3725 + inflight@1.0.6: 3726 + dependencies: 3727 + once: 1.4.0 3728 + wrappy: 1.0.2 3729 + 3730 + inherits@2.0.4: {} 3731 + 3732 + is-arrayish@0.2.1: {} 3733 + 3734 + is-core-module@2.13.1: 3735 + dependencies: 3736 + hasown: 2.0.2 3737 + 3738 + is-extglob@2.1.1: {} 3739 + 3740 + is-fullwidth-code-point@3.0.0: {} 3741 + 3742 + is-generator-fn@2.1.0: {} 3743 + 3744 + is-glob@4.0.3: 3745 + dependencies: 3746 + is-extglob: 2.1.1 3747 + 3748 + is-number@7.0.0: {} 3749 + 3750 + is-stream@2.0.1: {} 3751 + 3752 + isexe@2.0.0: {} 3753 + 3754 + istanbul-lib-coverage@3.2.2: {} 3755 + 3756 + istanbul-lib-instrument@5.2.1: 3757 + dependencies: 3758 + '@babel/core': 7.24.7 3759 + '@babel/parser': 7.24.7 3760 + '@istanbuljs/schema': 0.1.3 3761 + istanbul-lib-coverage: 3.2.2 3762 + semver: 6.3.1 3763 + transitivePeerDependencies: 3764 + - supports-color 3765 + 3766 + istanbul-lib-instrument@6.0.2: 3767 + dependencies: 3768 + '@babel/core': 7.24.7 3769 + '@babel/parser': 7.24.7 3770 + '@istanbuljs/schema': 0.1.3 3771 + istanbul-lib-coverage: 3.2.2 3772 + semver: 7.6.2 3773 + transitivePeerDependencies: 3774 + - supports-color 3775 + 3776 + istanbul-lib-report@3.0.1: 3777 + dependencies: 3778 + istanbul-lib-coverage: 3.2.2 3779 + make-dir: 4.0.0 3780 + supports-color: 7.2.0 3781 + 3782 + istanbul-lib-source-maps@4.0.1: 3783 + dependencies: 3784 + debug: 4.3.5 3785 + istanbul-lib-coverage: 3.2.2 3786 + source-map: 0.6.1 3787 + transitivePeerDependencies: 3788 + - supports-color 3789 + 3790 + istanbul-reports@3.1.7: 3791 + dependencies: 3792 + html-escaper: 2.0.2 3793 + istanbul-lib-report: 3.0.1 3794 + 3795 + jest-changed-files@29.7.0: 3796 + dependencies: 3797 + execa: 5.1.1 3798 + jest-util: 29.7.0 3799 + p-limit: 3.1.0 3800 + 3801 + jest-circus@29.7.0: 3802 + dependencies: 3803 + '@jest/environment': 29.7.0 3804 + '@jest/expect': 29.7.0 3805 + '@jest/test-result': 29.7.0 3806 + '@jest/types': 29.6.3 3807 + '@types/node': 20.14.2 3808 + chalk: 4.1.2 3809 + co: 4.6.0 3810 + dedent: 1.5.3 3811 + is-generator-fn: 2.1.0 3812 + jest-each: 29.7.0 3813 + jest-matcher-utils: 29.7.0 3814 + jest-message-util: 29.7.0 3815 + jest-runtime: 29.7.0 3816 + jest-snapshot: 29.7.0 3817 + jest-util: 29.7.0 3818 + p-limit: 3.1.0 3819 + pretty-format: 29.7.0 3820 + pure-rand: 6.1.0 3821 + slash: 3.0.0 3822 + stack-utils: 2.0.6 3823 + transitivePeerDependencies: 3824 + - babel-plugin-macros 3825 + - supports-color 3826 + 3827 + jest-cli@29.7.0(@types/node@20.14.2): 3828 + dependencies: 3829 + '@jest/core': 29.7.0 3830 + '@jest/test-result': 29.7.0 3831 + '@jest/types': 29.6.3 3832 + chalk: 4.1.2 3833 + create-jest: 29.7.0(@types/node@20.14.2) 3834 + exit: 0.1.2 3835 + import-local: 3.1.0 3836 + jest-config: 29.7.0(@types/node@20.14.2) 3837 + jest-util: 29.7.0 3838 + jest-validate: 29.7.0 3839 + yargs: 17.7.2 3840 + transitivePeerDependencies: 3841 + - '@types/node' 3842 + - babel-plugin-macros 3843 + - supports-color 3844 + - ts-node 3845 + 3846 + jest-config@29.7.0(@types/node@20.14.2): 3847 + dependencies: 3848 + '@babel/core': 7.24.7 3849 + '@jest/test-sequencer': 29.7.0 3850 + '@jest/types': 29.6.3 3851 + babel-jest: 29.7.0(@babel/core@7.24.7) 3852 + chalk: 4.1.2 3853 + ci-info: 3.9.0 3854 + deepmerge: 4.3.1 3855 + glob: 7.2.3 3856 + graceful-fs: 4.2.11 3857 + jest-circus: 29.7.0 3858 + jest-environment-node: 29.7.0 3859 + jest-get-type: 29.6.3 3860 + jest-regex-util: 29.6.3 3861 + jest-resolve: 29.7.0 3862 + jest-runner: 29.7.0 3863 + jest-util: 29.7.0 3864 + jest-validate: 29.7.0 3865 + micromatch: 4.0.7 3866 + parse-json: 5.2.0 3867 + pretty-format: 29.7.0 3868 + slash: 3.0.0 3869 + strip-json-comments: 3.1.1 3870 + optionalDependencies: 3871 + '@types/node': 20.14.2 3872 + transitivePeerDependencies: 3873 + - babel-plugin-macros 3874 + - supports-color 3875 + 3876 + jest-diff@29.7.0: 3877 + dependencies: 3878 + chalk: 4.1.2 3879 + diff-sequences: 29.6.3 3880 + jest-get-type: 29.6.3 3881 + pretty-format: 29.7.0 3882 + 3883 + jest-docblock@29.7.0: 3884 + dependencies: 3885 + detect-newline: 3.1.0 3886 + 3887 + jest-each@29.7.0: 3888 + dependencies: 3889 + '@jest/types': 29.6.3 3890 + chalk: 4.1.2 3891 + jest-get-type: 29.6.3 3892 + jest-util: 29.7.0 3893 + pretty-format: 29.7.0 3894 + 3895 + jest-environment-node@29.7.0: 3896 + dependencies: 3897 + '@jest/environment': 29.7.0 3898 + '@jest/fake-timers': 29.7.0 3899 + '@jest/types': 29.6.3 3900 + '@types/node': 20.14.2 3901 + jest-mock: 29.7.0 3902 + jest-util: 29.7.0 3903 + 3904 + jest-get-type@29.6.3: {} 3905 + 3906 + jest-haste-map@29.7.0: 3907 + dependencies: 3908 + '@jest/types': 29.6.3 3909 + '@types/graceful-fs': 4.1.9 3910 + '@types/node': 20.14.2 3911 + anymatch: 3.1.3 3912 + fb-watchman: 2.0.2 3913 + graceful-fs: 4.2.11 3914 + jest-regex-util: 29.6.3 3915 + jest-util: 29.7.0 3916 + jest-worker: 29.7.0 3917 + micromatch: 4.0.7 3918 + walker: 1.0.8 3919 + optionalDependencies: 3920 + fsevents: 2.3.3 3921 + 3922 + jest-leak-detector@29.7.0: 3923 + dependencies: 3924 + jest-get-type: 29.6.3 3925 + pretty-format: 29.7.0 3926 + 3927 + jest-matcher-utils@29.7.0: 3928 + dependencies: 3929 + chalk: 4.1.2 3930 + jest-diff: 29.7.0 3931 + jest-get-type: 29.6.3 3932 + pretty-format: 29.7.0 3933 + 3934 + jest-message-util@29.7.0: 3935 + dependencies: 3936 + '@babel/code-frame': 7.24.7 3937 + '@jest/types': 29.6.3 3938 + '@types/stack-utils': 2.0.3 3939 + chalk: 4.1.2 3940 + graceful-fs: 4.2.11 3941 + micromatch: 4.0.7 3942 + pretty-format: 29.7.0 3943 + slash: 3.0.0 3944 + stack-utils: 2.0.6 3945 + 3946 + jest-mock@29.7.0: 3947 + dependencies: 3948 + '@jest/types': 29.6.3 3949 + '@types/node': 20.14.2 3950 + jest-util: 29.7.0 3951 + 3952 + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): 3953 + optionalDependencies: 3954 + jest-resolve: 29.7.0 3955 + 3956 + jest-regex-util@29.6.3: {} 3957 + 3958 + jest-resolve-dependencies@29.7.0: 3959 + dependencies: 3960 + jest-regex-util: 29.6.3 3961 + jest-snapshot: 29.7.0 3962 + transitivePeerDependencies: 3963 + - supports-color 3964 + 3965 + jest-resolve@29.7.0: 3966 + dependencies: 3967 + chalk: 4.1.2 3968 + graceful-fs: 4.2.11 3969 + jest-haste-map: 29.7.0 3970 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) 3971 + jest-util: 29.7.0 3972 + jest-validate: 29.7.0 3973 + resolve: 1.22.8 3974 + resolve.exports: 2.0.2 3975 + slash: 3.0.0 3976 + 3977 + jest-runner@29.7.0: 3978 + dependencies: 3979 + '@jest/console': 29.7.0 3980 + '@jest/environment': 29.7.0 3981 + '@jest/test-result': 29.7.0 3982 + '@jest/transform': 29.7.0 3983 + '@jest/types': 29.6.3 3984 + '@types/node': 20.14.2 3985 + chalk: 4.1.2 3986 + emittery: 0.13.1 3987 + graceful-fs: 4.2.11 3988 + jest-docblock: 29.7.0 3989 + jest-environment-node: 29.7.0 3990 + jest-haste-map: 29.7.0 3991 + jest-leak-detector: 29.7.0 3992 + jest-message-util: 29.7.0 3993 + jest-resolve: 29.7.0 3994 + jest-runtime: 29.7.0 3995 + jest-util: 29.7.0 3996 + jest-watcher: 29.7.0 3997 + jest-worker: 29.7.0 3998 + p-limit: 3.1.0 3999 + source-map-support: 0.5.13 4000 + transitivePeerDependencies: 4001 + - supports-color 4002 + 4003 + jest-runtime@29.7.0: 4004 + dependencies: 4005 + '@jest/environment': 29.7.0 4006 + '@jest/fake-timers': 29.7.0 4007 + '@jest/globals': 29.7.0 4008 + '@jest/source-map': 29.6.3 4009 + '@jest/test-result': 29.7.0 4010 + '@jest/transform': 29.7.0 4011 + '@jest/types': 29.6.3 4012 + '@types/node': 20.14.2 4013 + chalk: 4.1.2 4014 + cjs-module-lexer: 1.3.1 4015 + collect-v8-coverage: 1.0.2 4016 + glob: 7.2.3 4017 + graceful-fs: 4.2.11 4018 + jest-haste-map: 29.7.0 4019 + jest-message-util: 29.7.0 4020 + jest-mock: 29.7.0 4021 + jest-regex-util: 29.6.3 4022 + jest-resolve: 29.7.0 4023 + jest-snapshot: 29.7.0 4024 + jest-util: 29.7.0 4025 + slash: 3.0.0 4026 + strip-bom: 4.0.0 4027 + transitivePeerDependencies: 4028 + - supports-color 4029 + 4030 + jest-snapshot@29.7.0: 4031 + dependencies: 4032 + '@babel/core': 7.24.7 4033 + '@babel/generator': 7.24.7 4034 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) 4035 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) 4036 + '@babel/types': 7.24.7 4037 + '@jest/expect-utils': 29.7.0 4038 + '@jest/transform': 29.7.0 4039 + '@jest/types': 29.6.3 4040 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) 4041 + chalk: 4.1.2 4042 + expect: 29.7.0 4043 + graceful-fs: 4.2.11 4044 + jest-diff: 29.7.0 4045 + jest-get-type: 29.6.3 4046 + jest-matcher-utils: 29.7.0 4047 + jest-message-util: 29.7.0 4048 + jest-util: 29.7.0 4049 + natural-compare: 1.4.0 4050 + pretty-format: 29.7.0 4051 + semver: 7.6.2 4052 + transitivePeerDependencies: 4053 + - supports-color 4054 + 4055 + jest-util@29.7.0: 4056 + dependencies: 4057 + '@jest/types': 29.6.3 4058 + '@types/node': 20.14.2 4059 + chalk: 4.1.2 4060 + ci-info: 3.9.0 4061 + graceful-fs: 4.2.11 4062 + picomatch: 2.3.1 4063 + 4064 + jest-validate@29.7.0: 4065 + dependencies: 4066 + '@jest/types': 29.6.3 4067 + camelcase: 6.3.0 4068 + chalk: 4.1.2 4069 + jest-get-type: 29.6.3 4070 + leven: 3.1.0 4071 + pretty-format: 29.7.0 4072 + 4073 + jest-watcher@29.7.0: 4074 + dependencies: 4075 + '@jest/test-result': 29.7.0 4076 + '@jest/types': 29.6.3 4077 + '@types/node': 20.14.2 4078 + ansi-escapes: 4.3.2 4079 + chalk: 4.1.2 4080 + emittery: 0.13.1 4081 + jest-util: 29.7.0 4082 + string-length: 4.0.2 4083 + 4084 + jest-worker@29.7.0: 4085 + dependencies: 4086 + '@types/node': 20.14.2 4087 + jest-util: 29.7.0 4088 + merge-stream: 2.0.0 4089 + supports-color: 8.1.1 4090 + 4091 + jest@29.7.0(@types/node@20.14.2): 4092 + dependencies: 4093 + '@jest/core': 29.7.0 4094 + '@jest/types': 29.6.3 4095 + import-local: 3.1.0 4096 + jest-cli: 29.7.0(@types/node@20.14.2) 4097 + transitivePeerDependencies: 4098 + - '@types/node' 4099 + - babel-plugin-macros 4100 + - supports-color 4101 + - ts-node 4102 + 4103 + js-tokens@4.0.0: {} 4104 + 4105 + js-yaml@3.14.1: 4106 + dependencies: 4107 + argparse: 1.0.10 4108 + esprima: 4.0.1 4109 + 4110 + js-yaml@4.1.0: 4111 + dependencies: 4112 + argparse: 2.0.1 4113 + 4114 + jsesc@0.5.0: {} 4115 + 4116 + jsesc@2.5.2: {} 4117 + 4118 + json-buffer@3.0.1: {} 4119 + 4120 + json-parse-even-better-errors@2.3.1: {} 4121 + 4122 + json-schema-traverse@0.4.1: {} 4123 + 4124 + json-stable-stringify-without-jsonify@1.0.1: {} 4125 + 4126 + json5@2.2.3: {} 4127 + 4128 + keyv@4.5.4: 4129 + dependencies: 4130 + json-buffer: 3.0.1 4131 + 4132 + kleur@3.0.3: {} 4133 + 4134 + leven@3.1.0: {} 4135 + 4136 + levn@0.4.1: 4137 + dependencies: 4138 + prelude-ls: 1.2.1 4139 + type-check: 0.4.0 4140 + 4141 + lines-and-columns@1.2.4: {} 4142 + 4143 + locate-path@5.0.0: 4144 + dependencies: 4145 + p-locate: 4.1.0 4146 + 4147 + locate-path@6.0.0: 4148 + dependencies: 4149 + p-locate: 5.0.0 4150 + 4151 + lodash.debounce@4.0.8: {} 4152 + 4153 + lodash.merge@4.6.2: {} 4154 + 4155 + lru-cache@5.1.1: 4156 + dependencies: 4157 + yallist: 3.1.1 4158 + 4159 + make-dir@4.0.0: 4160 + dependencies: 4161 + semver: 7.6.2 4162 + 4163 + makeerror@1.0.12: 4164 + dependencies: 4165 + tmpl: 1.0.5 4166 + 4167 + merge-stream@2.0.0: {} 4168 + 4169 + merge2@1.4.1: {} 4170 + 4171 + micromatch@4.0.7: 4172 + dependencies: 4173 + braces: 3.0.3 4174 + picomatch: 2.3.1 4175 + 4176 + mimic-fn@2.1.0: {} 4177 + 4178 + minimatch@3.1.2: 4179 + dependencies: 4180 + brace-expansion: 1.1.11 4181 + 4182 + minimatch@9.0.5: 4183 + dependencies: 4184 + brace-expansion: 2.0.1 4185 + 4186 + ms@2.1.2: {} 4187 + 4188 + natural-compare@1.4.0: {} 4189 + 4190 + node-int64@0.4.0: {} 4191 + 4192 + node-releases@2.0.14: {} 4193 + 4194 + normalize-path@3.0.0: {} 4195 + 4196 + npm-run-path@4.0.1: 4197 + dependencies: 4198 + path-key: 3.1.1 4199 + 4200 + once@1.4.0: 4201 + dependencies: 4202 + wrappy: 1.0.2 4203 + 4204 + onetime@5.1.2: 4205 + dependencies: 4206 + mimic-fn: 2.1.0 4207 + 4208 + optionator@0.9.4: 4209 + dependencies: 4210 + deep-is: 0.1.4 4211 + fast-levenshtein: 2.0.6 4212 + levn: 0.4.1 4213 + prelude-ls: 1.2.1 4214 + type-check: 0.4.0 4215 + word-wrap: 1.2.5 4216 + 4217 + p-limit@2.3.0: 4218 + dependencies: 4219 + p-try: 2.2.0 4220 + 4221 + p-limit@3.1.0: 4222 + dependencies: 4223 + yocto-queue: 0.1.0 4224 + 4225 + p-locate@4.1.0: 4226 + dependencies: 4227 + p-limit: 2.3.0 4228 + 4229 + p-locate@5.0.0: 4230 + dependencies: 4231 + p-limit: 3.1.0 4232 + 4233 + p-try@2.2.0: {} 4234 + 4235 + parent-module@1.0.1: 4236 + dependencies: 4237 + callsites: 3.1.0 4238 + 4239 + parse-json@5.2.0: 4240 + dependencies: 4241 + '@babel/code-frame': 7.24.7 4242 + error-ex: 1.3.2 4243 + json-parse-even-better-errors: 2.3.1 4244 + lines-and-columns: 1.2.4 4245 + 4246 + path-exists@4.0.0: {} 4247 + 4248 + path-is-absolute@1.0.1: {} 4249 + 4250 + path-key@3.1.1: {} 4251 + 4252 + path-parse@1.0.7: {} 4253 + 4254 + picocolors@1.0.1: {} 4255 + 4256 + picomatch@2.3.1: {} 4257 + 4258 + pirates@4.0.6: {} 4259 + 4260 + pkg-dir@4.2.0: 4261 + dependencies: 4262 + find-up: 4.1.0 4263 + 4264 + prelude-ls@1.2.1: {} 4265 + 4266 + prettier@3.3.1: {} 4267 + 4268 + pretty-format@29.7.0: 4269 + dependencies: 4270 + '@jest/schemas': 29.6.3 4271 + ansi-styles: 5.2.0 4272 + react-is: 18.3.1 4273 + 4274 + prompts@2.4.2: 4275 + dependencies: 4276 + kleur: 3.0.3 4277 + sisteransi: 1.0.5 4278 + 4279 + punycode@2.3.1: {} 4280 + 4281 + pure-rand@6.1.0: {} 4282 + 4283 + queue-microtask@1.2.3: {} 4284 + 4285 + react-is@18.3.1: {} 4286 + 4287 + regenerate-unicode-properties@10.1.1: 4288 + dependencies: 4289 + regenerate: 1.4.2 4290 + 4291 + regenerate@1.4.2: {} 4292 + 4293 + regenerator-runtime@0.14.1: {} 4294 + 4295 + regenerator-transform@0.15.2: 4296 + dependencies: 4297 + '@babel/runtime': 7.24.7 4298 + 4299 + regexpu-core@5.3.2: 4300 + dependencies: 4301 + '@babel/regjsgen': 0.8.0 4302 + regenerate: 1.4.2 4303 + regenerate-unicode-properties: 10.1.1 4304 + regjsparser: 0.9.1 4305 + unicode-match-property-ecmascript: 2.0.0 4306 + unicode-match-property-value-ecmascript: 2.1.0 4307 + 4308 + regjsparser@0.9.1: 4309 + dependencies: 4310 + jsesc: 0.5.0 4311 + 4312 + require-directory@2.1.1: {} 4313 + 4314 + resolve-cwd@3.0.0: 4315 + dependencies: 4316 + resolve-from: 5.0.0 4317 + 4318 + resolve-from@4.0.0: {} 4319 + 4320 + resolve-from@5.0.0: {} 4321 + 4322 + resolve.exports@2.0.2: {} 4323 + 4324 + resolve@1.22.8: 4325 + dependencies: 4326 + is-core-module: 2.13.1 4327 + path-parse: 1.0.7 4328 + supports-preserve-symlinks-flag: 1.0.0 4329 + 4330 + reusify@1.0.4: {} 4331 + 4332 + run-parallel@1.2.0: 4333 + dependencies: 4334 + queue-microtask: 1.2.3 4335 + 4336 + semver@6.3.1: {} 4337 + 4338 + semver@7.6.2: {} 4339 + 4340 + shebang-command@2.0.0: 4341 + dependencies: 4342 + shebang-regex: 3.0.0 4343 + 4344 + shebang-regex@3.0.0: {} 4345 + 4346 + signal-exit@3.0.7: {} 4347 + 4348 + sisteransi@1.0.5: {} 4349 + 4350 + slash@3.0.0: {} 4351 + 4352 + source-map-support@0.5.13: 4353 + dependencies: 4354 + buffer-from: 1.1.2 4355 + source-map: 0.6.1 4356 + 4357 + source-map@0.6.1: {} 4358 + 4359 + sprintf-js@1.0.3: {} 4360 + 4361 + stack-utils@2.0.6: 4362 + dependencies: 4363 + escape-string-regexp: 2.0.0 4364 + 4365 + string-length@4.0.2: 4366 + dependencies: 4367 + char-regex: 1.0.2 4368 + strip-ansi: 6.0.1 4369 + 4370 + string-width@4.2.3: 4371 + dependencies: 4372 + emoji-regex: 8.0.0 4373 + is-fullwidth-code-point: 3.0.0 4374 + strip-ansi: 6.0.1 4375 + 4376 + strip-ansi@6.0.1: 4377 + dependencies: 4378 + ansi-regex: 5.0.1 4379 + 4380 + strip-bom@4.0.0: {} 4381 + 4382 + strip-final-newline@2.0.0: {} 4383 + 4384 + strip-json-comments@3.1.1: {} 4385 + 4386 + supports-color@5.5.0: 4387 + dependencies: 4388 + has-flag: 3.0.0 4389 + 4390 + supports-color@7.2.0: 4391 + dependencies: 4392 + has-flag: 4.0.0 4393 + 4394 + supports-color@8.1.1: 4395 + dependencies: 4396 + has-flag: 4.0.0 4397 + 4398 + supports-preserve-symlinks-flag@1.0.0: {} 4399 + 4400 + test-exclude@6.0.0: 4401 + dependencies: 4402 + '@istanbuljs/schema': 0.1.3 4403 + glob: 7.2.3 4404 + minimatch: 3.1.2 4405 + 4406 + text-table@0.2.0: {} 4407 + 4408 + tmpl@1.0.5: {} 4409 + 4410 + to-fast-properties@2.0.0: {} 4411 + 4412 + to-regex-range@5.0.1: 4413 + dependencies: 4414 + is-number: 7.0.0 4415 + 4416 + ts-api-utils@1.3.0(typescript@5.4.5): 4417 + dependencies: 4418 + typescript: 5.4.5 4419 + 4420 + type-check@0.4.0: 4421 + dependencies: 4422 + prelude-ls: 1.2.1 4423 + 4424 + type-detect@4.0.8: {} 4425 + 4426 + type-fest@0.21.3: {} 4427 + 4428 + typescript-eslint@8.8.1(eslint@9.12.0)(typescript@5.4.5): 4429 + dependencies: 4430 + '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.4.5))(eslint@9.12.0)(typescript@5.4.5) 4431 + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.4.5) 4432 + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.4.5) 4433 + optionalDependencies: 4434 + typescript: 5.4.5 4435 + transitivePeerDependencies: 4436 + - eslint 4437 + - supports-color 4438 + 4439 + typescript@5.4.5: {} 4440 + 4441 + undici-types@5.26.5: {} 4442 + 4443 + unicode-canonical-property-names-ecmascript@2.0.0: {} 4444 + 4445 + unicode-match-property-ecmascript@2.0.0: 4446 + dependencies: 4447 + unicode-canonical-property-names-ecmascript: 2.0.0 4448 + unicode-property-aliases-ecmascript: 2.1.0 4449 + 4450 + unicode-match-property-value-ecmascript@2.1.0: {} 4451 + 4452 + unicode-property-aliases-ecmascript@2.1.0: {} 4453 + 4454 + update-browserslist-db@1.0.16(browserslist@4.23.0): 4455 + dependencies: 4456 + browserslist: 4.23.0 4457 + escalade: 3.1.2 4458 + picocolors: 1.0.1 4459 + 4460 + uri-js@4.4.1: 4461 + dependencies: 4462 + punycode: 2.3.1 4463 + 4464 + v8-to-istanbul@9.2.0: 4465 + dependencies: 4466 + '@jridgewell/trace-mapping': 0.3.25 4467 + '@types/istanbul-lib-coverage': 2.0.6 4468 + convert-source-map: 2.0.0 4469 + 4470 + walker@1.0.8: 4471 + dependencies: 4472 + makeerror: 1.0.12 4473 + 4474 + which@2.0.2: 4475 + dependencies: 4476 + isexe: 2.0.0 4477 + 4478 + word-wrap@1.2.5: {} 4479 + 4480 + wrap-ansi@7.0.0: 4481 + dependencies: 4482 + ansi-styles: 4.3.0 4483 + string-width: 4.2.3 4484 + strip-ansi: 6.0.1 4485 + 4486 + wrappy@1.0.2: {} 4487 + 4488 + write-file-atomic@4.0.2: 4489 + dependencies: 4490 + imurmurhash: 0.1.4 4491 + signal-exit: 3.0.7 4492 + 4493 + y18n@5.0.8: {} 4494 + 4495 + yallist@3.1.1: {} 4496 + 4497 + yargs-parser@21.1.1: {} 4498 + 4499 + yargs@17.7.2: 4500 + dependencies: 4501 + cliui: 8.0.1 4502 + escalade: 3.1.2 4503 + get-caller-file: 2.0.5 4504 + require-directory: 2.1.1 4505 + string-width: 4.2.3 4506 + y18n: 5.0.8 4507 + yargs-parser: 21.1.1 4508 + 4509 + yocto-queue@0.1.0: {}
+3
pnpm-workspace.yaml
··· 1 + packages: 2 + - "packages/*" 3 + link-workspace-packages: true
+6
tsconfig.json
··· 1 + { 2 + "extends": "@tsconfig/recommended/tsconfig.json", 3 + "compilerOptions": { 4 + "declaration": true 5 + } 6 + }