├── .gitignore ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── src ├── ast-edit.ts ├── cli-commands.ts ├── cli.ts ├── file-utils.ts └── templates.ts ├── tsconfig.json └── tsup.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | ### Node template 2 | # Logs 3 | logs 4 | *.log 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | lerna-debug.log* 9 | .pnpm-debug.log* 10 | 11 | # Diagnostic reports (https://nodejs.org/api/report.html) 12 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 13 | 14 | # Runtime data 15 | pids 16 | *.pid 17 | *.seed 18 | *.pid.lock 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage 25 | *.lcov 26 | 27 | # nyc test coverage 28 | .nyc_output 29 | 30 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 31 | .grunt 32 | 33 | # Bower dependency directory (https://bower.io/) 34 | bower_components 35 | 36 | # node-waf configuration 37 | .lock-wscript 38 | 39 | # Compiled binary addons (https://nodejs.org/api/addons.html) 40 | build/Release 41 | 42 | # Dependency directories 43 | node_modules/ 44 | jspm_packages/ 45 | 46 | # Snowpack dependency directory (https://snowpack.dev/) 47 | web_modules/ 48 | 49 | # TypeScript cache 50 | *.tsbuildinfo 51 | 52 | # Optional npm cache directory 53 | .npm 54 | .idea 55 | .vscode 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Optional stylelint cache 60 | .stylelintcache 61 | 62 | # Microbundle cache 63 | .rpt2_cache/ 64 | .rts2_cache_cjs/ 65 | .rts2_cache_es/ 66 | .rts2_cache_umd/ 67 | 68 | # Optional REPL history 69 | .node_repl_history 70 | 71 | # Output of 'npm pack' 72 | *.tgz 73 | 74 | # Yarn Integrity file 75 | .yarn-integrity 76 | dist 77 | # dotenv environment variable files 78 | .env 79 | .env.development.local 80 | .env.test.local 81 | .env.production.local 82 | .env.local 83 | 84 | # parcel-bundler cache (https://parceljs.org/) 85 | .cache 86 | .parcel-cache 87 | 88 | # Next.js build output 89 | .next 90 | out 91 | 92 | # Nuxt.js build / generate output 93 | .nuxt 94 | 95 | # Gatsby files 96 | .cache/ 97 | # Comment in the public line in if your project uses Gatsby and not Next.js 98 | # https://nextjs.org/blog/next-9-1#public-directory-support 99 | # public 100 | 101 | # vuepress build output 102 | .vuepress/dist 103 | 104 | # vuepress v2.x temp and cache directory 105 | .temp 106 | .cache 107 | 108 | # Docusaurus cache and generated files 109 | .docusaurus 110 | 111 | # Serverless directories 112 | .serverless/ 113 | 114 | # FuseBox cache 115 | .fusebox/ 116 | 117 | # DynamoDB Local files 118 | .dynamodb/ 119 | 120 | # TernJS port file 121 | .tern-port 122 | 123 | # Stores VSCode versions used for testing VSCode extensions 124 | .vscode-test 125 | 126 | # yarn v2 127 | .yarn/cache 128 | .yarn/unplugged 129 | .yarn/build-state.yml 130 | .yarn/install-state.gz 131 | .pnp.* 132 | 133 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Typed Rocks 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Patch any TypeScript Compiler to add support of custom intrinsic types 2 | 3 | `patch-ts` is a command-line interface (CLI) designed to enhance the TypeScript compiler by patching its the `checker.ts` file which creates the types. All changes can be found in the `templates.ts` file. 4 | 5 | Input: 6 | 7 | ```javascript 8 | module.exports = { 9 | Email: { 10 | fn: (str) => str.includes("@") ? str : "NEVER", 11 | type: "boolean", 12 | }, 13 | }; 14 | ``` 15 | Output: 16 | 17 | ```typescript 18 | 19 | type Email = intrinsic; 20 | type IsEmail = Email<'Hi'>; 21 | // ^? false 22 | 23 | ``` 24 | 25 | 26 | 27 | 28 | 29 | ## Features 30 | 31 | - **Patch TypeScript**: Apply modifications to enhance the TypeScript compiler with the ability to parse custom `intrinsic` types. 32 | - **Create `.d.ts` file from intrinsics** Use the intrinsics.js file to create the corresponding `.d.ts` files. 33 | - **Revert Changes**: Restore the original state of patched TypeScript files. 34 | 35 | ## Prerequisites 36 | 37 | - Node.js (LTS version recommended) 38 | - TypeScript installed globally or in your project 39 | 40 | ## Installation 41 | 42 | Install it using npm: 43 | 44 | ```bash 45 | npm i -g patch-ts 46 | ``` 47 | 48 | ## Usage 49 | 50 | 1. Figure out the path of the TypeScript version you are currently using. 51 | For Example: 52 | 53 | ```bash 54 | patch-ts show-lib 55 | > /home/wrz/node/v22.2.0/lib/node_modules/typescript/lib 56 | ``` 57 | 58 | This uses the currently installed `tsc` to check the library path. 59 | 60 | 2. Make sure that your IDE (VSCode for example) points to the same TypeScript compiler. Check it by running the command-palette command: 61 | 62 | ```bash 63 | Select TypeScript Version 64 | ``` 65 | 66 | 3. If the paths do not align with the one from `patch-ts lib` you need to align it by setting it in your settings json: 67 | 68 | ```json 69 | { 70 | "typescript.tsdk": "/home/wrz/node/v22.2.0/lib/node_modules/typescript/lib" 71 | } 72 | ``` 73 | 74 | 4. Use the [patch](#patch-command) command to patch your TypeScript installation with an intrinsics file by using the environment variable "PATCH_TS". First you need to set the environment variable for example in your `.bashrc` or `.zshrc`. 75 | 76 | ```bash 77 | export PATCH_TS=/path/to/your/intrinsics.js 78 | ``` 79 | 80 | And then patch it: 81 | 82 | ```bash 83 | patch-ts patch --useEnv PATCH_TS 84 | ``` 85 | 86 | 5. Now you can add your own [intrinsic types](#intrinsics-file-structure) to the `intrinsics.js` file. 87 | 88 | 6. **RESTART**: To apply the changes made to the `intrinsics.js` file you have to restart your ts-server using `Restart TS Server`. 89 | 90 | 7. If you want to, you can now also create the types from the intrinsics file: 91 | 92 | ```bash 93 | patch-ts create-dts -i ./intrinsics.js -o ./my.d.ts 94 | ``` 95 | 96 | ## Commands 97 | 98 | ### Patch Command 99 | 100 | To patch TypeScript compiler files: 101 | 102 | ```bash 103 | patch-ts patch [options] 104 | ``` 105 | 106 | #### Options 107 | 108 | - `-f, --force`: Force the patch operation, even if already patched. 109 | - `-l, --libPath `: Specify the path to the TypeScript library. By default it uses the current lib `tsc` points to. 110 | - `-ue, --useEnv`: If set, it will use the provided environment variable and the path behind it to determine the path to the `intrinsics.js` file. Needs a restart of VSCode to find the new environment variable. 111 | - `-b, --bundled`: The file which will be bundled into the compiler. Will not be updated but only the current version is copied into the compiler. 112 | 113 | ### Show Lib 114 | 115 | Use this command to get the lib which will get patched when calling `patch-ts`. 116 | 117 | ```bash 118 | patch-ts show-lib 119 | ``` 120 | 121 | ### Create Types File from intrinsics.js 122 | 123 | ```bash 124 | patch-ts create-dts -i /path/to/intrisincs.js -o ./myfile.d.ts 125 | ``` 126 | 127 | Will use the file from the input path to create the TypeScript types file. 128 | 129 | ### Revert Command 130 | 131 | To revert any changes made by the patch: 132 | 133 | ```bash 134 | patch-ts revert 135 | ``` 136 | 137 | This command will revert the TypeScript files (`typescript.js` and `tsc.js`) to their original state before any patches applied by `patch-ts`. 138 | 139 | ### Examples 140 | 141 | Patching with a custom lib path and using the PATCH_TS environment variable to figure out where the patch-file is. Will update when the file at PATCH_TS changes and the user restarts the ts server. Also forcing an update. 142 | 143 | ```bash 144 | patch-ts patch --useEnv PATCH_TS --path /Users/wrz/IdeaProjects/TypeScript/built/local --force 145 | ``` 146 | 147 | Bundle a intrinsicts file into the compiler. Is only bundled **ONCE**. 148 | 149 | ```bash 150 | patch-ts patch --bundled /path/to/custom-intrinsics.js 151 | ``` 152 | 153 | This command will use the `custom-intrinsics.js` file for patching the typescript compiler **ONCE**. It does not update when the file changes. 154 | 155 | ## intrinsics file structure 156 | 157 | The JavaScript file has to have a single `module.exports` which exports a function which looks like that: 158 | 159 | ```javascript 160 | module.exports = function () { 161 | return { 162 | Email: { 163 | fn: (str) => str.includes("@" ? str : "NEVER"), 164 | }, 165 | Length: { 166 | fn: (str) => str.length, 167 | type: "number", 168 | }, 169 | Add: { 170 | fn: (first, second) => first + second, 171 | type: "number", 172 | }, 173 | IsNumber: { 174 | fn: nr => nr === +nr, 175 | type: "boolean" 176 | } 177 | }; 178 | }; 179 | ``` 180 | 181 | The `fn` property is always needed. It maps the generics which we pass to the generic type and transform it. By default it will always return the result as a string representation. We can specify the `type` property as either `number`, `string` or `boolean` to transform the result into the corresponding type. 182 | 183 | When `"NEVER"` is returned, it will be converted to the `never` type. 184 | 185 | This will enable us to create these types: 186 | 187 | ```typescript 188 | type Email = intrinsic; 189 | type Length = intrinsic; 190 | type Add = intrinsic; 191 | 192 | type WrongEmail = Email<"ab">; 193 | // ^? never 194 | type CorrectEmail = Email<"a@b">; 195 | // ^? "a@b" 196 | type TextLength = Length<"hi">; 197 | // ^? 2 198 | type NumberCheck = IsNumber<1>; 199 | // ^? true 200 | ``` 201 | 202 | ## Contributing 203 | 204 | Contributions to `patch-ts` are welcome! Please read the contributing guidelines in the repository for more information on how to submit pull requests. 205 | 206 | ## License 207 | 208 | This project is licensed under the [MIT License](LICENSE). 209 | 210 | ## Support 211 | 212 | For support, submit an issue in the GitHub repository or contact the project maintainers. 213 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "patch-ts", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "patch-ts", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "commander": "^12.1.0", 13 | "ts-morph": "^24.0.0", 14 | "which": "^5.0.0" 15 | }, 16 | "bin": { 17 | "patch-ts": "dist/cli.js" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "^22.7.5", 21 | "@types/which": "^3.0.4", 22 | "esbuild": "^0.24.0", 23 | "tsup": "^8.3.0", 24 | "typescript": "^5.6.3" 25 | } 26 | }, 27 | "node_modules/@esbuild/aix-ppc64": { 28 | "version": "0.24.0", 29 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", 30 | "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", 31 | "cpu": [ 32 | "ppc64" 33 | ], 34 | "dev": true, 35 | "optional": true, 36 | "os": [ 37 | "aix" 38 | ], 39 | "engines": { 40 | "node": ">=18" 41 | } 42 | }, 43 | "node_modules/@esbuild/android-arm": { 44 | "version": "0.24.0", 45 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", 46 | "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", 47 | "cpu": [ 48 | "arm" 49 | ], 50 | "dev": true, 51 | "optional": true, 52 | "os": [ 53 | "android" 54 | ], 55 | "engines": { 56 | "node": ">=18" 57 | } 58 | }, 59 | "node_modules/@esbuild/android-arm64": { 60 | "version": "0.24.0", 61 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", 62 | "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", 63 | "cpu": [ 64 | "arm64" 65 | ], 66 | "dev": true, 67 | "optional": true, 68 | "os": [ 69 | "android" 70 | ], 71 | "engines": { 72 | "node": ">=18" 73 | } 74 | }, 75 | "node_modules/@esbuild/android-x64": { 76 | "version": "0.24.0", 77 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", 78 | "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", 79 | "cpu": [ 80 | "x64" 81 | ], 82 | "dev": true, 83 | "optional": true, 84 | "os": [ 85 | "android" 86 | ], 87 | "engines": { 88 | "node": ">=18" 89 | } 90 | }, 91 | "node_modules/@esbuild/darwin-arm64": { 92 | "version": "0.24.0", 93 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", 94 | "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", 95 | "cpu": [ 96 | "arm64" 97 | ], 98 | "dev": true, 99 | "optional": true, 100 | "os": [ 101 | "darwin" 102 | ], 103 | "engines": { 104 | "node": ">=18" 105 | } 106 | }, 107 | "node_modules/@esbuild/darwin-x64": { 108 | "version": "0.24.0", 109 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", 110 | "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", 111 | "cpu": [ 112 | "x64" 113 | ], 114 | "dev": true, 115 | "optional": true, 116 | "os": [ 117 | "darwin" 118 | ], 119 | "engines": { 120 | "node": ">=18" 121 | } 122 | }, 123 | "node_modules/@esbuild/freebsd-arm64": { 124 | "version": "0.24.0", 125 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", 126 | "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", 127 | "cpu": [ 128 | "arm64" 129 | ], 130 | "dev": true, 131 | "optional": true, 132 | "os": [ 133 | "freebsd" 134 | ], 135 | "engines": { 136 | "node": ">=18" 137 | } 138 | }, 139 | "node_modules/@esbuild/freebsd-x64": { 140 | "version": "0.24.0", 141 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", 142 | "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", 143 | "cpu": [ 144 | "x64" 145 | ], 146 | "dev": true, 147 | "optional": true, 148 | "os": [ 149 | "freebsd" 150 | ], 151 | "engines": { 152 | "node": ">=18" 153 | } 154 | }, 155 | "node_modules/@esbuild/linux-arm": { 156 | "version": "0.24.0", 157 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", 158 | "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", 159 | "cpu": [ 160 | "arm" 161 | ], 162 | "dev": true, 163 | "optional": true, 164 | "os": [ 165 | "linux" 166 | ], 167 | "engines": { 168 | "node": ">=18" 169 | } 170 | }, 171 | "node_modules/@esbuild/linux-arm64": { 172 | "version": "0.24.0", 173 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", 174 | "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", 175 | "cpu": [ 176 | "arm64" 177 | ], 178 | "dev": true, 179 | "optional": true, 180 | "os": [ 181 | "linux" 182 | ], 183 | "engines": { 184 | "node": ">=18" 185 | } 186 | }, 187 | "node_modules/@esbuild/linux-ia32": { 188 | "version": "0.24.0", 189 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", 190 | "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", 191 | "cpu": [ 192 | "ia32" 193 | ], 194 | "dev": true, 195 | "optional": true, 196 | "os": [ 197 | "linux" 198 | ], 199 | "engines": { 200 | "node": ">=18" 201 | } 202 | }, 203 | "node_modules/@esbuild/linux-loong64": { 204 | "version": "0.24.0", 205 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", 206 | "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", 207 | "cpu": [ 208 | "loong64" 209 | ], 210 | "dev": true, 211 | "optional": true, 212 | "os": [ 213 | "linux" 214 | ], 215 | "engines": { 216 | "node": ">=18" 217 | } 218 | }, 219 | "node_modules/@esbuild/linux-mips64el": { 220 | "version": "0.24.0", 221 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", 222 | "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", 223 | "cpu": [ 224 | "mips64el" 225 | ], 226 | "dev": true, 227 | "optional": true, 228 | "os": [ 229 | "linux" 230 | ], 231 | "engines": { 232 | "node": ">=18" 233 | } 234 | }, 235 | "node_modules/@esbuild/linux-ppc64": { 236 | "version": "0.24.0", 237 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", 238 | "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", 239 | "cpu": [ 240 | "ppc64" 241 | ], 242 | "dev": true, 243 | "optional": true, 244 | "os": [ 245 | "linux" 246 | ], 247 | "engines": { 248 | "node": ">=18" 249 | } 250 | }, 251 | "node_modules/@esbuild/linux-riscv64": { 252 | "version": "0.24.0", 253 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", 254 | "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", 255 | "cpu": [ 256 | "riscv64" 257 | ], 258 | "dev": true, 259 | "optional": true, 260 | "os": [ 261 | "linux" 262 | ], 263 | "engines": { 264 | "node": ">=18" 265 | } 266 | }, 267 | "node_modules/@esbuild/linux-s390x": { 268 | "version": "0.24.0", 269 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", 270 | "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", 271 | "cpu": [ 272 | "s390x" 273 | ], 274 | "dev": true, 275 | "optional": true, 276 | "os": [ 277 | "linux" 278 | ], 279 | "engines": { 280 | "node": ">=18" 281 | } 282 | }, 283 | "node_modules/@esbuild/linux-x64": { 284 | "version": "0.24.0", 285 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", 286 | "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", 287 | "cpu": [ 288 | "x64" 289 | ], 290 | "dev": true, 291 | "optional": true, 292 | "os": [ 293 | "linux" 294 | ], 295 | "engines": { 296 | "node": ">=18" 297 | } 298 | }, 299 | "node_modules/@esbuild/netbsd-x64": { 300 | "version": "0.24.0", 301 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", 302 | "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", 303 | "cpu": [ 304 | "x64" 305 | ], 306 | "dev": true, 307 | "optional": true, 308 | "os": [ 309 | "netbsd" 310 | ], 311 | "engines": { 312 | "node": ">=18" 313 | } 314 | }, 315 | "node_modules/@esbuild/openbsd-arm64": { 316 | "version": "0.24.0", 317 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", 318 | "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", 319 | "cpu": [ 320 | "arm64" 321 | ], 322 | "dev": true, 323 | "optional": true, 324 | "os": [ 325 | "openbsd" 326 | ], 327 | "engines": { 328 | "node": ">=18" 329 | } 330 | }, 331 | "node_modules/@esbuild/openbsd-x64": { 332 | "version": "0.24.0", 333 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", 334 | "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", 335 | "cpu": [ 336 | "x64" 337 | ], 338 | "dev": true, 339 | "optional": true, 340 | "os": [ 341 | "openbsd" 342 | ], 343 | "engines": { 344 | "node": ">=18" 345 | } 346 | }, 347 | "node_modules/@esbuild/sunos-x64": { 348 | "version": "0.24.0", 349 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", 350 | "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", 351 | "cpu": [ 352 | "x64" 353 | ], 354 | "dev": true, 355 | "optional": true, 356 | "os": [ 357 | "sunos" 358 | ], 359 | "engines": { 360 | "node": ">=18" 361 | } 362 | }, 363 | "node_modules/@esbuild/win32-arm64": { 364 | "version": "0.24.0", 365 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", 366 | "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", 367 | "cpu": [ 368 | "arm64" 369 | ], 370 | "dev": true, 371 | "optional": true, 372 | "os": [ 373 | "win32" 374 | ], 375 | "engines": { 376 | "node": ">=18" 377 | } 378 | }, 379 | "node_modules/@esbuild/win32-ia32": { 380 | "version": "0.24.0", 381 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", 382 | "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", 383 | "cpu": [ 384 | "ia32" 385 | ], 386 | "dev": true, 387 | "optional": true, 388 | "os": [ 389 | "win32" 390 | ], 391 | "engines": { 392 | "node": ">=18" 393 | } 394 | }, 395 | "node_modules/@esbuild/win32-x64": { 396 | "version": "0.24.0", 397 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", 398 | "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", 399 | "cpu": [ 400 | "x64" 401 | ], 402 | "dev": true, 403 | "optional": true, 404 | "os": [ 405 | "win32" 406 | ], 407 | "engines": { 408 | "node": ">=18" 409 | } 410 | }, 411 | "node_modules/@isaacs/cliui": { 412 | "version": "8.0.2", 413 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 414 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 415 | "dev": true, 416 | "dependencies": { 417 | "string-width": "^5.1.2", 418 | "string-width-cjs": "npm:string-width@^4.2.0", 419 | "strip-ansi": "^7.0.1", 420 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 421 | "wrap-ansi": "^8.1.0", 422 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 423 | }, 424 | "engines": { 425 | "node": ">=12" 426 | } 427 | }, 428 | "node_modules/@jridgewell/gen-mapping": { 429 | "version": "0.3.5", 430 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 431 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 432 | "dev": true, 433 | "dependencies": { 434 | "@jridgewell/set-array": "^1.2.1", 435 | "@jridgewell/sourcemap-codec": "^1.4.10", 436 | "@jridgewell/trace-mapping": "^0.3.24" 437 | }, 438 | "engines": { 439 | "node": ">=6.0.0" 440 | } 441 | }, 442 | "node_modules/@jridgewell/resolve-uri": { 443 | "version": "3.1.2", 444 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 445 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 446 | "dev": true, 447 | "engines": { 448 | "node": ">=6.0.0" 449 | } 450 | }, 451 | "node_modules/@jridgewell/set-array": { 452 | "version": "1.2.1", 453 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 454 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 455 | "dev": true, 456 | "engines": { 457 | "node": ">=6.0.0" 458 | } 459 | }, 460 | "node_modules/@jridgewell/sourcemap-codec": { 461 | "version": "1.5.0", 462 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 463 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 464 | "dev": true 465 | }, 466 | "node_modules/@jridgewell/trace-mapping": { 467 | "version": "0.3.25", 468 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 469 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 470 | "dev": true, 471 | "dependencies": { 472 | "@jridgewell/resolve-uri": "^3.1.0", 473 | "@jridgewell/sourcemap-codec": "^1.4.14" 474 | } 475 | }, 476 | "node_modules/@pkgjs/parseargs": { 477 | "version": "0.11.0", 478 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 479 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 480 | "dev": true, 481 | "optional": true, 482 | "engines": { 483 | "node": ">=14" 484 | } 485 | }, 486 | "node_modules/@rollup/rollup-android-arm-eabi": { 487 | "version": "4.24.0", 488 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", 489 | "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", 490 | "cpu": [ 491 | "arm" 492 | ], 493 | "dev": true, 494 | "optional": true, 495 | "os": [ 496 | "android" 497 | ] 498 | }, 499 | "node_modules/@rollup/rollup-android-arm64": { 500 | "version": "4.24.0", 501 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", 502 | "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", 503 | "cpu": [ 504 | "arm64" 505 | ], 506 | "dev": true, 507 | "optional": true, 508 | "os": [ 509 | "android" 510 | ] 511 | }, 512 | "node_modules/@rollup/rollup-darwin-arm64": { 513 | "version": "4.24.0", 514 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", 515 | "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", 516 | "cpu": [ 517 | "arm64" 518 | ], 519 | "dev": true, 520 | "optional": true, 521 | "os": [ 522 | "darwin" 523 | ] 524 | }, 525 | "node_modules/@rollup/rollup-darwin-x64": { 526 | "version": "4.24.0", 527 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", 528 | "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", 529 | "cpu": [ 530 | "x64" 531 | ], 532 | "dev": true, 533 | "optional": true, 534 | "os": [ 535 | "darwin" 536 | ] 537 | }, 538 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 539 | "version": "4.24.0", 540 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", 541 | "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", 542 | "cpu": [ 543 | "arm" 544 | ], 545 | "dev": true, 546 | "optional": true, 547 | "os": [ 548 | "linux" 549 | ] 550 | }, 551 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 552 | "version": "4.24.0", 553 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", 554 | "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", 555 | "cpu": [ 556 | "arm" 557 | ], 558 | "dev": true, 559 | "optional": true, 560 | "os": [ 561 | "linux" 562 | ] 563 | }, 564 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 565 | "version": "4.24.0", 566 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", 567 | "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", 568 | "cpu": [ 569 | "arm64" 570 | ], 571 | "dev": true, 572 | "optional": true, 573 | "os": [ 574 | "linux" 575 | ] 576 | }, 577 | "node_modules/@rollup/rollup-linux-arm64-musl": { 578 | "version": "4.24.0", 579 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", 580 | "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", 581 | "cpu": [ 582 | "arm64" 583 | ], 584 | "dev": true, 585 | "optional": true, 586 | "os": [ 587 | "linux" 588 | ] 589 | }, 590 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 591 | "version": "4.24.0", 592 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", 593 | "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", 594 | "cpu": [ 595 | "ppc64" 596 | ], 597 | "dev": true, 598 | "optional": true, 599 | "os": [ 600 | "linux" 601 | ] 602 | }, 603 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 604 | "version": "4.24.0", 605 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", 606 | "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", 607 | "cpu": [ 608 | "riscv64" 609 | ], 610 | "dev": true, 611 | "optional": true, 612 | "os": [ 613 | "linux" 614 | ] 615 | }, 616 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 617 | "version": "4.24.0", 618 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", 619 | "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", 620 | "cpu": [ 621 | "s390x" 622 | ], 623 | "dev": true, 624 | "optional": true, 625 | "os": [ 626 | "linux" 627 | ] 628 | }, 629 | "node_modules/@rollup/rollup-linux-x64-gnu": { 630 | "version": "4.24.0", 631 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", 632 | "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", 633 | "cpu": [ 634 | "x64" 635 | ], 636 | "dev": true, 637 | "optional": true, 638 | "os": [ 639 | "linux" 640 | ] 641 | }, 642 | "node_modules/@rollup/rollup-linux-x64-musl": { 643 | "version": "4.24.0", 644 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", 645 | "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", 646 | "cpu": [ 647 | "x64" 648 | ], 649 | "dev": true, 650 | "optional": true, 651 | "os": [ 652 | "linux" 653 | ] 654 | }, 655 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 656 | "version": "4.24.0", 657 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", 658 | "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", 659 | "cpu": [ 660 | "arm64" 661 | ], 662 | "dev": true, 663 | "optional": true, 664 | "os": [ 665 | "win32" 666 | ] 667 | }, 668 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 669 | "version": "4.24.0", 670 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", 671 | "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", 672 | "cpu": [ 673 | "ia32" 674 | ], 675 | "dev": true, 676 | "optional": true, 677 | "os": [ 678 | "win32" 679 | ] 680 | }, 681 | "node_modules/@rollup/rollup-win32-x64-msvc": { 682 | "version": "4.24.0", 683 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", 684 | "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", 685 | "cpu": [ 686 | "x64" 687 | ], 688 | "dev": true, 689 | "optional": true, 690 | "os": [ 691 | "win32" 692 | ] 693 | }, 694 | "node_modules/@ts-morph/common": { 695 | "version": "0.25.0", 696 | "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.25.0.tgz", 697 | "integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==", 698 | "dependencies": { 699 | "minimatch": "^9.0.4", 700 | "path-browserify": "^1.0.1", 701 | "tinyglobby": "^0.2.9" 702 | } 703 | }, 704 | "node_modules/@types/estree": { 705 | "version": "1.0.6", 706 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 707 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 708 | "dev": true 709 | }, 710 | "node_modules/@types/node": { 711 | "version": "22.7.5", 712 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", 713 | "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", 714 | "dev": true, 715 | "dependencies": { 716 | "undici-types": "~6.19.2" 717 | } 718 | }, 719 | "node_modules/@types/which": { 720 | "version": "3.0.4", 721 | "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.4.tgz", 722 | "integrity": "sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==", 723 | "dev": true 724 | }, 725 | "node_modules/ansi-regex": { 726 | "version": "6.1.0", 727 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 728 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 729 | "dev": true, 730 | "engines": { 731 | "node": ">=12" 732 | }, 733 | "funding": { 734 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 735 | } 736 | }, 737 | "node_modules/ansi-styles": { 738 | "version": "6.2.1", 739 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 740 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 741 | "dev": true, 742 | "engines": { 743 | "node": ">=12" 744 | }, 745 | "funding": { 746 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 747 | } 748 | }, 749 | "node_modules/any-promise": { 750 | "version": "1.3.0", 751 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 752 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 753 | "dev": true 754 | }, 755 | "node_modules/anymatch": { 756 | "version": "3.1.3", 757 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 758 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 759 | "dev": true, 760 | "dependencies": { 761 | "normalize-path": "^3.0.0", 762 | "picomatch": "^2.0.4" 763 | }, 764 | "engines": { 765 | "node": ">= 8" 766 | } 767 | }, 768 | "node_modules/anymatch/node_modules/picomatch": { 769 | "version": "2.3.1", 770 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 771 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 772 | "dev": true, 773 | "engines": { 774 | "node": ">=8.6" 775 | }, 776 | "funding": { 777 | "url": "https://github.com/sponsors/jonschlinkert" 778 | } 779 | }, 780 | "node_modules/balanced-match": { 781 | "version": "1.0.2", 782 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 783 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 784 | }, 785 | "node_modules/binary-extensions": { 786 | "version": "2.3.0", 787 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 788 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 789 | "dev": true, 790 | "engines": { 791 | "node": ">=8" 792 | }, 793 | "funding": { 794 | "url": "https://github.com/sponsors/sindresorhus" 795 | } 796 | }, 797 | "node_modules/brace-expansion": { 798 | "version": "2.0.1", 799 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 800 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 801 | "dependencies": { 802 | "balanced-match": "^1.0.0" 803 | } 804 | }, 805 | "node_modules/braces": { 806 | "version": "3.0.3", 807 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 808 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 809 | "dev": true, 810 | "dependencies": { 811 | "fill-range": "^7.1.1" 812 | }, 813 | "engines": { 814 | "node": ">=8" 815 | } 816 | }, 817 | "node_modules/bundle-require": { 818 | "version": "5.0.0", 819 | "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.0.0.tgz", 820 | "integrity": "sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==", 821 | "dev": true, 822 | "dependencies": { 823 | "load-tsconfig": "^0.2.3" 824 | }, 825 | "engines": { 826 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 827 | }, 828 | "peerDependencies": { 829 | "esbuild": ">=0.18" 830 | } 831 | }, 832 | "node_modules/cac": { 833 | "version": "6.7.14", 834 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 835 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 836 | "dev": true, 837 | "engines": { 838 | "node": ">=8" 839 | } 840 | }, 841 | "node_modules/chokidar": { 842 | "version": "3.6.0", 843 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 844 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 845 | "dev": true, 846 | "dependencies": { 847 | "anymatch": "~3.1.2", 848 | "braces": "~3.0.2", 849 | "glob-parent": "~5.1.2", 850 | "is-binary-path": "~2.1.0", 851 | "is-glob": "~4.0.1", 852 | "normalize-path": "~3.0.0", 853 | "readdirp": "~3.6.0" 854 | }, 855 | "engines": { 856 | "node": ">= 8.10.0" 857 | }, 858 | "funding": { 859 | "url": "https://paulmillr.com/funding/" 860 | }, 861 | "optionalDependencies": { 862 | "fsevents": "~2.3.2" 863 | } 864 | }, 865 | "node_modules/code-block-writer": { 866 | "version": "13.0.3", 867 | "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", 868 | "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==" 869 | }, 870 | "node_modules/color-convert": { 871 | "version": "2.0.1", 872 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 873 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 874 | "dev": true, 875 | "dependencies": { 876 | "color-name": "~1.1.4" 877 | }, 878 | "engines": { 879 | "node": ">=7.0.0" 880 | } 881 | }, 882 | "node_modules/color-name": { 883 | "version": "1.1.4", 884 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 885 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 886 | "dev": true 887 | }, 888 | "node_modules/commander": { 889 | "version": "12.1.0", 890 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", 891 | "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", 892 | "engines": { 893 | "node": ">=18" 894 | } 895 | }, 896 | "node_modules/consola": { 897 | "version": "3.2.3", 898 | "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", 899 | "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", 900 | "dev": true, 901 | "engines": { 902 | "node": "^14.18.0 || >=16.10.0" 903 | } 904 | }, 905 | "node_modules/cross-spawn": { 906 | "version": "7.0.3", 907 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 908 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 909 | "dev": true, 910 | "dependencies": { 911 | "path-key": "^3.1.0", 912 | "shebang-command": "^2.0.0", 913 | "which": "^2.0.1" 914 | }, 915 | "engines": { 916 | "node": ">= 8" 917 | } 918 | }, 919 | "node_modules/cross-spawn/node_modules/isexe": { 920 | "version": "2.0.0", 921 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 922 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 923 | "dev": true 924 | }, 925 | "node_modules/cross-spawn/node_modules/which": { 926 | "version": "2.0.2", 927 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 928 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 929 | "dev": true, 930 | "dependencies": { 931 | "isexe": "^2.0.0" 932 | }, 933 | "bin": { 934 | "node-which": "bin/node-which" 935 | }, 936 | "engines": { 937 | "node": ">= 8" 938 | } 939 | }, 940 | "node_modules/debug": { 941 | "version": "4.3.7", 942 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 943 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 944 | "dev": true, 945 | "dependencies": { 946 | "ms": "^2.1.3" 947 | }, 948 | "engines": { 949 | "node": ">=6.0" 950 | }, 951 | "peerDependenciesMeta": { 952 | "supports-color": { 953 | "optional": true 954 | } 955 | } 956 | }, 957 | "node_modules/eastasianwidth": { 958 | "version": "0.2.0", 959 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 960 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 961 | "dev": true 962 | }, 963 | "node_modules/emoji-regex": { 964 | "version": "9.2.2", 965 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 966 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 967 | "dev": true 968 | }, 969 | "node_modules/esbuild": { 970 | "version": "0.24.0", 971 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", 972 | "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", 973 | "dev": true, 974 | "hasInstallScript": true, 975 | "bin": { 976 | "esbuild": "bin/esbuild" 977 | }, 978 | "engines": { 979 | "node": ">=18" 980 | }, 981 | "optionalDependencies": { 982 | "@esbuild/aix-ppc64": "0.24.0", 983 | "@esbuild/android-arm": "0.24.0", 984 | "@esbuild/android-arm64": "0.24.0", 985 | "@esbuild/android-x64": "0.24.0", 986 | "@esbuild/darwin-arm64": "0.24.0", 987 | "@esbuild/darwin-x64": "0.24.0", 988 | "@esbuild/freebsd-arm64": "0.24.0", 989 | "@esbuild/freebsd-x64": "0.24.0", 990 | "@esbuild/linux-arm": "0.24.0", 991 | "@esbuild/linux-arm64": "0.24.0", 992 | "@esbuild/linux-ia32": "0.24.0", 993 | "@esbuild/linux-loong64": "0.24.0", 994 | "@esbuild/linux-mips64el": "0.24.0", 995 | "@esbuild/linux-ppc64": "0.24.0", 996 | "@esbuild/linux-riscv64": "0.24.0", 997 | "@esbuild/linux-s390x": "0.24.0", 998 | "@esbuild/linux-x64": "0.24.0", 999 | "@esbuild/netbsd-x64": "0.24.0", 1000 | "@esbuild/openbsd-arm64": "0.24.0", 1001 | "@esbuild/openbsd-x64": "0.24.0", 1002 | "@esbuild/sunos-x64": "0.24.0", 1003 | "@esbuild/win32-arm64": "0.24.0", 1004 | "@esbuild/win32-ia32": "0.24.0", 1005 | "@esbuild/win32-x64": "0.24.0" 1006 | } 1007 | }, 1008 | "node_modules/execa": { 1009 | "version": "5.1.1", 1010 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 1011 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 1012 | "dev": true, 1013 | "dependencies": { 1014 | "cross-spawn": "^7.0.3", 1015 | "get-stream": "^6.0.0", 1016 | "human-signals": "^2.1.0", 1017 | "is-stream": "^2.0.0", 1018 | "merge-stream": "^2.0.0", 1019 | "npm-run-path": "^4.0.1", 1020 | "onetime": "^5.1.2", 1021 | "signal-exit": "^3.0.3", 1022 | "strip-final-newline": "^2.0.0" 1023 | }, 1024 | "engines": { 1025 | "node": ">=10" 1026 | }, 1027 | "funding": { 1028 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1029 | } 1030 | }, 1031 | "node_modules/fdir": { 1032 | "version": "6.4.0", 1033 | "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.0.tgz", 1034 | "integrity": "sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==", 1035 | "peerDependencies": { 1036 | "picomatch": "^3 || ^4" 1037 | }, 1038 | "peerDependenciesMeta": { 1039 | "picomatch": { 1040 | "optional": true 1041 | } 1042 | } 1043 | }, 1044 | "node_modules/fill-range": { 1045 | "version": "7.1.1", 1046 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1047 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1048 | "dev": true, 1049 | "dependencies": { 1050 | "to-regex-range": "^5.0.1" 1051 | }, 1052 | "engines": { 1053 | "node": ">=8" 1054 | } 1055 | }, 1056 | "node_modules/foreground-child": { 1057 | "version": "3.3.0", 1058 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 1059 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 1060 | "dev": true, 1061 | "dependencies": { 1062 | "cross-spawn": "^7.0.0", 1063 | "signal-exit": "^4.0.1" 1064 | }, 1065 | "engines": { 1066 | "node": ">=14" 1067 | }, 1068 | "funding": { 1069 | "url": "https://github.com/sponsors/isaacs" 1070 | } 1071 | }, 1072 | "node_modules/foreground-child/node_modules/signal-exit": { 1073 | "version": "4.1.0", 1074 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1075 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1076 | "dev": true, 1077 | "engines": { 1078 | "node": ">=14" 1079 | }, 1080 | "funding": { 1081 | "url": "https://github.com/sponsors/isaacs" 1082 | } 1083 | }, 1084 | "node_modules/fsevents": { 1085 | "version": "2.3.3", 1086 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1087 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1088 | "dev": true, 1089 | "hasInstallScript": true, 1090 | "optional": true, 1091 | "os": [ 1092 | "darwin" 1093 | ], 1094 | "engines": { 1095 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1096 | } 1097 | }, 1098 | "node_modules/get-stream": { 1099 | "version": "6.0.1", 1100 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 1101 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 1102 | "dev": true, 1103 | "engines": { 1104 | "node": ">=10" 1105 | }, 1106 | "funding": { 1107 | "url": "https://github.com/sponsors/sindresorhus" 1108 | } 1109 | }, 1110 | "node_modules/glob": { 1111 | "version": "10.4.5", 1112 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 1113 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 1114 | "dev": true, 1115 | "dependencies": { 1116 | "foreground-child": "^3.1.0", 1117 | "jackspeak": "^3.1.2", 1118 | "minimatch": "^9.0.4", 1119 | "minipass": "^7.1.2", 1120 | "package-json-from-dist": "^1.0.0", 1121 | "path-scurry": "^1.11.1" 1122 | }, 1123 | "bin": { 1124 | "glob": "dist/esm/bin.mjs" 1125 | }, 1126 | "funding": { 1127 | "url": "https://github.com/sponsors/isaacs" 1128 | } 1129 | }, 1130 | "node_modules/glob-parent": { 1131 | "version": "5.1.2", 1132 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1133 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1134 | "dev": true, 1135 | "dependencies": { 1136 | "is-glob": "^4.0.1" 1137 | }, 1138 | "engines": { 1139 | "node": ">= 6" 1140 | } 1141 | }, 1142 | "node_modules/human-signals": { 1143 | "version": "2.1.0", 1144 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 1145 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 1146 | "dev": true, 1147 | "engines": { 1148 | "node": ">=10.17.0" 1149 | } 1150 | }, 1151 | "node_modules/is-binary-path": { 1152 | "version": "2.1.0", 1153 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1154 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1155 | "dev": true, 1156 | "dependencies": { 1157 | "binary-extensions": "^2.0.0" 1158 | }, 1159 | "engines": { 1160 | "node": ">=8" 1161 | } 1162 | }, 1163 | "node_modules/is-extglob": { 1164 | "version": "2.1.1", 1165 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1166 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1167 | "dev": true, 1168 | "engines": { 1169 | "node": ">=0.10.0" 1170 | } 1171 | }, 1172 | "node_modules/is-fullwidth-code-point": { 1173 | "version": "3.0.0", 1174 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1175 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1176 | "dev": true, 1177 | "engines": { 1178 | "node": ">=8" 1179 | } 1180 | }, 1181 | "node_modules/is-glob": { 1182 | "version": "4.0.3", 1183 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1184 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1185 | "dev": true, 1186 | "dependencies": { 1187 | "is-extglob": "^2.1.1" 1188 | }, 1189 | "engines": { 1190 | "node": ">=0.10.0" 1191 | } 1192 | }, 1193 | "node_modules/is-number": { 1194 | "version": "7.0.0", 1195 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1196 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1197 | "dev": true, 1198 | "engines": { 1199 | "node": ">=0.12.0" 1200 | } 1201 | }, 1202 | "node_modules/is-stream": { 1203 | "version": "2.0.1", 1204 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1205 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1206 | "dev": true, 1207 | "engines": { 1208 | "node": ">=8" 1209 | }, 1210 | "funding": { 1211 | "url": "https://github.com/sponsors/sindresorhus" 1212 | } 1213 | }, 1214 | "node_modules/isexe": { 1215 | "version": "3.1.1", 1216 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", 1217 | "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", 1218 | "engines": { 1219 | "node": ">=16" 1220 | } 1221 | }, 1222 | "node_modules/jackspeak": { 1223 | "version": "3.4.3", 1224 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 1225 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1226 | "dev": true, 1227 | "dependencies": { 1228 | "@isaacs/cliui": "^8.0.2" 1229 | }, 1230 | "funding": { 1231 | "url": "https://github.com/sponsors/isaacs" 1232 | }, 1233 | "optionalDependencies": { 1234 | "@pkgjs/parseargs": "^0.11.0" 1235 | } 1236 | }, 1237 | "node_modules/joycon": { 1238 | "version": "3.1.1", 1239 | "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", 1240 | "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", 1241 | "dev": true, 1242 | "engines": { 1243 | "node": ">=10" 1244 | } 1245 | }, 1246 | "node_modules/lilconfig": { 1247 | "version": "3.1.2", 1248 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", 1249 | "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", 1250 | "dev": true, 1251 | "engines": { 1252 | "node": ">=14" 1253 | }, 1254 | "funding": { 1255 | "url": "https://github.com/sponsors/antonk52" 1256 | } 1257 | }, 1258 | "node_modules/lines-and-columns": { 1259 | "version": "1.2.4", 1260 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1261 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1262 | "dev": true 1263 | }, 1264 | "node_modules/load-tsconfig": { 1265 | "version": "0.2.5", 1266 | "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", 1267 | "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", 1268 | "dev": true, 1269 | "engines": { 1270 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1271 | } 1272 | }, 1273 | "node_modules/lodash.sortby": { 1274 | "version": "4.7.0", 1275 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 1276 | "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", 1277 | "dev": true 1278 | }, 1279 | "node_modules/lru-cache": { 1280 | "version": "10.4.3", 1281 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1282 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1283 | "dev": true 1284 | }, 1285 | "node_modules/merge-stream": { 1286 | "version": "2.0.0", 1287 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1288 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1289 | "dev": true 1290 | }, 1291 | "node_modules/mimic-fn": { 1292 | "version": "2.1.0", 1293 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1294 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1295 | "dev": true, 1296 | "engines": { 1297 | "node": ">=6" 1298 | } 1299 | }, 1300 | "node_modules/minimatch": { 1301 | "version": "9.0.5", 1302 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1303 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1304 | "dependencies": { 1305 | "brace-expansion": "^2.0.1" 1306 | }, 1307 | "engines": { 1308 | "node": ">=16 || 14 >=14.17" 1309 | }, 1310 | "funding": { 1311 | "url": "https://github.com/sponsors/isaacs" 1312 | } 1313 | }, 1314 | "node_modules/minipass": { 1315 | "version": "7.1.2", 1316 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1317 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1318 | "dev": true, 1319 | "engines": { 1320 | "node": ">=16 || 14 >=14.17" 1321 | } 1322 | }, 1323 | "node_modules/ms": { 1324 | "version": "2.1.3", 1325 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1326 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1327 | "dev": true 1328 | }, 1329 | "node_modules/mz": { 1330 | "version": "2.7.0", 1331 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1332 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1333 | "dev": true, 1334 | "dependencies": { 1335 | "any-promise": "^1.0.0", 1336 | "object-assign": "^4.0.1", 1337 | "thenify-all": "^1.0.0" 1338 | } 1339 | }, 1340 | "node_modules/normalize-path": { 1341 | "version": "3.0.0", 1342 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1343 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1344 | "dev": true, 1345 | "engines": { 1346 | "node": ">=0.10.0" 1347 | } 1348 | }, 1349 | "node_modules/npm-run-path": { 1350 | "version": "4.0.1", 1351 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 1352 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 1353 | "dev": true, 1354 | "dependencies": { 1355 | "path-key": "^3.0.0" 1356 | }, 1357 | "engines": { 1358 | "node": ">=8" 1359 | } 1360 | }, 1361 | "node_modules/object-assign": { 1362 | "version": "4.1.1", 1363 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1364 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1365 | "dev": true, 1366 | "engines": { 1367 | "node": ">=0.10.0" 1368 | } 1369 | }, 1370 | "node_modules/onetime": { 1371 | "version": "5.1.2", 1372 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1373 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1374 | "dev": true, 1375 | "dependencies": { 1376 | "mimic-fn": "^2.1.0" 1377 | }, 1378 | "engines": { 1379 | "node": ">=6" 1380 | }, 1381 | "funding": { 1382 | "url": "https://github.com/sponsors/sindresorhus" 1383 | } 1384 | }, 1385 | "node_modules/package-json-from-dist": { 1386 | "version": "1.0.1", 1387 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 1388 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 1389 | "dev": true 1390 | }, 1391 | "node_modules/path-browserify": { 1392 | "version": "1.0.1", 1393 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", 1394 | "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" 1395 | }, 1396 | "node_modules/path-key": { 1397 | "version": "3.1.1", 1398 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1399 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1400 | "dev": true, 1401 | "engines": { 1402 | "node": ">=8" 1403 | } 1404 | }, 1405 | "node_modules/path-scurry": { 1406 | "version": "1.11.1", 1407 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1408 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1409 | "dev": true, 1410 | "dependencies": { 1411 | "lru-cache": "^10.2.0", 1412 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1413 | }, 1414 | "engines": { 1415 | "node": ">=16 || 14 >=14.18" 1416 | }, 1417 | "funding": { 1418 | "url": "https://github.com/sponsors/isaacs" 1419 | } 1420 | }, 1421 | "node_modules/picocolors": { 1422 | "version": "1.1.1", 1423 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1424 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1425 | "dev": true 1426 | }, 1427 | "node_modules/picomatch": { 1428 | "version": "4.0.2", 1429 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 1430 | "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 1431 | "engines": { 1432 | "node": ">=12" 1433 | }, 1434 | "funding": { 1435 | "url": "https://github.com/sponsors/jonschlinkert" 1436 | } 1437 | }, 1438 | "node_modules/pirates": { 1439 | "version": "4.0.6", 1440 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 1441 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 1442 | "dev": true, 1443 | "engines": { 1444 | "node": ">= 6" 1445 | } 1446 | }, 1447 | "node_modules/postcss-load-config": { 1448 | "version": "6.0.1", 1449 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", 1450 | "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", 1451 | "dev": true, 1452 | "funding": [ 1453 | { 1454 | "type": "opencollective", 1455 | "url": "https://opencollective.com/postcss/" 1456 | }, 1457 | { 1458 | "type": "github", 1459 | "url": "https://github.com/sponsors/ai" 1460 | } 1461 | ], 1462 | "dependencies": { 1463 | "lilconfig": "^3.1.1" 1464 | }, 1465 | "engines": { 1466 | "node": ">= 18" 1467 | }, 1468 | "peerDependencies": { 1469 | "jiti": ">=1.21.0", 1470 | "postcss": ">=8.0.9", 1471 | "tsx": "^4.8.1", 1472 | "yaml": "^2.4.2" 1473 | }, 1474 | "peerDependenciesMeta": { 1475 | "jiti": { 1476 | "optional": true 1477 | }, 1478 | "postcss": { 1479 | "optional": true 1480 | }, 1481 | "tsx": { 1482 | "optional": true 1483 | }, 1484 | "yaml": { 1485 | "optional": true 1486 | } 1487 | } 1488 | }, 1489 | "node_modules/punycode": { 1490 | "version": "2.3.1", 1491 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1492 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1493 | "dev": true, 1494 | "engines": { 1495 | "node": ">=6" 1496 | } 1497 | }, 1498 | "node_modules/readdirp": { 1499 | "version": "3.6.0", 1500 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1501 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1502 | "dev": true, 1503 | "dependencies": { 1504 | "picomatch": "^2.2.1" 1505 | }, 1506 | "engines": { 1507 | "node": ">=8.10.0" 1508 | } 1509 | }, 1510 | "node_modules/readdirp/node_modules/picomatch": { 1511 | "version": "2.3.1", 1512 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1513 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1514 | "dev": true, 1515 | "engines": { 1516 | "node": ">=8.6" 1517 | }, 1518 | "funding": { 1519 | "url": "https://github.com/sponsors/jonschlinkert" 1520 | } 1521 | }, 1522 | "node_modules/resolve-from": { 1523 | "version": "5.0.0", 1524 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1525 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1526 | "dev": true, 1527 | "engines": { 1528 | "node": ">=8" 1529 | } 1530 | }, 1531 | "node_modules/rollup": { 1532 | "version": "4.24.0", 1533 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", 1534 | "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", 1535 | "dev": true, 1536 | "dependencies": { 1537 | "@types/estree": "1.0.6" 1538 | }, 1539 | "bin": { 1540 | "rollup": "dist/bin/rollup" 1541 | }, 1542 | "engines": { 1543 | "node": ">=18.0.0", 1544 | "npm": ">=8.0.0" 1545 | }, 1546 | "optionalDependencies": { 1547 | "@rollup/rollup-android-arm-eabi": "4.24.0", 1548 | "@rollup/rollup-android-arm64": "4.24.0", 1549 | "@rollup/rollup-darwin-arm64": "4.24.0", 1550 | "@rollup/rollup-darwin-x64": "4.24.0", 1551 | "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", 1552 | "@rollup/rollup-linux-arm-musleabihf": "4.24.0", 1553 | "@rollup/rollup-linux-arm64-gnu": "4.24.0", 1554 | "@rollup/rollup-linux-arm64-musl": "4.24.0", 1555 | "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", 1556 | "@rollup/rollup-linux-riscv64-gnu": "4.24.0", 1557 | "@rollup/rollup-linux-s390x-gnu": "4.24.0", 1558 | "@rollup/rollup-linux-x64-gnu": "4.24.0", 1559 | "@rollup/rollup-linux-x64-musl": "4.24.0", 1560 | "@rollup/rollup-win32-arm64-msvc": "4.24.0", 1561 | "@rollup/rollup-win32-ia32-msvc": "4.24.0", 1562 | "@rollup/rollup-win32-x64-msvc": "4.24.0", 1563 | "fsevents": "~2.3.2" 1564 | } 1565 | }, 1566 | "node_modules/shebang-command": { 1567 | "version": "2.0.0", 1568 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1569 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1570 | "dev": true, 1571 | "dependencies": { 1572 | "shebang-regex": "^3.0.0" 1573 | }, 1574 | "engines": { 1575 | "node": ">=8" 1576 | } 1577 | }, 1578 | "node_modules/shebang-regex": { 1579 | "version": "3.0.0", 1580 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1581 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1582 | "dev": true, 1583 | "engines": { 1584 | "node": ">=8" 1585 | } 1586 | }, 1587 | "node_modules/signal-exit": { 1588 | "version": "3.0.7", 1589 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1590 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 1591 | "dev": true 1592 | }, 1593 | "node_modules/source-map": { 1594 | "version": "0.8.0-beta.0", 1595 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", 1596 | "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", 1597 | "dev": true, 1598 | "dependencies": { 1599 | "whatwg-url": "^7.0.0" 1600 | }, 1601 | "engines": { 1602 | "node": ">= 8" 1603 | } 1604 | }, 1605 | "node_modules/string-width": { 1606 | "version": "5.1.2", 1607 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1608 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1609 | "dev": true, 1610 | "dependencies": { 1611 | "eastasianwidth": "^0.2.0", 1612 | "emoji-regex": "^9.2.2", 1613 | "strip-ansi": "^7.0.1" 1614 | }, 1615 | "engines": { 1616 | "node": ">=12" 1617 | }, 1618 | "funding": { 1619 | "url": "https://github.com/sponsors/sindresorhus" 1620 | } 1621 | }, 1622 | "node_modules/string-width-cjs": { 1623 | "name": "string-width", 1624 | "version": "4.2.3", 1625 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1626 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1627 | "dev": true, 1628 | "dependencies": { 1629 | "emoji-regex": "^8.0.0", 1630 | "is-fullwidth-code-point": "^3.0.0", 1631 | "strip-ansi": "^6.0.1" 1632 | }, 1633 | "engines": { 1634 | "node": ">=8" 1635 | } 1636 | }, 1637 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 1638 | "version": "5.0.1", 1639 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1640 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1641 | "dev": true, 1642 | "engines": { 1643 | "node": ">=8" 1644 | } 1645 | }, 1646 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 1647 | "version": "8.0.0", 1648 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1649 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1650 | "dev": true 1651 | }, 1652 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 1653 | "version": "6.0.1", 1654 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1655 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1656 | "dev": true, 1657 | "dependencies": { 1658 | "ansi-regex": "^5.0.1" 1659 | }, 1660 | "engines": { 1661 | "node": ">=8" 1662 | } 1663 | }, 1664 | "node_modules/strip-ansi": { 1665 | "version": "7.1.0", 1666 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1667 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1668 | "dev": true, 1669 | "dependencies": { 1670 | "ansi-regex": "^6.0.1" 1671 | }, 1672 | "engines": { 1673 | "node": ">=12" 1674 | }, 1675 | "funding": { 1676 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1677 | } 1678 | }, 1679 | "node_modules/strip-ansi-cjs": { 1680 | "name": "strip-ansi", 1681 | "version": "6.0.1", 1682 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1683 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1684 | "dev": true, 1685 | "dependencies": { 1686 | "ansi-regex": "^5.0.1" 1687 | }, 1688 | "engines": { 1689 | "node": ">=8" 1690 | } 1691 | }, 1692 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 1693 | "version": "5.0.1", 1694 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1695 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1696 | "dev": true, 1697 | "engines": { 1698 | "node": ">=8" 1699 | } 1700 | }, 1701 | "node_modules/strip-final-newline": { 1702 | "version": "2.0.0", 1703 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 1704 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 1705 | "dev": true, 1706 | "engines": { 1707 | "node": ">=6" 1708 | } 1709 | }, 1710 | "node_modules/sucrase": { 1711 | "version": "3.35.0", 1712 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 1713 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 1714 | "dev": true, 1715 | "dependencies": { 1716 | "@jridgewell/gen-mapping": "^0.3.2", 1717 | "commander": "^4.0.0", 1718 | "glob": "^10.3.10", 1719 | "lines-and-columns": "^1.1.6", 1720 | "mz": "^2.7.0", 1721 | "pirates": "^4.0.1", 1722 | "ts-interface-checker": "^0.1.9" 1723 | }, 1724 | "bin": { 1725 | "sucrase": "bin/sucrase", 1726 | "sucrase-node": "bin/sucrase-node" 1727 | }, 1728 | "engines": { 1729 | "node": ">=16 || 14 >=14.17" 1730 | } 1731 | }, 1732 | "node_modules/sucrase/node_modules/commander": { 1733 | "version": "4.1.1", 1734 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 1735 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 1736 | "dev": true, 1737 | "engines": { 1738 | "node": ">= 6" 1739 | } 1740 | }, 1741 | "node_modules/thenify": { 1742 | "version": "3.3.1", 1743 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 1744 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 1745 | "dev": true, 1746 | "dependencies": { 1747 | "any-promise": "^1.0.0" 1748 | } 1749 | }, 1750 | "node_modules/thenify-all": { 1751 | "version": "1.6.0", 1752 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 1753 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 1754 | "dev": true, 1755 | "dependencies": { 1756 | "thenify": ">= 3.1.0 < 4" 1757 | }, 1758 | "engines": { 1759 | "node": ">=0.8" 1760 | } 1761 | }, 1762 | "node_modules/tinyglobby": { 1763 | "version": "0.2.9", 1764 | "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.9.tgz", 1765 | "integrity": "sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==", 1766 | "dependencies": { 1767 | "fdir": "^6.4.0", 1768 | "picomatch": "^4.0.2" 1769 | }, 1770 | "engines": { 1771 | "node": ">=12.0.0" 1772 | } 1773 | }, 1774 | "node_modules/to-regex-range": { 1775 | "version": "5.0.1", 1776 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1777 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1778 | "dev": true, 1779 | "dependencies": { 1780 | "is-number": "^7.0.0" 1781 | }, 1782 | "engines": { 1783 | "node": ">=8.0" 1784 | } 1785 | }, 1786 | "node_modules/tr46": { 1787 | "version": "1.0.1", 1788 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", 1789 | "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", 1790 | "dev": true, 1791 | "dependencies": { 1792 | "punycode": "^2.1.0" 1793 | } 1794 | }, 1795 | "node_modules/tree-kill": { 1796 | "version": "1.2.2", 1797 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 1798 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 1799 | "dev": true, 1800 | "bin": { 1801 | "tree-kill": "cli.js" 1802 | } 1803 | }, 1804 | "node_modules/ts-interface-checker": { 1805 | "version": "0.1.13", 1806 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 1807 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 1808 | "dev": true 1809 | }, 1810 | "node_modules/ts-morph": { 1811 | "version": "24.0.0", 1812 | "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-24.0.0.tgz", 1813 | "integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==", 1814 | "dependencies": { 1815 | "@ts-morph/common": "~0.25.0", 1816 | "code-block-writer": "^13.0.3" 1817 | } 1818 | }, 1819 | "node_modules/tsup": { 1820 | "version": "8.3.0", 1821 | "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.3.0.tgz", 1822 | "integrity": "sha512-ALscEeyS03IomcuNdFdc0YWGVIkwH1Ws7nfTbAPuoILvEV2hpGQAY72LIOjglGo4ShWpZfpBqP/jpQVCzqYQag==", 1823 | "dev": true, 1824 | "dependencies": { 1825 | "bundle-require": "^5.0.0", 1826 | "cac": "^6.7.14", 1827 | "chokidar": "^3.6.0", 1828 | "consola": "^3.2.3", 1829 | "debug": "^4.3.5", 1830 | "esbuild": "^0.23.0", 1831 | "execa": "^5.1.1", 1832 | "joycon": "^3.1.1", 1833 | "picocolors": "^1.0.1", 1834 | "postcss-load-config": "^6.0.1", 1835 | "resolve-from": "^5.0.0", 1836 | "rollup": "^4.19.0", 1837 | "source-map": "0.8.0-beta.0", 1838 | "sucrase": "^3.35.0", 1839 | "tinyglobby": "^0.2.1", 1840 | "tree-kill": "^1.2.2" 1841 | }, 1842 | "bin": { 1843 | "tsup": "dist/cli-default.js", 1844 | "tsup-node": "dist/cli-node.js" 1845 | }, 1846 | "engines": { 1847 | "node": ">=18" 1848 | }, 1849 | "peerDependencies": { 1850 | "@microsoft/api-extractor": "^7.36.0", 1851 | "@swc/core": "^1", 1852 | "postcss": "^8.4.12", 1853 | "typescript": ">=4.5.0" 1854 | }, 1855 | "peerDependenciesMeta": { 1856 | "@microsoft/api-extractor": { 1857 | "optional": true 1858 | }, 1859 | "@swc/core": { 1860 | "optional": true 1861 | }, 1862 | "postcss": { 1863 | "optional": true 1864 | }, 1865 | "typescript": { 1866 | "optional": true 1867 | } 1868 | } 1869 | }, 1870 | "node_modules/tsup/node_modules/@esbuild/aix-ppc64": { 1871 | "version": "0.23.1", 1872 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", 1873 | "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", 1874 | "cpu": [ 1875 | "ppc64" 1876 | ], 1877 | "dev": true, 1878 | "optional": true, 1879 | "os": [ 1880 | "aix" 1881 | ], 1882 | "engines": { 1883 | "node": ">=18" 1884 | } 1885 | }, 1886 | "node_modules/tsup/node_modules/@esbuild/android-arm": { 1887 | "version": "0.23.1", 1888 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", 1889 | "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", 1890 | "cpu": [ 1891 | "arm" 1892 | ], 1893 | "dev": true, 1894 | "optional": true, 1895 | "os": [ 1896 | "android" 1897 | ], 1898 | "engines": { 1899 | "node": ">=18" 1900 | } 1901 | }, 1902 | "node_modules/tsup/node_modules/@esbuild/android-arm64": { 1903 | "version": "0.23.1", 1904 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", 1905 | "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", 1906 | "cpu": [ 1907 | "arm64" 1908 | ], 1909 | "dev": true, 1910 | "optional": true, 1911 | "os": [ 1912 | "android" 1913 | ], 1914 | "engines": { 1915 | "node": ">=18" 1916 | } 1917 | }, 1918 | "node_modules/tsup/node_modules/@esbuild/android-x64": { 1919 | "version": "0.23.1", 1920 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", 1921 | "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", 1922 | "cpu": [ 1923 | "x64" 1924 | ], 1925 | "dev": true, 1926 | "optional": true, 1927 | "os": [ 1928 | "android" 1929 | ], 1930 | "engines": { 1931 | "node": ">=18" 1932 | } 1933 | }, 1934 | "node_modules/tsup/node_modules/@esbuild/darwin-arm64": { 1935 | "version": "0.23.1", 1936 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", 1937 | "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", 1938 | "cpu": [ 1939 | "arm64" 1940 | ], 1941 | "dev": true, 1942 | "optional": true, 1943 | "os": [ 1944 | "darwin" 1945 | ], 1946 | "engines": { 1947 | "node": ">=18" 1948 | } 1949 | }, 1950 | "node_modules/tsup/node_modules/@esbuild/darwin-x64": { 1951 | "version": "0.23.1", 1952 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", 1953 | "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", 1954 | "cpu": [ 1955 | "x64" 1956 | ], 1957 | "dev": true, 1958 | "optional": true, 1959 | "os": [ 1960 | "darwin" 1961 | ], 1962 | "engines": { 1963 | "node": ">=18" 1964 | } 1965 | }, 1966 | "node_modules/tsup/node_modules/@esbuild/freebsd-arm64": { 1967 | "version": "0.23.1", 1968 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", 1969 | "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", 1970 | "cpu": [ 1971 | "arm64" 1972 | ], 1973 | "dev": true, 1974 | "optional": true, 1975 | "os": [ 1976 | "freebsd" 1977 | ], 1978 | "engines": { 1979 | "node": ">=18" 1980 | } 1981 | }, 1982 | "node_modules/tsup/node_modules/@esbuild/freebsd-x64": { 1983 | "version": "0.23.1", 1984 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", 1985 | "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", 1986 | "cpu": [ 1987 | "x64" 1988 | ], 1989 | "dev": true, 1990 | "optional": true, 1991 | "os": [ 1992 | "freebsd" 1993 | ], 1994 | "engines": { 1995 | "node": ">=18" 1996 | } 1997 | }, 1998 | "node_modules/tsup/node_modules/@esbuild/linux-arm": { 1999 | "version": "0.23.1", 2000 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", 2001 | "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", 2002 | "cpu": [ 2003 | "arm" 2004 | ], 2005 | "dev": true, 2006 | "optional": true, 2007 | "os": [ 2008 | "linux" 2009 | ], 2010 | "engines": { 2011 | "node": ">=18" 2012 | } 2013 | }, 2014 | "node_modules/tsup/node_modules/@esbuild/linux-arm64": { 2015 | "version": "0.23.1", 2016 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", 2017 | "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", 2018 | "cpu": [ 2019 | "arm64" 2020 | ], 2021 | "dev": true, 2022 | "optional": true, 2023 | "os": [ 2024 | "linux" 2025 | ], 2026 | "engines": { 2027 | "node": ">=18" 2028 | } 2029 | }, 2030 | "node_modules/tsup/node_modules/@esbuild/linux-ia32": { 2031 | "version": "0.23.1", 2032 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", 2033 | "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", 2034 | "cpu": [ 2035 | "ia32" 2036 | ], 2037 | "dev": true, 2038 | "optional": true, 2039 | "os": [ 2040 | "linux" 2041 | ], 2042 | "engines": { 2043 | "node": ">=18" 2044 | } 2045 | }, 2046 | "node_modules/tsup/node_modules/@esbuild/linux-loong64": { 2047 | "version": "0.23.1", 2048 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", 2049 | "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", 2050 | "cpu": [ 2051 | "loong64" 2052 | ], 2053 | "dev": true, 2054 | "optional": true, 2055 | "os": [ 2056 | "linux" 2057 | ], 2058 | "engines": { 2059 | "node": ">=18" 2060 | } 2061 | }, 2062 | "node_modules/tsup/node_modules/@esbuild/linux-mips64el": { 2063 | "version": "0.23.1", 2064 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", 2065 | "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", 2066 | "cpu": [ 2067 | "mips64el" 2068 | ], 2069 | "dev": true, 2070 | "optional": true, 2071 | "os": [ 2072 | "linux" 2073 | ], 2074 | "engines": { 2075 | "node": ">=18" 2076 | } 2077 | }, 2078 | "node_modules/tsup/node_modules/@esbuild/linux-ppc64": { 2079 | "version": "0.23.1", 2080 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", 2081 | "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", 2082 | "cpu": [ 2083 | "ppc64" 2084 | ], 2085 | "dev": true, 2086 | "optional": true, 2087 | "os": [ 2088 | "linux" 2089 | ], 2090 | "engines": { 2091 | "node": ">=18" 2092 | } 2093 | }, 2094 | "node_modules/tsup/node_modules/@esbuild/linux-riscv64": { 2095 | "version": "0.23.1", 2096 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", 2097 | "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", 2098 | "cpu": [ 2099 | "riscv64" 2100 | ], 2101 | "dev": true, 2102 | "optional": true, 2103 | "os": [ 2104 | "linux" 2105 | ], 2106 | "engines": { 2107 | "node": ">=18" 2108 | } 2109 | }, 2110 | "node_modules/tsup/node_modules/@esbuild/linux-s390x": { 2111 | "version": "0.23.1", 2112 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", 2113 | "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", 2114 | "cpu": [ 2115 | "s390x" 2116 | ], 2117 | "dev": true, 2118 | "optional": true, 2119 | "os": [ 2120 | "linux" 2121 | ], 2122 | "engines": { 2123 | "node": ">=18" 2124 | } 2125 | }, 2126 | "node_modules/tsup/node_modules/@esbuild/linux-x64": { 2127 | "version": "0.23.1", 2128 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", 2129 | "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", 2130 | "cpu": [ 2131 | "x64" 2132 | ], 2133 | "dev": true, 2134 | "optional": true, 2135 | "os": [ 2136 | "linux" 2137 | ], 2138 | "engines": { 2139 | "node": ">=18" 2140 | } 2141 | }, 2142 | "node_modules/tsup/node_modules/@esbuild/netbsd-x64": { 2143 | "version": "0.23.1", 2144 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", 2145 | "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", 2146 | "cpu": [ 2147 | "x64" 2148 | ], 2149 | "dev": true, 2150 | "optional": true, 2151 | "os": [ 2152 | "netbsd" 2153 | ], 2154 | "engines": { 2155 | "node": ">=18" 2156 | } 2157 | }, 2158 | "node_modules/tsup/node_modules/@esbuild/openbsd-arm64": { 2159 | "version": "0.23.1", 2160 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", 2161 | "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", 2162 | "cpu": [ 2163 | "arm64" 2164 | ], 2165 | "dev": true, 2166 | "optional": true, 2167 | "os": [ 2168 | "openbsd" 2169 | ], 2170 | "engines": { 2171 | "node": ">=18" 2172 | } 2173 | }, 2174 | "node_modules/tsup/node_modules/@esbuild/openbsd-x64": { 2175 | "version": "0.23.1", 2176 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", 2177 | "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", 2178 | "cpu": [ 2179 | "x64" 2180 | ], 2181 | "dev": true, 2182 | "optional": true, 2183 | "os": [ 2184 | "openbsd" 2185 | ], 2186 | "engines": { 2187 | "node": ">=18" 2188 | } 2189 | }, 2190 | "node_modules/tsup/node_modules/@esbuild/sunos-x64": { 2191 | "version": "0.23.1", 2192 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", 2193 | "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", 2194 | "cpu": [ 2195 | "x64" 2196 | ], 2197 | "dev": true, 2198 | "optional": true, 2199 | "os": [ 2200 | "sunos" 2201 | ], 2202 | "engines": { 2203 | "node": ">=18" 2204 | } 2205 | }, 2206 | "node_modules/tsup/node_modules/@esbuild/win32-arm64": { 2207 | "version": "0.23.1", 2208 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", 2209 | "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", 2210 | "cpu": [ 2211 | "arm64" 2212 | ], 2213 | "dev": true, 2214 | "optional": true, 2215 | "os": [ 2216 | "win32" 2217 | ], 2218 | "engines": { 2219 | "node": ">=18" 2220 | } 2221 | }, 2222 | "node_modules/tsup/node_modules/@esbuild/win32-ia32": { 2223 | "version": "0.23.1", 2224 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", 2225 | "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", 2226 | "cpu": [ 2227 | "ia32" 2228 | ], 2229 | "dev": true, 2230 | "optional": true, 2231 | "os": [ 2232 | "win32" 2233 | ], 2234 | "engines": { 2235 | "node": ">=18" 2236 | } 2237 | }, 2238 | "node_modules/tsup/node_modules/@esbuild/win32-x64": { 2239 | "version": "0.23.1", 2240 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", 2241 | "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", 2242 | "cpu": [ 2243 | "x64" 2244 | ], 2245 | "dev": true, 2246 | "optional": true, 2247 | "os": [ 2248 | "win32" 2249 | ], 2250 | "engines": { 2251 | "node": ">=18" 2252 | } 2253 | }, 2254 | "node_modules/tsup/node_modules/esbuild": { 2255 | "version": "0.23.1", 2256 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", 2257 | "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", 2258 | "dev": true, 2259 | "hasInstallScript": true, 2260 | "bin": { 2261 | "esbuild": "bin/esbuild" 2262 | }, 2263 | "engines": { 2264 | "node": ">=18" 2265 | }, 2266 | "optionalDependencies": { 2267 | "@esbuild/aix-ppc64": "0.23.1", 2268 | "@esbuild/android-arm": "0.23.1", 2269 | "@esbuild/android-arm64": "0.23.1", 2270 | "@esbuild/android-x64": "0.23.1", 2271 | "@esbuild/darwin-arm64": "0.23.1", 2272 | "@esbuild/darwin-x64": "0.23.1", 2273 | "@esbuild/freebsd-arm64": "0.23.1", 2274 | "@esbuild/freebsd-x64": "0.23.1", 2275 | "@esbuild/linux-arm": "0.23.1", 2276 | "@esbuild/linux-arm64": "0.23.1", 2277 | "@esbuild/linux-ia32": "0.23.1", 2278 | "@esbuild/linux-loong64": "0.23.1", 2279 | "@esbuild/linux-mips64el": "0.23.1", 2280 | "@esbuild/linux-ppc64": "0.23.1", 2281 | "@esbuild/linux-riscv64": "0.23.1", 2282 | "@esbuild/linux-s390x": "0.23.1", 2283 | "@esbuild/linux-x64": "0.23.1", 2284 | "@esbuild/netbsd-x64": "0.23.1", 2285 | "@esbuild/openbsd-arm64": "0.23.1", 2286 | "@esbuild/openbsd-x64": "0.23.1", 2287 | "@esbuild/sunos-x64": "0.23.1", 2288 | "@esbuild/win32-arm64": "0.23.1", 2289 | "@esbuild/win32-ia32": "0.23.1", 2290 | "@esbuild/win32-x64": "0.23.1" 2291 | } 2292 | }, 2293 | "node_modules/typescript": { 2294 | "version": "5.6.3", 2295 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", 2296 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", 2297 | "dev": true, 2298 | "bin": { 2299 | "tsc": "bin/tsc", 2300 | "tsserver": "bin/tsserver" 2301 | }, 2302 | "engines": { 2303 | "node": ">=14.17" 2304 | } 2305 | }, 2306 | "node_modules/undici-types": { 2307 | "version": "6.19.8", 2308 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 2309 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 2310 | "dev": true 2311 | }, 2312 | "node_modules/webidl-conversions": { 2313 | "version": "4.0.2", 2314 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 2315 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 2316 | "dev": true 2317 | }, 2318 | "node_modules/whatwg-url": { 2319 | "version": "7.1.0", 2320 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", 2321 | "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", 2322 | "dev": true, 2323 | "dependencies": { 2324 | "lodash.sortby": "^4.7.0", 2325 | "tr46": "^1.0.1", 2326 | "webidl-conversions": "^4.0.2" 2327 | } 2328 | }, 2329 | "node_modules/which": { 2330 | "version": "5.0.0", 2331 | "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", 2332 | "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", 2333 | "dependencies": { 2334 | "isexe": "^3.1.1" 2335 | }, 2336 | "bin": { 2337 | "node-which": "bin/which.js" 2338 | }, 2339 | "engines": { 2340 | "node": "^18.17.0 || >=20.5.0" 2341 | } 2342 | }, 2343 | "node_modules/wrap-ansi": { 2344 | "version": "8.1.0", 2345 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 2346 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 2347 | "dev": true, 2348 | "dependencies": { 2349 | "ansi-styles": "^6.1.0", 2350 | "string-width": "^5.0.1", 2351 | "strip-ansi": "^7.0.1" 2352 | }, 2353 | "engines": { 2354 | "node": ">=12" 2355 | }, 2356 | "funding": { 2357 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2358 | } 2359 | }, 2360 | "node_modules/wrap-ansi-cjs": { 2361 | "name": "wrap-ansi", 2362 | "version": "7.0.0", 2363 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2364 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2365 | "dev": true, 2366 | "dependencies": { 2367 | "ansi-styles": "^4.0.0", 2368 | "string-width": "^4.1.0", 2369 | "strip-ansi": "^6.0.0" 2370 | }, 2371 | "engines": { 2372 | "node": ">=10" 2373 | }, 2374 | "funding": { 2375 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2376 | } 2377 | }, 2378 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 2379 | "version": "5.0.1", 2380 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2381 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2382 | "dev": true, 2383 | "engines": { 2384 | "node": ">=8" 2385 | } 2386 | }, 2387 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 2388 | "version": "4.3.0", 2389 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2390 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2391 | "dev": true, 2392 | "dependencies": { 2393 | "color-convert": "^2.0.1" 2394 | }, 2395 | "engines": { 2396 | "node": ">=8" 2397 | }, 2398 | "funding": { 2399 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2400 | } 2401 | }, 2402 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 2403 | "version": "8.0.0", 2404 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2405 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2406 | "dev": true 2407 | }, 2408 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 2409 | "version": "4.2.3", 2410 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2411 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2412 | "dev": true, 2413 | "dependencies": { 2414 | "emoji-regex": "^8.0.0", 2415 | "is-fullwidth-code-point": "^3.0.0", 2416 | "strip-ansi": "^6.0.1" 2417 | }, 2418 | "engines": { 2419 | "node": ">=8" 2420 | } 2421 | }, 2422 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 2423 | "version": "6.0.1", 2424 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2425 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2426 | "dev": true, 2427 | "dependencies": { 2428 | "ansi-regex": "^5.0.1" 2429 | }, 2430 | "engines": { 2431 | "node": ">=8" 2432 | } 2433 | } 2434 | } 2435 | } 2436 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "patch-ts", 3 | "version": "1.0.0", 4 | "main": "cli.js", 5 | "scripts": { 6 | "build": "tsup" 7 | }, 8 | "bin": { 9 | "patch-ts": "./dist/cli.js" 10 | }, 11 | "keywords": [], 12 | "author": "Christian Woerz", 13 | "license": "MIT", 14 | "description": "Patch TypeScript to allow to define your own intrinsic types", 15 | "dependencies": { 16 | "commander": "^12.1.0", 17 | "ts-morph": "^24.0.0", 18 | "which": "^5.0.0" 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^22.7.5", 22 | "@types/which": "^3.0.4", 23 | "esbuild": "^0.24.0", 24 | "tsup": "^8.3.0", 25 | "typescript": "^5.6.3" 26 | }, 27 | "files": ["dist"] 28 | } 29 | -------------------------------------------------------------------------------- /src/ast-edit.ts: -------------------------------------------------------------------------------- 1 | import { Node, FunctionDeclaration, SyntaxKind, Project, ScriptTarget, SourceFile } from "ts-morph"; 2 | import { 3 | CHECK_TYPE_ALIAS, 4 | initLoaded, 5 | LOAD_TO_ADD_TEMPLATE, 6 | TYPE_ALIAS_INSTANTIATION, 7 | } from "./templates"; 8 | import * as path from "path"; 9 | 10 | export function getFunctionsByNameInOrder(names: string[], node: Node): FunctionDeclaration[] { 11 | const results: (FunctionDeclaration | undefined)[] = [...names].map(_ => undefined); 12 | 13 | for (const el of node.getDescendantsOfKind(SyntaxKind.FunctionDeclaration)) { 14 | const foundIndex = names.findIndex((name) => el.getName() === name); 15 | if (foundIndex > -1) { 16 | results[foundIndex] = el; 17 | if (!results.includes(undefined)) { 18 | return results as FunctionDeclaration[]; 19 | } 20 | } 21 | } 22 | 23 | throw new Error(); 24 | } 25 | 26 | export function addFirstInIf(fn: FunctionDeclaration, addCode: string) { 27 | if (fn) { 28 | const intrinsicCheckIf = fn.getFirstDescendantByKind(SyntaxKind.IfStatement); 29 | if(intrinsicCheckIf) { 30 | const innerIf = intrinsicCheckIf.getFirstDescendantByKind(SyntaxKind.IfStatement); 31 | innerIf?.replaceWithText(`${addCode}\n${innerIf.getText()}`); 32 | } 33 | } 34 | } 35 | 36 | export function appendAfterNode(node: Node, code: string) { 37 | node?.replaceWithText(`${node.getText()}\n${code}`); 38 | } 39 | 40 | export function initProjectWithFiles(filePaths: string[]): SourceFile[] { 41 | const project = new Project({ 42 | compilerOptions: { 43 | target: ScriptTarget.ESNext, 44 | }, 45 | }); 46 | return filePaths.map((fp) => project.addSourceFileAtPath(fp)); 47 | } 48 | 49 | export async function patchFile(file: SourceFile, startNode: Node, envPath: string | undefined, bundledPath: string | undefined) { 50 | const fileLog = path.basename(file.getFilePath()); 51 | const suffix = bundledPath ? "with fixed value from " + file.getFilePath() : "with dynamic value from " + file.getFilePath(); 52 | console.log(`\u{1F58A} Patching ${fileLog} ${suffix}`); 53 | const [isInstantiatedModule, createTypeChecker] = getFunctionsByNameInOrder( 54 | ["isInstantiatedModule", "createTypeChecker"], 55 | startNode 56 | ); 57 | 58 | createTypeChecker?.insertStatements(0, initLoaded(createTypeChecker.getParameters().at(0)?.getText()!)); 59 | 60 | appendAfterNode(isInstantiatedModule, LOAD_TO_ADD_TEMPLATE(envPath, bundledPath)); 61 | 62 | const [getTypeAliasInstantiation, checkTypeAliasDeclaration] = getFunctionsByNameInOrder( 63 | ["getTypeAliasInstantiation", "checkTypeAliasDeclaration"], 64 | createTypeChecker 65 | ); 66 | addFirstInIf(getTypeAliasInstantiation, TYPE_ALIAS_INSTANTIATION); 67 | addFirstInIf(checkTypeAliasDeclaration, CHECK_TYPE_ALIAS); 68 | await file.save(); 69 | console.log(`\u{2705} Done Patching ${fileLog}`); 70 | } 71 | -------------------------------------------------------------------------------- /src/cli-commands.ts: -------------------------------------------------------------------------------- 1 | import * as fsSync from "fs"; 2 | import * as path from "path"; 3 | 4 | import { createBackupOrRestores } from "./file-utils"; 5 | import { initProjectWithFiles, patchFile } from "./ast-edit"; 6 | 7 | export async function init(libPath: string) { 8 | const typescriptFilePath = path.resolve(libPath, "typescript.js"); 9 | const tscFilePath = path.resolve(libPath, "tsc.js"); 10 | const filePaths = [typescriptFilePath, tscFilePath]; 11 | await createBackupOrRestores(filePaths); 12 | return filePaths; 13 | } 14 | 15 | export async function patchIntrinsics( 16 | filePaths: string[], 17 | libPath: string, 18 | envPath: string | undefined, 19 | bundled: string | undefined 20 | ) { 21 | const [typescriptFile, tscFile] = initProjectWithFiles(filePaths); 22 | 23 | const typescriptFileStartNode = typescriptFile.getChildren().at(0)!.getChildren().at(2)!; 24 | 25 | const patchTypescript = patchFile(typescriptFile, typescriptFileStartNode, envPath, bundled); 26 | const patchTsc = patchFile(tscFile, tscFile, envPath, bundled); 27 | await Promise.all([patchTypescript, patchTsc]); 28 | fsSync.writeFileSync(libPath + "/.enhanced-init", "initialized"); 29 | } 30 | 31 | export async function createDts(filePath: string, outputPath: string) { 32 | if (!fsSync.existsSync(filePath) || fsSync.statSync(filePath).isDirectory()) { 33 | console.log("Path " + filePath + " is not a file"); 34 | return undefined; 35 | } 36 | 37 | try { 38 | const obj = eval(fsSync.readFileSync(filePath, 'utf-8')); 39 | const isValid = validateObj(obj); 40 | if (isValid) { 41 | createDtsFile(obj, outputPath); 42 | } 43 | } catch (e) { 44 | console.log(e); 45 | console.log("Could not read object from path " + filePath); 46 | } 47 | } 48 | 49 | function createDtsFile(obj: object, outputPath: string) { 50 | const abc = ["A", "B", "C", "D", "E", "F", "G", "H"]; 51 | const types = Object.entries(obj).map(([key, value]) => { 52 | const argumentLength = value.fn.length; 53 | 54 | if(argumentLength) { 55 | const args = abc.slice(0, argumentLength).join(", "); 56 | return `type ${key}<${args}> = intrinsic;` 57 | } 58 | }); 59 | const output = types.join("\n"); 60 | 61 | fsSync.writeFileSync(outputPath, output); 62 | console.log(`Wrote types to ${outputPath}`); 63 | } 64 | 65 | function validateObj(obj: object): boolean { 66 | let allOkay = true; 67 | Object.entries(obj).forEach(([key, value]) => { 68 | if (!value.fn) { 69 | console.log(`Key ${key} has no function property 'fn', but it needs one.`); 70 | allOkay = false; 71 | } 72 | if (typeof value?.fn !== "function") { 73 | console.log(`'fn' property of ${key} is not a function`); 74 | allOkay = false; 75 | } 76 | if (value.type && !["number", "boolean", "string"].includes(value.type)) { 77 | console.log(`Property 'type' in ${key} needs to be either "number", "string" or "boolean" if set.`); 78 | allOkay = false; 79 | } 80 | }); 81 | return allOkay; 82 | } 83 | -------------------------------------------------------------------------------- /src/cli.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import { Command } from "commander"; 4 | import { createDts, init, patchIntrinsics } from "./cli-commands"; 5 | import { copyToLib, existsFilesAt, exitOnAlreadyDone, findCurrentTscPath } from "./file-utils"; 6 | import * as path from "path"; 7 | const program = new Command(); 8 | 9 | program.name("patch-ts").description("CLI to enhance the typescript compiler").version("1.0.0"); 10 | 11 | program 12 | .command("create-dts") 13 | .description("Create the d.ts file from the input") 14 | .option('-i, --input ', "The intrinsics JavaScript file.") 15 | .option('-o, --output ', "The path where the d.ts file will be generated to.") 16 | .action((options: {input: string, output: string}) => { 17 | createDts(options.input, options.output); 18 | }) 19 | 20 | program 21 | .command("patch") 22 | .description("Patch the typescript.js and tsc.js file") 23 | .option("-f, --force", "Force the patch operation") 24 | .option("-b, --bundled ", "Bundles the file at the path into the TypeScript compiler. Will not update the types when the source file is changed.") 25 | .option("-ue, --useEnv ", "Reads the intrinsic-file path from the environment variable which is passed. Example: --useEnv PATCH_TS") 26 | .option("-l, --libPath ", "Path to the lib. Uses the current lib for tsc when not specified.") 27 | .action( 28 | async (options: { 29 | intrinsicsFileName: string; 30 | force: boolean; 31 | libPath: string; 32 | bundled: string; 33 | useEnv: string; 34 | }) => { 35 | const bundledPath = options.bundled; 36 | const libPath = options.libPath || findCurrentTscPath(); 37 | if (!existsFilesAt(libPath)) { 38 | return; 39 | } 40 | 41 | exitOnAlreadyDone(libPath, options.force); 42 | 43 | console.log("Path to lib which will be patched: " + libPath); 44 | if (options.useEnv) { 45 | handleUseEnv(libPath, options.useEnv); 46 | } else if(bundledPath) { 47 | handleBundled(libPath, bundledPath); 48 | } 49 | } 50 | ); 51 | 52 | async function handleBundled(libPath: string, bundledPath: string) { 53 | const targetPath = copyToLib(libPath, bundledPath); 54 | if(!targetPath) { 55 | console.log("Can't read JavaScript file from " + bundledPath); 56 | return; 57 | } 58 | const initializedTsFiles = await init(libPath); 59 | 60 | await patchIntrinsics(initializedTsFiles, libPath, undefined, targetPath); 61 | } 62 | 63 | async function handleUseEnv(libPath: string, envName: string) { 64 | const processPath = process.env.PATCH_TS; 65 | if (!processPath) { 66 | console.log("Env for PATCH_TS is not set. Please set it first and RESTART VSCODE COMPLETELY."); 67 | return; 68 | } 69 | const initializedTsFiles = await init(libPath); 70 | await patchIntrinsics(initializedTsFiles, libPath, envName, undefined); 71 | } 72 | 73 | program 74 | .command("show-lib") 75 | .description("Get the current lib path") 76 | .action(() => { 77 | const libPath = findCurrentTscPath(); 78 | if (!existsFilesAt(libPath)) { 79 | return; 80 | } 81 | console.log(path.resolve(libPath, "..", "lib")); 82 | }); 83 | 84 | program 85 | .command("revert") 86 | .description("Revert changes made to typescript.js and tsc.js files") 87 | .action(async () => { 88 | const libPath = findCurrentTscPath(); 89 | if (!existsFilesAt(libPath)) { 90 | return; 91 | } 92 | console.log("path to lib: " + libPath); 93 | await init(libPath); 94 | }); 95 | 96 | program.parse(process.argv); 97 | -------------------------------------------------------------------------------- /src/file-utils.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as fsSync from "fs"; 3 | import * as fsAsync from "fs/promises"; 4 | import * as which from "which"; 5 | 6 | type Email = intrinsic; 7 | // ^? 8 | 9 | type U = Email<'b'>; 10 | // ^? 11 | 12 | export function exitOnAlreadyDone(libPath: string, force: boolean) { 13 | const alreadyDonePath = path.resolve(libPath, ".enhanced-init"); 14 | if (force) { 15 | return false; 16 | } 17 | if (fsSync.existsSync(alreadyDonePath)) { 18 | console.log("Already patched the lib in " + libPath); 19 | process.exit(0); 20 | } 21 | } 22 | 23 | export function existsFilesAt(p: string | undefined): p is string { 24 | if(!p) { 25 | console.log("No path to the lib was found"); 26 | return false; 27 | } 28 | let allExist = true; 29 | if(!fsSync.existsSync(path.resolve(p, "typescript.js"))) { 30 | allExist = false; 31 | console.log("typescript.js does not exist at: " + p); 32 | } 33 | if(!fsSync.existsSync(path.resolve(p, "tsc.js"))) { 34 | allExist = false; 35 | console.log("tsc.js does not exist at: " + p); 36 | } 37 | return allExist; 38 | } 39 | 40 | export function copyToLib(lib: string, bundlePath: string): string | undefined { 41 | if(!fsSync.existsSync(bundlePath) || fsSync.statSync(bundlePath).isDirectory()) { 42 | console.log("File at path does not exist: " + bundlePath); 43 | return undefined; 44 | } 45 | const file = fsSync.readFileSync(bundlePath, 'utf-8'); 46 | const target = path.resolve(lib, "bundled_intrinsics.js"); 47 | fsSync.writeFileSync(target, file); 48 | return target; 49 | } 50 | 51 | function copyLogged(from: string, to: string) { 52 | const fromLog = path.basename(from); 53 | const toLog = path.basename(to); 54 | console.log(`\u{2795} copying ${fromLog} to ${toLog}`); 55 | const copied = fsAsync.copyFile(from, to); 56 | console.log(`\u{2705} copied ${fromLog} to ${toLog}`); 57 | return copied; 58 | } 59 | export function createBackupOrRestores(normals: string[]): Promise { 60 | const allFilePromises = normals.map((normal) => { 61 | const backup = normal + ".bak"; 62 | if (fsSync.existsSync(backup)) { 63 | return copyLogged(backup, normal); 64 | } else if (fsSync.existsSync(normal)) { 65 | return copyLogged(normal, backup); 66 | } 67 | console.log(`neither ${backup} or ${normal} was found. Exiting`); 68 | process.exit(1); 69 | }); 70 | 71 | return Promise.all(allFilePromises); 72 | } 73 | 74 | export function findCurrentTscPath(): string | undefined { 75 | const binPathString = which.sync("tsc"); 76 | return binPathString ? path.resolve(path.dirname(binPathString), "..", "lib", "node_modules", "typescript", "lib") : undefined; 77 | } 78 | -------------------------------------------------------------------------------- /src/templates.ts: -------------------------------------------------------------------------------- 1 | 2 | export const TYPE_ALIAS_INSTANTIATION = ` 3 | if(typeKind > 4) { 4 | const typeValues = typeArguments?.map(t => t.value) || []; 5 | const intrinsicInfos = loaded[symbol.escapedName]; 6 | const result = intrinsicInfos.fn(...typeValues); 7 | if(result === 'NEVER') { 8 | return neverType; 9 | } 10 | if(intrinsicInfos.type === 'boolean') { 11 | return result ? trueType : falseType; 12 | } else if(intrinsicInfos.type === 'number') { 13 | return getNumberLiteralType(result); 14 | } else { 15 | return getStringLiteralType(result + ''); 16 | } 17 | }`; 18 | 19 | export const CHECK_TYPE_ALIAS = ` 20 | if(loaded[node.name.escapedText]?.fn.length !== typeParameterCount) { 21 | error2(node.type, Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types); 22 | }`; 23 | 24 | export const LOAD_TO_ADD_TEMPLATE = (env: string | undefined, bundledPath: string | undefined) => ` 25 | var myFs = require('fs'); 26 | var myPath = require('path'); 27 | 28 | var loaded; 29 | 30 | var existingIntrinsic = { 31 | Uppercase: 0, 32 | Lowercase: 1, 33 | Capitalize: 2, 34 | Uncapitalize: 3, 35 | NoInfer: 4 36 | }; 37 | 38 | function getExtension(h) { 39 | const bundledFile = ${bundledPath ? '"' + bundledPath + '"' : "undefined"}; 40 | 41 | const pathToFile = bundledFile ?? process.env["${env}"]; 42 | if(!myFs.existsSync(pathToFile)) { 43 | return {}; 44 | } 45 | const readFile = myFs.readFileSync(pathToFile, 'utf-8'); 46 | return eval(readFile); 47 | }`; 48 | 49 | export function initLoaded(argName: string) { 50 | return ` 51 | if (!loaded) { 52 | loaded = getExtension(${argName}); 53 | } 54 | const addedIntrinsics = Object.keys(loaded).reduce((acc, k, i) => ({ 55 | ...acc, 56 | [k]: i + Object.keys(existingIntrinsic).length 57 | }), {}); 58 | const intrinsicTypeKinds = new Map(Object.entries({ 59 | ...existingIntrinsic, 60 | ...addedIntrinsics 61 | }));`; 62 | } 63 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "moduleResolution": "Node", 5 | "plugins": [ 6 | { 7 | "name": "patch-ts", 8 | "test": "asdf" 9 | } 10 | ], 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | entry: ["src/cli.ts"], 5 | format: ["cjs", "esm"], // Build for commonJS and ESmodules 6 | dts: true, // Generate declaration file (.d.ts) 7 | splitting: false, 8 | sourcemap: true, 9 | clean: true, 10 | }); --------------------------------------------------------------------------------