├── .editorconfig ├── .gitignore ├── .prettierrc.yml ├── .vscode ├── launch.json └── settings.json ├── LICENSE ├── README.md ├── examples ├── demo │ ├── .gitignore │ ├── common │ │ └── hello.ts │ ├── main.ts │ ├── package.json │ └── tsconfig.json ├── rollup-demo │ ├── .babelrc │ ├── .gitignore │ ├── .prettierrc.yml │ ├── .vscode │ │ ├── extensions.json │ │ └── settings.json │ ├── package.json │ ├── pnpm-lock.yaml │ ├── rollup.config.js │ ├── src │ │ ├── common │ │ │ └── helper.ts │ │ ├── hello.ts │ │ └── index.ts │ └── tsconfig.json ├── vite-demo │ ├── .gitignore │ ├── index.html │ ├── package.json │ ├── src │ │ ├── hello.ts │ │ └── index.ts │ ├── tsconfig.json │ └── vite.config.ts └── webpack-demo │ ├── .babelrc │ ├── .gitignore │ ├── package.json │ ├── src │ ├── hello.ts │ ├── index.ts │ ├── tsconfig.json │ └── world.ts │ └── webpack.dev.js ├── jest.config.ts ├── package.json ├── packages ├── rollup-plugin-tsconfig-paths │ ├── .babelrc │ ├── .browserslistrc │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── index.d.ts │ ├── integration.test.mjs │ ├── package.json │ ├── src │ │ ├── index.mts │ │ ├── index.ts │ │ └── plugin.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── ts-paths-resolve-plugin │ ├── .babelrc │ ├── .browserslistrc │ ├── .gitignore │ ├── .prettierignore │ ├── LICENSE │ ├── README.md │ ├── index.d.ts │ ├── integration.test.mjs │ ├── package.json │ ├── src │ │ ├── index.mts │ │ ├── index.ts │ │ └── plugin.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── typescript-paths │ ├── .babelrc │ ├── .browserslistrc │ ├── .gitignore │ ├── .prettierignore │ ├── LICENSE │ ├── README.md │ ├── lib │ │ └── esm │ │ │ ├── README.md │ │ │ ├── loader.js │ │ │ └── package.json │ ├── package.json │ ├── register.js │ ├── rollup.config.mjs │ ├── src │ │ ├── handler.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ ├── paths.ts │ │ └── register.ts │ ├── tests │ │ ├── bad.tsconfig.json │ │ ├── bad2.tsconfig.json │ │ ├── bad3.tsconfig.json │ │ ├── index.spec.ts │ │ ├── nodenext │ │ │ ├── index.spec.ts │ │ │ ├── main.tsx │ │ │ ├── src │ │ │ │ ├── App.tsx │ │ │ │ └── Svg.svg.ts │ │ │ └── tsconfig.json │ │ ├── t0 │ │ │ ├── abc │ │ │ │ └── fff.js │ │ │ ├── demo.ts │ │ │ ├── hello.ts │ │ │ ├── index.spec.ts │ │ │ ├── qqq │ │ │ │ ├── hello.d.ts │ │ │ │ └── hello.js │ │ │ ├── tsconfig.json │ │ │ ├── typings │ │ │ │ └── index.d.ts │ │ │ ├── xx │ │ │ │ ├── ee.ts │ │ │ │ ├── ff.ts │ │ │ │ ├── qq.ts │ │ │ │ └── vv.abs.ts │ │ │ └── xyz │ │ │ │ └── abc │ │ │ │ └── xyz.ts │ │ ├── t1 │ │ │ ├── he │ │ │ │ └── hello.ts │ │ │ ├── index.ts │ │ │ └── tsconfig.json │ │ ├── t2 │ │ │ ├── app │ │ │ │ ├── bad.tsconfig.json │ │ │ │ ├── main.ts │ │ │ │ └── tsconfig.json │ │ │ ├── index.spec.ts │ │ │ ├── shared │ │ │ │ ├── foo.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── my-helpers │ │ │ │ │ └── bar.ts │ │ │ │ ├── pic.svg │ │ │ │ └── tsconfig.json │ │ │ └── shared2 │ │ │ │ ├── foo.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── my-helpers │ │ │ │ └── bar.ts │ │ │ │ ├── pic.svg │ │ │ │ └── tsconfig.json │ │ ├── t3 │ │ │ ├── base.tsconfig.json │ │ │ ├── index.spec.ts │ │ │ ├── src │ │ │ │ ├── main.ts │ │ │ │ └── tsconfig.json │ │ │ └── util │ │ │ │ └── common │ │ │ │ └── hello.ts │ │ ├── t4 │ │ │ ├── index.spec.ts │ │ │ ├── main.tsx │ │ │ ├── src │ │ │ │ └── App.tsx │ │ │ └── tsconfig.json │ │ ├── t5 │ │ │ ├── index.spec.ts │ │ │ ├── src │ │ │ │ ├── com │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── src │ │ │ │ │ │ └── module.ts │ │ │ │ │ └── tsconfig.json │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── tsconfig.base.json │ │ └── tsconfig.json │ ├── tsconfig.json │ └── types │ │ ├── handler.d.ts │ │ ├── index.d.ts │ │ ├── log.d.ts │ │ ├── logger.d.ts │ │ ├── paths.d.ts │ │ └── register.d.ts └── vite-plugin-tsconfig-paths │ ├── .babelrc │ ├── .browserslistrc │ ├── .gitignore │ ├── .prettierignore │ ├── LICENSE │ ├── README.md │ ├── index.d.ts │ ├── integration.test.mjs │ ├── package.json │ ├── src │ ├── index.mts │ ├── index.ts │ └── plugin.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://editorconfig.org/ 2 | 3 | root = true 4 | 5 | # Unix-style newlines with a newline ending every file 6 | [*] 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | charset = utf-8 11 | indent_style = tab 12 | indent_size = 4 13 | 14 | [*.{tsx,ts,jsx,js,html,ejs}] 15 | max_line_length = 120 16 | 17 | [*.{scss,less,css}] 18 | max_line_length = 80 19 | 20 | [*.{json,yaml,yml,babelrc}] 21 | max_line_length = 80 22 | indent_style = space 23 | indent_size = 2 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | -------------------------------------------------------------------------------- /.prettierrc.yml: -------------------------------------------------------------------------------- 1 | semi: false 2 | arrowParens: avoid 3 | trailingComma: all 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Debug Jest Tests", 6 | "type": "node", 7 | "request": "launch", 8 | "runtimeArgs": [ 9 | "--inspect-brk", 10 | "${workspaceRoot}/node_modules/jest/bin/jest.js", 11 | "--runInBand" 12 | ], 13 | "console": "integratedTerminal", 14 | "internalConsoleOptions": "neverOpen", 15 | "port": 9229 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.codeActionsOnSave": { 4 | "source.organizeImports": "explicit" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 lightyen 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 | [npm:latest]: https://www.npmjs.com/package/typescript-paths/v/latest 2 | [npm:latest:badge]: https://img.shields.io/npm/v/typescript-paths/latest?style=flat-square 3 | 4 | # `typescript-paths` [![Latest Version][npm:latest:badge]][npm:latest] 5 | 6 | Resolve TypeScript config paths in runtime. 7 | 8 | ## Packages 9 | 10 | This repository is a monorepo containing the following packages: 11 | 12 | - [`typescript-paths`](https://github.com/lightyen/typescript-paths/blob/main/packages/typescript-paths) 13 | - [`rollup-plugin-tsconfig-paths`](https://github.com/lightyen/typescript-paths/blob/main/packages/rollup-plugin-tsconfig-paths) 14 | - [`vite-plugin-tsconfig-paths`](https://github.com/lightyen/typescript-paths/blob/main/packages/vite-plugin-tsconfig-paths) 15 | - [`ts-paths-resolve-plugin`](https://github.com/lightyen/typescript-paths/blob/main/packages/ts-paths-resolve-plugin) 16 | 17 | ## References 18 | 19 | - https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping 20 | - https://github.com/microsoft/TypeScript/issues/5039 21 | -------------------------------------------------------------------------------- /examples/demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /examples/demo/common/hello.ts: -------------------------------------------------------------------------------- 1 | export const value = "helloworld" 2 | -------------------------------------------------------------------------------- /examples/demo/main.ts: -------------------------------------------------------------------------------- 1 | import { value } from "@/hello" 2 | console.log(value) 3 | -------------------------------------------------------------------------------- /examples/demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "scripts": { 4 | "start": "ts-node -r typescript-paths/register main.ts" 5 | }, 6 | "devDependencies": { 7 | "@swc/core": "1.3.82", 8 | "@types/node": "*", 9 | "ts-node": "10.9.1", 10 | "typescript": "5.2.2", 11 | "typescript-paths": "../../packages/typescript-paths" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /examples/demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "CommonJS", 4 | "target": "es2020", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "isolatedModules": true, 8 | "esModuleInterop": true, 9 | "resolveJsonModule": true, 10 | "noEmit": true, 11 | "allowSyntheticDefaultImports": true, 12 | "paths": { 13 | "@/*": ["./common/*"] 14 | } 15 | }, 16 | "ts-node": { 17 | "transpileOnly": true, 18 | "transpiler": "ts-node/transpilers/swc-experimental" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /examples/rollup-demo/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env", "@babel/preset-typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /examples/rollup-demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /examples/rollup-demo/.prettierrc.yml: -------------------------------------------------------------------------------- 1 | endOfLine: lf 2 | printWidth: 120 3 | overrides: 4 | - files: "**/!(*.json|*.yaml|*.yml|.babelrc|.prettierrc)" 5 | options: 6 | useTabs: true 7 | semi: false 8 | singleQuote: false 9 | jsxSingleQuote: false 10 | arrowParens: avoid 11 | trailingComma: all 12 | -------------------------------------------------------------------------------- /examples/rollup-demo/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "christian-kohler.npm-intellisense", 4 | "editorconfig.editorconfig", 5 | "esbenp.prettier-vscode", 6 | "pkief.material-icon-theme" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /examples/rollup-demo/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "esbenp.prettier-vscode", 3 | "editor.formatOnSave": true, 4 | "editor.codeActionsOnSave": { 5 | "source.organizeImports": "explicit" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /examples/rollup-demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module", 3 | "scripts": { 4 | "dev": "rollup -c" 5 | }, 6 | "devDependencies": { 7 | "@babel/core": "7.25.2", 8 | "@babel/preset-env": "7.25.3", 9 | "@babel/preset-typescript": "7.24.7", 10 | "@babel/runtime": "7.25.0", 11 | "@rollup/plugin-babel": "6.0.4", 12 | "@rollup/plugin-commonjs": "26.0.1", 13 | "@rollup/plugin-node-resolve": "15.2.3", 14 | "@rollup/plugin-run": "3.1.0", 15 | "clsx": "2.1.1", 16 | "prettier": "3.3.3", 17 | "rollup": "4.20.0", 18 | "rollup-plugin-tsconfig-paths": "../../packages/rollup-plugin-tsconfig-paths" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /examples/rollup-demo/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@babel/core': 12 | specifier: 7.25.2 13 | version: 7.25.2 14 | '@babel/preset-env': 15 | specifier: 7.25.3 16 | version: 7.25.3(@babel/core@7.25.2) 17 | '@babel/preset-typescript': 18 | specifier: 7.24.7 19 | version: 7.24.7(@babel/core@7.25.2) 20 | '@babel/runtime': 21 | specifier: 7.25.0 22 | version: 7.25.0 23 | '@rollup/plugin-babel': 24 | specifier: 6.0.4 25 | version: 6.0.4(@babel/core@7.25.2)(rollup@4.20.0) 26 | '@rollup/plugin-commonjs': 27 | specifier: 26.0.1 28 | version: 26.0.1(rollup@4.20.0) 29 | '@rollup/plugin-node-resolve': 30 | specifier: 15.2.3 31 | version: 15.2.3(rollup@4.20.0) 32 | '@rollup/plugin-run': 33 | specifier: 3.1.0 34 | version: 3.1.0(rollup@4.20.0) 35 | clsx: 36 | specifier: 2.1.1 37 | version: 2.1.1 38 | rollup: 39 | specifier: 4.20.0 40 | version: 4.20.0 41 | rollup-plugin-tsconfig-paths: 42 | specifier: 1.5.2 43 | version: 1.5.2(rollup@4.20.0)(typescript@5.5.4) 44 | 45 | packages: 46 | 47 | '@ampproject/remapping@2.3.0': 48 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 49 | engines: {node: '>=6.0.0'} 50 | 51 | '@babel/code-frame@7.24.7': 52 | resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} 53 | engines: {node: '>=6.9.0'} 54 | 55 | '@babel/compat-data@7.25.2': 56 | resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} 57 | engines: {node: '>=6.9.0'} 58 | 59 | '@babel/core@7.25.2': 60 | resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} 61 | engines: {node: '>=6.9.0'} 62 | 63 | '@babel/generator@7.25.0': 64 | resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} 65 | engines: {node: '>=6.9.0'} 66 | 67 | '@babel/helper-annotate-as-pure@7.24.7': 68 | resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} 69 | engines: {node: '>=6.9.0'} 70 | 71 | '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': 72 | resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} 73 | engines: {node: '>=6.9.0'} 74 | 75 | '@babel/helper-compilation-targets@7.25.2': 76 | resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} 77 | engines: {node: '>=6.9.0'} 78 | 79 | '@babel/helper-create-class-features-plugin@7.25.0': 80 | resolution: {integrity: sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==} 81 | engines: {node: '>=6.9.0'} 82 | peerDependencies: 83 | '@babel/core': ^7.0.0 84 | 85 | '@babel/helper-create-regexp-features-plugin@7.25.2': 86 | resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} 87 | engines: {node: '>=6.9.0'} 88 | peerDependencies: 89 | '@babel/core': ^7.0.0 90 | 91 | '@babel/helper-define-polyfill-provider@0.6.2': 92 | resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} 93 | peerDependencies: 94 | '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 95 | 96 | '@babel/helper-member-expression-to-functions@7.24.8': 97 | resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} 98 | engines: {node: '>=6.9.0'} 99 | 100 | '@babel/helper-module-imports@7.24.7': 101 | resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} 102 | engines: {node: '>=6.9.0'} 103 | 104 | '@babel/helper-module-transforms@7.25.2': 105 | resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} 106 | engines: {node: '>=6.9.0'} 107 | peerDependencies: 108 | '@babel/core': ^7.0.0 109 | 110 | '@babel/helper-optimise-call-expression@7.24.7': 111 | resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} 112 | engines: {node: '>=6.9.0'} 113 | 114 | '@babel/helper-plugin-utils@7.24.8': 115 | resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} 116 | engines: {node: '>=6.9.0'} 117 | 118 | '@babel/helper-remap-async-to-generator@7.25.0': 119 | resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} 120 | engines: {node: '>=6.9.0'} 121 | peerDependencies: 122 | '@babel/core': ^7.0.0 123 | 124 | '@babel/helper-replace-supers@7.25.0': 125 | resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} 126 | engines: {node: '>=6.9.0'} 127 | peerDependencies: 128 | '@babel/core': ^7.0.0 129 | 130 | '@babel/helper-simple-access@7.24.7': 131 | resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} 132 | engines: {node: '>=6.9.0'} 133 | 134 | '@babel/helper-skip-transparent-expression-wrappers@7.24.7': 135 | resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} 136 | engines: {node: '>=6.9.0'} 137 | 138 | '@babel/helper-string-parser@7.24.8': 139 | resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} 140 | engines: {node: '>=6.9.0'} 141 | 142 | '@babel/helper-validator-identifier@7.24.7': 143 | resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} 144 | engines: {node: '>=6.9.0'} 145 | 146 | '@babel/helper-validator-option@7.24.8': 147 | resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} 148 | engines: {node: '>=6.9.0'} 149 | 150 | '@babel/helper-wrap-function@7.25.0': 151 | resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} 152 | engines: {node: '>=6.9.0'} 153 | 154 | '@babel/helpers@7.25.0': 155 | resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} 156 | engines: {node: '>=6.9.0'} 157 | 158 | '@babel/highlight@7.24.7': 159 | resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} 160 | engines: {node: '>=6.9.0'} 161 | 162 | '@babel/parser@7.25.3': 163 | resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} 164 | engines: {node: '>=6.0.0'} 165 | hasBin: true 166 | 167 | '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3': 168 | resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} 169 | engines: {node: '>=6.9.0'} 170 | peerDependencies: 171 | '@babel/core': ^7.0.0 172 | 173 | '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0': 174 | resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} 175 | engines: {node: '>=6.9.0'} 176 | peerDependencies: 177 | '@babel/core': ^7.0.0 178 | 179 | '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0': 180 | resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} 181 | engines: {node: '>=6.9.0'} 182 | peerDependencies: 183 | '@babel/core': ^7.0.0 184 | 185 | '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': 186 | resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} 187 | engines: {node: '>=6.9.0'} 188 | peerDependencies: 189 | '@babel/core': ^7.13.0 190 | 191 | '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0': 192 | resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} 193 | engines: {node: '>=6.9.0'} 194 | peerDependencies: 195 | '@babel/core': ^7.0.0 196 | 197 | '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': 198 | resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} 199 | engines: {node: '>=6.9.0'} 200 | peerDependencies: 201 | '@babel/core': ^7.0.0-0 202 | 203 | '@babel/plugin-syntax-async-generators@7.8.4': 204 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 205 | peerDependencies: 206 | '@babel/core': ^7.0.0-0 207 | 208 | '@babel/plugin-syntax-class-properties@7.12.13': 209 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 210 | peerDependencies: 211 | '@babel/core': ^7.0.0-0 212 | 213 | '@babel/plugin-syntax-class-static-block@7.14.5': 214 | resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} 215 | engines: {node: '>=6.9.0'} 216 | peerDependencies: 217 | '@babel/core': ^7.0.0-0 218 | 219 | '@babel/plugin-syntax-dynamic-import@7.8.3': 220 | resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} 221 | peerDependencies: 222 | '@babel/core': ^7.0.0-0 223 | 224 | '@babel/plugin-syntax-export-namespace-from@7.8.3': 225 | resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} 226 | peerDependencies: 227 | '@babel/core': ^7.0.0-0 228 | 229 | '@babel/plugin-syntax-import-assertions@7.24.7': 230 | resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} 231 | engines: {node: '>=6.9.0'} 232 | peerDependencies: 233 | '@babel/core': ^7.0.0-0 234 | 235 | '@babel/plugin-syntax-import-attributes@7.24.7': 236 | resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} 237 | engines: {node: '>=6.9.0'} 238 | peerDependencies: 239 | '@babel/core': ^7.0.0-0 240 | 241 | '@babel/plugin-syntax-import-meta@7.10.4': 242 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 243 | peerDependencies: 244 | '@babel/core': ^7.0.0-0 245 | 246 | '@babel/plugin-syntax-json-strings@7.8.3': 247 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 248 | peerDependencies: 249 | '@babel/core': ^7.0.0-0 250 | 251 | '@babel/plugin-syntax-jsx@7.24.7': 252 | resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} 253 | engines: {node: '>=6.9.0'} 254 | peerDependencies: 255 | '@babel/core': ^7.0.0-0 256 | 257 | '@babel/plugin-syntax-logical-assignment-operators@7.10.4': 258 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 259 | peerDependencies: 260 | '@babel/core': ^7.0.0-0 261 | 262 | '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': 263 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 264 | peerDependencies: 265 | '@babel/core': ^7.0.0-0 266 | 267 | '@babel/plugin-syntax-numeric-separator@7.10.4': 268 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 269 | peerDependencies: 270 | '@babel/core': ^7.0.0-0 271 | 272 | '@babel/plugin-syntax-object-rest-spread@7.8.3': 273 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 274 | peerDependencies: 275 | '@babel/core': ^7.0.0-0 276 | 277 | '@babel/plugin-syntax-optional-catch-binding@7.8.3': 278 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 279 | peerDependencies: 280 | '@babel/core': ^7.0.0-0 281 | 282 | '@babel/plugin-syntax-optional-chaining@7.8.3': 283 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 284 | peerDependencies: 285 | '@babel/core': ^7.0.0-0 286 | 287 | '@babel/plugin-syntax-private-property-in-object@7.14.5': 288 | resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} 289 | engines: {node: '>=6.9.0'} 290 | peerDependencies: 291 | '@babel/core': ^7.0.0-0 292 | 293 | '@babel/plugin-syntax-top-level-await@7.14.5': 294 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 295 | engines: {node: '>=6.9.0'} 296 | peerDependencies: 297 | '@babel/core': ^7.0.0-0 298 | 299 | '@babel/plugin-syntax-typescript@7.24.7': 300 | resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} 301 | engines: {node: '>=6.9.0'} 302 | peerDependencies: 303 | '@babel/core': ^7.0.0-0 304 | 305 | '@babel/plugin-syntax-unicode-sets-regex@7.18.6': 306 | resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} 307 | engines: {node: '>=6.9.0'} 308 | peerDependencies: 309 | '@babel/core': ^7.0.0 310 | 311 | '@babel/plugin-transform-arrow-functions@7.24.7': 312 | resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} 313 | engines: {node: '>=6.9.0'} 314 | peerDependencies: 315 | '@babel/core': ^7.0.0-0 316 | 317 | '@babel/plugin-transform-async-generator-functions@7.25.0': 318 | resolution: {integrity: sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==} 319 | engines: {node: '>=6.9.0'} 320 | peerDependencies: 321 | '@babel/core': ^7.0.0-0 322 | 323 | '@babel/plugin-transform-async-to-generator@7.24.7': 324 | resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} 325 | engines: {node: '>=6.9.0'} 326 | peerDependencies: 327 | '@babel/core': ^7.0.0-0 328 | 329 | '@babel/plugin-transform-block-scoped-functions@7.24.7': 330 | resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} 331 | engines: {node: '>=6.9.0'} 332 | peerDependencies: 333 | '@babel/core': ^7.0.0-0 334 | 335 | '@babel/plugin-transform-block-scoping@7.25.0': 336 | resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} 337 | engines: {node: '>=6.9.0'} 338 | peerDependencies: 339 | '@babel/core': ^7.0.0-0 340 | 341 | '@babel/plugin-transform-class-properties@7.24.7': 342 | resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} 343 | engines: {node: '>=6.9.0'} 344 | peerDependencies: 345 | '@babel/core': ^7.0.0-0 346 | 347 | '@babel/plugin-transform-class-static-block@7.24.7': 348 | resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} 349 | engines: {node: '>=6.9.0'} 350 | peerDependencies: 351 | '@babel/core': ^7.12.0 352 | 353 | '@babel/plugin-transform-classes@7.25.0': 354 | resolution: {integrity: sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==} 355 | engines: {node: '>=6.9.0'} 356 | peerDependencies: 357 | '@babel/core': ^7.0.0-0 358 | 359 | '@babel/plugin-transform-computed-properties@7.24.7': 360 | resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} 361 | engines: {node: '>=6.9.0'} 362 | peerDependencies: 363 | '@babel/core': ^7.0.0-0 364 | 365 | '@babel/plugin-transform-destructuring@7.24.8': 366 | resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} 367 | engines: {node: '>=6.9.0'} 368 | peerDependencies: 369 | '@babel/core': ^7.0.0-0 370 | 371 | '@babel/plugin-transform-dotall-regex@7.24.7': 372 | resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} 373 | engines: {node: '>=6.9.0'} 374 | peerDependencies: 375 | '@babel/core': ^7.0.0-0 376 | 377 | '@babel/plugin-transform-duplicate-keys@7.24.7': 378 | resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} 379 | engines: {node: '>=6.9.0'} 380 | peerDependencies: 381 | '@babel/core': ^7.0.0-0 382 | 383 | '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0': 384 | resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} 385 | engines: {node: '>=6.9.0'} 386 | peerDependencies: 387 | '@babel/core': ^7.0.0 388 | 389 | '@babel/plugin-transform-dynamic-import@7.24.7': 390 | resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} 391 | engines: {node: '>=6.9.0'} 392 | peerDependencies: 393 | '@babel/core': ^7.0.0-0 394 | 395 | '@babel/plugin-transform-exponentiation-operator@7.24.7': 396 | resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} 397 | engines: {node: '>=6.9.0'} 398 | peerDependencies: 399 | '@babel/core': ^7.0.0-0 400 | 401 | '@babel/plugin-transform-export-namespace-from@7.24.7': 402 | resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} 403 | engines: {node: '>=6.9.0'} 404 | peerDependencies: 405 | '@babel/core': ^7.0.0-0 406 | 407 | '@babel/plugin-transform-for-of@7.24.7': 408 | resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} 409 | engines: {node: '>=6.9.0'} 410 | peerDependencies: 411 | '@babel/core': ^7.0.0-0 412 | 413 | '@babel/plugin-transform-function-name@7.25.1': 414 | resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} 415 | engines: {node: '>=6.9.0'} 416 | peerDependencies: 417 | '@babel/core': ^7.0.0-0 418 | 419 | '@babel/plugin-transform-json-strings@7.24.7': 420 | resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} 421 | engines: {node: '>=6.9.0'} 422 | peerDependencies: 423 | '@babel/core': ^7.0.0-0 424 | 425 | '@babel/plugin-transform-literals@7.25.2': 426 | resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} 427 | engines: {node: '>=6.9.0'} 428 | peerDependencies: 429 | '@babel/core': ^7.0.0-0 430 | 431 | '@babel/plugin-transform-logical-assignment-operators@7.24.7': 432 | resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} 433 | engines: {node: '>=6.9.0'} 434 | peerDependencies: 435 | '@babel/core': ^7.0.0-0 436 | 437 | '@babel/plugin-transform-member-expression-literals@7.24.7': 438 | resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} 439 | engines: {node: '>=6.9.0'} 440 | peerDependencies: 441 | '@babel/core': ^7.0.0-0 442 | 443 | '@babel/plugin-transform-modules-amd@7.24.7': 444 | resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} 445 | engines: {node: '>=6.9.0'} 446 | peerDependencies: 447 | '@babel/core': ^7.0.0-0 448 | 449 | '@babel/plugin-transform-modules-commonjs@7.24.8': 450 | resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} 451 | engines: {node: '>=6.9.0'} 452 | peerDependencies: 453 | '@babel/core': ^7.0.0-0 454 | 455 | '@babel/plugin-transform-modules-systemjs@7.25.0': 456 | resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} 457 | engines: {node: '>=6.9.0'} 458 | peerDependencies: 459 | '@babel/core': ^7.0.0-0 460 | 461 | '@babel/plugin-transform-modules-umd@7.24.7': 462 | resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} 463 | engines: {node: '>=6.9.0'} 464 | peerDependencies: 465 | '@babel/core': ^7.0.0-0 466 | 467 | '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': 468 | resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} 469 | engines: {node: '>=6.9.0'} 470 | peerDependencies: 471 | '@babel/core': ^7.0.0 472 | 473 | '@babel/plugin-transform-new-target@7.24.7': 474 | resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} 475 | engines: {node: '>=6.9.0'} 476 | peerDependencies: 477 | '@babel/core': ^7.0.0-0 478 | 479 | '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': 480 | resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} 481 | engines: {node: '>=6.9.0'} 482 | peerDependencies: 483 | '@babel/core': ^7.0.0-0 484 | 485 | '@babel/plugin-transform-numeric-separator@7.24.7': 486 | resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} 487 | engines: {node: '>=6.9.0'} 488 | peerDependencies: 489 | '@babel/core': ^7.0.0-0 490 | 491 | '@babel/plugin-transform-object-rest-spread@7.24.7': 492 | resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} 493 | engines: {node: '>=6.9.0'} 494 | peerDependencies: 495 | '@babel/core': ^7.0.0-0 496 | 497 | '@babel/plugin-transform-object-super@7.24.7': 498 | resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} 499 | engines: {node: '>=6.9.0'} 500 | peerDependencies: 501 | '@babel/core': ^7.0.0-0 502 | 503 | '@babel/plugin-transform-optional-catch-binding@7.24.7': 504 | resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} 505 | engines: {node: '>=6.9.0'} 506 | peerDependencies: 507 | '@babel/core': ^7.0.0-0 508 | 509 | '@babel/plugin-transform-optional-chaining@7.24.8': 510 | resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} 511 | engines: {node: '>=6.9.0'} 512 | peerDependencies: 513 | '@babel/core': ^7.0.0-0 514 | 515 | '@babel/plugin-transform-parameters@7.24.7': 516 | resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} 517 | engines: {node: '>=6.9.0'} 518 | peerDependencies: 519 | '@babel/core': ^7.0.0-0 520 | 521 | '@babel/plugin-transform-private-methods@7.24.7': 522 | resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} 523 | engines: {node: '>=6.9.0'} 524 | peerDependencies: 525 | '@babel/core': ^7.0.0-0 526 | 527 | '@babel/plugin-transform-private-property-in-object@7.24.7': 528 | resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} 529 | engines: {node: '>=6.9.0'} 530 | peerDependencies: 531 | '@babel/core': ^7.0.0-0 532 | 533 | '@babel/plugin-transform-property-literals@7.24.7': 534 | resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} 535 | engines: {node: '>=6.9.0'} 536 | peerDependencies: 537 | '@babel/core': ^7.0.0-0 538 | 539 | '@babel/plugin-transform-regenerator@7.24.7': 540 | resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} 541 | engines: {node: '>=6.9.0'} 542 | peerDependencies: 543 | '@babel/core': ^7.0.0-0 544 | 545 | '@babel/plugin-transform-reserved-words@7.24.7': 546 | resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} 547 | engines: {node: '>=6.9.0'} 548 | peerDependencies: 549 | '@babel/core': ^7.0.0-0 550 | 551 | '@babel/plugin-transform-shorthand-properties@7.24.7': 552 | resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} 553 | engines: {node: '>=6.9.0'} 554 | peerDependencies: 555 | '@babel/core': ^7.0.0-0 556 | 557 | '@babel/plugin-transform-spread@7.24.7': 558 | resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} 559 | engines: {node: '>=6.9.0'} 560 | peerDependencies: 561 | '@babel/core': ^7.0.0-0 562 | 563 | '@babel/plugin-transform-sticky-regex@7.24.7': 564 | resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} 565 | engines: {node: '>=6.9.0'} 566 | peerDependencies: 567 | '@babel/core': ^7.0.0-0 568 | 569 | '@babel/plugin-transform-template-literals@7.24.7': 570 | resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} 571 | engines: {node: '>=6.9.0'} 572 | peerDependencies: 573 | '@babel/core': ^7.0.0-0 574 | 575 | '@babel/plugin-transform-typeof-symbol@7.24.8': 576 | resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} 577 | engines: {node: '>=6.9.0'} 578 | peerDependencies: 579 | '@babel/core': ^7.0.0-0 580 | 581 | '@babel/plugin-transform-typescript@7.25.2': 582 | resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} 583 | engines: {node: '>=6.9.0'} 584 | peerDependencies: 585 | '@babel/core': ^7.0.0-0 586 | 587 | '@babel/plugin-transform-unicode-escapes@7.24.7': 588 | resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} 589 | engines: {node: '>=6.9.0'} 590 | peerDependencies: 591 | '@babel/core': ^7.0.0-0 592 | 593 | '@babel/plugin-transform-unicode-property-regex@7.24.7': 594 | resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} 595 | engines: {node: '>=6.9.0'} 596 | peerDependencies: 597 | '@babel/core': ^7.0.0-0 598 | 599 | '@babel/plugin-transform-unicode-regex@7.24.7': 600 | resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} 601 | engines: {node: '>=6.9.0'} 602 | peerDependencies: 603 | '@babel/core': ^7.0.0-0 604 | 605 | '@babel/plugin-transform-unicode-sets-regex@7.24.7': 606 | resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} 607 | engines: {node: '>=6.9.0'} 608 | peerDependencies: 609 | '@babel/core': ^7.0.0 610 | 611 | '@babel/preset-env@7.25.3': 612 | resolution: {integrity: sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==} 613 | engines: {node: '>=6.9.0'} 614 | peerDependencies: 615 | '@babel/core': ^7.0.0-0 616 | 617 | '@babel/preset-modules@0.1.6-no-external-plugins': 618 | resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} 619 | peerDependencies: 620 | '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 621 | 622 | '@babel/preset-typescript@7.24.7': 623 | resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} 624 | engines: {node: '>=6.9.0'} 625 | peerDependencies: 626 | '@babel/core': ^7.0.0-0 627 | 628 | '@babel/regjsgen@0.8.0': 629 | resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} 630 | 631 | '@babel/runtime@7.25.0': 632 | resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} 633 | engines: {node: '>=6.9.0'} 634 | 635 | '@babel/template@7.25.0': 636 | resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} 637 | engines: {node: '>=6.9.0'} 638 | 639 | '@babel/traverse@7.25.3': 640 | resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} 641 | engines: {node: '>=6.9.0'} 642 | 643 | '@babel/types@7.25.2': 644 | resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} 645 | engines: {node: '>=6.9.0'} 646 | 647 | '@isaacs/cliui@8.0.2': 648 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 649 | engines: {node: '>=12'} 650 | 651 | '@jridgewell/gen-mapping@0.3.5': 652 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 653 | engines: {node: '>=6.0.0'} 654 | 655 | '@jridgewell/resolve-uri@3.1.2': 656 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 657 | engines: {node: '>=6.0.0'} 658 | 659 | '@jridgewell/set-array@1.2.1': 660 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 661 | engines: {node: '>=6.0.0'} 662 | 663 | '@jridgewell/sourcemap-codec@1.5.0': 664 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 665 | 666 | '@jridgewell/trace-mapping@0.3.25': 667 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 668 | 669 | '@pkgjs/parseargs@0.11.0': 670 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 671 | engines: {node: '>=14'} 672 | 673 | '@rollup/plugin-babel@6.0.4': 674 | resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} 675 | engines: {node: '>=14.0.0'} 676 | peerDependencies: 677 | '@babel/core': ^7.0.0 678 | '@types/babel__core': ^7.1.9 679 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 680 | peerDependenciesMeta: 681 | '@types/babel__core': 682 | optional: true 683 | rollup: 684 | optional: true 685 | 686 | '@rollup/plugin-commonjs@26.0.1': 687 | resolution: {integrity: sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==} 688 | engines: {node: '>=16.0.0 || 14 >= 14.17'} 689 | peerDependencies: 690 | rollup: ^2.68.0||^3.0.0||^4.0.0 691 | peerDependenciesMeta: 692 | rollup: 693 | optional: true 694 | 695 | '@rollup/plugin-node-resolve@15.2.3': 696 | resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} 697 | engines: {node: '>=14.0.0'} 698 | peerDependencies: 699 | rollup: ^2.78.0||^3.0.0||^4.0.0 700 | peerDependenciesMeta: 701 | rollup: 702 | optional: true 703 | 704 | '@rollup/plugin-run@3.1.0': 705 | resolution: {integrity: sha512-k2daijcVA8RAG1PXUFtIAOmb9ifiMv6Kth3Y9OhZ8/W+j8eTgZkVsOmBQD11HaeY1rYqRb0aLjX4e2V9bpS01Q==} 706 | engines: {node: '>=14.0.0'} 707 | peerDependencies: 708 | rollup: ^2.0.0||^3.0.0||^4.0.0 709 | peerDependenciesMeta: 710 | rollup: 711 | optional: true 712 | 713 | '@rollup/pluginutils@5.1.0': 714 | resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} 715 | engines: {node: '>=14.0.0'} 716 | peerDependencies: 717 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 718 | peerDependenciesMeta: 719 | rollup: 720 | optional: true 721 | 722 | '@rollup/rollup-android-arm-eabi@4.20.0': 723 | resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} 724 | cpu: [arm] 725 | os: [android] 726 | 727 | '@rollup/rollup-android-arm64@4.20.0': 728 | resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} 729 | cpu: [arm64] 730 | os: [android] 731 | 732 | '@rollup/rollup-darwin-arm64@4.20.0': 733 | resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} 734 | cpu: [arm64] 735 | os: [darwin] 736 | 737 | '@rollup/rollup-darwin-x64@4.20.0': 738 | resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} 739 | cpu: [x64] 740 | os: [darwin] 741 | 742 | '@rollup/rollup-linux-arm-gnueabihf@4.20.0': 743 | resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} 744 | cpu: [arm] 745 | os: [linux] 746 | 747 | '@rollup/rollup-linux-arm-musleabihf@4.20.0': 748 | resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} 749 | cpu: [arm] 750 | os: [linux] 751 | 752 | '@rollup/rollup-linux-arm64-gnu@4.20.0': 753 | resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} 754 | cpu: [arm64] 755 | os: [linux] 756 | 757 | '@rollup/rollup-linux-arm64-musl@4.20.0': 758 | resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} 759 | cpu: [arm64] 760 | os: [linux] 761 | 762 | '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': 763 | resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} 764 | cpu: [ppc64] 765 | os: [linux] 766 | 767 | '@rollup/rollup-linux-riscv64-gnu@4.20.0': 768 | resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} 769 | cpu: [riscv64] 770 | os: [linux] 771 | 772 | '@rollup/rollup-linux-s390x-gnu@4.20.0': 773 | resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} 774 | cpu: [s390x] 775 | os: [linux] 776 | 777 | '@rollup/rollup-linux-x64-gnu@4.20.0': 778 | resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} 779 | cpu: [x64] 780 | os: [linux] 781 | 782 | '@rollup/rollup-linux-x64-musl@4.20.0': 783 | resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} 784 | cpu: [x64] 785 | os: [linux] 786 | 787 | '@rollup/rollup-win32-arm64-msvc@4.20.0': 788 | resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} 789 | cpu: [arm64] 790 | os: [win32] 791 | 792 | '@rollup/rollup-win32-ia32-msvc@4.20.0': 793 | resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} 794 | cpu: [ia32] 795 | os: [win32] 796 | 797 | '@rollup/rollup-win32-x64-msvc@4.20.0': 798 | resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} 799 | cpu: [x64] 800 | os: [win32] 801 | 802 | '@types/estree@1.0.5': 803 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 804 | 805 | '@types/node@14.18.30': 806 | resolution: {integrity: sha512-8OEyg4oc/CqN5+LbInKNLA8MfbGzbC+k8lVPePXazuwEVrVeQ9gwMDX00HJwWbC7syc1FWRU6Mow0Lm+mibHAQ==} 807 | 808 | '@types/resolve@1.20.2': 809 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 810 | 811 | ansi-regex@5.0.1: 812 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 813 | engines: {node: '>=8'} 814 | 815 | ansi-regex@6.0.1: 816 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 817 | engines: {node: '>=12'} 818 | 819 | ansi-styles@3.2.1: 820 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 821 | engines: {node: '>=4'} 822 | 823 | ansi-styles@4.3.0: 824 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 825 | engines: {node: '>=8'} 826 | 827 | ansi-styles@6.2.1: 828 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 829 | engines: {node: '>=12'} 830 | 831 | babel-plugin-polyfill-corejs2@0.4.11: 832 | resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} 833 | peerDependencies: 834 | '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 835 | 836 | babel-plugin-polyfill-corejs3@0.10.6: 837 | resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} 838 | peerDependencies: 839 | '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 840 | 841 | babel-plugin-polyfill-regenerator@0.6.2: 842 | resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} 843 | peerDependencies: 844 | '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 845 | 846 | balanced-match@1.0.2: 847 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 848 | 849 | brace-expansion@2.0.1: 850 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 851 | 852 | browserslist@4.23.3: 853 | resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} 854 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 855 | hasBin: true 856 | 857 | builtin-modules@3.3.0: 858 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 859 | engines: {node: '>=6'} 860 | 861 | caniuse-lite@1.0.30001650: 862 | resolution: {integrity: sha512-fgEc7hP/LB7iicdXHUI9VsBsMZmUmlVJeQP2qqQW+3lkqVhbmjEU8zp+h5stWeilX+G7uXuIUIIlWlDw9jdt8g==} 863 | 864 | chalk@2.4.2: 865 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 866 | engines: {node: '>=4'} 867 | 868 | clsx@2.1.1: 869 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 870 | engines: {node: '>=6'} 871 | 872 | color-convert@1.9.3: 873 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 874 | 875 | color-convert@2.0.1: 876 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 877 | engines: {node: '>=7.0.0'} 878 | 879 | color-name@1.1.3: 880 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 881 | 882 | color-name@1.1.4: 883 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 884 | 885 | commondir@1.0.1: 886 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 887 | 888 | convert-source-map@2.0.0: 889 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 890 | 891 | core-js-compat@3.38.0: 892 | resolution: {integrity: sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==} 893 | 894 | cross-spawn@7.0.3: 895 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 896 | engines: {node: '>= 8'} 897 | 898 | debug@4.3.6: 899 | resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} 900 | engines: {node: '>=6.0'} 901 | peerDependencies: 902 | supports-color: '*' 903 | peerDependenciesMeta: 904 | supports-color: 905 | optional: true 906 | 907 | deepmerge@4.3.1: 908 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 909 | engines: {node: '>=0.10.0'} 910 | 911 | eastasianwidth@0.2.0: 912 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 913 | 914 | electron-to-chromium@1.5.5: 915 | resolution: {integrity: sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==} 916 | 917 | emoji-regex@8.0.0: 918 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 919 | 920 | emoji-regex@9.2.2: 921 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 922 | 923 | escalade@3.1.2: 924 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 925 | engines: {node: '>=6'} 926 | 927 | escape-string-regexp@1.0.5: 928 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 929 | engines: {node: '>=0.8.0'} 930 | 931 | estree-walker@2.0.2: 932 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 933 | 934 | esutils@2.0.3: 935 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 936 | engines: {node: '>=0.10.0'} 937 | 938 | foreground-child@3.3.0: 939 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 940 | engines: {node: '>=14'} 941 | 942 | fsevents@2.3.3: 943 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 944 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 945 | os: [darwin] 946 | 947 | function-bind@1.1.2: 948 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 949 | 950 | gensync@1.0.0-beta.2: 951 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 952 | engines: {node: '>=6.9.0'} 953 | 954 | glob@10.4.5: 955 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 956 | hasBin: true 957 | 958 | globals@11.12.0: 959 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 960 | engines: {node: '>=4'} 961 | 962 | has-flag@3.0.0: 963 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 964 | engines: {node: '>=4'} 965 | 966 | hasown@2.0.2: 967 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 968 | engines: {node: '>= 0.4'} 969 | 970 | is-builtin-module@3.2.1: 971 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 972 | engines: {node: '>=6'} 973 | 974 | is-core-module@2.15.0: 975 | resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} 976 | engines: {node: '>= 0.4'} 977 | 978 | is-fullwidth-code-point@3.0.0: 979 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 980 | engines: {node: '>=8'} 981 | 982 | is-module@1.0.0: 983 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 984 | 985 | is-reference@1.2.1: 986 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 987 | 988 | isexe@2.0.0: 989 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 990 | 991 | jackspeak@3.4.3: 992 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 993 | 994 | js-tokens@4.0.0: 995 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 996 | 997 | jsesc@0.5.0: 998 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 999 | hasBin: true 1000 | 1001 | jsesc@2.5.2: 1002 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1003 | engines: {node: '>=4'} 1004 | hasBin: true 1005 | 1006 | json5@2.2.3: 1007 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1008 | engines: {node: '>=6'} 1009 | hasBin: true 1010 | 1011 | lodash.debounce@4.0.8: 1012 | resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} 1013 | 1014 | lru-cache@10.4.3: 1015 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1016 | 1017 | lru-cache@5.1.1: 1018 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1019 | 1020 | magic-string@0.30.11: 1021 | resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} 1022 | 1023 | minimatch@9.0.5: 1024 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1025 | engines: {node: '>=16 || 14 >=14.17'} 1026 | 1027 | minipass@7.1.2: 1028 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1029 | engines: {node: '>=16 || 14 >=14.17'} 1030 | 1031 | ms@2.1.2: 1032 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1033 | 1034 | node-releases@2.0.18: 1035 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 1036 | 1037 | package-json-from-dist@1.0.0: 1038 | resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} 1039 | 1040 | path-key@3.1.1: 1041 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1042 | engines: {node: '>=8'} 1043 | 1044 | path-parse@1.0.7: 1045 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1046 | 1047 | path-scurry@1.11.1: 1048 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1049 | engines: {node: '>=16 || 14 >=14.18'} 1050 | 1051 | picocolors@1.0.1: 1052 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 1053 | 1054 | picomatch@2.3.1: 1055 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1056 | engines: {node: '>=8.6'} 1057 | 1058 | regenerate-unicode-properties@10.1.1: 1059 | resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} 1060 | engines: {node: '>=4'} 1061 | 1062 | regenerate@1.4.2: 1063 | resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} 1064 | 1065 | regenerator-runtime@0.14.1: 1066 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1067 | 1068 | regenerator-transform@0.15.2: 1069 | resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} 1070 | 1071 | regexpu-core@5.3.2: 1072 | resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} 1073 | engines: {node: '>=4'} 1074 | 1075 | regjsparser@0.9.1: 1076 | resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} 1077 | hasBin: true 1078 | 1079 | resolve@1.22.8: 1080 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1081 | hasBin: true 1082 | 1083 | rollup-plugin-tsconfig-paths@1.5.2: 1084 | resolution: {integrity: sha512-tyS7u2Md0eXKwbDfTuDDa1izciwqhOZsHzX7zYc5gKC1L7q5ozdSt+q1jjtD1dDqWyjrt8lZoiLtOQGhMHh1OQ==} 1085 | peerDependencies: 1086 | rollup: ^2 || ^3 || ^4 1087 | 1088 | rollup@4.20.0: 1089 | resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} 1090 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1091 | hasBin: true 1092 | 1093 | semver@6.3.1: 1094 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1095 | hasBin: true 1096 | 1097 | shebang-command@2.0.0: 1098 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1099 | engines: {node: '>=8'} 1100 | 1101 | shebang-regex@3.0.0: 1102 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1103 | engines: {node: '>=8'} 1104 | 1105 | signal-exit@4.1.0: 1106 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1107 | engines: {node: '>=14'} 1108 | 1109 | string-width@4.2.3: 1110 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1111 | engines: {node: '>=8'} 1112 | 1113 | string-width@5.1.2: 1114 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1115 | engines: {node: '>=12'} 1116 | 1117 | strip-ansi@6.0.1: 1118 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1119 | engines: {node: '>=8'} 1120 | 1121 | strip-ansi@7.1.0: 1122 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1123 | engines: {node: '>=12'} 1124 | 1125 | supports-color@5.5.0: 1126 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1127 | engines: {node: '>=4'} 1128 | 1129 | supports-preserve-symlinks-flag@1.0.0: 1130 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1131 | engines: {node: '>= 0.4'} 1132 | 1133 | to-fast-properties@2.0.0: 1134 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1135 | engines: {node: '>=4'} 1136 | 1137 | typescript-paths@1.5.1: 1138 | resolution: {integrity: sha512-lYErSLCON2MSplVV5V/LBgD4UNjMgY3guATdFCZY2q1Nr6OZEu4q6zX/rYMsG1TaWqqQSszg6C9EU7AGWMDrIw==} 1139 | peerDependencies: 1140 | typescript: ^4.7.2 || ^5 1141 | 1142 | typescript@5.5.4: 1143 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} 1144 | engines: {node: '>=14.17'} 1145 | hasBin: true 1146 | 1147 | unicode-canonical-property-names-ecmascript@2.0.0: 1148 | resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} 1149 | engines: {node: '>=4'} 1150 | 1151 | unicode-match-property-ecmascript@2.0.0: 1152 | resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} 1153 | engines: {node: '>=4'} 1154 | 1155 | unicode-match-property-value-ecmascript@2.1.0: 1156 | resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} 1157 | engines: {node: '>=4'} 1158 | 1159 | unicode-property-aliases-ecmascript@2.1.0: 1160 | resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} 1161 | engines: {node: '>=4'} 1162 | 1163 | update-browserslist-db@1.1.0: 1164 | resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} 1165 | hasBin: true 1166 | peerDependencies: 1167 | browserslist: '>= 4.21.0' 1168 | 1169 | which@2.0.2: 1170 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1171 | engines: {node: '>= 8'} 1172 | hasBin: true 1173 | 1174 | wrap-ansi@7.0.0: 1175 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1176 | engines: {node: '>=10'} 1177 | 1178 | wrap-ansi@8.1.0: 1179 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1180 | engines: {node: '>=12'} 1181 | 1182 | yallist@3.1.1: 1183 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1184 | 1185 | snapshots: 1186 | 1187 | '@ampproject/remapping@2.3.0': 1188 | dependencies: 1189 | '@jridgewell/gen-mapping': 0.3.5 1190 | '@jridgewell/trace-mapping': 0.3.25 1191 | 1192 | '@babel/code-frame@7.24.7': 1193 | dependencies: 1194 | '@babel/highlight': 7.24.7 1195 | picocolors: 1.0.1 1196 | 1197 | '@babel/compat-data@7.25.2': {} 1198 | 1199 | '@babel/core@7.25.2': 1200 | dependencies: 1201 | '@ampproject/remapping': 2.3.0 1202 | '@babel/code-frame': 7.24.7 1203 | '@babel/generator': 7.25.0 1204 | '@babel/helper-compilation-targets': 7.25.2 1205 | '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) 1206 | '@babel/helpers': 7.25.0 1207 | '@babel/parser': 7.25.3 1208 | '@babel/template': 7.25.0 1209 | '@babel/traverse': 7.25.3 1210 | '@babel/types': 7.25.2 1211 | convert-source-map: 2.0.0 1212 | debug: 4.3.6 1213 | gensync: 1.0.0-beta.2 1214 | json5: 2.2.3 1215 | semver: 6.3.1 1216 | transitivePeerDependencies: 1217 | - supports-color 1218 | 1219 | '@babel/generator@7.25.0': 1220 | dependencies: 1221 | '@babel/types': 7.25.2 1222 | '@jridgewell/gen-mapping': 0.3.5 1223 | '@jridgewell/trace-mapping': 0.3.25 1224 | jsesc: 2.5.2 1225 | 1226 | '@babel/helper-annotate-as-pure@7.24.7': 1227 | dependencies: 1228 | '@babel/types': 7.25.2 1229 | 1230 | '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': 1231 | dependencies: 1232 | '@babel/traverse': 7.25.3 1233 | '@babel/types': 7.25.2 1234 | transitivePeerDependencies: 1235 | - supports-color 1236 | 1237 | '@babel/helper-compilation-targets@7.25.2': 1238 | dependencies: 1239 | '@babel/compat-data': 7.25.2 1240 | '@babel/helper-validator-option': 7.24.8 1241 | browserslist: 4.23.3 1242 | lru-cache: 5.1.1 1243 | semver: 6.3.1 1244 | 1245 | '@babel/helper-create-class-features-plugin@7.25.0(@babel/core@7.25.2)': 1246 | dependencies: 1247 | '@babel/core': 7.25.2 1248 | '@babel/helper-annotate-as-pure': 7.24.7 1249 | '@babel/helper-member-expression-to-functions': 7.24.8 1250 | '@babel/helper-optimise-call-expression': 7.24.7 1251 | '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) 1252 | '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 1253 | '@babel/traverse': 7.25.3 1254 | semver: 6.3.1 1255 | transitivePeerDependencies: 1256 | - supports-color 1257 | 1258 | '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2)': 1259 | dependencies: 1260 | '@babel/core': 7.25.2 1261 | '@babel/helper-annotate-as-pure': 7.24.7 1262 | regexpu-core: 5.3.2 1263 | semver: 6.3.1 1264 | 1265 | '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)': 1266 | dependencies: 1267 | '@babel/core': 7.25.2 1268 | '@babel/helper-compilation-targets': 7.25.2 1269 | '@babel/helper-plugin-utils': 7.24.8 1270 | debug: 4.3.6 1271 | lodash.debounce: 4.0.8 1272 | resolve: 1.22.8 1273 | transitivePeerDependencies: 1274 | - supports-color 1275 | 1276 | '@babel/helper-member-expression-to-functions@7.24.8': 1277 | dependencies: 1278 | '@babel/traverse': 7.25.3 1279 | '@babel/types': 7.25.2 1280 | transitivePeerDependencies: 1281 | - supports-color 1282 | 1283 | '@babel/helper-module-imports@7.24.7': 1284 | dependencies: 1285 | '@babel/traverse': 7.25.3 1286 | '@babel/types': 7.25.2 1287 | transitivePeerDependencies: 1288 | - supports-color 1289 | 1290 | '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': 1291 | dependencies: 1292 | '@babel/core': 7.25.2 1293 | '@babel/helper-module-imports': 7.24.7 1294 | '@babel/helper-simple-access': 7.24.7 1295 | '@babel/helper-validator-identifier': 7.24.7 1296 | '@babel/traverse': 7.25.3 1297 | transitivePeerDependencies: 1298 | - supports-color 1299 | 1300 | '@babel/helper-optimise-call-expression@7.24.7': 1301 | dependencies: 1302 | '@babel/types': 7.25.2 1303 | 1304 | '@babel/helper-plugin-utils@7.24.8': {} 1305 | 1306 | '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2)': 1307 | dependencies: 1308 | '@babel/core': 7.25.2 1309 | '@babel/helper-annotate-as-pure': 7.24.7 1310 | '@babel/helper-wrap-function': 7.25.0 1311 | '@babel/traverse': 7.25.3 1312 | transitivePeerDependencies: 1313 | - supports-color 1314 | 1315 | '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': 1316 | dependencies: 1317 | '@babel/core': 7.25.2 1318 | '@babel/helper-member-expression-to-functions': 7.24.8 1319 | '@babel/helper-optimise-call-expression': 7.24.7 1320 | '@babel/traverse': 7.25.3 1321 | transitivePeerDependencies: 1322 | - supports-color 1323 | 1324 | '@babel/helper-simple-access@7.24.7': 1325 | dependencies: 1326 | '@babel/traverse': 7.25.3 1327 | '@babel/types': 7.25.2 1328 | transitivePeerDependencies: 1329 | - supports-color 1330 | 1331 | '@babel/helper-skip-transparent-expression-wrappers@7.24.7': 1332 | dependencies: 1333 | '@babel/traverse': 7.25.3 1334 | '@babel/types': 7.25.2 1335 | transitivePeerDependencies: 1336 | - supports-color 1337 | 1338 | '@babel/helper-string-parser@7.24.8': {} 1339 | 1340 | '@babel/helper-validator-identifier@7.24.7': {} 1341 | 1342 | '@babel/helper-validator-option@7.24.8': {} 1343 | 1344 | '@babel/helper-wrap-function@7.25.0': 1345 | dependencies: 1346 | '@babel/template': 7.25.0 1347 | '@babel/traverse': 7.25.3 1348 | '@babel/types': 7.25.2 1349 | transitivePeerDependencies: 1350 | - supports-color 1351 | 1352 | '@babel/helpers@7.25.0': 1353 | dependencies: 1354 | '@babel/template': 7.25.0 1355 | '@babel/types': 7.25.2 1356 | 1357 | '@babel/highlight@7.24.7': 1358 | dependencies: 1359 | '@babel/helper-validator-identifier': 7.24.7 1360 | chalk: 2.4.2 1361 | js-tokens: 4.0.0 1362 | picocolors: 1.0.1 1363 | 1364 | '@babel/parser@7.25.3': 1365 | dependencies: 1366 | '@babel/types': 7.25.2 1367 | 1368 | '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2)': 1369 | dependencies: 1370 | '@babel/core': 7.25.2 1371 | '@babel/helper-plugin-utils': 7.24.8 1372 | '@babel/traverse': 7.25.3 1373 | transitivePeerDependencies: 1374 | - supports-color 1375 | 1376 | '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2)': 1377 | dependencies: 1378 | '@babel/core': 7.25.2 1379 | '@babel/helper-plugin-utils': 7.24.8 1380 | 1381 | '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2)': 1382 | dependencies: 1383 | '@babel/core': 7.25.2 1384 | '@babel/helper-plugin-utils': 7.24.8 1385 | 1386 | '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2)': 1387 | dependencies: 1388 | '@babel/core': 7.25.2 1389 | '@babel/helper-plugin-utils': 7.24.8 1390 | '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 1391 | '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) 1392 | transitivePeerDependencies: 1393 | - supports-color 1394 | 1395 | '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2)': 1396 | dependencies: 1397 | '@babel/core': 7.25.2 1398 | '@babel/helper-plugin-utils': 7.24.8 1399 | '@babel/traverse': 7.25.3 1400 | transitivePeerDependencies: 1401 | - supports-color 1402 | 1403 | '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': 1404 | dependencies: 1405 | '@babel/core': 7.25.2 1406 | 1407 | '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': 1408 | dependencies: 1409 | '@babel/core': 7.25.2 1410 | '@babel/helper-plugin-utils': 7.24.8 1411 | 1412 | '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': 1413 | dependencies: 1414 | '@babel/core': 7.25.2 1415 | '@babel/helper-plugin-utils': 7.24.8 1416 | 1417 | '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': 1418 | dependencies: 1419 | '@babel/core': 7.25.2 1420 | '@babel/helper-plugin-utils': 7.24.8 1421 | 1422 | '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': 1423 | dependencies: 1424 | '@babel/core': 7.25.2 1425 | '@babel/helper-plugin-utils': 7.24.8 1426 | 1427 | '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': 1428 | dependencies: 1429 | '@babel/core': 7.25.2 1430 | '@babel/helper-plugin-utils': 7.24.8 1431 | 1432 | '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.25.2)': 1433 | dependencies: 1434 | '@babel/core': 7.25.2 1435 | '@babel/helper-plugin-utils': 7.24.8 1436 | 1437 | '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2)': 1438 | dependencies: 1439 | '@babel/core': 7.25.2 1440 | '@babel/helper-plugin-utils': 7.24.8 1441 | 1442 | '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': 1443 | dependencies: 1444 | '@babel/core': 7.25.2 1445 | '@babel/helper-plugin-utils': 7.24.8 1446 | 1447 | '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': 1448 | dependencies: 1449 | '@babel/core': 7.25.2 1450 | '@babel/helper-plugin-utils': 7.24.8 1451 | 1452 | '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': 1453 | dependencies: 1454 | '@babel/core': 7.25.2 1455 | '@babel/helper-plugin-utils': 7.24.8 1456 | 1457 | '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': 1458 | dependencies: 1459 | '@babel/core': 7.25.2 1460 | '@babel/helper-plugin-utils': 7.24.8 1461 | 1462 | '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': 1463 | dependencies: 1464 | '@babel/core': 7.25.2 1465 | '@babel/helper-plugin-utils': 7.24.8 1466 | 1467 | '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': 1468 | dependencies: 1469 | '@babel/core': 7.25.2 1470 | '@babel/helper-plugin-utils': 7.24.8 1471 | 1472 | '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': 1473 | dependencies: 1474 | '@babel/core': 7.25.2 1475 | '@babel/helper-plugin-utils': 7.24.8 1476 | 1477 | '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': 1478 | dependencies: 1479 | '@babel/core': 7.25.2 1480 | '@babel/helper-plugin-utils': 7.24.8 1481 | 1482 | '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': 1483 | dependencies: 1484 | '@babel/core': 7.25.2 1485 | '@babel/helper-plugin-utils': 7.24.8 1486 | 1487 | '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': 1488 | dependencies: 1489 | '@babel/core': 7.25.2 1490 | '@babel/helper-plugin-utils': 7.24.8 1491 | 1492 | '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': 1493 | dependencies: 1494 | '@babel/core': 7.25.2 1495 | '@babel/helper-plugin-utils': 7.24.8 1496 | 1497 | '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': 1498 | dependencies: 1499 | '@babel/core': 7.25.2 1500 | '@babel/helper-plugin-utils': 7.24.8 1501 | 1502 | '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': 1503 | dependencies: 1504 | '@babel/core': 7.25.2 1505 | '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) 1506 | '@babel/helper-plugin-utils': 7.24.8 1507 | 1508 | '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2)': 1509 | dependencies: 1510 | '@babel/core': 7.25.2 1511 | '@babel/helper-plugin-utils': 7.24.8 1512 | 1513 | '@babel/plugin-transform-async-generator-functions@7.25.0(@babel/core@7.25.2)': 1514 | dependencies: 1515 | '@babel/core': 7.25.2 1516 | '@babel/helper-plugin-utils': 7.24.8 1517 | '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) 1518 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) 1519 | '@babel/traverse': 7.25.3 1520 | transitivePeerDependencies: 1521 | - supports-color 1522 | 1523 | '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2)': 1524 | dependencies: 1525 | '@babel/core': 7.25.2 1526 | '@babel/helper-module-imports': 7.24.7 1527 | '@babel/helper-plugin-utils': 7.24.8 1528 | '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) 1529 | transitivePeerDependencies: 1530 | - supports-color 1531 | 1532 | '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2)': 1533 | dependencies: 1534 | '@babel/core': 7.25.2 1535 | '@babel/helper-plugin-utils': 7.24.8 1536 | 1537 | '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2)': 1538 | dependencies: 1539 | '@babel/core': 7.25.2 1540 | '@babel/helper-plugin-utils': 7.24.8 1541 | 1542 | '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.25.2)': 1543 | dependencies: 1544 | '@babel/core': 7.25.2 1545 | '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) 1546 | '@babel/helper-plugin-utils': 7.24.8 1547 | transitivePeerDependencies: 1548 | - supports-color 1549 | 1550 | '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2)': 1551 | dependencies: 1552 | '@babel/core': 7.25.2 1553 | '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) 1554 | '@babel/helper-plugin-utils': 7.24.8 1555 | '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) 1556 | transitivePeerDependencies: 1557 | - supports-color 1558 | 1559 | '@babel/plugin-transform-classes@7.25.0(@babel/core@7.25.2)': 1560 | dependencies: 1561 | '@babel/core': 7.25.2 1562 | '@babel/helper-annotate-as-pure': 7.24.7 1563 | '@babel/helper-compilation-targets': 7.25.2 1564 | '@babel/helper-plugin-utils': 7.24.8 1565 | '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) 1566 | '@babel/traverse': 7.25.3 1567 | globals: 11.12.0 1568 | transitivePeerDependencies: 1569 | - supports-color 1570 | 1571 | '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2)': 1572 | dependencies: 1573 | '@babel/core': 7.25.2 1574 | '@babel/helper-plugin-utils': 7.24.8 1575 | '@babel/template': 7.25.0 1576 | 1577 | '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2)': 1578 | dependencies: 1579 | '@babel/core': 7.25.2 1580 | '@babel/helper-plugin-utils': 7.24.8 1581 | 1582 | '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2)': 1583 | dependencies: 1584 | '@babel/core': 7.25.2 1585 | '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) 1586 | '@babel/helper-plugin-utils': 7.24.8 1587 | 1588 | '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2)': 1589 | dependencies: 1590 | '@babel/core': 7.25.2 1591 | '@babel/helper-plugin-utils': 7.24.8 1592 | 1593 | '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2)': 1594 | dependencies: 1595 | '@babel/core': 7.25.2 1596 | '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) 1597 | '@babel/helper-plugin-utils': 7.24.8 1598 | 1599 | '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2)': 1600 | dependencies: 1601 | '@babel/core': 7.25.2 1602 | '@babel/helper-plugin-utils': 7.24.8 1603 | '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) 1604 | 1605 | '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2)': 1606 | dependencies: 1607 | '@babel/core': 7.25.2 1608 | '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 1609 | '@babel/helper-plugin-utils': 7.24.8 1610 | transitivePeerDependencies: 1611 | - supports-color 1612 | 1613 | '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2)': 1614 | dependencies: 1615 | '@babel/core': 7.25.2 1616 | '@babel/helper-plugin-utils': 7.24.8 1617 | '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) 1618 | 1619 | '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)': 1620 | dependencies: 1621 | '@babel/core': 7.25.2 1622 | '@babel/helper-plugin-utils': 7.24.8 1623 | '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 1624 | transitivePeerDependencies: 1625 | - supports-color 1626 | 1627 | '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2)': 1628 | dependencies: 1629 | '@babel/core': 7.25.2 1630 | '@babel/helper-compilation-targets': 7.25.2 1631 | '@babel/helper-plugin-utils': 7.24.8 1632 | '@babel/traverse': 7.25.3 1633 | transitivePeerDependencies: 1634 | - supports-color 1635 | 1636 | '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2)': 1637 | dependencies: 1638 | '@babel/core': 7.25.2 1639 | '@babel/helper-plugin-utils': 7.24.8 1640 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) 1641 | 1642 | '@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2)': 1643 | dependencies: 1644 | '@babel/core': 7.25.2 1645 | '@babel/helper-plugin-utils': 7.24.8 1646 | 1647 | '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2)': 1648 | dependencies: 1649 | '@babel/core': 7.25.2 1650 | '@babel/helper-plugin-utils': 7.24.8 1651 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) 1652 | 1653 | '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2)': 1654 | dependencies: 1655 | '@babel/core': 7.25.2 1656 | '@babel/helper-plugin-utils': 7.24.8 1657 | 1658 | '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2)': 1659 | dependencies: 1660 | '@babel/core': 7.25.2 1661 | '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) 1662 | '@babel/helper-plugin-utils': 7.24.8 1663 | transitivePeerDependencies: 1664 | - supports-color 1665 | 1666 | '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': 1667 | dependencies: 1668 | '@babel/core': 7.25.2 1669 | '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) 1670 | '@babel/helper-plugin-utils': 7.24.8 1671 | '@babel/helper-simple-access': 7.24.7 1672 | transitivePeerDependencies: 1673 | - supports-color 1674 | 1675 | '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)': 1676 | dependencies: 1677 | '@babel/core': 7.25.2 1678 | '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) 1679 | '@babel/helper-plugin-utils': 7.24.8 1680 | '@babel/helper-validator-identifier': 7.24.7 1681 | '@babel/traverse': 7.25.3 1682 | transitivePeerDependencies: 1683 | - supports-color 1684 | 1685 | '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2)': 1686 | dependencies: 1687 | '@babel/core': 7.25.2 1688 | '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) 1689 | '@babel/helper-plugin-utils': 7.24.8 1690 | transitivePeerDependencies: 1691 | - supports-color 1692 | 1693 | '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2)': 1694 | dependencies: 1695 | '@babel/core': 7.25.2 1696 | '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) 1697 | '@babel/helper-plugin-utils': 7.24.8 1698 | 1699 | '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2)': 1700 | dependencies: 1701 | '@babel/core': 7.25.2 1702 | '@babel/helper-plugin-utils': 7.24.8 1703 | 1704 | '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2)': 1705 | dependencies: 1706 | '@babel/core': 7.25.2 1707 | '@babel/helper-plugin-utils': 7.24.8 1708 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) 1709 | 1710 | '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2)': 1711 | dependencies: 1712 | '@babel/core': 7.25.2 1713 | '@babel/helper-plugin-utils': 7.24.8 1714 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) 1715 | 1716 | '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2)': 1717 | dependencies: 1718 | '@babel/core': 7.25.2 1719 | '@babel/helper-compilation-targets': 7.25.2 1720 | '@babel/helper-plugin-utils': 7.24.8 1721 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) 1722 | '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) 1723 | 1724 | '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2)': 1725 | dependencies: 1726 | '@babel/core': 7.25.2 1727 | '@babel/helper-plugin-utils': 7.24.8 1728 | '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) 1729 | transitivePeerDependencies: 1730 | - supports-color 1731 | 1732 | '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2)': 1733 | dependencies: 1734 | '@babel/core': 7.25.2 1735 | '@babel/helper-plugin-utils': 7.24.8 1736 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) 1737 | 1738 | '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2)': 1739 | dependencies: 1740 | '@babel/core': 7.25.2 1741 | '@babel/helper-plugin-utils': 7.24.8 1742 | '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 1743 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) 1744 | transitivePeerDependencies: 1745 | - supports-color 1746 | 1747 | '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2)': 1748 | dependencies: 1749 | '@babel/core': 7.25.2 1750 | '@babel/helper-plugin-utils': 7.24.8 1751 | 1752 | '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.25.2)': 1753 | dependencies: 1754 | '@babel/core': 7.25.2 1755 | '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) 1756 | '@babel/helper-plugin-utils': 7.24.8 1757 | transitivePeerDependencies: 1758 | - supports-color 1759 | 1760 | '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2)': 1761 | dependencies: 1762 | '@babel/core': 7.25.2 1763 | '@babel/helper-annotate-as-pure': 7.24.7 1764 | '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) 1765 | '@babel/helper-plugin-utils': 7.24.8 1766 | '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) 1767 | transitivePeerDependencies: 1768 | - supports-color 1769 | 1770 | '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2)': 1771 | dependencies: 1772 | '@babel/core': 7.25.2 1773 | '@babel/helper-plugin-utils': 7.24.8 1774 | 1775 | '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2)': 1776 | dependencies: 1777 | '@babel/core': 7.25.2 1778 | '@babel/helper-plugin-utils': 7.24.8 1779 | regenerator-transform: 0.15.2 1780 | 1781 | '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2)': 1782 | dependencies: 1783 | '@babel/core': 7.25.2 1784 | '@babel/helper-plugin-utils': 7.24.8 1785 | 1786 | '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2)': 1787 | dependencies: 1788 | '@babel/core': 7.25.2 1789 | '@babel/helper-plugin-utils': 7.24.8 1790 | 1791 | '@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2)': 1792 | dependencies: 1793 | '@babel/core': 7.25.2 1794 | '@babel/helper-plugin-utils': 7.24.8 1795 | '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 1796 | transitivePeerDependencies: 1797 | - supports-color 1798 | 1799 | '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2)': 1800 | dependencies: 1801 | '@babel/core': 7.25.2 1802 | '@babel/helper-plugin-utils': 7.24.8 1803 | 1804 | '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2)': 1805 | dependencies: 1806 | '@babel/core': 7.25.2 1807 | '@babel/helper-plugin-utils': 7.24.8 1808 | 1809 | '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2)': 1810 | dependencies: 1811 | '@babel/core': 7.25.2 1812 | '@babel/helper-plugin-utils': 7.24.8 1813 | 1814 | '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': 1815 | dependencies: 1816 | '@babel/core': 7.25.2 1817 | '@babel/helper-annotate-as-pure': 7.24.7 1818 | '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) 1819 | '@babel/helper-plugin-utils': 7.24.8 1820 | '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 1821 | '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) 1822 | transitivePeerDependencies: 1823 | - supports-color 1824 | 1825 | '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2)': 1826 | dependencies: 1827 | '@babel/core': 7.25.2 1828 | '@babel/helper-plugin-utils': 7.24.8 1829 | 1830 | '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2)': 1831 | dependencies: 1832 | '@babel/core': 7.25.2 1833 | '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) 1834 | '@babel/helper-plugin-utils': 7.24.8 1835 | 1836 | '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2)': 1837 | dependencies: 1838 | '@babel/core': 7.25.2 1839 | '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) 1840 | '@babel/helper-plugin-utils': 7.24.8 1841 | 1842 | '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.25.2)': 1843 | dependencies: 1844 | '@babel/core': 7.25.2 1845 | '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) 1846 | '@babel/helper-plugin-utils': 7.24.8 1847 | 1848 | '@babel/preset-env@7.25.3(@babel/core@7.25.2)': 1849 | dependencies: 1850 | '@babel/compat-data': 7.25.2 1851 | '@babel/core': 7.25.2 1852 | '@babel/helper-compilation-targets': 7.25.2 1853 | '@babel/helper-plugin-utils': 7.24.8 1854 | '@babel/helper-validator-option': 7.24.8 1855 | '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.25.2) 1856 | '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) 1857 | '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) 1858 | '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) 1859 | '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) 1860 | '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) 1861 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) 1862 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) 1863 | '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) 1864 | '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) 1865 | '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) 1866 | '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.25.2) 1867 | '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.25.2) 1868 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) 1869 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) 1870 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) 1871 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) 1872 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) 1873 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) 1874 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) 1875 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) 1876 | '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) 1877 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) 1878 | '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) 1879 | '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) 1880 | '@babel/plugin-transform-async-generator-functions': 7.25.0(@babel/core@7.25.2) 1881 | '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) 1882 | '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) 1883 | '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) 1884 | '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.25.2) 1885 | '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) 1886 | '@babel/plugin-transform-classes': 7.25.0(@babel/core@7.25.2) 1887 | '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) 1888 | '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) 1889 | '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) 1890 | '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) 1891 | '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) 1892 | '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) 1893 | '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) 1894 | '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) 1895 | '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) 1896 | '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) 1897 | '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) 1898 | '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) 1899 | '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) 1900 | '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) 1901 | '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) 1902 | '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) 1903 | '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) 1904 | '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) 1905 | '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) 1906 | '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) 1907 | '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) 1908 | '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) 1909 | '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) 1910 | '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) 1911 | '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) 1912 | '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) 1913 | '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) 1914 | '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.25.2) 1915 | '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) 1916 | '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) 1917 | '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) 1918 | '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) 1919 | '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) 1920 | '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) 1921 | '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) 1922 | '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) 1923 | '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) 1924 | '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) 1925 | '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) 1926 | '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) 1927 | '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.25.2) 1928 | '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) 1929 | babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) 1930 | babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) 1931 | babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) 1932 | core-js-compat: 3.38.0 1933 | semver: 6.3.1 1934 | transitivePeerDependencies: 1935 | - supports-color 1936 | 1937 | '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': 1938 | dependencies: 1939 | '@babel/core': 7.25.2 1940 | '@babel/helper-plugin-utils': 7.24.8 1941 | '@babel/types': 7.25.2 1942 | esutils: 2.0.3 1943 | 1944 | '@babel/preset-typescript@7.24.7(@babel/core@7.25.2)': 1945 | dependencies: 1946 | '@babel/core': 7.25.2 1947 | '@babel/helper-plugin-utils': 7.24.8 1948 | '@babel/helper-validator-option': 7.24.8 1949 | '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) 1950 | '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) 1951 | '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) 1952 | transitivePeerDependencies: 1953 | - supports-color 1954 | 1955 | '@babel/regjsgen@0.8.0': {} 1956 | 1957 | '@babel/runtime@7.25.0': 1958 | dependencies: 1959 | regenerator-runtime: 0.14.1 1960 | 1961 | '@babel/template@7.25.0': 1962 | dependencies: 1963 | '@babel/code-frame': 7.24.7 1964 | '@babel/parser': 7.25.3 1965 | '@babel/types': 7.25.2 1966 | 1967 | '@babel/traverse@7.25.3': 1968 | dependencies: 1969 | '@babel/code-frame': 7.24.7 1970 | '@babel/generator': 7.25.0 1971 | '@babel/parser': 7.25.3 1972 | '@babel/template': 7.25.0 1973 | '@babel/types': 7.25.2 1974 | debug: 4.3.6 1975 | globals: 11.12.0 1976 | transitivePeerDependencies: 1977 | - supports-color 1978 | 1979 | '@babel/types@7.25.2': 1980 | dependencies: 1981 | '@babel/helper-string-parser': 7.24.8 1982 | '@babel/helper-validator-identifier': 7.24.7 1983 | to-fast-properties: 2.0.0 1984 | 1985 | '@isaacs/cliui@8.0.2': 1986 | dependencies: 1987 | string-width: 5.1.2 1988 | string-width-cjs: string-width@4.2.3 1989 | strip-ansi: 7.1.0 1990 | strip-ansi-cjs: strip-ansi@6.0.1 1991 | wrap-ansi: 8.1.0 1992 | wrap-ansi-cjs: wrap-ansi@7.0.0 1993 | 1994 | '@jridgewell/gen-mapping@0.3.5': 1995 | dependencies: 1996 | '@jridgewell/set-array': 1.2.1 1997 | '@jridgewell/sourcemap-codec': 1.5.0 1998 | '@jridgewell/trace-mapping': 0.3.25 1999 | 2000 | '@jridgewell/resolve-uri@3.1.2': {} 2001 | 2002 | '@jridgewell/set-array@1.2.1': {} 2003 | 2004 | '@jridgewell/sourcemap-codec@1.5.0': {} 2005 | 2006 | '@jridgewell/trace-mapping@0.3.25': 2007 | dependencies: 2008 | '@jridgewell/resolve-uri': 3.1.2 2009 | '@jridgewell/sourcemap-codec': 1.5.0 2010 | 2011 | '@pkgjs/parseargs@0.11.0': 2012 | optional: true 2013 | 2014 | '@rollup/plugin-babel@6.0.4(@babel/core@7.25.2)(rollup@4.20.0)': 2015 | dependencies: 2016 | '@babel/core': 7.25.2 2017 | '@babel/helper-module-imports': 7.24.7 2018 | '@rollup/pluginutils': 5.1.0(rollup@4.20.0) 2019 | optionalDependencies: 2020 | rollup: 4.20.0 2021 | transitivePeerDependencies: 2022 | - supports-color 2023 | 2024 | '@rollup/plugin-commonjs@26.0.1(rollup@4.20.0)': 2025 | dependencies: 2026 | '@rollup/pluginutils': 5.1.0(rollup@4.20.0) 2027 | commondir: 1.0.1 2028 | estree-walker: 2.0.2 2029 | glob: 10.4.5 2030 | is-reference: 1.2.1 2031 | magic-string: 0.30.11 2032 | optionalDependencies: 2033 | rollup: 4.20.0 2034 | 2035 | '@rollup/plugin-node-resolve@15.2.3(rollup@4.20.0)': 2036 | dependencies: 2037 | '@rollup/pluginutils': 5.1.0(rollup@4.20.0) 2038 | '@types/resolve': 1.20.2 2039 | deepmerge: 4.3.1 2040 | is-builtin-module: 3.2.1 2041 | is-module: 1.0.0 2042 | resolve: 1.22.8 2043 | optionalDependencies: 2044 | rollup: 4.20.0 2045 | 2046 | '@rollup/plugin-run@3.1.0(rollup@4.20.0)': 2047 | dependencies: 2048 | '@types/node': 14.18.30 2049 | optionalDependencies: 2050 | rollup: 4.20.0 2051 | 2052 | '@rollup/pluginutils@5.1.0(rollup@4.20.0)': 2053 | dependencies: 2054 | '@types/estree': 1.0.5 2055 | estree-walker: 2.0.2 2056 | picomatch: 2.3.1 2057 | optionalDependencies: 2058 | rollup: 4.20.0 2059 | 2060 | '@rollup/rollup-android-arm-eabi@4.20.0': 2061 | optional: true 2062 | 2063 | '@rollup/rollup-android-arm64@4.20.0': 2064 | optional: true 2065 | 2066 | '@rollup/rollup-darwin-arm64@4.20.0': 2067 | optional: true 2068 | 2069 | '@rollup/rollup-darwin-x64@4.20.0': 2070 | optional: true 2071 | 2072 | '@rollup/rollup-linux-arm-gnueabihf@4.20.0': 2073 | optional: true 2074 | 2075 | '@rollup/rollup-linux-arm-musleabihf@4.20.0': 2076 | optional: true 2077 | 2078 | '@rollup/rollup-linux-arm64-gnu@4.20.0': 2079 | optional: true 2080 | 2081 | '@rollup/rollup-linux-arm64-musl@4.20.0': 2082 | optional: true 2083 | 2084 | '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': 2085 | optional: true 2086 | 2087 | '@rollup/rollup-linux-riscv64-gnu@4.20.0': 2088 | optional: true 2089 | 2090 | '@rollup/rollup-linux-s390x-gnu@4.20.0': 2091 | optional: true 2092 | 2093 | '@rollup/rollup-linux-x64-gnu@4.20.0': 2094 | optional: true 2095 | 2096 | '@rollup/rollup-linux-x64-musl@4.20.0': 2097 | optional: true 2098 | 2099 | '@rollup/rollup-win32-arm64-msvc@4.20.0': 2100 | optional: true 2101 | 2102 | '@rollup/rollup-win32-ia32-msvc@4.20.0': 2103 | optional: true 2104 | 2105 | '@rollup/rollup-win32-x64-msvc@4.20.0': 2106 | optional: true 2107 | 2108 | '@types/estree@1.0.5': {} 2109 | 2110 | '@types/node@14.18.30': {} 2111 | 2112 | '@types/resolve@1.20.2': {} 2113 | 2114 | ansi-regex@5.0.1: {} 2115 | 2116 | ansi-regex@6.0.1: {} 2117 | 2118 | ansi-styles@3.2.1: 2119 | dependencies: 2120 | color-convert: 1.9.3 2121 | 2122 | ansi-styles@4.3.0: 2123 | dependencies: 2124 | color-convert: 2.0.1 2125 | 2126 | ansi-styles@6.2.1: {} 2127 | 2128 | babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): 2129 | dependencies: 2130 | '@babel/compat-data': 7.25.2 2131 | '@babel/core': 7.25.2 2132 | '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) 2133 | semver: 6.3.1 2134 | transitivePeerDependencies: 2135 | - supports-color 2136 | 2137 | babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): 2138 | dependencies: 2139 | '@babel/core': 7.25.2 2140 | '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) 2141 | core-js-compat: 3.38.0 2142 | transitivePeerDependencies: 2143 | - supports-color 2144 | 2145 | babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): 2146 | dependencies: 2147 | '@babel/core': 7.25.2 2148 | '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) 2149 | transitivePeerDependencies: 2150 | - supports-color 2151 | 2152 | balanced-match@1.0.2: {} 2153 | 2154 | brace-expansion@2.0.1: 2155 | dependencies: 2156 | balanced-match: 1.0.2 2157 | 2158 | browserslist@4.23.3: 2159 | dependencies: 2160 | caniuse-lite: 1.0.30001650 2161 | electron-to-chromium: 1.5.5 2162 | node-releases: 2.0.18 2163 | update-browserslist-db: 1.1.0(browserslist@4.23.3) 2164 | 2165 | builtin-modules@3.3.0: {} 2166 | 2167 | caniuse-lite@1.0.30001650: {} 2168 | 2169 | chalk@2.4.2: 2170 | dependencies: 2171 | ansi-styles: 3.2.1 2172 | escape-string-regexp: 1.0.5 2173 | supports-color: 5.5.0 2174 | 2175 | clsx@2.1.1: {} 2176 | 2177 | color-convert@1.9.3: 2178 | dependencies: 2179 | color-name: 1.1.3 2180 | 2181 | color-convert@2.0.1: 2182 | dependencies: 2183 | color-name: 1.1.4 2184 | 2185 | color-name@1.1.3: {} 2186 | 2187 | color-name@1.1.4: {} 2188 | 2189 | commondir@1.0.1: {} 2190 | 2191 | convert-source-map@2.0.0: {} 2192 | 2193 | core-js-compat@3.38.0: 2194 | dependencies: 2195 | browserslist: 4.23.3 2196 | 2197 | cross-spawn@7.0.3: 2198 | dependencies: 2199 | path-key: 3.1.1 2200 | shebang-command: 2.0.0 2201 | which: 2.0.2 2202 | 2203 | debug@4.3.6: 2204 | dependencies: 2205 | ms: 2.1.2 2206 | 2207 | deepmerge@4.3.1: {} 2208 | 2209 | eastasianwidth@0.2.0: {} 2210 | 2211 | electron-to-chromium@1.5.5: {} 2212 | 2213 | emoji-regex@8.0.0: {} 2214 | 2215 | emoji-regex@9.2.2: {} 2216 | 2217 | escalade@3.1.2: {} 2218 | 2219 | escape-string-regexp@1.0.5: {} 2220 | 2221 | estree-walker@2.0.2: {} 2222 | 2223 | esutils@2.0.3: {} 2224 | 2225 | foreground-child@3.3.0: 2226 | dependencies: 2227 | cross-spawn: 7.0.3 2228 | signal-exit: 4.1.0 2229 | 2230 | fsevents@2.3.3: 2231 | optional: true 2232 | 2233 | function-bind@1.1.2: {} 2234 | 2235 | gensync@1.0.0-beta.2: {} 2236 | 2237 | glob@10.4.5: 2238 | dependencies: 2239 | foreground-child: 3.3.0 2240 | jackspeak: 3.4.3 2241 | minimatch: 9.0.5 2242 | minipass: 7.1.2 2243 | package-json-from-dist: 1.0.0 2244 | path-scurry: 1.11.1 2245 | 2246 | globals@11.12.0: {} 2247 | 2248 | has-flag@3.0.0: {} 2249 | 2250 | hasown@2.0.2: 2251 | dependencies: 2252 | function-bind: 1.1.2 2253 | 2254 | is-builtin-module@3.2.1: 2255 | dependencies: 2256 | builtin-modules: 3.3.0 2257 | 2258 | is-core-module@2.15.0: 2259 | dependencies: 2260 | hasown: 2.0.2 2261 | 2262 | is-fullwidth-code-point@3.0.0: {} 2263 | 2264 | is-module@1.0.0: {} 2265 | 2266 | is-reference@1.2.1: 2267 | dependencies: 2268 | '@types/estree': 1.0.5 2269 | 2270 | isexe@2.0.0: {} 2271 | 2272 | jackspeak@3.4.3: 2273 | dependencies: 2274 | '@isaacs/cliui': 8.0.2 2275 | optionalDependencies: 2276 | '@pkgjs/parseargs': 0.11.0 2277 | 2278 | js-tokens@4.0.0: {} 2279 | 2280 | jsesc@0.5.0: {} 2281 | 2282 | jsesc@2.5.2: {} 2283 | 2284 | json5@2.2.3: {} 2285 | 2286 | lodash.debounce@4.0.8: {} 2287 | 2288 | lru-cache@10.4.3: {} 2289 | 2290 | lru-cache@5.1.1: 2291 | dependencies: 2292 | yallist: 3.1.1 2293 | 2294 | magic-string@0.30.11: 2295 | dependencies: 2296 | '@jridgewell/sourcemap-codec': 1.5.0 2297 | 2298 | minimatch@9.0.5: 2299 | dependencies: 2300 | brace-expansion: 2.0.1 2301 | 2302 | minipass@7.1.2: {} 2303 | 2304 | ms@2.1.2: {} 2305 | 2306 | node-releases@2.0.18: {} 2307 | 2308 | package-json-from-dist@1.0.0: {} 2309 | 2310 | path-key@3.1.1: {} 2311 | 2312 | path-parse@1.0.7: {} 2313 | 2314 | path-scurry@1.11.1: 2315 | dependencies: 2316 | lru-cache: 10.4.3 2317 | minipass: 7.1.2 2318 | 2319 | picocolors@1.0.1: {} 2320 | 2321 | picomatch@2.3.1: {} 2322 | 2323 | regenerate-unicode-properties@10.1.1: 2324 | dependencies: 2325 | regenerate: 1.4.2 2326 | 2327 | regenerate@1.4.2: {} 2328 | 2329 | regenerator-runtime@0.14.1: {} 2330 | 2331 | regenerator-transform@0.15.2: 2332 | dependencies: 2333 | '@babel/runtime': 7.25.0 2334 | 2335 | regexpu-core@5.3.2: 2336 | dependencies: 2337 | '@babel/regjsgen': 0.8.0 2338 | regenerate: 1.4.2 2339 | regenerate-unicode-properties: 10.1.1 2340 | regjsparser: 0.9.1 2341 | unicode-match-property-ecmascript: 2.0.0 2342 | unicode-match-property-value-ecmascript: 2.1.0 2343 | 2344 | regjsparser@0.9.1: 2345 | dependencies: 2346 | jsesc: 0.5.0 2347 | 2348 | resolve@1.22.8: 2349 | dependencies: 2350 | is-core-module: 2.15.0 2351 | path-parse: 1.0.7 2352 | supports-preserve-symlinks-flag: 1.0.0 2353 | 2354 | rollup-plugin-tsconfig-paths@1.5.2(rollup@4.20.0)(typescript@5.5.4): 2355 | dependencies: 2356 | rollup: 4.20.0 2357 | typescript-paths: 1.5.1(typescript@5.5.4) 2358 | transitivePeerDependencies: 2359 | - typescript 2360 | 2361 | rollup@4.20.0: 2362 | dependencies: 2363 | '@types/estree': 1.0.5 2364 | optionalDependencies: 2365 | '@rollup/rollup-android-arm-eabi': 4.20.0 2366 | '@rollup/rollup-android-arm64': 4.20.0 2367 | '@rollup/rollup-darwin-arm64': 4.20.0 2368 | '@rollup/rollup-darwin-x64': 4.20.0 2369 | '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 2370 | '@rollup/rollup-linux-arm-musleabihf': 4.20.0 2371 | '@rollup/rollup-linux-arm64-gnu': 4.20.0 2372 | '@rollup/rollup-linux-arm64-musl': 4.20.0 2373 | '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 2374 | '@rollup/rollup-linux-riscv64-gnu': 4.20.0 2375 | '@rollup/rollup-linux-s390x-gnu': 4.20.0 2376 | '@rollup/rollup-linux-x64-gnu': 4.20.0 2377 | '@rollup/rollup-linux-x64-musl': 4.20.0 2378 | '@rollup/rollup-win32-arm64-msvc': 4.20.0 2379 | '@rollup/rollup-win32-ia32-msvc': 4.20.0 2380 | '@rollup/rollup-win32-x64-msvc': 4.20.0 2381 | fsevents: 2.3.3 2382 | 2383 | semver@6.3.1: {} 2384 | 2385 | shebang-command@2.0.0: 2386 | dependencies: 2387 | shebang-regex: 3.0.0 2388 | 2389 | shebang-regex@3.0.0: {} 2390 | 2391 | signal-exit@4.1.0: {} 2392 | 2393 | string-width@4.2.3: 2394 | dependencies: 2395 | emoji-regex: 8.0.0 2396 | is-fullwidth-code-point: 3.0.0 2397 | strip-ansi: 6.0.1 2398 | 2399 | string-width@5.1.2: 2400 | dependencies: 2401 | eastasianwidth: 0.2.0 2402 | emoji-regex: 9.2.2 2403 | strip-ansi: 7.1.0 2404 | 2405 | strip-ansi@6.0.1: 2406 | dependencies: 2407 | ansi-regex: 5.0.1 2408 | 2409 | strip-ansi@7.1.0: 2410 | dependencies: 2411 | ansi-regex: 6.0.1 2412 | 2413 | supports-color@5.5.0: 2414 | dependencies: 2415 | has-flag: 3.0.0 2416 | 2417 | supports-preserve-symlinks-flag@1.0.0: {} 2418 | 2419 | to-fast-properties@2.0.0: {} 2420 | 2421 | typescript-paths@1.5.1(typescript@5.5.4): 2422 | dependencies: 2423 | typescript: 5.5.4 2424 | 2425 | typescript@5.5.4: {} 2426 | 2427 | unicode-canonical-property-names-ecmascript@2.0.0: {} 2428 | 2429 | unicode-match-property-ecmascript@2.0.0: 2430 | dependencies: 2431 | unicode-canonical-property-names-ecmascript: 2.0.0 2432 | unicode-property-aliases-ecmascript: 2.1.0 2433 | 2434 | unicode-match-property-value-ecmascript@2.1.0: {} 2435 | 2436 | unicode-property-aliases-ecmascript@2.1.0: {} 2437 | 2438 | update-browserslist-db@1.1.0(browserslist@4.23.3): 2439 | dependencies: 2440 | browserslist: 4.23.3 2441 | escalade: 3.1.2 2442 | picocolors: 1.0.1 2443 | 2444 | which@2.0.2: 2445 | dependencies: 2446 | isexe: 2.0.0 2447 | 2448 | wrap-ansi@7.0.0: 2449 | dependencies: 2450 | ansi-styles: 4.3.0 2451 | string-width: 4.2.3 2452 | strip-ansi: 6.0.1 2453 | 2454 | wrap-ansi@8.1.0: 2455 | dependencies: 2456 | ansi-styles: 6.2.1 2457 | string-width: 5.1.2 2458 | strip-ansi: 7.1.0 2459 | 2460 | yallist@3.1.1: {} 2461 | -------------------------------------------------------------------------------- /examples/rollup-demo/rollup.config.js: -------------------------------------------------------------------------------- 1 | import babel from "@rollup/plugin-babel" 2 | import commonjs from "@rollup/plugin-commonjs" 3 | import nodeResolve from "@rollup/plugin-node-resolve" 4 | import run from "@rollup/plugin-run" 5 | import tsConfigPaths from "rollup-plugin-tsconfig-paths" 6 | 7 | /** @type {import("rollup").RollupOptions} */ 8 | export default { 9 | input: "./src/index.ts", 10 | output: { 11 | format: "esm", 12 | dir: "./dist", 13 | }, 14 | plugins: [ 15 | babel({ 16 | babelHelpers: "bundled", 17 | extensions: [".ts", ".js"], 18 | }), 19 | tsConfigPaths(), 20 | nodeResolve({ extensions: [".ts", ".js", ".json"] }), 21 | commonjs(), 22 | run(), 23 | ], 24 | } 25 | -------------------------------------------------------------------------------- /examples/rollup-demo/src/common/helper.ts: -------------------------------------------------------------------------------- 1 | const MAX_COUNT = 128 2 | 3 | export function check(value: number) { 4 | return value <= MAX_COUNT 5 | } 6 | -------------------------------------------------------------------------------- /examples/rollup-demo/src/hello.ts: -------------------------------------------------------------------------------- 1 | export const value = 200 2 | -------------------------------------------------------------------------------- /examples/rollup-demo/src/index.ts: -------------------------------------------------------------------------------- 1 | import { value } from "he" 2 | console.log("value", value) 3 | 4 | import cx from "cx" 5 | console.log(cx("hello", null, "world")) 6 | 7 | import { check } from "./common/helper" 8 | 9 | console.log("check", check(127)) 10 | -------------------------------------------------------------------------------- /examples/rollup-demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "jsx": "preserve", 6 | "moduleResolution": "node", 7 | "noImplicitAny": false, 8 | "strict": true, 9 | "allowJs": true, 10 | "esModuleInterop": true, 11 | "skipLibCheck": true, 12 | "resolveJsonModule": true, 13 | "noEmit": true, 14 | "paths": { 15 | "~/*": ["./src/*"], 16 | "@/*": ["./src/common/*"], 17 | "he": ["./src/hello"], 18 | "cx": ["./node_modules/clsx"] 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /examples/vite-demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | -------------------------------------------------------------------------------- /examples/vite-demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Demo 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /examples/vite-demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-demo", 3 | "private": true, 4 | "scripts": { 5 | "dev": "vite dev", 6 | "build": "vite build" 7 | }, 8 | "devDependencies": { 9 | "vite": "4.5.0", 10 | "vite-plugin-tsconfig-paths": "../../packages/vite-plugin-tsconfig-paths" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/vite-demo/src/hello.ts: -------------------------------------------------------------------------------- 1 | export const value = 200 2 | -------------------------------------------------------------------------------- /examples/vite-demo/src/index.ts: -------------------------------------------------------------------------------- 1 | import { value } from "he" 2 | console.log(value) 3 | import { value as v } from "/hello" 4 | console.log(v) 5 | -------------------------------------------------------------------------------- /examples/vite-demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "noEmit": true, 5 | "strict": true, 6 | "allowSyntheticDefaultImports": true, 7 | "esModuleInterop": true, 8 | "paths": { 9 | "he": ["./src/hello"], 10 | "/*": ["./src/*"] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /examples/vite-demo/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite" 2 | import tsConfigPaths from "vite-plugin-tsconfig-paths" 3 | 4 | export default defineConfig({ 5 | build: { 6 | outDir: "build", 7 | }, 8 | plugins: [tsConfigPaths({ logLevel: "debug" })], 9 | }) 10 | -------------------------------------------------------------------------------- /examples/webpack-demo/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env", "@babel/preset-typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /examples/webpack-demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | -------------------------------------------------------------------------------- /examples/webpack-demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webpack-demo", 3 | "private": true, 4 | "scripts": { 5 | "start": "webpack serve --config webpack.dev.js", 6 | "build": "webpack --config webpack.dev.js" 7 | }, 8 | "devDependencies": { 9 | "@babel/core": "7.22.20", 10 | "@babel/preset-env": "7.22.20", 11 | "@babel/preset-typescript": "7.22.15", 12 | "@babel/runtime": "7.22.15", 13 | "babel-loader": "9.1.3", 14 | "html-webpack-plugin": "5.5.3", 15 | "ts-paths-resolve-plugin": "../../packages/ts-paths-resolve-plugin", 16 | "webpack": "5.88.2", 17 | "webpack-cli": "5.1.4", 18 | "webpack-dev-server": "4.15.1" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /examples/webpack-demo/src/hello.ts: -------------------------------------------------------------------------------- 1 | export const value = 200 2 | -------------------------------------------------------------------------------- /examples/webpack-demo/src/index.ts: -------------------------------------------------------------------------------- 1 | import { value } from "he" 2 | console.log(value) 3 | -------------------------------------------------------------------------------- /examples/webpack-demo/src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "noEmit": true, 5 | "strict": true, 6 | "allowSyntheticDefaultImports": true, 7 | "esModuleInterop": true, 8 | "paths": { 9 | "he": ["./hello"], 10 | "ro": ["./world"] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /examples/webpack-demo/src/world.ts: -------------------------------------------------------------------------------- 1 | export const value = 100 2 | -------------------------------------------------------------------------------- /examples/webpack-demo/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const path = require("path") 2 | const glob = require("glob") 3 | const TsPathsResolvePlugin = require("ts-paths-resolve-plugin") 4 | const HtmlWebpackPlugin = require("html-webpack-plugin") 5 | const src = path.join(__dirname, "src") 6 | process.env.NODE_ENV = "development" 7 | 8 | /** @type {import("webpack").Configuration} */ 9 | const config = { 10 | mode: "development", 11 | devtool: "inline-source-map", 12 | entry: glob.sync("index.*", { cwd: src }).map(i => path.join(src, i)), 13 | output: { 14 | path: path.join(__dirname, "build"), 15 | filename: "js/[name].js?[fullhash]", 16 | clean: true, 17 | }, 18 | module: { 19 | rules: [{ test: /\.(j|t)s?/, loader: "babel-loader" }], 20 | }, 21 | plugins: [new HtmlWebpackPlugin()], 22 | resolve: { 23 | extensions: [".ts", ".tsx", ".js", ".jsx", ".json"], 24 | plugins: [new TsPathsResolvePlugin({ tsConfigPath: "src/tsconfig.json", logLevel: "debug" })], 25 | }, 26 | devServer: { 27 | hot: true, 28 | open: false, 29 | historyApiFallback: true, 30 | }, 31 | } 32 | 33 | module.exports = config 34 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | preset: "ts-jest", 3 | testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.((m|c|)js|(m|c|)ts)$", 4 | moduleFileExtensions: ["js", "ts", "mjs", "mts"], 5 | testEnvironment: "node", 6 | } 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-monorepo", 3 | "private": true, 4 | "scripts": { 5 | "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js", 6 | "build-core": "cd packages/typescript-paths && npm run build", 7 | "build-webpack-plugin": "cd packages/ts-paths-resolve-plugin && npm run build", 8 | "build-rollup-plugin": "cd packages/rollup-plugin-tsconfig-paths && npm run build", 9 | "build-vite-plugin": "cd packages/vite-plugin-tsconfig-paths && npm run build", 10 | "format": "prettier --config .prettierrc.yml --write packages/**/index.ts packages/**/{src,tests,types}/**/*", 11 | "build": "npm run build-core && npm run build-webpack-plugin && npm run build-rollup-plugin && npm run build-vite-plugin", 12 | "doit": "pnpm update --interactive --latest" 13 | }, 14 | "devDependencies": { 15 | "@babel/core": "7.22.20", 16 | "@babel/preset-env": "7.22.20", 17 | "@babel/preset-typescript": "7.22.15", 18 | "@rollup/plugin-babel": "6.0.4", 19 | "@rollup/plugin-commonjs": "25.0.7", 20 | "@rollup/plugin-node-resolve": "15.2.3", 21 | "@types/jest": "29.5.5", 22 | "@types/node": "20.6.2", 23 | "del-cli": "5.1.0", 24 | "jest": "29.7.0", 25 | "prettier": "3.0.3", 26 | "rollup": "4.1.4", 27 | "ts-jest": "29.1.1", 28 | "ts-node": "10.9.1", 29 | "tsup": "7.2.0", 30 | "typescript": "5.2.2" 31 | }, 32 | "pnpm": { 33 | "overrides": {} 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env", "@babel/preset-typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/.browserslistrc: -------------------------------------------------------------------------------- 1 | maintained node versions 2 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | /index.*js 3 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 lightyen 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 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/README.md: -------------------------------------------------------------------------------- 1 | # rollup-plugin-tsconfig-paths 2 | 3 | [npm:latest]: https://www.npmjs.com/package/rollup-plugin-tsconfig-paths/v/latest 4 | [npm:latest:badge]: https://img.shields.io/npm/v/rollup-plugin-tsconfig-paths/latest?style=flat-square 5 | 6 | [![Latest Version][npm:latest:badge]][npm:latest] 7 | 8 | Rollup plugin for resolving tsconfig paths 9 | 10 | ```sh 11 | npm install --save-dev rollup-plugin-tsconfig-paths 12 | ``` 13 | 14 | rollup.config.js 15 | 16 | ```js 17 | 18 | import tsConfigPaths from "rollup-plugin-tsconfig-paths" 19 | import nodeResolve from "@rollup/plugin-node-resolve" 20 | import commonjs from "@rollup/plugin-commonjs" 21 | 22 | export default { 23 | plugins: [ 24 | tsConfigPaths(), 25 | nodeResolve({ extensions: [".tsx", ".ts", ".jsx", ".js", ".json", ...] }), 26 | commonjs(), 27 | ] 28 | } 29 | ``` 30 | 31 | Example tsconfig.json 32 | 33 | ```json 34 | { 35 | "compilerOptions": { 36 | "jsx": "preserve", 37 | "module": "esnext", 38 | "moduleResolution": "node", 39 | "target": "esnext", 40 | "lib": ["esnext", "dom", "dom.iterable"], 41 | "types": ["react", "webpack-env"], 42 | "baseUrl": ".", 43 | "paths": { 44 | "~/*": ["./*"] 45 | } 46 | } 47 | } 48 | ``` 49 | 50 | Then you can import alias instead of annoying path 51 | 52 | ```js 53 | // import App from "../../../../App" 54 | import App from "~/App" 55 | 56 | ... 57 | 58 | ``` 59 | 60 | ## Options 61 | 62 | ### tsConfigPath _(string | string[])_ 63 | 64 | Specify set where your TypeScript configuration file. 65 | 66 | If not set: 67 | 68 | - use Environment variable **TS_NODE_PROJECT** 69 | - or search tsconfig.json in current working directory. 70 | 71 | ### logLevel _("none" | "error" | "warn" | "info" | "debug" | "trace") (default: "info")_ 72 | 73 | Log level when the plugin is running. 74 | 75 | ## reference 76 | 77 | - https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping 78 | - https://github.com/microsoft/TypeScript/issues/5039 79 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/index.d.ts: -------------------------------------------------------------------------------- 1 | import type { Plugin } from "rollup" 2 | import type { RegisterOptions } from "typescript-paths" 3 | export declare type PluginOptions = Omit 4 | export default function tsConfigPaths({ tsConfigPath, respectCoreModule, logLevel, colors }?: PluginOptions): Plugin 5 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/integration.test.mjs: -------------------------------------------------------------------------------- 1 | import { createRequire } from "module" 2 | import path from "node:path" 3 | import { fileURLToPath, pathToFileURL } from "node:url" 4 | 5 | function getPathURL(basename) { 6 | return pathToFileURL( 7 | path.join(path.dirname(fileURLToPath(import.meta.url)), basename), 8 | ) 9 | } 10 | 11 | test("load CommonJS module", () => { 12 | const require = createRequire(getPathURL("index.js")) 13 | const tsConfigPaths = require(".") 14 | expect(tsConfigPaths).toHaveProperty("name", "tsConfigPaths") 15 | expect(tsConfigPaths["default"]).toHaveProperty("name", "tsConfigPaths") 16 | }) 17 | 18 | test("load ES module", async () => { 19 | const tsConfigPaths = await import(getPathURL("./index.mjs")).then( 20 | m => m.default, 21 | ) 22 | expect(tsConfigPaths).toHaveProperty("name", "tsConfigPaths") 23 | }) 24 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rollup-plugin-tsconfig-paths", 3 | "version": "1.5.2", 4 | "description": "Rollup plugin for resolving tsconfig paths", 5 | "license": "MIT", 6 | "exports": { 7 | ".": { 8 | "types": "./index.d.ts", 9 | "require": "./index.js", 10 | "import": "./index.mjs" 11 | } 12 | }, 13 | "types": "./index.d.ts", 14 | "author": "lightyen", 15 | "repository": { 16 | "url": "https://github.com/lightyen/typescript-paths" 17 | }, 18 | "homepage": "https://github.com/lightyen/typescript-paths/blob/main/packages/rollup-plugin-tsconfig-paths#readme", 19 | "scripts": { 20 | "doit": "pnpm update --interactive --latest", 21 | "compile": "del ./index.js ./index.mjs && tsup", 22 | "format": "prettier --config ../../.prettierrc.yml --write *.*ts **/*.*ts", 23 | "build": "npm run compile && npm run format", 24 | "prepack": "npm run build" 25 | }, 26 | "keywords": [ 27 | "rollup", 28 | "plugin", 29 | "tsconfig", 30 | "paths" 31 | ], 32 | "dependencies": { 33 | "typescript-paths": "^1.5.1" 34 | }, 35 | "peerDependencies": { 36 | "rollup": "^2 || ^3 || ^4" 37 | }, 38 | "files": [ 39 | "LICENSE", 40 | "index.js", 41 | "index.mjs", 42 | "index.d.ts" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/src/index.mts: -------------------------------------------------------------------------------- 1 | import { tsConfigPaths } from "./plugin" 2 | export default tsConfigPaths 3 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/src/index.ts: -------------------------------------------------------------------------------- 1 | import { tsConfigPaths } from "./plugin" 2 | tsConfigPaths["default"] = tsConfigPaths 3 | module.exports = tsConfigPaths 4 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/src/plugin.ts: -------------------------------------------------------------------------------- 1 | import fs from "node:fs" 2 | import path from "node:path" 3 | import type { Plugin } from "rollup" 4 | import ts from "typescript" 5 | import type { RegisterOptions } from "typescript-paths" 6 | import { convertLogLevel, createHandler, createLogger, LogLevel } from "typescript-paths" 7 | 8 | const PLUGIN_NAME = "tsconfig-paths" 9 | 10 | export type PluginOptions = Omit 11 | 12 | export function tsConfigPaths({ 13 | tsConfigPath, 14 | respectCoreModule, 15 | logLevel, 16 | colors = true, 17 | }: PluginOptions = {}): Plugin { 18 | let log: ReturnType 19 | let handler: ReturnType 20 | return { 21 | name: PLUGIN_NAME, 22 | buildStart() { 23 | log = createLogger({ logLevel: convertLogLevel(logLevel), colors, ID: PLUGIN_NAME }) 24 | log(LogLevel.Debug, `typescript version: ${ts.version}`) 25 | handler = createHandler({ 26 | log, 27 | tsConfigPath, 28 | respectCoreModule, 29 | falllback: moduleName => fs.existsSync(moduleName), 30 | }) 31 | return 32 | }, 33 | async resolveId(request, importer, options) { 34 | if (!importer || request.startsWith("\0")) { 35 | return null 36 | } 37 | 38 | const moduleName = handler?.(request, importer) 39 | if (!moduleName) { 40 | return this.resolve(request, importer, { skipSelf: true, ...options }) 41 | } 42 | 43 | log(LogLevel.Debug, `${request} -> ${moduleName}`) 44 | if (!path.extname(moduleName)) { 45 | return this.resolve(moduleName, importer, { skipSelf: true, ...options }) 46 | } 47 | 48 | return moduleName 49 | }, 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig", 3 | "include": ["src/*.ts", "src/index.mts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/rollup-plugin-tsconfig-paths/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup" 2 | 3 | export default defineConfig([ 4 | { 5 | external: ["typescript"], 6 | entry: ["./src/index.ts"], 7 | outDir: ".", 8 | splitting: false, 9 | sourcemap: false, 10 | clean: false, 11 | format: ["cjs"], 12 | }, 13 | { 14 | external: ["typescript"], 15 | entry: ["./src/index.mts"], 16 | outDir: ".", 17 | splitting: false, 18 | sourcemap: false, 19 | clean: false, 20 | format: ["esm"], 21 | }, 22 | ]) 23 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env", "@babel/preset-typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/.browserslistrc: -------------------------------------------------------------------------------- 1 | maintained node versions 2 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | /index.*js 3 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/.prettierignore: -------------------------------------------------------------------------------- 1 | *.svg 2 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 lightyen 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 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/README.md: -------------------------------------------------------------------------------- 1 | # ts-paths-resolve-plugin 2 | 3 | [npm:latest]: https://www.npmjs.com/package/ts-paths-resolve-plugin/v/latest 4 | [npm:latest:badge]: https://img.shields.io/npm/v/ts-paths-resolve-plugin/latest?style=flat-square 5 | 6 | [![Latest Version][npm:latest:badge]][npm:latest] 7 | 8 | A webpack resolve plugin for resolving tsconfig paths. 9 | 10 | ```sh 11 | npm install --save-dev ts-paths-resolve-plugin 12 | ``` 13 | 14 | Configurate in `webpack.config.js`: 15 | 16 | ```js 17 | 18 | const TsPathsResolvePlugin = require('ts-paths-resolve-plugin'); 19 | 20 | module.exports = { 21 | resolve: { 22 | extensions: [".ts", ".tsx", ".js", ".jsx", ".json"], 23 | plugins: [new TsPathsResolvePlugin()], 24 | } 25 | } 26 | ``` 27 | 28 | `tsconfig.json` example: 29 | 30 | ```json 31 | { 32 | "compilerOptions": { 33 | "paths": { 34 | "~/*": ["./*"] 35 | } 36 | } 37 | } 38 | 39 | ``` 40 | 41 | And you can import with alias instead of annoying path 42 | 43 | ```js 44 | // import App from "../../../../App" 45 | import App from "~/App" 46 | 47 | ... 48 | 49 | ``` 50 | 51 | ## Options 52 | 53 | ### tsConfigPath _(string | string[])_ 54 | 55 | Specify set where your TypeScript configuration file. 56 | 57 | If not set: 58 | 59 | - use Environment variable **TS_NODE_PROJECT** 60 | - or search tsconfig.json in current working directory. 61 | 62 | ### logLevel _("none" | "error" | "warn" | "info" | "debug" | "trace") (default: "info")_ 63 | 64 | Log level when the plugin is running. 65 | 66 | ## reference 67 | 68 | - https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping 69 | - https://github.com/microsoft/TypeScript/issues/5039 70 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/index.d.ts: -------------------------------------------------------------------------------- 1 | import type { Resolver } from "enhanced-resolve" 2 | import { createHandler, LogFunc, RegisterOptions } from "typescript-paths" 3 | import type { Compiler } from "webpack" 4 | export interface PluginOptions extends Omit {} 5 | export default class TsPathsResolvePlugin { 6 | handler: ReturnType 7 | log: LogFunc 8 | constructor({ tsConfigPath, respectCoreModule, logLevel, colors }?: Partial) 9 | apply(c: Compiler): void 10 | setup(resolver: Resolver): void 11 | isRsolver(obj: any): obj is Resolver 12 | } 13 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/integration.test.mjs: -------------------------------------------------------------------------------- 1 | import { createRequire } from "module" 2 | import path from "node:path" 3 | import { fileURLToPath, pathToFileURL } from "node:url" 4 | 5 | function getPathURL(basename) { 6 | return pathToFileURL( 7 | path.join(path.dirname(fileURLToPath(import.meta.url)), basename), 8 | ) 9 | } 10 | 11 | test("load CommonJS module", () => { 12 | const require = createRequire(getPathURL("index.js")) 13 | const fn = require(".") 14 | expect(fn).toHaveProperty("name", "TsPathsResolvePlugin") 15 | expect(fn["default"]).toHaveProperty("name", "TsPathsResolvePlugin") 16 | }) 17 | 18 | test("load ES module", async () => { 19 | const fn = await import(".").then(m => m.default) 20 | expect(fn).toHaveProperty("name", "TsPathsResolvePlugin") 21 | }) 22 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ts-paths-resolve-plugin", 3 | "version": "5.9.2", 4 | "description": "A webpack resolve plugin for tsconfig-paths", 5 | "license": "MIT", 6 | "exports": { 7 | ".": { 8 | "types": "./index.d.ts", 9 | "require": "./index.js", 10 | "import": "./index.mjs" 11 | } 12 | }, 13 | "types": "./index.d.ts", 14 | "author": "lightyen", 15 | "repository": { 16 | "url": "https://github.com/lightyen/typescript-paths" 17 | }, 18 | "homepage": "https://github.com/lightyen/typescript-paths/blob/main/packages/ts-paths-resolve-plugin#readme", 19 | "scripts": { 20 | "doit": "pnpm update --interactive --latest", 21 | "compile": "del ./index.js ./index.mjs && tsup", 22 | "format": "prettier --config ../../.prettierrc.yml --write *.*ts **/*.*ts", 23 | "build": "npm run compile && npm run format", 24 | "prepack": "npm run build" 25 | }, 26 | "dependencies": { 27 | "typescript-paths": "^1.5.1" 28 | }, 29 | "peerDependencies": { 30 | "webpack": "^5" 31 | }, 32 | "devDependencies": { 33 | "enhanced-resolve": "^5", 34 | "webpack": "^5" 35 | }, 36 | "keywords": [ 37 | "webpack", 38 | "plugin", 39 | "tsconfig", 40 | "paths" 41 | ], 42 | "files": [ 43 | "LICENSE", 44 | "index.js", 45 | "index.mjs", 46 | "index.d.ts" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/src/index.mts: -------------------------------------------------------------------------------- 1 | import { TsPathsResolvePlugin } from "./plugin" 2 | export default TsPathsResolvePlugin 3 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/src/index.ts: -------------------------------------------------------------------------------- 1 | import { TsPathsResolvePlugin } from "./plugin" 2 | TsPathsResolvePlugin["default"] = TsPathsResolvePlugin 3 | module.exports = TsPathsResolvePlugin 4 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/src/plugin.ts: -------------------------------------------------------------------------------- 1 | import type { Resolver } from "enhanced-resolve" 2 | import fs from "fs" 3 | import ts from "typescript" 4 | import { convertLogLevel, createHandler, createLogger, LogFunc, LogLevel, RegisterOptions } from "typescript-paths" 5 | import type { Compiler } from "webpack" 6 | 7 | interface Request { 8 | path: string | false 9 | request: string 10 | query: string 11 | fragment: string 12 | directory: boolean 13 | module: boolean 14 | file: boolean 15 | descriptionFilePath: string 16 | descriptionFileRoot: string 17 | descriptionFileData: unknown 18 | relativePath: string 19 | context?: { 20 | issuer?: string 21 | } 22 | } 23 | 24 | const PLUGIN_NAME = "TsPathsResolvePlugin" 25 | 26 | export interface PluginOptions extends Omit {} 27 | 28 | export class TsPathsResolvePlugin { 29 | handler: ReturnType 30 | log: LogFunc 31 | constructor({ tsConfigPath, respectCoreModule, logLevel, colors = true }: Partial = {}) { 32 | this.log = createLogger({ logLevel: convertLogLevel(logLevel), colors, ID: PLUGIN_NAME }) 33 | this.log(LogLevel.Debug, `typescript version: ${ts.version}`) 34 | this.handler = createHandler({ 35 | tsConfigPath, 36 | log: this.log, 37 | respectCoreModule, 38 | falllback: moduleName => fs.existsSync(moduleName), 39 | }) 40 | } 41 | apply(c: Compiler | Resolver) { 42 | if (this.isRsolver(c)) { 43 | this.setup(c) 44 | return 45 | } 46 | c.resolverFactory.hooks.resolver.for("normal").tap(PLUGIN_NAME, this.setup.bind(this)) 47 | } 48 | setup(resolver: Resolver) { 49 | const target = resolver.ensureHook("resolve") 50 | const hook = resolver.getHook("described-resolve") 51 | hook.tapAsync(PLUGIN_NAME, (request, resolveContext, callback) => { 52 | const innerRequest = request.request || request.path 53 | if (!innerRequest || !request.module) return callback() 54 | const importer = (request as Request).context?.issuer 55 | if (!importer) return callback() 56 | const moduleName = this.handler?.(innerRequest, importer) 57 | if (!moduleName) return callback() 58 | this.log(LogLevel.Debug, `${innerRequest} -> ${moduleName}`) 59 | return resolver.doResolve(target, { ...request, request: moduleName }, "", resolveContext, callback) 60 | }) 61 | } 62 | isRsolver(obj: any): obj is Resolver { 63 | return typeof obj?.doResolve === "function" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig", 3 | "include": ["src/*.ts", "src/index.mts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/ts-paths-resolve-plugin/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup" 2 | 3 | export default defineConfig([ 4 | { 5 | external: ["typescript"], 6 | entry: ["./src/index.ts"], 7 | outDir: ".", 8 | splitting: false, 9 | sourcemap: false, 10 | clean: false, 11 | format: ["cjs"], 12 | }, 13 | { 14 | external: ["typescript"], 15 | entry: ["./src/index.mts"], 16 | outDir: ".", 17 | splitting: false, 18 | sourcemap: false, 19 | clean: false, 20 | format: ["esm"], 21 | }, 22 | ]) 23 | -------------------------------------------------------------------------------- /packages/typescript-paths/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env", "@babel/preset-typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/.browserslistrc: -------------------------------------------------------------------------------- 1 | maintained node versions 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | !lib 4 | lib/* 5 | !lib/esm 6 | lib/esm/* 7 | !lib/esm/loader.js 8 | !lib/esm/package.json 9 | !lib/esm/README.md 10 | -------------------------------------------------------------------------------- /packages/typescript-paths/.prettierignore: -------------------------------------------------------------------------------- 1 | *.svg 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 lightyen 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 | -------------------------------------------------------------------------------- /packages/typescript-paths/README.md: -------------------------------------------------------------------------------- 1 | # typescript-paths 2 | 3 | [npm:latest]: https://www.npmjs.com/package/typescript-paths/v/latest 4 | [npm:latest:badge]: https://img.shields.io/npm/v/typescript-paths/latest?style=flat-square 5 | 6 | [![Latest Version][npm:latest:badge]][npm:latest] 7 | 8 | Resolving tsconfig paths in runtime 9 | 10 | ```sh 11 | npm install typescript-paths 12 | ``` 13 | 14 | ```js 15 | const { register } = require("typescript-paths") 16 | register() 17 | ``` 18 | 19 | Example tsconfig.json 20 | 21 | ```json 22 | { 23 | "compilerOptions": { 24 | "paths": { 25 | "~/*": ["./*"] 26 | } 27 | } 28 | } 29 | ``` 30 | 31 | Then you can import alias instead of annoying path 32 | 33 | ```js 34 | // const App = require("../../../../App") 35 | const App = require("~/App") 36 | ``` 37 | 38 | ## Options 39 | 40 | ### tsConfigPath _(string | string[])_ 41 | 42 | Specify the path where your TypeScript configuration file. 43 | 44 | If not set: 45 | 46 | - use Environment variable **TS_NODE_PROJECT** 47 | - or search tsconfig.json in current working directory. 48 | 49 | ### logLevel _("none" | "error" | "warn" | "info" | "debug" | "trace") (default: "info")_ 50 | 51 | Set the logging level on the plugin. 52 | 53 | ### fallback _(function (string): string | undefined)_ 54 | 55 | The handler to handle unusual module name. 56 | 57 | ### color _(boolean) (default: true)_ 58 | 59 | Colorful ouput. 60 | 61 | ### respectCoreModule _(boolean) (default: true)_ 62 | 63 | ## reference 64 | 65 | - https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping 66 | - https://github.com/microsoft/TypeScript/issues/5039 67 | -------------------------------------------------------------------------------- /packages/typescript-paths/lib/esm/README.md: -------------------------------------------------------------------------------- 1 | # typescript-paths/esm (experimental) 2 | 3 | ```sh 4 | node --experimental-loader typescript-paths/esm/loader . 5 | ``` 6 | -------------------------------------------------------------------------------- /packages/typescript-paths/lib/esm/loader.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, pathToFileURL } from "url" 2 | import { createHandler, createLogger, LogLevel } from "./index.js" 3 | 4 | const log = createLogger() 5 | const handler = createHandler({ log }) 6 | 7 | /** 8 | * @param {import("url").URL} specifier 9 | * @param {{parentURL?: import("url").URL | null | undefined; conditions: string[]}} context 10 | */ 11 | export function resolve(specifier, context, defaultResolve) { 12 | const { parentURL = null } = context 13 | if (!handler || !parentURL) return defaultResolve(specifier, context, defaultResolve) 14 | 15 | const importer = fileURLToPath(parentURL) 16 | const moduleName = handler(specifier, importer) 17 | if (moduleName) { 18 | log(LogLevel.Debug, `${specifier} -> ${moduleName}`) 19 | specifier = new URL(pathToFileURL(moduleName)) 20 | } 21 | 22 | return defaultResolve(specifier, context, defaultResolve) 23 | } 24 | -------------------------------------------------------------------------------- /packages/typescript-paths/lib/esm/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-paths", 3 | "version": "1.2.5", 4 | "description": "Resolving tsconfig paths in runtime", 5 | "license": "MIT", 6 | "type": "module", 7 | "main": "./index.js", 8 | "types": "../../types/index.d.ts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/typescript-paths/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-paths", 3 | "version": "1.5.1", 4 | "description": "Resolving tsconfig paths in runtime", 5 | "license": "MIT", 6 | "exports": { 7 | ".": { 8 | "types": "./types/index.d.ts", 9 | "node": "./lib/index.js" 10 | }, 11 | "./register": { 12 | "node": "./register.js" 13 | }, 14 | "./esm": "./lib/esm/index.js", 15 | "./esm/loader": "./lib/esm/loader.js" 16 | }, 17 | "types": "./types/index.d.ts", 18 | "main": "./lib/index.js", 19 | "module": "./lib/index.mjs", 20 | "author": "lightyen", 21 | "repository": { 22 | "url": "https://github.com/lightyen/typescript-paths" 23 | }, 24 | "homepage": "https://github.com/lightyen/typescript-paths/blob/main/packages/typescript-paths#readme", 25 | "scripts": { 26 | "types": "tsc --project tsconfig.json --declaration --emitDeclarationOnly --outDir types", 27 | "compile": "rollup -c", 28 | "format": "prettier --config ../../.prettierrc.yml --write **/{src,tests,types}/**/*", 29 | "build": "npm run compile && npm run types && npm run format", 30 | "prepack": "npm run build" 31 | }, 32 | "keywords": [ 33 | "typescript", 34 | "tsconfig", 35 | "paths" 36 | ], 37 | "peerDependencies": { 38 | "typescript": "^4.7.2 || ^5" 39 | }, 40 | "files": [ 41 | "lib", 42 | "types", 43 | "register.js", 44 | "LICENSE", 45 | "README.md" 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /packages/typescript-paths/register.js: -------------------------------------------------------------------------------- 1 | require("./lib/register").register() 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import babel from "@rollup/plugin-babel" 2 | import commonjs from "@rollup/plugin-commonjs" 3 | import nodeResolve from "@rollup/plugin-node-resolve" 4 | 5 | export default [ 6 | { 7 | input: ["src/index.ts", "src/register.ts"], 8 | output: [ 9 | { 10 | dir: "lib/esm", 11 | format: "esm", 12 | chunkFileNames: "core.js", 13 | }, 14 | { 15 | dir: "lib", 16 | format: "cjs", 17 | exports: "named", 18 | chunkFileNames: "core.js", 19 | }, 20 | ], 21 | plugins: [ 22 | babel({ 23 | babelHelpers: "bundled", 24 | extensions: [".js", ".ts"], 25 | exclude: "node_modules/**", 26 | }), 27 | nodeResolve({ extensions: [".ts"] }), 28 | commonjs(), 29 | ], 30 | external: ["fs", "path", "typescript"], 31 | }, 32 | ] 33 | -------------------------------------------------------------------------------- /packages/typescript-paths/src/handler.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import ts from "typescript" 3 | import { createLogger, LogFunc, LogLevel } from "./logger" 4 | import { createMappings, getTsConfig, resolveModuleName, TsConfigPayload } from "./paths" 5 | 6 | export interface OptionFallback { 7 | falllback?: (moduleName: string) => boolean 8 | } 9 | 10 | interface Service { 11 | compilerOptions: ts.CompilerOptions 12 | fileNames: string[] 13 | mappings: ReturnType 14 | cache: Map 15 | } 16 | 17 | export interface HandlerOptions { 18 | /** Specifies the path to tsconfig.json */ 19 | tsConfigPath?: string | TsConfigPayload | Array 20 | /** The directory where the tsconfig is stored */ 21 | searchPath?: string | string[] 22 | respectCoreModule?: boolean 23 | log?: LogFunc 24 | } 25 | 26 | export function fromTS_NODE_PROJECT() { 27 | const env = process.env["TS_NODE_PROJECT"] 28 | if (env) return env.split(path.delimiter).filter(Boolean) 29 | return undefined 30 | } 31 | 32 | export function createHandler({ 33 | searchPath, 34 | tsConfigPath = fromTS_NODE_PROJECT(), 35 | respectCoreModule = true, 36 | log = createLogger(), 37 | falllback, 38 | }: HandlerOptions & OptionFallback = {}) { 39 | if (!tsConfigPath) { 40 | if (searchPath && searchPath instanceof Array) { 41 | tsConfigPath = searchPath 42 | .map(p => ts.findConfigFile(p, ts.sys.fileExists)) 43 | .filter((v: string | undefined): v is string => Boolean(v)) 44 | } else { 45 | tsConfigPath = ts.findConfigFile(searchPath || ts.sys.getCurrentDirectory(), ts.sys.fileExists) || [] 46 | } 47 | } 48 | 49 | const host: ts.ModuleResolutionHost = { 50 | ...ts.sys, 51 | fileExists(filename) { 52 | if (filename.endsWith(ts.Extension.Dts)) return false 53 | return ts.sys.fileExists(filename) 54 | }, 55 | } 56 | const services: Service[] = [] 57 | const configs = spreadTsConfig(tsConfigPath) 58 | if (!configs) { 59 | // can't read tsconfig files 60 | return undefined 61 | } 62 | for (const config of configs) { 63 | addServices(config) 64 | } 65 | 66 | return (request: string, importer: string) => 67 | services.reduce((result, srv) => { 68 | if (result) { 69 | return result 70 | } 71 | const { compilerOptions, cache, fileNames, mappings } = srv 72 | const exist = cache.get(importer) 73 | if (exist !== undefined) { 74 | cache.delete(importer) 75 | cache.set(importer, exist) 76 | if (!exist) return undefined 77 | } else if (fileNames.indexOf(importer) === -1) { 78 | if (cache.size === 1 << 8) cache.delete(cache.keys().next().value) 79 | cache.set(importer, false) 80 | return undefined 81 | } else { 82 | if (cache.size === 1 << 8) cache.delete(cache.keys().next().value) 83 | cache.set(importer, true) 84 | } 85 | return resolveModuleName({ 86 | compilerOptions, 87 | host, 88 | importer, 89 | request, 90 | mappings, 91 | falllback, 92 | }) 93 | }, undefined) 94 | 95 | function addServices(config: TsConfigPayload) { 96 | const { compilerOptions, fileNames, references } = config 97 | if (!compilerOptions.paths || compilerOptions.paths instanceof Array) return 98 | services.push({ 99 | compilerOptions, 100 | fileNames, 101 | mappings: createMappings({ 102 | log, 103 | respectCoreModule, 104 | paths: compilerOptions.paths, 105 | }), 106 | cache: new Map(), 107 | }) 108 | if (references) { 109 | for (const config of references) { 110 | addServices(config) 111 | } 112 | } 113 | } 114 | 115 | function spreadTsConfig( 116 | tsConfigPath: string | TsConfigPayload | Array, 117 | ): TsConfigPayload[] | undefined { 118 | if (typeof tsConfigPath === "string") { 119 | tsConfigPath = [tsConfigPath] 120 | } else if (!(tsConfigPath instanceof Array)) { 121 | tsConfigPath = [tsConfigPath] 122 | } 123 | 124 | const configs: TsConfigPayload[] = [] 125 | for (const configPayloadOrPath of tsConfigPath) { 126 | if (typeof configPayloadOrPath === "string") { 127 | log(LogLevel.Trace, `loading: ${configPayloadOrPath}`) 128 | } 129 | const config = 130 | typeof configPayloadOrPath === "string" 131 | ? getTsConfig({ 132 | tsConfigPath: configPayloadOrPath, 133 | host: ts.sys, 134 | log, 135 | }) 136 | : configPayloadOrPath 137 | if (!config) { 138 | return undefined 139 | } 140 | configs.push(config) 141 | } 142 | 143 | // const resolvedConfigs = configs 144 | // .map(c => { 145 | // if (c.filePath && c.extends) { 146 | // let tsconfigPath = path.join(path.dirname(c.filePath), c.extends) 147 | // if (!tsconfigPath.endsWith(".json")) { 148 | // tsconfigPath = tsconfigPath + ".json" 149 | // } 150 | // const exts = spreadTsConfig(tsconfigPath) 151 | // if (exts) { 152 | // return [c, ...exts] 153 | // } 154 | // } 155 | // return c 156 | // }) 157 | // .flat() 158 | // for (const v of resolvedConfigs) { 159 | // if (v == undefined) { 160 | // return undefined 161 | // } 162 | // } 163 | 164 | return configs 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /packages/typescript-paths/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./handler" 2 | export * from "./logger" 3 | export * from "./paths" 4 | export * from "./register" 5 | -------------------------------------------------------------------------------- /packages/typescript-paths/src/logger.ts: -------------------------------------------------------------------------------- 1 | export enum LogLevel { 2 | None, 3 | Error, 4 | Warning, 5 | Info, 6 | Debug, 7 | Trace, 8 | } 9 | 10 | export type LogLevelString = "none" | "error" | "warn" | "info" | "debug" | "trace" 11 | 12 | export function convertLogLevel(level?: LogLevelString) { 13 | switch (level) { 14 | case "none": 15 | return LogLevel.None 16 | case "error": 17 | return LogLevel.Error 18 | case "warn": 19 | return LogLevel.Warning 20 | case "info": 21 | return LogLevel.Info 22 | case "debug": 23 | return LogLevel.Debug 24 | case "trace": 25 | return LogLevel.Trace 26 | default: 27 | return undefined 28 | } 29 | } 30 | 31 | interface Options { 32 | logLevel: LogLevel 33 | colors?: boolean 34 | ID?: string 35 | } 36 | 37 | export interface LogFunc { 38 | (level: LogLevel, ...args: any[]): void 39 | } 40 | 41 | const Reset = "\x1b[0m" 42 | const FgRed = "\x1b[31m" 43 | const FgYellow = "\x1b[33m" 44 | const FgBlue = "\x1b[34m" 45 | const FgCyan = "\x1b[36m" 46 | const FgMagenta = "\x1b[35m" 47 | 48 | export function fromTYPESCRIPT_PATHS_LOG_LEVEL() { 49 | const env = process.env["TYPESCRIPT_PATHS_LOG_LEVEL"] 50 | switch (env) { 51 | case "none": 52 | return LogLevel.None 53 | case "error": 54 | return LogLevel.Error 55 | case "warn": 56 | return LogLevel.Warning 57 | case "info": 58 | return LogLevel.Info 59 | case "debug": 60 | return LogLevel.Debug 61 | case "trace": 62 | return LogLevel.Trace 63 | default: 64 | return undefined 65 | } 66 | } 67 | 68 | export function createLogger({ 69 | logLevel = fromTYPESCRIPT_PATHS_LOG_LEVEL() || LogLevel.Info, 70 | colors = true, 71 | ID = "typescript-paths", 72 | }: Partial = {}): LogFunc { 73 | return function log(level, ...args) { 74 | if (logLevel < level) { 75 | return 76 | } 77 | if (ID) { 78 | args.unshift(`[${ID}]:`) 79 | } 80 | if (colors) { 81 | args = args.map(a => { 82 | if (typeof a !== "string") return a 83 | switch (level) { 84 | case LogLevel.Error: 85 | return FgRed + a + Reset 86 | case LogLevel.Warning: 87 | return FgYellow + a + Reset 88 | case LogLevel.Info: 89 | return FgBlue + a + Reset 90 | case LogLevel.Debug: 91 | return FgCyan + a + Reset 92 | case LogLevel.Trace: 93 | return FgMagenta + a + Reset 94 | } 95 | }) 96 | } 97 | switch (level) { 98 | case LogLevel.Error: 99 | console.error(...args) 100 | break 101 | case LogLevel.Warning: 102 | console.warn(...args) 103 | break 104 | case LogLevel.Info: 105 | console.info(...args) 106 | break 107 | case LogLevel.Debug: 108 | console.log(...args) 109 | break 110 | case LogLevel.Trace: 111 | console.log(...args) 112 | break 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /packages/typescript-paths/src/paths.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs" 2 | import { builtinModules } from "module" 3 | import path from "path" 4 | import ts from "typescript" 5 | import { createLogger, LogFunc, LogLevel } from "./logger" 6 | 7 | export interface Mapping { 8 | pattern: string 9 | prefix: string 10 | suffix: string 11 | wildcard: boolean 12 | targets: string[] 13 | } 14 | 15 | export interface TsConfigPayload { 16 | filePath?: string 17 | compilerOptions: ts.CompilerOptions 18 | fileNames: string[] 19 | references?: TsConfigPayload[] 20 | extends?: string 21 | } 22 | 23 | export function getTsConfig({ 24 | tsConfigPath, 25 | log = createLogger(), 26 | host = ts.sys, 27 | }: { 28 | tsConfigPath: string 29 | log?: LogFunc 30 | host?: ts.ParseConfigHost 31 | }): undefined | TsConfigPayload { 32 | const { error, config } = ts.readConfigFile(tsConfigPath, host.readFile) 33 | if (error) { 34 | let hasError = false 35 | switch (error.category) { 36 | case ts.DiagnosticCategory.Error: 37 | log(LogLevel.Error, error.messageText) 38 | hasError = true 39 | break 40 | } 41 | if (hasError) return undefined 42 | } 43 | 44 | let { 45 | options: compilerOptions, 46 | errors, 47 | fileNames, 48 | projectReferences, 49 | } = ts.parseJsonConfigFileContent(config, host, path.resolve(path.dirname(tsConfigPath))) 50 | if (errors.length > 0) { 51 | let hasError = false 52 | for (const error of errors) { 53 | switch (error.category) { 54 | case ts.DiagnosticCategory.Error: 55 | log(LogLevel.Error, error.messageText) 56 | hasError = true 57 | break 58 | } 59 | } 60 | if (hasError) return undefined 61 | } 62 | 63 | const ret: TsConfigPayload = { 64 | filePath: path.resolve(tsConfigPath), 65 | compilerOptions, 66 | fileNames: fileNames.map(path.normalize), 67 | extends: config.extends, 68 | } 69 | 70 | if (projectReferences) { 71 | ret.references = [] 72 | for (const r of projectReferences) { 73 | let tsConfigPath = r.path 74 | try { 75 | const stat = fs.lstatSync(tsConfigPath) 76 | if (stat.isDirectory()) { 77 | tsConfigPath = path.join(tsConfigPath, "tsconfig.json") 78 | } 79 | } catch (err) { 80 | const error = err as Error 81 | log(LogLevel.Error, error.message) 82 | return undefined 83 | } 84 | 85 | const cfg = getTsConfig({ tsConfigPath, log, host }) 86 | if (cfg) ret.references.push(cfg) 87 | } 88 | } 89 | 90 | return ret 91 | } 92 | 93 | export function createMappings({ 94 | paths, 95 | log = createLogger(), 96 | respectCoreModule = true, 97 | }: { 98 | paths: ts.MapLike 99 | log?: LogFunc 100 | respectCoreModule?: boolean 101 | }): Mapping[] { 102 | const countWildcard = (value: string) => value.match(/\*/g)?.length ?? 0 103 | 104 | const mappings: Mapping[] = [] 105 | for (const pattern of Object.keys(paths)) { 106 | if (countWildcard(pattern) > 1) { 107 | log(LogLevel.Warning, `Pattern '${pattern}' can have at most one '*' character.`) 108 | continue 109 | } 110 | const wildcard = pattern.indexOf("*") 111 | if (respectCoreModule) { 112 | let skip = false 113 | for (const key of builtinModules) { 114 | if (pattern === key || pattern.startsWith(key + "/")) { 115 | log(LogLevel.Warning, `path pattern '${pattern}' is ignored.`) 116 | log(LogLevel.Info, `respect core module '${key}'.`) 117 | skip = true 118 | } 119 | } 120 | if (skip) continue 121 | } 122 | const targets = paths[pattern].filter(target => { 123 | if (countWildcard(target) > 1) { 124 | log( 125 | LogLevel.Warning, 126 | `Substitution '${target}' in pattern '${pattern}' can have at most one '*' character.`, 127 | ) 128 | return false 129 | } 130 | return true 131 | }) 132 | if (targets.length === 0) { 133 | continue 134 | } 135 | if (pattern === "*") { 136 | mappings.push({ wildcard: true, pattern, prefix: "", suffix: "", targets }) 137 | continue 138 | } 139 | mappings.push({ 140 | wildcard: wildcard !== -1, 141 | pattern, 142 | prefix: pattern.substring(0, wildcard), 143 | suffix: pattern.substring(wildcard + 1), 144 | targets, 145 | }) 146 | } 147 | 148 | for (const mapping of mappings) { 149 | log(LogLevel.Debug, `pattern: '${mapping.pattern}' targets: '${mapping.targets}'`) 150 | } 151 | 152 | return mappings 153 | } 154 | 155 | export function isPatternMatch(prefix: string, suffix: string, candidate: string): boolean { 156 | return ( 157 | candidate.length >= prefix.length + suffix.length && candidate.startsWith(prefix) && candidate.endsWith(suffix) 158 | ) 159 | } 160 | 161 | export function findMatch(moduleName: string, mappings: Mapping[]): Mapping | undefined { 162 | let longestMatchedPrefixLength = -1 163 | let matched: Mapping | undefined 164 | for (const mapping of mappings) { 165 | const { wildcard, prefix, suffix, pattern } = mapping 166 | if (wildcard && isPatternMatch(prefix, suffix, moduleName)) { 167 | if (longestMatchedPrefixLength < prefix.length) { 168 | longestMatchedPrefixLength = prefix.length 169 | matched = mapping 170 | } 171 | } else if (moduleName === pattern) { 172 | matched = mapping 173 | break 174 | } 175 | } 176 | return matched 177 | } 178 | 179 | export function resolveModuleName({ 180 | mappings, 181 | request, 182 | importer, 183 | compilerOptions, 184 | host, 185 | falllback, 186 | }: { 187 | compilerOptions: ts.CompilerOptions 188 | mappings: Mapping[] 189 | request: string 190 | importer: string 191 | host: ts.ModuleResolutionHost 192 | falllback?: (moduleName: string) => boolean 193 | }): string | undefined { 194 | const matched = findMatch(request, mappings) 195 | if (!matched) { 196 | return undefined 197 | } 198 | 199 | const matchedWildcard = request.slice(matched.prefix.length, request.length - matched.suffix.length) 200 | 201 | for (const target of matched.targets) { 202 | const updated = matched.wildcard ? target.replace("*", matchedWildcard) : target 203 | const base = (compilerOptions.baseUrl ?? compilerOptions.pathsBasePath) as string 204 | const moduleName = path.resolve(base, updated) 205 | const ext = path.extname(moduleName) 206 | switch (ext) { 207 | case ".ts": 208 | case ".tsx": 209 | case ".json": 210 | return moduleName 211 | case ".js": 212 | case ".jsx": 213 | if (compilerOptions.module === ts.ModuleKind.NodeNext) { 214 | break 215 | } 216 | return moduleName 217 | } 218 | const result = ts.resolveModuleName(moduleName, importer, compilerOptions, host) 219 | if (result?.resolvedModule) { 220 | return path.normalize(result.resolvedModule.resolvedFileName) 221 | } 222 | if (falllback?.(moduleName)) return moduleName 223 | } 224 | 225 | return undefined 226 | } 227 | -------------------------------------------------------------------------------- /packages/typescript-paths/src/register.ts: -------------------------------------------------------------------------------- 1 | import Module from "module" 2 | import { createHandler, OptionFallback } from "./handler" 3 | import { convertLogLevel, createLogger, LogLevel, LogLevelString } from "./logger" 4 | import { TsConfigPayload } from "./paths" 5 | 6 | export interface RegisterOptions { 7 | tsConfigPath?: string | TsConfigPayload | Array 8 | respectCoreModule?: boolean 9 | logLevel?: LogLevelString 10 | colors?: boolean 11 | loggerID?: string 12 | } 13 | 14 | export function register({ 15 | tsConfigPath, 16 | respectCoreModule, 17 | logLevel, 18 | colors, 19 | loggerID, 20 | falllback, 21 | }: RegisterOptions & OptionFallback = {}): () => void { 22 | const log = createLogger({ logLevel: convertLogLevel(logLevel), colors, ID: loggerID }) 23 | const handler = createHandler({ tsConfigPath, respectCoreModule, log, falllback }) 24 | if (!handler) { 25 | return () => {} 26 | } 27 | 28 | const originalResolveFilename = Module["_resolveFilename"] 29 | 30 | Module["_resolveFilename"] = function (request: string, parent?: Module, ...args: any[]) { 31 | if (!parent) return originalResolveFilename.apply(this, arguments) 32 | 33 | const moduleName = handler(request, parent.filename) 34 | if (moduleName) { 35 | log(LogLevel.Debug, `${request} -> ${moduleName}`) 36 | return originalResolveFilename.apply(this, [moduleName, parent, ...args]) 37 | } 38 | 39 | return originalResolveFilename.apply(this, arguments) 40 | } 41 | 42 | return () => { 43 | Module["_resolveFilename"] = originalResolveFilename 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/bad.tsconfig.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/bad2.tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true 4 | }, 5 | "include": ["ext/**/*"] 6 | } 7 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/bad3.tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "paths": { 5 | "fs/*": [], 6 | "qq*": ["./src/*"], 7 | "test/*": ["./src/**/*"], 8 | "lib/**/*": [] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/index.spec.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import { createHandler, createMappings, findMatch, fromTS_NODE_PROJECT, getTsConfig } from "../src" 3 | import { createLogger, LogLevel } from "../src/logger" 4 | 5 | test("read config", async () => { 6 | const config = getTsConfig({ 7 | tsConfigPath: path.resolve(__dirname, "tsconfig.json"), 8 | }) 9 | expect(config).toBeTruthy() 10 | if (!config) return 11 | expect(config.compilerOptions).toBeTruthy() 12 | expect(config.compilerOptions.baseUrl).toBeFalsy() 13 | expect(config.compilerOptions.paths).toBeFalsy() 14 | }) 15 | 16 | test("read bad config", async () => { 17 | const config = getTsConfig({ 18 | log: createLogger({ logLevel: LogLevel.None }), 19 | tsConfigPath: path.resolve(__dirname, "bad.tsconfig.json"), 20 | }) 21 | expect(config).toBeTruthy() 22 | if (!config) return 23 | expect(config.compilerOptions).toBeTruthy() 24 | expect(config.compilerOptions.baseUrl).toBeFalsy() 25 | expect(config.compilerOptions.paths).toBeFalsy() 26 | }) 27 | 28 | test("read bad config 2", async () => { 29 | const log = createLogger({ logLevel: LogLevel.None }) 30 | let config = getTsConfig({ 31 | log, 32 | tsConfigPath: path.resolve(__dirname, "bad2.tsconfig.json"), 33 | }) 34 | expect(config).toBeFalsy() 35 | config = getTsConfig({ log, tsConfigPath: path.resolve(__dirname, "config.json") }) 36 | expect(config).toBeFalsy() 37 | }) 38 | 39 | test("read bad config 3", async () => { 40 | const log = createLogger({ logLevel: LogLevel.None }) 41 | const handler = createHandler({ 42 | log, 43 | tsConfigPath: path.resolve(__dirname, "bad3.tsconfig.json"), 44 | }) 45 | expect(handler).toBeTruthy() 46 | }) 47 | 48 | test("build mappings", async () => { 49 | let mappings = createMappings({ 50 | paths: { 51 | "~/*": ["*"], 52 | "abc/*": ["xxx/*"], 53 | "abc/hello/*": ["cde/hello/*", "cde/hello2/*"], 54 | "kkk/*": ["xxx/*"], 55 | "kkk/*/def": ["cde/*/world", "world/*/cde"], 56 | }, 57 | }) 58 | expect(mappings).toHaveLength(5) 59 | 60 | // 1. not match 61 | let request = "abc" 62 | let match = findMatch(request, mappings) 63 | expect(match).toBeFalsy() 64 | 65 | // 2. match the longest prefix 66 | request = "abc/hello/def" 67 | match = findMatch(request, mappings) 68 | expect(match).toBeTruthy() 69 | if (match) { 70 | expect(match?.pattern).toEqual("abc/hello/*") 71 | } 72 | 73 | // 2. match the first pattern 74 | request = "kkk/hello/def" 75 | match = findMatch(request, mappings) 76 | expect(match).toBeTruthy() 77 | if (match) { 78 | expect(match?.pattern).toEqual("kkk/*") 79 | } 80 | 81 | // 3. match the first pattern 82 | mappings = createMappings({ 83 | paths: { 84 | "~/*": ["./*"], 85 | "abc/*": ["xxx/*"], 86 | "abc/hello/*": ["cde/hello/*", "cde/hello2/*"], 87 | "kkk/*/def": ["cde/*/world", "world/*/cde"], 88 | "kkk/*": ["xxx/*"], 89 | }, 90 | }) 91 | match = findMatch(request, mappings) 92 | expect(match).toBeTruthy() 93 | if (match) { 94 | expect(match?.pattern).toEqual("kkk/*/def") 95 | } 96 | 97 | // 2. invalid pattern 98 | mappings = createMappings({ 99 | log: createLogger({ logLevel: LogLevel.None }), 100 | respectCoreModule: true, 101 | paths: { 102 | "~/**/*": ["./*"], 103 | "abc/*": ["*/xxx/*"], 104 | "kkk/**/*/def": ["cde/*/world", "world/*/cde"], 105 | }, 106 | }) 107 | expect(mappings).toHaveLength(0) 108 | }) 109 | 110 | test("support multiple tsconfig", async () => { 111 | const handler = createHandler({ searchPath: [path.resolve(__dirname, "t0"), path.resolve(__dirname, "t1")] }) 112 | expect(handler).toBeTruthy() 113 | 114 | const resolveT0 = (request: string) => handler!(request, path.resolve(__dirname, "t0", "demo.ts")) 115 | const resolveT1 = (request: string) => handler!(request, path.resolve(__dirname, "t1", "index.ts")) 116 | 117 | expect(resolveT0("~/hello")).toEqual(path.resolve(__dirname, "t0", "hello.ts")) 118 | expect(resolveT0("~/qqq/hello")).toEqual(path.resolve(path.join(__dirname, "t0", "qqq/hello.js"))) 119 | expect(resolveT0("@xxx/abc/xxx")).toEqual(path.resolve(__dirname, "t0", "xyz/abc/xyz.ts")) 120 | expect(resolveT0("@xxx/fff")).toEqual(path.resolve(__dirname, "t0", "abc/fff.js")) 121 | expect(resolveT0("#m/abc")).toEqual(path.resolve(__dirname, "t0", "xyz/abc/xyz.ts")) 122 | expect(resolveT0("#m/fff")).toEqual(path.resolve(__dirname, "t0", "abc/fff.js")) 123 | const r = resolveT0("roll") 124 | if (r) expect(require.resolve(r)).toEqual(require.resolve("rollup")) 125 | expect(resolveT0("./t0/abc/App")).toBeFalsy() 126 | expect(resolveT0("rollup")).toBeFalsy() 127 | 128 | expect(resolveT1("~/hello")).toEqual(undefined) 129 | expect(resolveT1("~/qqq/hello")).toEqual(undefined) 130 | expect(resolveT1("@xxx/abc/xxx")).toEqual(undefined) 131 | expect(resolveT1("@xxx/fff")).toEqual(undefined) 132 | expect(resolveT1("#m/abc")).toEqual(undefined) 133 | expect(resolveT1("#m/fff")).toEqual(undefined) 134 | expect(resolveT1("roll")).toEqual(undefined) 135 | 136 | expect(resolveT1("~hu/hello")).toEqual(path.resolve(__dirname, "t1", "he/hello.ts")) 137 | expect(resolveT0("~hu/hello")).toEqual(undefined) 138 | }) 139 | 140 | test("fromTS_NODE_PROJECT", () => { 141 | process.env.TS_NODE_PROJECT = "" 142 | expect(fromTS_NODE_PROJECT()).toEqual(undefined) 143 | process.env.TS_NODE_PROJECT = "common/tsconfig.json" 144 | expect(fromTS_NODE_PROJECT()).toEqual(["common/tsconfig.json"]) 145 | process.env.TS_NODE_PROJECT = "" 146 | }) 147 | 148 | test("none", async () => { 149 | expect(createHandler()).toBeTruthy() 150 | }) 151 | 152 | test("invalid", async () => { 153 | expect(createHandler({ searchPath: path.join(__dirname, "undefined") })).toBeTruthy() 154 | }) 155 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/nodenext/index.spec.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import { createHandler } from "../../src" 3 | 4 | test("resolving", async () => { 5 | const handler = createHandler({ tsConfigPath: path.resolve(__dirname, "tsconfig.json") }) 6 | expect(handler).toBeTruthy() 7 | if (!handler) return 8 | const resolve = (request: string) => handler(request, path.resolve(__dirname, "main.tsx")) 9 | expect(resolve("~/App")).toEqual(path.resolve(__dirname, "src/App.tsx")) 10 | expect(resolve("~/App.js")).toEqual(path.resolve(__dirname, "src/App.tsx")) 11 | expect(resolve("~/App.jsx")).toEqual(path.resolve(__dirname, "src/App.tsx")) 12 | expect(resolve("~/Svg.svg")).toEqual(path.resolve(__dirname, "src/Svg.svg.ts")) 13 | }) 14 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/nodenext/main.tsx: -------------------------------------------------------------------------------- 1 | import App from "~/App" 2 | import { S } from "~/Svg.svg" 3 | App 4 | S 5 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/nodenext/src/App.tsx: -------------------------------------------------------------------------------- 1 | export default function App() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/nodenext/src/Svg.svg.ts: -------------------------------------------------------------------------------- 1 | export function S() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/nodenext/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "strict": true, 5 | "isolatedModules": true, 6 | "esModuleInterop": true, 7 | "noEmit": true, 8 | "module": "NodeNext", 9 | "moduleSuffixes": [".svg", ""], 10 | "moduleResolution": "node", 11 | "jsx": "preserve", 12 | "noImplicitAny": false, 13 | "baseUrl": "src", 14 | "paths": { 15 | "~/*": ["*"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/abc/fff.js: -------------------------------------------------------------------------------- 1 | export const COUNT = 300 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/demo.ts: -------------------------------------------------------------------------------- 1 | import { doSomething } from "@xxx/abc/xxx" 2 | import { COUNT } from "@xxx/fff" 3 | import { rollup } from "roll" 4 | import { doSomething as xyz } from "#m/abc" 5 | import hello from "~/hello" 6 | import { hello as h } from "~/qqq/hello" 7 | import xx from "@q" 8 | 9 | import { normalize } from "@p" 10 | normalize 11 | // @ts-expect-error 12 | import { escape } from "@p" 13 | 14 | import { setV } from "#v" 15 | hello() 16 | h(2) 17 | doSomething("/*/*/") 18 | console.log(COUNT) 19 | xyz 20 | rollup 21 | xx 22 | setV 23 | escape 24 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/hello.ts: -------------------------------------------------------------------------------- 1 | export default function hello() { 2 | console.log("helloworld") 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/index.spec.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import { createHandler } from "../../src" 3 | 4 | test("resolving", async () => { 5 | const handler = createHandler({ searchPath: __dirname }) 6 | expect(handler).toBeTruthy() 7 | if (!handler) return 8 | const resolve = (request: string) => handler(request, path.resolve(__dirname, "demo.ts")) 9 | expect(resolve("~/hello")).toEqual(path.resolve(__dirname, "hello.ts")) 10 | expect(handler("~/hello", path.resolve(__dirname, "undefined.ts"))).toEqual(undefined) 11 | expect(resolve("~/qqq/hello")).toEqual(path.resolve(path.join(__dirname, "qqq/hello.js"))) 12 | expect(handler("~/hello", path.resolve(__dirname, "undefined.ts"))).toEqual(undefined) 13 | expect(resolve("@xxx/abc/xxx")).toEqual(path.resolve(__dirname, "xyz/abc/xyz.ts")) 14 | expect(resolve("@xxx/fff")).toEqual(path.resolve(__dirname, "abc/fff.js")) 15 | expect(resolve("#m/abc")).toEqual(path.resolve(__dirname, "xyz/abc/xyz.ts")) 16 | expect(resolve("#m/fff")).toEqual(path.resolve(__dirname, "abc/fff.js")) 17 | expect(resolve("roll")).toEqual( 18 | (function () { 19 | const r = require.resolve("rollup") 20 | if (/\.pnpm/.test(r)) return r.replace(/\.pnpm[/\\](?:.+)[/\\]node_modules[/\\]/, "") 21 | return r 22 | })(), 23 | ) 24 | expect(resolve("./t0/abc/App")).toEqual(undefined) 25 | expect(resolve("rollup")).toEqual(undefined) 26 | expect(resolve("@p")).toEqual(path.resolve(__dirname, "xx/qq.ts")) 27 | expect(resolve("@q")).toEqual(path.resolve(__dirname, "xx/ee.ts")) 28 | expect(resolve("#v")).toEqual(path.resolve(__dirname, "xx/vv.abs.ts")) 29 | expect(resolve("@v")).toEqual(path.resolve(__dirname, "xx/vv.abs.ts")) 30 | expect(resolve("ee")).toEqual(path.resolve(__dirname, "xx/ee.ts")) 31 | expect(resolve("ff")).toEqual(path.resolve(__dirname, "xx/ff.ts")) 32 | expect(resolve("path")).toEqual(undefined) 33 | }) 34 | 35 | test("support memory tsconfig", async () => { 36 | const handler = createHandler({ 37 | respectCoreModule: false, 38 | tsConfigPath: { 39 | compilerOptions: { 40 | pathsBasePath: path.resolve(__dirname), 41 | paths: { 42 | "~/*": ["./*"], 43 | "@xxx/*/xxx": ["./xyz/*/xyz"], 44 | "@xxx/*": ["./abc/*"], 45 | "#m/*": ["./abc/*", "./xyz/*/xyz"], 46 | roll: ["../../node_modules/rollup"], 47 | "@p": ["./xx/qq.ts", "./xx/ff.ts"], 48 | "@q": ["./xx/ee.ts"], 49 | "#v": ["./xx/vv.abs"], 50 | "@v": ["./xx/vv.abs.ts"], 51 | }, 52 | }, 53 | fileNames: [path.resolve(__dirname, "demo.ts")], 54 | }, 55 | }) 56 | expect(handler).toBeTruthy() 57 | 58 | const resolve = (request: string) => handler!(request, path.resolve(__dirname, "demo.ts")) 59 | expect(resolve("~/hello")).toEqual(path.resolve(__dirname, "hello.ts")) 60 | expect(resolve("~/qqq/hello")).toEqual(path.resolve(path.join(__dirname, "qqq/hello.js"))) 61 | expect(resolve("@xxx/abc/xxx")).toEqual(path.resolve(__dirname, "xyz/abc/xyz.ts")) 62 | expect(resolve("@xxx/fff")).toEqual(path.resolve(__dirname, "abc/fff.js")) 63 | expect(resolve("#m/abc")).toEqual(path.resolve(__dirname, "xyz/abc/xyz.ts")) 64 | expect(resolve("#m/fff")).toEqual(path.resolve(__dirname, "abc/fff.js")) 65 | const r = resolve("roll") 66 | if (r) expect(require.resolve(r)).toEqual(require.resolve("rollup")) 67 | expect(resolve("./abc/App")).toEqual(undefined) 68 | expect(resolve("rollup")).toEqual(undefined) 69 | expect(resolve("@p")).toEqual(path.resolve(__dirname, "xx/qq.ts")) 70 | expect(resolve("@q")).toEqual(path.resolve(__dirname, "xx/ee.ts")) 71 | expect(resolve("#v")).toEqual(path.resolve(__dirname, "xx/vv.abs.ts")) 72 | expect(resolve("@v")).toEqual(path.resolve(__dirname, "xx/vv.abs.ts")) 73 | }) 74 | 75 | test("core module", async () => { 76 | let handler = createHandler({ 77 | respectCoreModule: true, 78 | tsConfigPath: { 79 | compilerOptions: { 80 | pathsBasePath: path.resolve(__dirname), 81 | paths: { 82 | path: ["./xx/vv.abs.ts"], 83 | }, 84 | }, 85 | fileNames: [path.resolve(__dirname, "demo.ts")], 86 | }, 87 | }) 88 | 89 | expect(handler).toBeTruthy() 90 | 91 | let resolve = (request: string) => handler!(request, path.resolve(__dirname, "demo.ts")) 92 | expect(resolve("path")).toEqual(undefined) 93 | 94 | handler = createHandler({ 95 | respectCoreModule: false, 96 | tsConfigPath: { 97 | compilerOptions: { 98 | pathsBasePath: path.resolve(__dirname), 99 | paths: { 100 | path: ["./xx/vv.abs.ts"], 101 | }, 102 | }, 103 | fileNames: [path.resolve(__dirname, "demo.ts")], 104 | }, 105 | }) 106 | 107 | expect(handler).toBeTruthy() 108 | 109 | resolve = (request: string) => handler!(request, path.resolve(__dirname, "demo.ts")) 110 | expect(resolve("path")).toEqual(path.resolve(__dirname, "xx/vv.abs.ts")) 111 | }) 112 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/qqq/hello.d.ts: -------------------------------------------------------------------------------- 1 | export declare function hello(arv: number): void 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/qqq/hello.js: -------------------------------------------------------------------------------- 1 | export function hello(arv) { 2 | console.log(arv, "hello") 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "noEmit": true, 6 | "module": "esnext", 7 | "moduleResolution": "node", 8 | "jsx": "preserve", 9 | "noImplicitAny": false, 10 | "paths": { 11 | "~/*": ["./*"], 12 | "@xxx/*/xxx": ["./xyz/*/xyz"], 13 | "@xxx/*": ["./abc/*"], 14 | "#m/*": ["./abc/*", "./xyz/*/xyz"], 15 | "*": ["./xx/*"], 16 | "roll": ["../../../../node_modules/rollup"], 17 | "@p": ["./xx/qq.ts", "./xx/ff.ts"], 18 | "@q": ["./xx/ee.ts"], 19 | "#v": ["./xx/vv.abs"], 20 | "@v": ["./xx/vv.abs.ts"] 21 | } 22 | }, 23 | "include": ["**/*"] 24 | } 25 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/typings/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.svg" { 2 | const path: string 3 | export default path 4 | } 5 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/xx/ee.ts: -------------------------------------------------------------------------------- 1 | export default function xxx() {} 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/xx/ff.ts: -------------------------------------------------------------------------------- 1 | export function escape(value: string) { 2 | return value 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/xx/qq.ts: -------------------------------------------------------------------------------- 1 | export function normalize(value: string) { 2 | return value 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/xx/vv.abs.ts: -------------------------------------------------------------------------------- 1 | export function setV(value: string) { 2 | return value 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t0/xyz/abc/xyz.ts: -------------------------------------------------------------------------------- 1 | export function doSomething(str: string) { 2 | return str.replace(/\*/g, "") 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t1/he/hello.ts: -------------------------------------------------------------------------------- 1 | export function f() {} 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t1/index.ts: -------------------------------------------------------------------------------- 1 | import { f } from "~hu/hello" 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t1/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "paths": { 6 | "~hu/*": ["he/*"] 7 | } 8 | }, 9 | "include": ["**/*.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/app/bad.tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "shared/*": ["../shared/*"], 5 | "shared2/*": ["../shared2/*"] 6 | } 7 | }, 8 | "references": [ 9 | { 10 | "path": "../shared.json" 11 | }, 12 | { 13 | "path": "../shared2/tsconfig.json" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/app/main.ts: -------------------------------------------------------------------------------- 1 | import { foo } from "shared/foo" 2 | import { foo as foo2 } from "shared2/foo" 3 | 4 | foo 5 | foo2 6 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "shared/*": ["../shared/*"], 5 | "shared2/*": ["../shared2/*"] 6 | } 7 | }, 8 | "references": [ 9 | { 10 | "path": "../shared" 11 | }, 12 | { 13 | "path": "../shared2/tsconfig.json" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { existsSync } from "fs" 2 | import path from "path" 3 | import { createHandler, createLogger, LogLevel } from "../../src" 4 | 5 | test("support project references", async () => { 6 | const handler = createHandler({ 7 | falllback: moduleName => existsSync(moduleName), 8 | tsConfigPath: path.resolve(__dirname, "app/tsconfig.json"), 9 | }) 10 | expect(handler).toBeTruthy() 11 | if (!handler) return 12 | expect(handler("helpers/bar", path.resolve(__dirname, "shared/foo.ts"))).toEqual( 13 | path.resolve(__dirname, "shared/my-helpers/bar.ts"), 14 | ) 15 | expect(handler("helpers/bar", path.resolve(__dirname, "shared2/foo.ts"))).toEqual( 16 | path.resolve(__dirname, "shared2/my-helpers/bar.ts"), 17 | ) 18 | expect(handler("img/pic.svg", path.resolve(__dirname, "shared/foo.ts"))).toEqual( 19 | path.resolve(__dirname, "shared/pic.svg"), 20 | ) 21 | expect(handler("img/pic.svg", path.resolve(__dirname, "shared2/foo.ts"))).toEqual( 22 | path.resolve(__dirname, "shared2/pic.svg"), 23 | ) 24 | }) 25 | 26 | test("bad tsconfig", async () => { 27 | const handler = createHandler({ 28 | log: createLogger({ logLevel: LogLevel.None }), 29 | falllback: moduleName => existsSync(moduleName), 30 | tsConfigPath: path.resolve(__dirname, "app/bad.tsconfig.json"), 31 | }) 32 | expect(handler).toBeFalsy() 33 | }) 34 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared/foo.ts: -------------------------------------------------------------------------------- 1 | import { bar } from "helpers/bar" 2 | 3 | bar 4 | 5 | export const foo = bar 6 | 7 | import Picture from "img/pic.svg" 8 | 9 | Picture 10 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.svg" { 2 | const path: string 3 | export default path 4 | } 5 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared/my-helpers/bar.ts: -------------------------------------------------------------------------------- 1 | export const bar = 1 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared/pic.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lightyen/typescript-paths/75181d1d9c6142611cb8d48f5997a5e490e4eb74/packages/typescript-paths/tests/t2/shared/pic.svg -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "baseUrl": "..", 5 | "paths": { 6 | "img/*": ["shared/*"], 7 | "helpers/*": ["shared/my-helpers/*"] 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared2/foo.ts: -------------------------------------------------------------------------------- 1 | import { bar } from "helpers/bar" 2 | 3 | bar 4 | 5 | export const foo = bar 6 | 7 | import Picture from "img/pic.svg" 8 | 9 | Picture 10 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared2/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.svg" { 2 | const path: string 3 | export default path 4 | } 5 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared2/my-helpers/bar.ts: -------------------------------------------------------------------------------- 1 | export const bar = 2 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared2/pic.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lightyen/typescript-paths/75181d1d9c6142611cb8d48f5997a5e490e4eb74/packages/typescript-paths/tests/t2/shared2/pic.svg -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t2/shared2/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "paths": { 5 | "img/*": ["./*"], 6 | "helpers/*": ["./my-helpers/*"] 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t3/base.tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "noEmit": true, 6 | "module": "esnext", 7 | "moduleResolution": "node", 8 | "jsx": "preserve", 9 | "noImplicitAny": false, 10 | "paths": { 11 | "common/*": ["./util/common/*"] 12 | } 13 | }, 14 | "include": ["**/*"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t3/index.spec.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import { createHandler } from "../../src" 3 | 4 | test("support extends", async () => { 5 | const handler = createHandler({ 6 | tsConfigPath: path.resolve(__dirname, "src/tsconfig.json"), 7 | }) 8 | expect(handler).toBeTruthy() 9 | if (!handler) return 10 | expect(handler("common/hello", path.resolve(__dirname, "src/main.ts"))).toEqual( 11 | path.resolve(__dirname, "util/common/hello.ts"), 12 | ) 13 | }) 14 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t3/src/main.ts: -------------------------------------------------------------------------------- 1 | import { hello } from "common/hello" 2 | hello 3 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t3/src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { "extends": "../base.tsconfig" } 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t3/util/common/hello.ts: -------------------------------------------------------------------------------- 1 | export const hello = 5 2 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t4/index.spec.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import { createHandler } from "../../src" 3 | 4 | test("resolving", async () => { 5 | const handler = createHandler({ tsConfigPath: path.resolve(__dirname, "tsconfig.json") }) 6 | expect(handler).toBeTruthy() 7 | if (!handler) return 8 | const resolve = (request: string) => handler(request, path.resolve(__dirname, "main.tsx")) 9 | expect(resolve("~/App")).toEqual(path.resolve(__dirname, "src/App.tsx")) 10 | }) 11 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t4/main.tsx: -------------------------------------------------------------------------------- 1 | import App from "~/App" 2 | App 3 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t4/src/App.tsx: -------------------------------------------------------------------------------- 1 | export default function App() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t4/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "strict": true, 5 | "isolatedModules": true, 6 | "esModuleInterop": true, 7 | "noEmit": true, 8 | "module": "esnext", 9 | "moduleResolution": "node", 10 | "jsx": "preserve", 11 | "noImplicitAny": false, 12 | "baseUrl": "src", 13 | "paths": { 14 | "~/*": ["*"] 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t5/index.spec.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import { createHandler } from "../../src" 3 | 4 | test("resolving extends", async () => { 5 | const handler = createHandler({ 6 | tsConfigPath: [path.resolve(__dirname, "tsconfig.json")], 7 | }) 8 | expect(handler).toBeTruthy() 9 | if (!handler) return 10 | // expect(handler("@/module", path.resolve(__dirname, "src/com/index.ts"))).toEqual( 11 | // path.resolve(__dirname, "src/com/src/module.ts"), 12 | // ) 13 | // expect(handler("!/com", path.resolve(__dirname, "src/index.ts"))).toEqual( 14 | // path.resolve(__dirname, "src/com/index.ts"), 15 | // ) 16 | // expect(handler("!/com/src/module", path.resolve(__dirname, "src/index.ts"))).toEqual( 17 | // path.resolve(__dirname, "src/com/src/module.ts"), 18 | // ) 19 | // expect(handler("@/module", path.resolve(__dirname, "src/index.ts"))).toEqual(undefined) 20 | // expect(handler("@/module", path.resolve(__dirname, "src/com/index.ts"))).toEqual( 21 | // path.resolve(__dirname, "src/com/src/module.ts"), 22 | // ) 23 | // // false positive 24 | // expect(handler("!/com", path.resolve(__dirname, "src/com/index.ts"))).toEqual(undefined) 25 | // expect(handler("!/com/src/module", path.resolve(__dirname, "src/com/index.ts"))).toEqual(undefined) 26 | }) 27 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t5/src/com/index.ts: -------------------------------------------------------------------------------- 1 | import { hash } from "@/module" 2 | export { hash } 3 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t5/src/com/src/module.ts: -------------------------------------------------------------------------------- 1 | export function hash() { 2 | // 3 | } 4 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t5/src/com/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./src/*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t5/src/index.ts: -------------------------------------------------------------------------------- 1 | import { hash } from "!/com" 2 | hash 3 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/t5/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./src/com/tsconfig.json", 3 | "include": ["./**/*"], 4 | "compilerOptions": { 5 | "allowJs": true, 6 | "strict": true, 7 | "isolatedModules": true, 8 | "esModuleInterop": true, 9 | "noEmit": true, 10 | "module": "esnext", 11 | "moduleResolution": "node", 12 | "jsx": "preserve", 13 | "noImplicitAny": false, 14 | "baseUrl": "src", 15 | "paths": { 16 | "!/*": ["./*"] 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "isolatedModules": true, 5 | "esModuleInterop": true 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/typescript-paths/tests/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "isolatedModules": true, 5 | "esModuleInterop": true 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/typescript-paths/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig", 3 | "include": ["src/**/*"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/typescript-paths/types/handler.d.ts: -------------------------------------------------------------------------------- 1 | import { LogFunc } from "./logger" 2 | import { TsConfigPayload } from "./paths" 3 | export interface OptionFallback { 4 | falllback?: (moduleName: string) => boolean 5 | } 6 | export interface HandlerOptions { 7 | /** Specifies the path to tsconfig.json */ 8 | tsConfigPath?: string | TsConfigPayload | Array 9 | /** The directory where the tsconfig is stored */ 10 | searchPath?: string | string[] 11 | respectCoreModule?: boolean 12 | log?: LogFunc 13 | } 14 | export declare function fromTS_NODE_PROJECT(): string[] | undefined 15 | export declare function createHandler({ 16 | searchPath, 17 | tsConfigPath, 18 | respectCoreModule, 19 | log, 20 | falllback, 21 | }?: HandlerOptions & OptionFallback): ((request: string, importer: string) => string | undefined) | undefined 22 | -------------------------------------------------------------------------------- /packages/typescript-paths/types/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from "./handler" 2 | export * from "./logger" 3 | export * from "./paths" 4 | export * from "./register" 5 | -------------------------------------------------------------------------------- /packages/typescript-paths/types/log.d.ts: -------------------------------------------------------------------------------- 1 | export declare enum LogLevel { 2 | None = 0, 3 | Error = 1, 4 | Warning = 2, 5 | Info = 3, 6 | Debug = 4, 7 | Trace = 5, 8 | } 9 | export declare type LogLevelString = "none" | "error" | "warn" | "info" | "debug" | "trace" 10 | export declare function convertLogLevel(level: LogLevelString): LogLevel 11 | interface Options { 12 | logLevel: LogLevel 13 | colors?: boolean 14 | ID?: string 15 | } 16 | export interface LogFunc { 17 | (level: LogLevel, ...args: any[]): void 18 | } 19 | export declare function createLogger({ logLevel, colors, ID }?: Partial): LogFunc 20 | export {} 21 | -------------------------------------------------------------------------------- /packages/typescript-paths/types/logger.d.ts: -------------------------------------------------------------------------------- 1 | export declare enum LogLevel { 2 | None = 0, 3 | Error = 1, 4 | Warning = 2, 5 | Info = 3, 6 | Debug = 4, 7 | Trace = 5, 8 | } 9 | export declare type LogLevelString = "none" | "error" | "warn" | "info" | "debug" | "trace" 10 | export declare function convertLogLevel(level?: LogLevelString): LogLevel | undefined 11 | interface Options { 12 | logLevel: LogLevel 13 | colors?: boolean 14 | ID?: string 15 | } 16 | export interface LogFunc { 17 | (level: LogLevel, ...args: any[]): void 18 | } 19 | export declare function fromTYPESCRIPT_PATHS_LOG_LEVEL(): LogLevel | undefined 20 | export declare function createLogger({ logLevel, colors, ID }?: Partial): LogFunc 21 | export {} 22 | -------------------------------------------------------------------------------- /packages/typescript-paths/types/paths.d.ts: -------------------------------------------------------------------------------- 1 | import ts from "typescript" 2 | import { LogFunc } from "./logger" 3 | export interface Mapping { 4 | pattern: string 5 | prefix: string 6 | suffix: string 7 | wildcard: boolean 8 | targets: string[] 9 | } 10 | export interface TsConfigPayload { 11 | filePath?: string 12 | compilerOptions: ts.CompilerOptions 13 | fileNames: string[] 14 | references?: TsConfigPayload[] 15 | extends?: string 16 | } 17 | export declare function getTsConfig({ 18 | tsConfigPath, 19 | log, 20 | host, 21 | }: { 22 | tsConfigPath: string 23 | log?: LogFunc 24 | host?: ts.ParseConfigHost 25 | }): undefined | TsConfigPayload 26 | export declare function createMappings({ 27 | paths, 28 | log, 29 | respectCoreModule, 30 | }: { 31 | paths: ts.MapLike 32 | log?: LogFunc 33 | respectCoreModule?: boolean 34 | }): Mapping[] 35 | export declare function isPatternMatch(prefix: string, suffix: string, candidate: string): boolean 36 | export declare function findMatch(moduleName: string, mappings: Mapping[]): Mapping | undefined 37 | export declare function resolveModuleName({ 38 | mappings, 39 | request, 40 | importer, 41 | compilerOptions, 42 | host, 43 | falllback, 44 | }: { 45 | compilerOptions: ts.CompilerOptions 46 | mappings: Mapping[] 47 | request: string 48 | importer: string 49 | host: ts.ModuleResolutionHost 50 | falllback?: (moduleName: string) => boolean 51 | }): string | undefined 52 | -------------------------------------------------------------------------------- /packages/typescript-paths/types/register.d.ts: -------------------------------------------------------------------------------- 1 | import { OptionFallback } from "./handler" 2 | import { LogLevelString } from "./logger" 3 | import { TsConfigPayload } from "./paths" 4 | export interface RegisterOptions { 5 | tsConfigPath?: string | TsConfigPayload | Array 6 | respectCoreModule?: boolean 7 | logLevel?: LogLevelString 8 | colors?: boolean 9 | loggerID?: string 10 | } 11 | export declare function register({ 12 | tsConfigPath, 13 | respectCoreModule, 14 | logLevel, 15 | colors, 16 | loggerID, 17 | falllback, 18 | }?: RegisterOptions & OptionFallback): () => void 19 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env", "@babel/preset-typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/.browserslistrc: -------------------------------------------------------------------------------- 1 | maintained node versions 2 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | /index.*js 3 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/.prettierignore: -------------------------------------------------------------------------------- 1 | *.svg 2 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 lightyen 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 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/README.md: -------------------------------------------------------------------------------- 1 | # vite-plugin-tsconfig-paths 2 | 3 | [npm:latest]: https://www.npmjs.com/package/vite-plugin-tsconfig-paths/v/latest 4 | [npm:latest:badge]: https://img.shields.io/npm/v/vite-plugin-tsconfig-paths/latest?style=flat-square 5 | 6 | [![Latest Version][npm:latest:badge]][npm:latest] 7 | 8 | Vite plugin for resolving tsconfig paths 9 | 10 | ```js 11 | import { defineConfig } from "vite" 12 | import tsConfigPaths from "vite-plugin-tsconfig-paths" 13 | 14 | export default defineConfig({ 15 | plugins: [tsConfigPaths()], 16 | }) 17 | ``` 18 | 19 | ## reference 20 | 21 | - https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping 22 | - https://github.com/microsoft/TypeScript/issues/5039 23 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/index.d.ts: -------------------------------------------------------------------------------- 1 | import type { RegisterOptions } from "typescript-paths" 2 | import type { Plugin } from "vite" 3 | export declare type PluginOptions = Omit 4 | export default function tsConfigPaths({ tsConfigPath, respectCoreModule, logLevel, colors }?: PluginOptions): Plugin 5 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/integration.test.mjs: -------------------------------------------------------------------------------- 1 | import { createRequire } from "module" 2 | import path from "node:path" 3 | import { fileURLToPath, pathToFileURL } from "node:url" 4 | 5 | function getPathURL(basename) { 6 | return pathToFileURL( 7 | path.join(path.dirname(fileURLToPath(import.meta.url)), basename), 8 | ) 9 | } 10 | test("load CommonJS module", () => { 11 | const require = createRequire(getPathURL("index.js")) 12 | const fn = require(".") 13 | expect(fn).toHaveProperty("name", "tsConfigPaths") 14 | expect(fn["default"]).toHaveProperty("name", "tsConfigPaths") 15 | }) 16 | 17 | test("load ES module", async () => { 18 | const fn = await import(".").then(m => m.default) 19 | expect(fn).toHaveProperty("name", "tsConfigPaths") 20 | }) 21 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-plugin-tsconfig-paths", 3 | "version": "1.4.1", 4 | "description": "Vite plugin for resolving tsconfig paths", 5 | "license": "MIT", 6 | "exports": { 7 | ".": { 8 | "types": "./index.d.ts", 9 | "require": "./index.js", 10 | "import": "./index.mjs" 11 | } 12 | }, 13 | "types": "./index.d.ts", 14 | "author": "lightyen", 15 | "repository": { 16 | "url": "https://github.com/lightyen/typescript-paths" 17 | }, 18 | "homepage": "https://github.com/lightyen/typescript-paths/blob/main/packages/vite-plugin-tsconfig-paths#readme", 19 | "scripts": { 20 | "doit": "pnpm update --interactive --latest", 21 | "compile": "del ./index.js ./index.mjs && tsup", 22 | "format": "prettier --config ../../.prettierrc.yml --write *.*ts **/*.*ts", 23 | "build": "npm run compile && npm run format", 24 | "prepack": "npm run build" 25 | }, 26 | "keywords": [ 27 | "vite", 28 | "plugin", 29 | "typescript", 30 | "tsconfig", 31 | "paths" 32 | ], 33 | "dependencies": { 34 | "typescript-paths": "^1.5.1" 35 | }, 36 | "devDependencies": { 37 | "vite": "*" 38 | }, 39 | "peerDependencies": { 40 | "vite": "*" 41 | }, 42 | "files": [ 43 | "LICENSE", 44 | "index.js", 45 | "index.mjs", 46 | "index.d.ts" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/src/index.mts: -------------------------------------------------------------------------------- 1 | import { tsConfigPaths } from "./plugin" 2 | export default tsConfigPaths 3 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/src/index.ts: -------------------------------------------------------------------------------- 1 | import { tsConfigPaths } from "./plugin" 2 | tsConfigPaths["default"] = tsConfigPaths 3 | module.exports = tsConfigPaths 4 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/src/plugin.ts: -------------------------------------------------------------------------------- 1 | import fs from "node:fs" 2 | import path from "node:path" 3 | import ts from "typescript" 4 | import type { RegisterOptions } from "typescript-paths" 5 | import { convertLogLevel, createHandler, createLogger, LogLevel } from "typescript-paths" 6 | import type { Plugin } from "vite" 7 | 8 | const PLUGIN_NAME = "tsconfig-paths" 9 | 10 | export type PluginOptions = Omit 11 | 12 | export function tsConfigPaths({ 13 | tsConfigPath, 14 | respectCoreModule, 15 | logLevel, 16 | colors = true, 17 | }: PluginOptions = {}): Plugin { 18 | const log = createLogger({ logLevel: convertLogLevel(logLevel), colors, ID: PLUGIN_NAME }) 19 | log(LogLevel.Debug, `typescript version: ${ts.version}`) 20 | let handler: ReturnType 21 | let root = "" 22 | return { 23 | name: PLUGIN_NAME, 24 | enforce: "pre", 25 | configResolved(config) { 26 | root = config.root 27 | log(LogLevel.Debug, "build path mappings") 28 | handler = createHandler({ 29 | log, 30 | tsConfigPath, 31 | respectCoreModule, 32 | searchPath: root, 33 | falllback: moduleName => fs.existsSync(moduleName), 34 | }) 35 | }, 36 | handleHotUpdate(ctx) { 37 | if (ctx.file.endsWith(".json")) { 38 | log(LogLevel.Debug, "build path mappings") 39 | handler = createHandler({ 40 | log, 41 | tsConfigPath, 42 | respectCoreModule, 43 | searchPath: root, 44 | falllback: moduleName => fs.existsSync(moduleName), 45 | }) 46 | } 47 | }, 48 | configureServer(server) { 49 | function handleChange() { 50 | log(LogLevel.Debug, "build path mappings") 51 | handler = createHandler({ 52 | log, 53 | tsConfigPath, 54 | respectCoreModule, 55 | searchPath: root, 56 | falllback: moduleName => fs.existsSync(moduleName), 57 | }) 58 | } 59 | server.watcher.on("add", handleChange) 60 | server.watcher.on("unlink", handleChange) 61 | }, 62 | resolveId(request, importer, options) { 63 | if (!importer || request.startsWith("\0")) { 64 | return null 65 | } 66 | 67 | // remove vite suffix 68 | let suffix = "" 69 | const m = request.match(/\?.+$/) 70 | if (m) { 71 | suffix = m[0] 72 | request = request.slice(0, m.index) 73 | } 74 | 75 | const moduleName = handler?.(request, path.normalize(importer)) 76 | if (!moduleName) { 77 | return this.resolve(request + suffix, importer, { 78 | skipSelf: true, 79 | ...options, 80 | }) 81 | } 82 | 83 | log(LogLevel.Debug, `${request} -> ${moduleName}`) 84 | 85 | return moduleName + suffix 86 | }, 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig", 3 | "include": ["src/*.ts", "src/index.mts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/vite-plugin-tsconfig-paths/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup" 2 | 3 | export default defineConfig([ 4 | { 5 | external: ["typescript"], 6 | entry: ["./src/index.ts"], 7 | outDir: ".", 8 | splitting: false, 9 | sourcemap: false, 10 | clean: false, 11 | format: ["cjs"], 12 | }, 13 | { 14 | external: ["typescript"], 15 | entry: ["./src/index.mts"], 16 | outDir: ".", 17 | splitting: false, 18 | sourcemap: false, 19 | clean: false, 20 | format: ["esm"], 21 | }, 22 | ]) 23 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "packages/*" 3 | - "examples/*" 4 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "types": ["@types/node", "@types/jest"], 4 | "strict": true, 5 | "moduleResolution": "node", 6 | "noImplicitAny": false, 7 | "isolatedModules": true, 8 | "esModuleInterop": true 9 | } 10 | } 11 | --------------------------------------------------------------------------------