pax_global_header00006660000000000000000000000064151746351420014522gustar00rootroot0000000000000052 comment=d51d3e602a2ad8d794361d69c0974b83eb510e6d justkey007-tsc-alias-fb8387d/000077500000000000000000000000001517463514200157545ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/.editorconfig000066400000000000000000000003651517463514200204350ustar00rootroot00000000000000# Editor configuration, see http://editorconfig.org root = true [*] charset = utf-8 indent_style = space indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true [*.md] max_line_length = off trim_trailing_whitespace = false justkey007-tsc-alias-fb8387d/.github/000077500000000000000000000000001517463514200173145ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/.github/workflows/000077500000000000000000000000001517463514200213515ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/.github/workflows/ci.yml000066400000000000000000000006201517463514200224650ustar00rootroot00000000000000name: CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v2 with: node-version: 20 - uses: pnpm/action-setup@v4 with: version: 8 - name: Install dependencies run: pnpm install - name: Test run: pnpm test justkey007-tsc-alias-fb8387d/.gitignore000066400000000000000000000024111517463514200177420ustar00rootroot00000000000000# OS .DS_Store # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* # Runtime data pids *.pid *.seed *.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage # nyc test coverage .nyc_output # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt # node-waf configuration .lock-wscript # Compiled binary addons (http://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules jspm_packages # Bower dependency directory (https://bower.io/) bower_components # node-waf configuration .lock-wscript # Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Ignore test node_modules !projects/project1/node_modules # TypeScript v1 declaration files typings/ # Optional npm cache directory .npm # Optional REPL history .node_repl_history # Cache .rpt2_cache # Compiled source dist dist-base dist-tsc-alias temp # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn Integrity file .yarn-integrity # dotenv environment variables file .env # next.js build output .next @types package-lock.json types # Editor .idea .history .npmrc justkey007-tsc-alias-fb8387d/.husky/000077500000000000000000000000001517463514200171755ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/.husky/.gitignore000066400000000000000000000000021517463514200211550ustar00rootroot00000000000000_ justkey007-tsc-alias-fb8387d/.husky/pre-commit000077500000000000000000000001221517463514200211720ustar00rootroot00000000000000#!/bin/sh . "$(dirname "$0")/_/husky.sh" npm run format && npm test && git add . justkey007-tsc-alias-fb8387d/.prettierignore000066400000000000000000000000101517463514200210060ustar00rootroot00000000000000**/dist justkey007-tsc-alias-fb8387d/.prettierrc000066400000000000000000000001331517463514200201350ustar00rootroot00000000000000{ "tabWidth": 2, "useTabs": false, "singleQuote": true, "trailingComma" : "none" } justkey007-tsc-alias-fb8387d/LICENSE000066400000000000000000000020501517463514200167560ustar00rootroot00000000000000MIT License Copyright (c) 2018 Justkey Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. justkey007-tsc-alias-fb8387d/README.md000066400000000000000000000117271517463514200172430ustar00rootroot00000000000000# tsc-alias Replace alias paths with relative paths after typescript compilation. You can add aliases that reference other projects outside your tsconfig.json project by providing a relative path to the baseUrl. [![npm version](https://badge.fury.io/js/tsc-alias.svg)](https://badge.fury.io/js/tsc-alias) [![License](https://img.shields.io/:license-mit-blue.svg)](http://doge.mit-license.org) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/donate/?hosted_button_id=FPRE4VERGHZ3E) ## Comparison to [tsconfig-paths](https://github.com/dividab/tsconfig-paths) \+ Compile time (no runtime dependencies) ## Getting Started First, install tsc-alias as devDependency using npm. ```sh npm install -g tsc-alias ``` ```sh npm install --save-dev tsc-alias ``` ## Add it to your build scripts in package.json ```json "scripts": { "build": "tsc --project tsconfig.json && tsc-alias -p tsconfig.json", } ``` or ```json "scripts": { "build": "tsc && tsc-alias", "build:watch": "tsc && (concurrently \"tsc -w\" \"tsc-alias -w\")" } ``` ## Issues If you have an issue, please create one. But, before: - try to check the [FAQ.](https://github.com/justkey007/tsc-alias/discussions/110) - try to check if there are any related issues - try to run with `--debug` and check if config is correctly loaded and all sourcefiles are found. ## API ### Installation ```sh npm install tsc-alias ``` ### Usage ```typescript import { replaceTscAliasPaths } from 'tsc-alias'; replaceTscAliasPaths(options?); ``` Here are all the available options:
Option Description Default Value
project, p path to tsconfig.json 'tsconfig.json'
watch Observe file changes false
outDir Run in a folder leaving the "outDir" of the tsconfig.json (relative path to tsconfig) tsconfig.compilerOptions.outDir
declarationDir Works the same as outDir but for declarationDir tsconfig.compilerOptions.declarationDir
resolveFullPaths Attempt to replace incomplete import paths (those not ending in .js) with fully resolved paths (for ECMAScript Modules compatibility) false
resolveFullExtension Allows you to specify the extension of incomplete import paths, works with resolveFullPaths '.js' | '.mjs' | '.cjs'
silent Reduced terminal output. This is a deprecated option and no longer has any effect. true
verbose Additional information is output to the terminal false
debug Debug information is send to the terminal false
replacers Files to import as extra replacers More info []
output The output object tsc-alias will send logs to. new Output(options.verbose)
fileExtensions Overwrite file extensions tsc-alias will use to scan and resolve files. undefined
### Configuration via `tsconfig.json` Example ```json { "compilerOptions": { ... }, "tsc-alias": { "verbose": false, "resolveFullPaths": true, "replacers": { "exampleReplacer": { "enabled": true, "file": "./exampleReplacer.js" }, "otherReplacer": { "enabled": true, "file": "./otherReplacer.js" } }, "fileExtensions": { "inputGlob": "{js,jsx,mjs}", "outputCheck": ["js", "json", "jsx", "mjs"] } } } ``` ### Single file replacer We can use tsc-alias in a single file, with a function that returns the modified contents. We prepare the replacer with `prepareSingleFileReplaceTscAliasPaths()`, passing the same options that we would pass to `replaceTscAliasPaths()`. That will return a promise of a function that receives the file contents and path, and returns the transformed contents, synchronously. ```typescript import { prepareSingleFileReplaceTscAliasPaths } from 'tsc-alias'; const runFile: SingleFileReplacer = await prepareSingleFileReplaceTscAliasPaths(options?); function treatFile(filePath: string) { const fileContents = fs.readFileSync(filePath, 'utf8'); const newContents = runFile({fileContents, filePath}); // do stuff with newContents } ``` justkey007-tsc-alias-fb8387d/SECURITY.md000066400000000000000000000016771517463514200175600ustar00rootroot00000000000000# Security Policy ## Supported Versions Currently, the following versions of `tsc-alias` are being supported with security updates: | Version | Supported | | ------- | ------------------ | | 1.8.x | :white_check_mark: | | < 1.8.x | :x: | ## Reporting a Vulnerability I take the security of `tsc-alias` seriously. If you find a security vulnerability, please do not open a public issue. Instead, please report it directly to me. You can report security vulnerabilities by sending an email to: **cervotechit@gmail.com** Please include the following information in your report: - Type of issue (e.g., remote code execution, file traversal) - Step-by-step instructions to reproduce the issue - Potential impact of the vulnerability I will acknowledge receipt of your report within 48 hours and provide a timeline for a fix if the vulnerability is confirmed. Thank you for helping keep `tsc-alias` secure for millions of users! justkey007-tsc-alias-fb8387d/jest.config.js000066400000000000000000000003361517463514200205250ustar00rootroot00000000000000module.exports = { preset: 'ts-jest', testEnvironment: 'node', modulePathIgnorePatterns: ['dist'], moduleFileExtensions: ['js', 'json', 'ts'], rootDir: '.', testMatch: ['**/*.spec.ts'], testTimeout: 30000 }; justkey007-tsc-alias-fb8387d/package.json000066400000000000000000000031301517463514200202370ustar00rootroot00000000000000{ "name": "tsc-alias", "version": "1.8.17", "description": "Replace alias paths with relative paths after typescript compilation.", "main": "dist/index.js", "files": [ "dist/" ], "bin": { "tsc-alias": "dist/bin/index.js" }, "engines": { "node": ">=16.20.2" }, "scripts": { "prepare": "husky install", "build:dev": "tsc -w", "clean": "rimraf dist && tsc && pnpm link -g", "release:patch": "npm version patch", "postversion": "git push && git push --tags && npm publish", "format": "prettier --write \"**/*.{js,ts,json}\"", "test": "npm run clean && jest" }, "repository": { "type": "git", "url": "https://github.com/justkey007/tsc-alias.git" }, "keywords": [ "typescript", "paths", "alias", "absolute path", "relative path", "compilation", "tsc" ], "author": "Juskey B.", "license": "MIT", "bugs": { "url": "https://github.com/justkey007/tsc-alias/issues" }, "homepage": "https://github.com/justkey007/tsc-alias.git", "dependencies": { "chokidar": "^3.5.3", "commander": "^9.0.0", "get-tsconfig": "^4.10.0", "globby": "^11.0.4", "mylas": "^2.1.9", "normalize-path": "^3.0.0", "plimit-lit": "^1.2.6" }, "devDependencies": { "@types/jest": "^27.4.0", "@types/node": "^16.18.126", "@types/normalize-path": "^3.0.2", "@types/rimraf": "^3.0.2", "@types/shelljs": "^0.8.11", "husky": "^7.0.4", "jest": "^27.5.1", "prettier": "^2.5.1", "rimraf": "^6.0.1", "shelljs": "^0.8.5", "ts-jest": "^27.1.3", "typescript": "^4.9.5" } } justkey007-tsc-alias-fb8387d/pnpm-lock.yaml000066400000000000000000003745001517463514200205510ustar00rootroot00000000000000lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false overrides: '@tootallnate/once@<3.0.1': '>=3.0.1' brace-expansion@<1.1.13: '>=1.1.13' brace-expansion@>=1.0.0 <=1.1.11: '>=1.1.12' brace-expansion@>=2.0.0 <2.0.3: '>=2.0.3' brace-expansion@>=2.0.0 <=2.0.1: '>=2.0.2' form-data@>=3.0.0 <3.0.4: '>=3.0.4' glob@>=11.0.0 <11.1.0: '>=11.1.0' js-yaml@<3.14.2: '>=3.14.2' lodash@<=4.17.23: '>=4.18.0' lodash@>=4.0.0 <=4.17.22: '>=4.17.23' lodash@>=4.0.0 <=4.17.23: '>=4.18.0' minimatch@<3.1.3: '>=3.1.3' minimatch@<3.1.4: '>=3.1.4' minimatch@>=10.0.0 <10.2.1: '>=10.2.1' minimatch@>=10.0.0 <10.2.3: '>=10.2.3' picomatch@<2.3.2: '>=2.3.2' importers: .: dependencies: chokidar: specifier: ^3.5.3 version: 3.6.0 commander: specifier: ^9.0.0 version: 9.5.0 get-tsconfig: specifier: ^4.10.0 version: 4.10.0 globby: specifier: ^11.0.4 version: 11.1.0 mylas: specifier: ^2.1.9 version: 2.1.13 normalize-path: specifier: ^3.0.0 version: 3.0.0 plimit-lit: specifier: ^1.2.6 version: 1.6.1 devDependencies: '@types/jest': specifier: ^27.4.0 version: 27.5.2 '@types/node': specifier: ^16.18.126 version: 16.18.126 '@types/normalize-path': specifier: ^3.0.2 version: 3.0.2 '@types/rimraf': specifier: ^3.0.2 version: 3.0.2 '@types/shelljs': specifier: ^0.8.11 version: 0.8.15 husky: specifier: ^7.0.4 version: 7.0.4 jest: specifier: ^27.5.1 version: 27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)) prettier: specifier: ^2.5.1 version: 2.8.8 rimraf: specifier: ^6.0.1 version: 6.0.1 shelljs: specifier: ^0.8.5 version: 0.8.5 ts-jest: specifier: ^27.1.3 version: 27.1.5(@babel/core@7.26.10)(@types/jest@27.5.2)(babel-jest@27.5.1(@babel/core@7.26.10))(jest@27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)))(typescript@4.9.5) typescript: specifier: ^4.9.5 version: 4.9.5 projects/project1: {} projects/project10: {} projects/project11: devDependencies: '@tsconfig/node14': specifier: ^1.0.0 version: 1.0.3 projects/project12: {} projects/project13: {} projects/project14: {} projects/project15: {} projects/project16: {} projects/project17: {} projects/project18: {} projects/project19: {} projects/project20: {} projects/project21: {} projects/project22: {} projects/project23: dependencies: i18n: specifier: 0.15.1 version: 0.15.1 devDependencies: '@types/i18n': specifier: 0.13.6 version: 0.13.6 projects/project24: dependencies: i18n: specifier: ^0.15.1 version: 0.15.1 devDependencies: '@types/i18n': specifier: ^0.13.6 version: 0.13.6 ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@16.18.126)(typescript@4.9.5) tsc-alias: specifier: ^1.8.3 version: 1.8.16 typescript: specifier: ^4.9.5 version: 4.9.5 projects/project3: {} projects/project4: {} projects/project5: {} projects/project6: dependencies: '@esfx/collections-hashmap': specifier: ^1.0.0-pre.17 version: 1.0.2 projects/project7: devDependencies: '@tsconfig/node14': specifier: ^1.0.0 version: 1.0.3 projects/project8: {} projects/project9: dependencies: buffercursor.ts: specifier: 1.0.3 version: 1.0.3 packages: '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} '@babel/compat-data@7.26.8': resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} '@babel/core@7.26.10': resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} engines: {node: '>=6.9.0'} '@babel/generator@7.27.0': resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.27.0': resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-plugin-utils@7.26.5': resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} '@babel/helpers@7.27.0': resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} engines: {node: '>=6.9.0'} '@babel/parser@7.27.0': resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} engines: {node: '>=6.0.0'} hasBin: true '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-bigint@7.8.3': resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-properties@7.12.13': resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-static-block@7.14.5': resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-attributes@7.26.0': resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-json-strings@7.8.3': resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-numeric-separator@7.10.4': resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-object-rest-spread@7.8.3': resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-catch-binding@7.8.3': resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-chaining@7.8.3': resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-private-property-in-object@7.14.5': resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-top-level-await@7.14.5': resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-typescript@7.25.9': resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/template@7.27.0': resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} '@babel/traverse@7.27.0': resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} engines: {node: '>=6.9.0'} '@babel/types@7.27.0': resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} '@esfx/collection-core@1.0.0': resolution: {integrity: sha512-IoOxDAKyywc2+VWOnBCYZKtu40he19/GM40+02SkABhoPBejJmw8s8+0QiCVv3iFJjdQWH8BUl6h4CL1DeGFyA==} '@esfx/collections-hashmap@1.0.2': resolution: {integrity: sha512-oghcAKr82ihEAJsAIH0ILDsTKP2rQx0vQGjjDEX1mMvN7zosfNQkyBpwNmTJIOsm5f56v4WIjHpGfw2BRtpf7A==} '@esfx/equatable@1.0.2': resolution: {integrity: sha512-Z3H2Lm5aGq+UkSOTelLaTUyDaRH402EB7YwtoQ4EQOv61ilRDzGyYguASvnHjpJh/v3aIoufDVlGkCJWJ0GBuQ==} '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} '@jest/console@27.5.1': resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/core@27.5.1': resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true '@jest/environment@27.5.1': resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/fake-timers@27.5.1': resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/globals@27.5.1': resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/reporters@27.5.1': resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true '@jest/source-map@27.5.1': resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/test-result@27.5.1': resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/test-sequencer@27.5.1': resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/transform@27.5.1': resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/types@27.5.1': resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} '@jridgewell/set-array@1.2.1': resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true '@messageformat/core@3.4.0': resolution: {integrity: sha512-NgCFubFFIdMWJGN5WuQhHCNmzk7QgiVfrViFxcS99j7F5dDS5EP6raR54I+2ydhe4+5/XTn/YIEppFaqqVWHsw==} '@messageformat/date-skeleton@1.1.0': resolution: {integrity: sha512-rmGAfB1tIPER+gh3p/RgA+PVeRE/gxuQ2w4snFWPF5xtb5mbWR7Cbw7wCOftcUypbD6HVoxrVdyyghPm3WzP5A==} '@messageformat/number-skeleton@1.2.0': resolution: {integrity: sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg==} '@messageformat/parser@5.1.1': resolution: {integrity: sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==} '@messageformat/runtime@3.0.2': resolution: {integrity: sha512-dkIPDCjXcfhSHgNE1/qV6TeczQZR59Yx0xXeafVKgK3QVWoxc38ljwpksUpnzCGvN151KUbCJTDZVmahtf1YZw==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} '@sinonjs/commons@1.8.6': resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} '@sinonjs/fake-timers@8.1.0': resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} '@tootallnate/once@3.0.1': resolution: {integrity: sha512-VyMVKRrpHTT8PnotUeV8L/mDaMwD5DaAKCFLP73zAqAtvF0FCqky+Ki7BYbFCYQmqFyTe9316Ed5zS70QUR9eg==} engines: {node: '>= 10'} '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} '@tsconfig/node14@1.0.3': resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} '@types/babel__generator@7.27.0': resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} '@types/babel__traverse@7.20.7': resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} '@types/glob@8.1.0': resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} '@types/i18n@0.13.6': resolution: {integrity: sha512-LLbimAA0oQilgP4PJBFH7sRdBUjWLo6R1rf46SUgVzsUZeXH3PT1piXj4LNX5ECDi0bLg9RmQMmY1K2qawqJqA==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} '@types/istanbul-lib-report@3.0.3': resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} '@types/jest@27.5.2': resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} '@types/node@16.18.126': resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==} '@types/normalize-path@3.0.2': resolution: {integrity: sha512-DO++toKYPaFn0Z8hQ7Tx+3iT9t77IJo/nDiqTXilgEP+kPNIYdpS9kh3fXuc53ugqwp9pxC1PVjCpV1tQDyqMA==} '@types/prettier@2.7.3': resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} '@types/rimraf@3.0.2': resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} '@types/shelljs@0.8.15': resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@16.0.9': resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} acorn-globals@6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} acorn-walk@8.3.5: resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} aproba@2.1.0: resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} deprecated: This package is no longer supported. arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} babel-jest@27.5.1: resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} babel-plugin-jest-hoist@27.5.1: resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} babel-preset-current-node-syntax@1.1.0: resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} peerDependencies: '@babel/core': ^7.0.0 babel-preset-jest@27.5.1: resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} brace-expansion@5.0.5: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} browser-process-hrtime@1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} browserslist@4.24.4: resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffercursor.ts@1.0.3: resolution: {integrity: sha512-jnnP1F8oEHyn6aVTYbgzdDD/ZAnHw/K53qj2X1JYqg2N6RO1YKeTIkp6hq63ngaiZwR/9JuG2AXHutOs/6FAUQ==} engines: {node: '>=14.0.0'} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} caniuse-lite@1.0.30001712: resolution: {integrity: sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} cssom@0.4.4: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} cssstyle@2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true decimal.js@10.5.0: resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} diff-sequences@27.5.1: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} diff@4.0.4: resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} domexception@2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} engines: {node: '>=8'} deprecated: Use your platform's native DOMException instead dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} electron-to-chromium@1.5.134: resolution: {integrity: sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==} emittery@0.8.1: resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} engines: {node: '>=10'} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} expect@27.5.1: resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-printf@1.6.10: resolution: {integrity: sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w==} engines: {node: '>=10.0'} fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} engines: {node: '>=10'} deprecated: This package is no longer supported. gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} html-encoding-sniffer@2.0.1: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} engines: {node: '>=10'} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} http-proxy-agent@4.0.1: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} husky@7.0.4: resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==} engines: {node: '>=12'} hasBin: true i18n@0.15.1: resolution: {integrity: sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==} engines: {node: '>=10'} iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} istanbul-reports@3.1.7: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} jest-changed-files@27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-circus@27.5.1: resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-cli@27.5.1: resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true jest-config@27.5.1: resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: ts-node: '>=9.0.0' peerDependenciesMeta: ts-node: optional: true jest-diff@27.5.1: resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-docblock@27.5.1: resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-each@27.5.1: resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-environment-jsdom@27.5.1: resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-environment-node@27.5.1: resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-get-type@27.5.1: resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-haste-map@27.5.1: resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-jasmine2@27.5.1: resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-leak-detector@27.5.1: resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-matcher-utils@27.5.1: resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-message-util@27.5.1: resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-mock@27.5.1: resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-pnp-resolver@1.2.3: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: jest-resolve: '*' peerDependenciesMeta: jest-resolve: optional: true jest-regex-util@27.5.1: resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-resolve-dependencies@27.5.1: resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-resolve@27.5.1: resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-runner@27.5.1: resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-runtime@27.5.1: resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-serializer@27.5.1: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-snapshot@27.5.1: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-util@27.5.1: resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-validate@27.5.1: resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-watcher@27.5.1: resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} jest@27.5.1: resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsdom@16.7.0: resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} lru-cache@11.1.0: resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} engines: {node: 20 || >=22} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} make-plural@7.5.0: resolution: {integrity: sha512-0booA+aVYyVFoR67JBHdfVk0U08HmrBH2FrtmBqBa+NldlqXv/G2Z9VQuQq6Wgp2jDWdybEWGfBkk1cq5264WA==} makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} math-interval-parser@2.0.1: resolution: {integrity: sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==} engines: {node: '>=0.10.0'} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} minimatch@10.0.1: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true moo@0.5.3: resolution: {integrity: sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true mylas@2.1.13: resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} engines: {node: '>=12.0.0'} natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: encoding: optional: true node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} hasBin: true normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. nwsapi@2.2.20: resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} plimit-lit@1.6.1: resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} engines: {node: '>=12'} prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} queue-lit@1.5.2: resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} engines: {node: '>=12'} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} resolve.exports@1.1.1: resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} engines: {node: '>=10'} resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} hasBin: true reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safe-identifier@0.4.2: resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} hasBin: true signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tr46@2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} ts-jest@27.1.5: resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' '@types/jest': ^27.0.0 babel-jest: '>=27.0.0 <28' esbuild: '*' jest: ^27.0.0 typescript: '>=3.8 <5.0' peerDependenciesMeta: '@babel/core': optional: true '@types/jest': optional: true babel-jest: optional: true esbuild: optional: true ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' '@types/node': '*' typescript: '>=2.7' peerDependenciesMeta: '@swc/core': optional: true '@swc/wasm': optional: true tsc-alias@1.8.16: resolution: {integrity: sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==} engines: {node: '>=16.20.2'} hasBin: true type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} v8-to-istanbul@8.1.1: resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} engines: {node: '>=10.12.0'} w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. w3c-xmlserializer@2.0.0: resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} engines: {node: '>=10'} walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} webidl-conversions@5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} webidl-conversions@6.1.0: resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} engines: {node: '>=10.4'} whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-mimetype@2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} whatwg-url@8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} snapshots: '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 '@babel/compat-data@7.26.8': {} '@babel/core@7.26.10': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 '@babel/generator': 7.27.0 '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) '@babel/helpers': 7.27.0 '@babel/parser': 7.27.0 '@babel/template': 7.27.0 '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/generator@7.27.0': dependencies: '@babel/parser': 7.27.0 '@babel/types': 7.27.0 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 '@babel/helper-compilation-targets@7.27.0': dependencies: '@babel/compat-data': 7.26.8 '@babel/helper-validator-option': 7.25.9 browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color '@babel/helper-plugin-utils@7.26.5': {} '@babel/helper-string-parser@7.25.9': {} '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-option@7.25.9': {} '@babel/helpers@7.27.0': dependencies: '@babel/template': 7.27.0 '@babel/types': 7.27.0 '@babel/parser@7.27.0': dependencies: '@babel/types': 7.27.0 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/template@7.27.0': dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.27.0 '@babel/types': 7.27.0 '@babel/traverse@7.27.0': dependencies: '@babel/code-frame': 7.26.2 '@babel/generator': 7.27.0 '@babel/parser': 7.27.0 '@babel/template': 7.27.0 '@babel/types': 7.27.0 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color '@babel/types@7.27.0': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 '@bcoe/v8-coverage@0.2.3': {} '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 '@esfx/collection-core@1.0.0': {} '@esfx/collections-hashmap@1.0.2': dependencies: '@esfx/collection-core': 1.0.0 '@esfx/equatable': 1.0.2 transitivePeerDependencies: - encoding - supports-color '@esfx/equatable@1.0.2': dependencies: '@mapbox/node-pre-gyp': 1.0.11 transitivePeerDependencies: - encoding - supports-color '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 4.1.1 resolve-from: 5.0.0 '@istanbuljs/schema@0.1.3': {} '@jest/console@27.5.1': dependencies: '@jest/types': 27.5.1 '@types/node': 16.18.126 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 slash: 3.0.0 '@jest/core@27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 jest-config: 27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 jest-resolve: 27.5.1 jest-resolve-dependencies: 27.5.1 jest-runner: 27.5.1 jest-runtime: 27.5.1 jest-snapshot: 27.5.1 jest-util: 27.5.1 jest-validate: 27.5.1 jest-watcher: 27.5.1 micromatch: 4.0.8 rimraf: 3.0.2 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate '@jest/environment@27.5.1': dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 jest-mock: 27.5.1 '@jest/fake-timers@27.5.1': dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 '@types/node': 16.18.126 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 '@jest/globals@27.5.1': dependencies: '@jest/environment': 27.5.1 '@jest/types': 27.5.1 expect: 27.5.1 '@jest/reporters@27.5.1': dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 27.5.1 '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.7 jest-haste-map: 27.5.1 jest-resolve: 27.5.1 jest-util: 27.5.1 jest-worker: 27.5.1 slash: 3.0.0 source-map: 0.6.1 string-length: 4.0.2 terminal-link: 2.1.1 v8-to-istanbul: 8.1.1 transitivePeerDependencies: - supports-color '@jest/source-map@27.5.1': dependencies: callsites: 3.1.0 graceful-fs: 4.2.11 source-map: 0.6.1 '@jest/test-result@27.5.1': dependencies: '@jest/console': 27.5.1 '@jest/types': 27.5.1 '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 '@jest/test-sequencer@27.5.1': dependencies: '@jest/test-result': 27.5.1 graceful-fs: 4.2.11 jest-haste-map: 27.5.1 jest-runtime: 27.5.1 transitivePeerDependencies: - supports-color '@jest/transform@27.5.1': dependencies: '@babel/core': 7.26.10 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 1.9.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 jest-haste-map: 27.5.1 jest-regex-util: 27.5.1 jest-util: 27.5.1 micromatch: 4.0.8 pirates: 4.0.7 slash: 3.0.0 source-map: 0.6.1 write-file-atomic: 3.0.3 transitivePeerDependencies: - supports-color '@jest/types@27.5.1': dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 16.18.126 '@types/yargs': 16.0.9 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 '@mapbox/node-pre-gyp@1.0.11': dependencies: detect-libc: 2.1.2 https-proxy-agent: 5.0.1 make-dir: 3.1.0 node-fetch: 2.7.0 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 semver: 7.7.1 tar: 6.2.1 transitivePeerDependencies: - encoding - supports-color '@messageformat/core@3.4.0': dependencies: '@messageformat/date-skeleton': 1.1.0 '@messageformat/number-skeleton': 1.2.0 '@messageformat/parser': 5.1.1 '@messageformat/runtime': 3.0.2 make-plural: 7.5.0 safe-identifier: 0.4.2 '@messageformat/date-skeleton@1.1.0': {} '@messageformat/number-skeleton@1.2.0': {} '@messageformat/parser@5.1.1': dependencies: moo: 0.5.3 '@messageformat/runtime@3.0.2': dependencies: make-plural: 7.5.0 '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 '@nodelib/fs.stat@2.0.5': {} '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 '@sinonjs/commons@1.8.6': dependencies: type-detect: 4.0.8 '@sinonjs/fake-timers@8.1.0': dependencies: '@sinonjs/commons': 1.8.6 '@tootallnate/once@3.0.1': {} '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} '@tsconfig/node14@1.0.3': {} '@tsconfig/node16@1.0.4': {} '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.27.0 '@babel/types': 7.27.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.7 '@types/babel__generator@7.27.0': dependencies: '@babel/types': 7.27.0 '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.27.0 '@babel/types': 7.27.0 '@types/babel__traverse@7.20.7': dependencies: '@babel/types': 7.27.0 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 '@types/node': 16.18.126 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 '@types/node': 16.18.126 '@types/graceful-fs@4.1.9': dependencies: '@types/node': 16.18.126 '@types/i18n@0.13.6': {} '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports@3.0.4': dependencies: '@types/istanbul-lib-report': 3.0.3 '@types/jest@27.5.2': dependencies: jest-matcher-utils: 27.5.1 pretty-format: 27.5.1 '@types/minimatch@5.1.2': {} '@types/node@16.18.126': {} '@types/normalize-path@3.0.2': {} '@types/prettier@2.7.3': {} '@types/rimraf@3.0.2': dependencies: '@types/glob': 8.1.0 '@types/node': 16.18.126 '@types/shelljs@0.8.15': dependencies: '@types/glob': 7.2.0 '@types/node': 16.18.126 '@types/stack-utils@2.0.3': {} '@types/yargs-parser@21.0.3': {} '@types/yargs@16.0.9': dependencies: '@types/yargs-parser': 21.0.3 abab@2.0.6: {} abbrev@1.1.1: {} acorn-globals@6.0.0: dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 acorn-walk@7.2.0: {} acorn-walk@8.3.5: dependencies: acorn: 8.14.1 acorn@7.4.1: {} acorn@8.14.1: {} agent-base@6.0.2: dependencies: debug: 4.4.0 transitivePeerDependencies: - supports-color ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 ansi-regex@5.0.1: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 ansi-styles@5.2.0: {} anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 4.0.4 aproba@2.1.0: {} are-we-there-yet@2.0.0: dependencies: delegates: 1.0.0 readable-stream: 3.6.2 arg@4.1.3: {} argparse@2.0.1: {} array-union@2.1.0: {} asynckit@0.4.0: {} babel-jest@27.5.1(@babel/core@7.26.10): dependencies: '@babel/core': 7.26.10 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 27.5.1(@babel/core@7.26.10) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color babel-plugin-istanbul@6.1.1: dependencies: '@babel/helper-plugin-utils': 7.26.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color babel-plugin-jest-hoist@27.5.1: dependencies: '@babel/template': 7.27.0 '@babel/types': 7.27.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.7 babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10): dependencies: '@babel/core': 7.26.10 '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10) '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10) '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10) '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10) '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10) '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10) '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10) babel-preset-jest@27.5.1(@babel/core@7.26.10): dependencies: '@babel/core': 7.26.10 babel-plugin-jest-hoist: 27.5.1 babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) balanced-match@4.0.4: {} binary-extensions@2.3.0: {} brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 braces@3.0.3: dependencies: fill-range: 7.1.1 browser-process-hrtime@1.0.0: {} browserslist@4.24.4: dependencies: caniuse-lite: 1.0.30001712 electron-to-chromium: 1.5.134 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 bser@2.1.1: dependencies: node-int64: 0.4.0 buffer-from@1.1.2: {} buffercursor.ts@1.0.3: {} call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 callsites@3.1.0: {} camelcase@5.3.1: {} camelcase@6.3.0: {} caniuse-lite@1.0.30001712: {} chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 char-regex@1.0.2: {} chokidar@3.6.0: dependencies: anymatch: 3.1.3 braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 chownr@2.0.0: {} ci-info@3.9.0: {} cjs-module-lexer@1.4.3: {} cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 co@4.6.0: {} collect-v8-coverage@1.0.2: {} color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} color-support@1.1.3: {} combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 commander@9.5.0: {} console-control-strings@1.1.0: {} convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} create-require@1.1.1: {} cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 cssom@0.3.8: {} cssom@0.4.4: {} cssstyle@2.3.0: dependencies: cssom: 0.3.8 data-urls@2.0.0: dependencies: abab: 2.0.6 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 debug@4.4.0: dependencies: ms: 2.1.3 decimal.js@10.5.0: {} dedent@0.7.0: {} deepmerge@4.3.1: {} delayed-stream@1.0.0: {} delegates@1.0.0: {} detect-libc@2.1.2: {} detect-newline@3.1.0: {} diff-sequences@27.5.1: {} diff@4.0.4: {} dir-glob@3.0.1: dependencies: path-type: 4.0.0 domexception@2.0.1: dependencies: webidl-conversions: 5.0.0 dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 electron-to-chromium@1.5.134: {} emittery@0.8.1: {} emoji-regex@8.0.0: {} error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 es-define-property@1.0.1: {} es-errors@1.3.0: {} es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 escalade@3.2.0: {} escape-string-regexp@2.0.0: {} escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 esprima@4.0.1: {} estraverse@5.3.0: {} esutils@2.0.3: {} execa@5.1.1: dependencies: cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 exit@0.1.2: {} expect@27.5.1: dependencies: '@jest/types': 27.5.1 jest-get-type: 27.5.1 jest-matcher-utils: 27.5.1 jest-message-util: 27.5.1 fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} fast-printf@1.6.10: {} fastq@1.19.1: dependencies: reusify: 1.1.0 fb-watchman@2.0.2: dependencies: bser: 2.1.1 fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 hasown: 2.0.2 mime-types: 2.1.35 fs-minipass@2.1.0: dependencies: minipass: 3.3.6 fs.realpath@1.0.0: {} fsevents@2.3.3: optional: true function-bind@1.1.2: {} gauge@3.0.2: dependencies: aproba: 2.1.0 color-support: 1.1.3 console-control-strings: 1.1.0 has-unicode: 2.0.1 object-assign: 4.1.1 signal-exit: 3.0.7 string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 hasown: 2.0.2 math-intrinsics: 1.1.0 get-package-type@0.1.0: {} get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 get-stream@6.0.1: {} get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 glob-parent@5.1.2: dependencies: is-glob: 4.0.3 glob@13.0.6: dependencies: minimatch: 10.2.5 minipass: 7.1.3 path-scurry: 2.0.2 glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 10.0.1 once: 1.4.0 path-is-absolute: 1.0.1 globals@11.12.0: {} globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 gopd@1.2.0: {} graceful-fs@4.2.11: {} has-flag@4.0.0: {} has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: has-symbols: 1.1.0 has-unicode@2.0.1: {} hasown@2.0.2: dependencies: function-bind: 1.1.2 html-encoding-sniffer@2.0.1: dependencies: whatwg-encoding: 1.0.5 html-escaper@2.0.2: {} http-proxy-agent@4.0.1: dependencies: '@tootallnate/once': 3.0.1 agent-base: 6.0.2 debug: 4.4.0 transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 debug: 4.4.0 transitivePeerDependencies: - supports-color human-signals@2.1.0: {} husky@7.0.4: {} i18n@0.15.1: dependencies: '@messageformat/core': 3.4.0 debug: 4.4.0 fast-printf: 1.6.10 make-plural: 7.5.0 math-interval-parser: 2.0.1 mustache: 4.2.0 transitivePeerDependencies: - supports-color iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 ignore@5.3.2: {} import-local@3.2.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 imurmurhash@0.1.4: {} inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 inherits@2.0.4: {} interpret@1.4.0: {} is-arrayish@0.2.1: {} is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 is-core-module@2.16.1: dependencies: hasown: 2.0.2 is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} is-glob@4.0.3: dependencies: is-extglob: 2.1.1 is-number@7.0.0: {} is-potential-custom-element-name@1.0.1: {} is-stream@2.0.1: {} is-typedarray@1.0.0: {} isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.26.10 '@babel/parser': 7.27.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 jest-changed-files@27.5.1: dependencies: '@jest/types': 27.5.1 execa: 5.1.1 throat: 6.0.2 jest-circus@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 expect: 27.5.1 is-generator-fn: 2.1.0 jest-each: 27.5.1 jest-matcher-utils: 27.5.1 jest-message-util: 27.5.1 jest-runtime: 27.5.1 jest-snapshot: 27.5.1 jest-util: 27.5.1 pretty-format: 27.5.1 slash: 3.0.0 stack-utils: 2.0.6 throat: 6.0.2 transitivePeerDependencies: - supports-color jest-cli@27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)): dependencies: '@jest/core': 27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.2.0 jest-config: 27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 yargs: 16.2.0 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate jest-config@27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)): dependencies: '@babel/core': 7.26.10 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 babel-jest: 27.5.1(@babel/core@7.26.10) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 jest-circus: 27.5.1 jest-environment-jsdom: 27.5.1 jest-environment-node: 27.5.1 jest-get-type: 27.5.1 jest-jasmine2: 27.5.1 jest-regex-util: 27.5.1 jest-resolve: 27.5.1 jest-runner: 27.5.1 jest-util: 27.5.1 jest-validate: 27.5.1 micromatch: 4.0.8 parse-json: 5.2.0 pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: ts-node: 10.9.2(@types/node@16.18.126)(typescript@4.9.5) transitivePeerDependencies: - bufferutil - canvas - supports-color - utf-8-validate jest-diff@27.5.1: dependencies: chalk: 4.1.2 diff-sequences: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 jest-docblock@27.5.1: dependencies: detect-newline: 3.1.0 jest-each@27.5.1: dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 jest-get-type: 27.5.1 jest-util: 27.5.1 pretty-format: 27.5.1 jest-environment-jsdom@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 transitivePeerDependencies: - bufferutil - canvas - supports-color - utf-8-validate jest-environment-node@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 jest-mock: 27.5.1 jest-util: 27.5.1 jest-get-type@27.5.1: {} jest-haste-map@27.5.1: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.9 '@types/node': 16.18.126 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 27.5.1 jest-serializer: 27.5.1 jest-util: 27.5.1 jest-worker: 27.5.1 micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 jest-jasmine2@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 is-generator-fn: 2.1.0 jest-each: 27.5.1 jest-matcher-utils: 27.5.1 jest-message-util: 27.5.1 jest-runtime: 27.5.1 jest-snapshot: 27.5.1 jest-util: 27.5.1 pretty-format: 27.5.1 throat: 6.0.2 transitivePeerDependencies: - supports-color jest-leak-detector@27.5.1: dependencies: jest-get-type: 27.5.1 pretty-format: 27.5.1 jest-matcher-utils@27.5.1: dependencies: chalk: 4.1.2 jest-diff: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 jest-message-util@27.5.1: dependencies: '@babel/code-frame': 7.26.2 '@jest/types': 27.5.1 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.8 pretty-format: 27.5.1 slash: 3.0.0 stack-utils: 2.0.6 jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 '@types/node': 16.18.126 jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): optionalDependencies: jest-resolve: 27.5.1 jest-regex-util@27.5.1: {} jest-resolve-dependencies@27.5.1: dependencies: '@jest/types': 27.5.1 jest-regex-util: 27.5.1 jest-snapshot: 27.5.1 transitivePeerDependencies: - supports-color jest-resolve@27.5.1: dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 graceful-fs: 4.2.11 jest-haste-map: 27.5.1 jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) jest-util: 27.5.1 jest-validate: 27.5.1 resolve: 1.22.10 resolve.exports: 1.1.1 slash: 3.0.0 jest-runner@27.5.1: dependencies: '@jest/console': 27.5.1 '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 jest-docblock: 27.5.1 jest-environment-jsdom: 27.5.1 jest-environment-node: 27.5.1 jest-haste-map: 27.5.1 jest-leak-detector: 27.5.1 jest-message-util: 27.5.1 jest-resolve: 27.5.1 jest-runtime: 27.5.1 jest-util: 27.5.1 jest-worker: 27.5.1 source-map-support: 0.5.21 throat: 6.0.2 transitivePeerDependencies: - bufferutil - canvas - supports-color - utf-8-validate jest-runtime@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/globals': 27.5.1 '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 execa: 5.1.1 glob: 7.2.3 graceful-fs: 4.2.11 jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-regex-util: 27.5.1 jest-resolve: 27.5.1 jest-snapshot: 27.5.1 jest-util: 27.5.1 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color jest-serializer@27.5.1: dependencies: '@types/node': 16.18.126 graceful-fs: 4.2.11 jest-snapshot@27.5.1: dependencies: '@babel/core': 7.26.10 '@babel/generator': 7.27.0 '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__traverse': 7.20.7 '@types/prettier': 2.7.3 babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.11 jest-diff: 27.5.1 jest-get-type: 27.5.1 jest-haste-map: 27.5.1 jest-matcher-utils: 27.5.1 jest-message-util: 27.5.1 jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 semver: 7.7.1 transitivePeerDependencies: - supports-color jest-util@27.5.1: dependencies: '@jest/types': 27.5.1 '@types/node': 16.18.126 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 4.0.4 jest-validate@27.5.1: dependencies: '@jest/types': 27.5.1 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 27.5.1 leven: 3.1.0 pretty-format: 27.5.1 jest-watcher@27.5.1: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 '@types/node': 16.18.126 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 string-length: 4.0.2 jest-worker@27.5.1: dependencies: '@types/node': 16.18.126 merge-stream: 2.0.0 supports-color: 8.1.1 jest@27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)): dependencies: '@jest/core': 27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)) import-local: 3.2.0 jest-cli: 27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)) transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate js-tokens@4.0.0: {} js-yaml@4.1.1: dependencies: argparse: 2.0.1 jsdom@16.7.0: dependencies: abab: 2.0.6 acorn: 8.14.1 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 data-urls: 2.0.0 decimal.js: 10.5.0 domexception: 2.0.1 escodegen: 2.1.0 form-data: 4.0.5 html-encoding-sniffer: 2.0.1 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.20 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 tough-cookie: 4.1.4 w3c-hr-time: 1.0.2 w3c-xmlserializer: 2.0.0 webidl-conversions: 6.1.0 whatwg-encoding: 1.0.5 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 ws: 7.5.10 xml-name-validator: 3.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate jsesc@3.1.0: {} json-parse-even-better-errors@2.3.1: {} json5@2.2.3: {} kleur@3.0.3: {} leven@3.1.0: {} lines-and-columns@1.2.4: {} locate-path@5.0.0: dependencies: p-locate: 4.1.0 lodash.memoize@4.1.2: {} lodash@4.18.1: {} lru-cache@11.1.0: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 make-dir@3.1.0: dependencies: semver: 6.3.1 make-dir@4.0.0: dependencies: semver: 7.7.1 make-error@1.3.6: {} make-plural@7.5.0: {} makeerror@1.0.12: dependencies: tmpl: 1.0.5 math-interval-parser@2.0.1: {} math-intrinsics@1.1.0: {} merge-stream@2.0.0: {} merge2@1.4.1: {} micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 4.0.4 mime-db@1.52.0: {} mime-types@2.1.35: dependencies: mime-db: 1.52.0 mimic-fn@2.1.0: {} minimatch@10.0.1: dependencies: brace-expansion: 5.0.5 minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 minipass@3.3.6: dependencies: yallist: 4.0.0 minipass@5.0.0: {} minipass@7.1.3: {} minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 mkdirp@1.0.4: {} moo@0.5.3: {} ms@2.1.3: {} mustache@4.2.0: {} mylas@2.1.13: {} natural-compare@1.4.0: {} node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 node-int64@0.4.0: {} node-releases@2.0.19: {} nopt@5.0.0: dependencies: abbrev: 1.1.1 normalize-path@3.0.0: {} npm-run-path@4.0.1: dependencies: path-key: 3.1.1 npmlog@5.0.1: dependencies: are-we-there-yet: 2.0.0 console-control-strings: 1.1.0 gauge: 3.0.2 set-blocking: 2.0.0 nwsapi@2.2.20: {} object-assign@4.1.1: {} once@1.4.0: dependencies: wrappy: 1.0.2 onetime@5.1.2: dependencies: mimic-fn: 2.1.0 p-limit@2.3.0: dependencies: p-try: 2.2.0 p-locate@4.1.0: dependencies: p-limit: 2.3.0 p-try@2.2.0: {} package-json-from-dist@1.0.1: {} parse-json@5.2.0: dependencies: '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse5@6.0.1: {} path-exists@4.0.0: {} path-is-absolute@1.0.1: {} path-key@3.1.1: {} path-parse@1.0.7: {} path-scurry@2.0.2: dependencies: lru-cache: 11.1.0 minipass: 7.1.3 path-type@4.0.0: {} picocolors@1.1.1: {} picomatch@4.0.4: {} pirates@4.0.7: {} pkg-dir@4.2.0: dependencies: find-up: 4.1.0 plimit-lit@1.6.1: dependencies: queue-lit: 1.5.2 prettier@2.8.8: {} pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 psl@1.15.0: dependencies: punycode: 2.3.1 punycode@2.3.1: {} querystringify@2.2.0: {} queue-lit@1.5.2: {} queue-microtask@1.2.3: {} react-is@17.0.2: {} readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 readdirp@3.6.0: dependencies: picomatch: 4.0.4 rechoir@0.6.2: dependencies: resolve: 1.22.10 require-directory@2.1.1: {} requires-port@1.0.0: {} resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} resolve.exports@1.1.1: {} resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 reusify@1.1.0: {} rimraf@3.0.2: dependencies: glob: 7.2.3 rimraf@6.0.1: dependencies: glob: 13.0.6 package-json-from-dist: 1.0.1 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 safe-buffer@5.2.1: {} safe-identifier@0.4.2: {} safer-buffer@2.1.2: {} saxes@5.0.1: dependencies: xmlchars: 2.2.0 semver@6.3.1: {} semver@7.7.1: {} set-blocking@2.0.0: {} shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} shelljs@0.8.5: dependencies: glob: 7.2.3 interpret: 1.4.0 rechoir: 0.6.2 signal-exit@3.0.7: {} sisteransi@1.0.5: {} slash@3.0.0: {} source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 source-map@0.6.1: {} source-map@0.7.4: {} stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 string-length@4.0.2: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} strip-json-comments@3.1.1: {} supports-color@7.2.0: dependencies: has-flag: 4.0.0 supports-color@8.1.1: dependencies: has-flag: 4.0.0 supports-hyperlinks@2.3.0: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 supports-preserve-symlinks-flag@1.0.0: {} symbol-tree@3.2.4: {} tar@6.2.1: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 minipass: 5.0.0 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 terminal-link@2.1.1: dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 10.0.1 throat@6.0.2: {} tmpl@1.0.5: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 tough-cookie@4.1.4: dependencies: psl: 1.15.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 tr46@0.0.3: {} tr46@2.1.0: dependencies: punycode: 2.3.1 ts-jest@27.1.5(@babel/core@7.26.10)(@types/jest@27.5.2)(babel-jest@27.5.1(@babel/core@7.26.10))(jest@27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)))(typescript@4.9.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 27.5.1(ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5)) jest-util: 27.5.1 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.7.1 typescript: 4.9.5 yargs-parser: 20.2.9 optionalDependencies: '@babel/core': 7.26.10 '@types/jest': 27.5.2 babel-jest: 27.5.1(@babel/core@7.26.10) ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 16.18.126 acorn: 8.14.1 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 typescript: 4.9.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 tsc-alias@1.8.16: dependencies: chokidar: 3.6.0 commander: 9.5.0 get-tsconfig: 4.10.0 globby: 11.1.0 mylas: 2.1.13 normalize-path: 3.0.0 plimit-lit: 1.6.1 type-detect@4.0.8: {} type-fest@0.21.3: {} typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 typescript@4.9.5: {} universalify@0.2.0: {} update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 util-deprecate@1.0.2: {} v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@8.1.1: dependencies: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 1.9.0 source-map: 0.7.4 w3c-hr-time@1.0.2: dependencies: browser-process-hrtime: 1.0.0 w3c-xmlserializer@2.0.0: dependencies: xml-name-validator: 3.0.0 walker@1.0.8: dependencies: makeerror: 1.0.12 webidl-conversions@3.0.1: {} webidl-conversions@5.0.0: {} webidl-conversions@6.1.0: {} whatwg-encoding@1.0.5: dependencies: iconv-lite: 0.4.24 whatwg-mimetype@2.3.0: {} whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 whatwg-url@8.7.0: dependencies: lodash: 4.18.1 tr46: 2.1.0 webidl-conversions: 6.1.0 which@2.0.2: dependencies: isexe: 2.0.0 wide-align@1.1.5: dependencies: string-width: 4.2.3 wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 wrappy@1.0.2: {} write-file-atomic@3.0.3: dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 ws@7.5.10: {} xml-name-validator@3.0.0: {} xmlchars@2.2.0: {} y18n@5.0.8: {} yallist@3.1.1: {} yallist@4.0.0: {} yargs-parser@20.2.9: {} yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 yn@3.1.1: {} justkey007-tsc-alias-fb8387d/pnpm-workspace.yaml000066400000000000000000000011771517463514200216140ustar00rootroot00000000000000packages: - 'projects/*' overrides: '@tootallnate/once@<3.0.1': '>=3.0.1' brace-expansion@<1.1.13: '>=1.1.13' brace-expansion@>=1.0.0 <=1.1.11: '>=1.1.12' brace-expansion@>=2.0.0 <2.0.3: '>=2.0.3' brace-expansion@>=2.0.0 <=2.0.1: '>=2.0.2' form-data@>=3.0.0 <3.0.4: '>=3.0.4' glob@>=11.0.0 <11.1.0: '>=11.1.0' js-yaml@<3.14.2: '>=3.14.2' lodash@<=4.17.23: '>=4.18.0' lodash@>=4.0.0 <=4.17.22: '>=4.17.23' lodash@>=4.0.0 <=4.17.23: '>=4.18.0' minimatch@<3.1.3: '>=3.1.3' minimatch@<3.1.4: '>=3.1.4' minimatch@>=10.0.0 <10.2.1: '>=10.2.1' minimatch@>=10.0.0 <10.2.3: '>=10.2.3' picomatch@<2.3.2: '>=2.3.2' justkey007-tsc-alias-fb8387d/projects/000077500000000000000000000000001517463514200176055ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project1/000077500000000000000000000000001517463514200213345ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project1/package.json000066400000000000000000000002151517463514200236200ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/project1/src/index.js" } } justkey007-tsc-alias-fb8387d/projects/project1/src/000077500000000000000000000000001517463514200221235ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project1/src/custom_modules/000077500000000000000000000000001517463514200251655ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project1/src/custom_modules/calculator.ts000066400000000000000000000000761517463514200276710ustar00rootroot00000000000000export function add(a: number, b: number) { return a + b; } justkey007-tsc-alias-fb8387d/projects/project1/src/custom_modules/modules/000077500000000000000000000000001517463514200266355ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project1/src/custom_modules/modules/index.ts000066400000000000000000000000561517463514200303150ustar00rootroot00000000000000export const CUSTOM_MODULE = 'custom module'; justkey007-tsc-alias-fb8387d/projects/project1/src/data.json000066400000000000000000000000351517463514200237250ustar00rootroot00000000000000{ "project": "tsc-alias" } justkey007-tsc-alias-fb8387d/projects/project1/src/index.ts000066400000000000000000000007031517463514200236020ustar00rootroot00000000000000import { DATA } from '@commons'; import { CUSTOM_MODULE } from 'custom/index'; import { EXTRA } from 'extra'; import { add } from 'myproject/custom_modules/calculator'; import * as data from 'myproject/data.json'; export { DATA as XYZ } from '@commons'; console.log(DATA); if (DATA !== 'mydata') { throw new Error('Bad resolution'); } console.log(DATA); console.log(CUSTOM_MODULE); console.log(EXTRA); console.log(add(1, 2)); console.log(data); justkey007-tsc-alias-fb8387d/projects/project1/src/lib/000077500000000000000000000000001517463514200226715ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project1/src/lib/commons/000077500000000000000000000000001517463514200243445ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project1/src/lib/commons/index.ts000066400000000000000000000000361517463514200260220ustar00rootroot00000000000000export const DATA = 'mydata'; justkey007-tsc-alias-fb8387d/projects/project1/tsconfig.json000066400000000000000000000007631517463514200240510ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "dist", "target": "es5", "module": "commonjs", "strictNullChecks": false, "noImplicitAny": false, "skipLibCheck": true, "baseUrl": "./src", "resolveJsonModule": true, "paths": { "myproject/*": ["./*"], "@commons": ["libo/commo/index-1.ts", "lib/commons/index.ts"], "custom/*": ["custom_modules/*", "custom_modules/modules/*"], "extra": ["../../project2/index"] } }, "exclude": ["node_modules"] } justkey007-tsc-alias-fb8387d/projects/project10/000077500000000000000000000000001517463514200214145ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project10/package.json000066400000000000000000000002241517463514200237000ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc && tsc-alias --resolve-full-paths", "start": "npm run build && node ./dist/main.js" } } justkey007-tsc-alias-fb8387d/projects/project10/src/000077500000000000000000000000001517463514200222035ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project10/src/api/000077500000000000000000000000001517463514200227545ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project10/src/api/invoice/000077500000000000000000000000001517463514200244105ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project10/src/api/invoice/invoice.service.ts000066400000000000000000000001551517463514200300540ustar00rootroot00000000000000import { getdateString } from '@/utils'; export function generateInvoice() { getdateString(new Date()); } justkey007-tsc-alias-fb8387d/projects/project10/src/main.ts000066400000000000000000000001251517463514200234750ustar00rootroot00000000000000import { generateInvoice } from './api/invoice/invoice.service'; generateInvoice(); justkey007-tsc-alias-fb8387d/projects/project10/src/utils/000077500000000000000000000000001517463514200233435ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project10/src/utils/index.ts000066400000000000000000000001101517463514200250120ustar00rootroot00000000000000export function getdateString(date: Date) { return date.toString(); } justkey007-tsc-alias-fb8387d/projects/project10/tsconfig.json000066400000000000000000000006371517463514200241310ustar00rootroot00000000000000{ "compilerOptions": { "resolveJsonModule": true, "module": "commonjs", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "es2017", "outDir": "./dist", "skipLibCheck": true, "baseUrl": "./", "paths": { "@/*": ["src/*"] } }, "include": ["src"] } justkey007-tsc-alias-fb8387d/projects/project11/000077500000000000000000000000001517463514200214155ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project11/package.json000066400000000000000000000003511517463514200237020ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "npm i && tsc && tsc-alias --resolve-full-paths", "start": "npm run build && node ./dist/project11/src/index.js" }, "devDependencies": { "@tsconfig/node14": "^1.0.0" } } justkey007-tsc-alias-fb8387d/projects/project11/src/000077500000000000000000000000001517463514200222045ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project11/src/custom_modules/000077500000000000000000000000001517463514200252465ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project11/src/custom_modules/calculator.ts000066400000000000000000000000761517463514200277520ustar00rootroot00000000000000export function add(a: number, b: number) { return a + b; } justkey007-tsc-alias-fb8387d/projects/project11/src/custom_modules/index.ts000066400000000000000000000000561517463514200267260ustar00rootroot00000000000000export const CUSTOM_MODULE = 'custom module'; justkey007-tsc-alias-fb8387d/projects/project11/src/index.ts000066400000000000000000000003211517463514200236570ustar00rootroot00000000000000import { CUSTOM_MODULE } from 'custom/index'; import { EXTRA } from 'extra'; import { add } from 'myproject/custom_modules/calculator'; console.log(CUSTOM_MODULE); console.log(EXTRA); console.log(add(1, 2)); justkey007-tsc-alias-fb8387d/projects/project11/tsconfig.json000066400000000000000000000007131517463514200241250ustar00rootroot00000000000000{ "extends": "@tsconfig/node14" /* from node_modules */, "compilerOptions": { "outDir": "dist", "target": "es5", "module": "commonjs", "strictNullChecks": false, "noImplicitAny": false, "skipLibCheck": true, "baseUrl": "./src", "paths": { "myproject/*": ["./*"], "custom/*": ["custom_modules/*"], "extra": ["../../project2/index"] }, "resolveJsonModule": true }, "exclude": ["node_modules"] } justkey007-tsc-alias-fb8387d/projects/project12/000077500000000000000000000000001517463514200214165ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project12/package.json000066400000000000000000000002001517463514200236740ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/index.js" } } justkey007-tsc-alias-fb8387d/projects/project12/src/000077500000000000000000000000001517463514200222055ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project12/src/controllers/000077500000000000000000000000001517463514200245535ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project12/src/controllers/index.ts000066400000000000000000000000631517463514200262310ustar00rootroot00000000000000export class Controller {} export class Router {} justkey007-tsc-alias-fb8387d/projects/project12/src/index.ts000066400000000000000000000001651517463514200236660ustar00rootroot00000000000000import { Controller } from '$controllers/index'; import { Router } from '$router'; new Controller(); new Router(); justkey007-tsc-alias-fb8387d/projects/project12/tsconfig.json000066400000000000000000000003041517463514200241220ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "./dist", "baseUrl": "./", "skipLibCheck": true, "paths": { "$*": ["./src/*"], "$router": ["./src/controllers/index.ts"] } } } justkey007-tsc-alias-fb8387d/projects/project13/000077500000000000000000000000001517463514200214175ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/package.json000066400000000000000000000002001517463514200236750ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/index.js" } } justkey007-tsc-alias-fb8387d/projects/project13/src/000077500000000000000000000000001517463514200222065ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/aaaaaa/000077500000000000000000000000001517463514200233735ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/aaaaaa/index.ts000066400000000000000000000001551517463514200250530ustar00rootroot00000000000000import { Controller } from '@controllers/index'; const aa = { aa: new Controller() }; export default aa; justkey007-tsc-alias-fb8387d/projects/project13/src/bbbbbb/000077500000000000000000000000001517463514200234015ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/bbbbbb/index.ts000066400000000000000000000002261517463514200250600ustar00rootroot00000000000000import aa from '@aaaaaa/index'; import { Controller } from '@controllers/index'; const bb = { ...aa, bb: new Controller() }; export default bb; justkey007-tsc-alias-fb8387d/projects/project13/src/cccccc/000077500000000000000000000000001517463514200234075ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/cccccc/index.ts000066400000000000000000000002361517463514200250670ustar00rootroot00000000000000import input from '@bbbbbb/index'; import { Controller } from '@controllers/index'; const out = { ...input, cc: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project13/src/controllers/000077500000000000000000000000001517463514200245545ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/controllers/index.ts000066400000000000000000000000631517463514200262320ustar00rootroot00000000000000export class Controller {} export class Router {} justkey007-tsc-alias-fb8387d/projects/project13/src/dddddd/000077500000000000000000000000001517463514200234155ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/dddddd/index.ts000066400000000000000000000002361517463514200250750ustar00rootroot00000000000000import input from '@cccccc/index'; import { Controller } from '@controllers/index'; const out = { ...input, dd: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project13/src/eeeeee/000077500000000000000000000000001517463514200234235ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/eeeeee/index.ts000066400000000000000000000002361517463514200251030ustar00rootroot00000000000000import input from '@dddddd/index'; import { Controller } from '@controllers/index'; const out = { ...input, ee: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project13/src/ffffff/000077500000000000000000000000001517463514200234315ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/ffffff/index.ts000066400000000000000000000002361517463514200251110ustar00rootroot00000000000000import input from '@eeeeee/index'; import { Controller } from '@controllers/index'; const out = { ...input, ff: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project13/src/gggggg/000077500000000000000000000000001517463514200234375ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/gggggg/index.ts000066400000000000000000000005271517463514200251220ustar00rootroot00000000000000import aaaaaa from '@aaaaaa/index'; import bbbbbb from '@bbbbbb/index'; import cccccc from '@cccccc/index'; import dddddd from '@dddddd/index'; import eeeeee from '@eeeeee/index'; import ffffff from '@ffffff/index'; console.log(aaaaaa); console.log(bbbbbb); console.log(cccccc); console.log(dddddd); console.log(eeeeee); console.log(ffffff); justkey007-tsc-alias-fb8387d/projects/project13/src/hhhhhh/000077500000000000000000000000001517463514200234455ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project13/src/hhhhhh/index.ts000066400000000000000000000002361517463514200251250ustar00rootroot00000000000000import input from '@ffffff/index'; import { Controller } from '@controllers/index'; const out = { ...input, hh: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project13/src/index.ts000066400000000000000000000001651517463514200236670ustar00rootroot00000000000000import { Controller } from '@controllers/index'; import { Router } from '@router'; new Controller(); new Router(); justkey007-tsc-alias-fb8387d/projects/project13/tsconfig.json000066400000000000000000000010441517463514200241250ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "./dist", "baseUrl": "./", "skipLibCheck": true, "paths": { "@*": ["./src/*"], "@router": ["./src/controllers/index.ts"], "@aaaaaa": ["./src/aaaaaa/index.ts"], "@bbbbbb": ["./src/bbbbbb/index.ts"], "@cccccc": ["./src/cccccc/index.ts"], "@dddddd": ["./src/dddddd/index.ts"], "@eeeeee": ["./src/eeeeee/index.ts"], "@ffffff": ["./src/ffffff/index.ts"], "@gggggg": ["./src/gggggg/index.ts"], "@hhhhhh": ["./src/hhhhhh/index.ts"] } } } justkey007-tsc-alias-fb8387d/projects/project14/000077500000000000000000000000001517463514200214205ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project14/package.json000066400000000000000000000002771517463514200237140ustar00rootroot00000000000000{ "name": "root-package", "scripts": { "build": "npm run build -ws", "start": "pnpm install && npm run build && npm run start -ws" }, "workspaces": [ "./packages/*" ] } justkey007-tsc-alias-fb8387d/projects/project14/packages/000077500000000000000000000000001517463514200231765ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project14/packages/packageA/000077500000000000000000000000001517463514200246725ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project14/packages/packageA/index.ts000066400000000000000000000000261517463514200263470ustar00rootroot00000000000000console.log('Hello'); justkey007-tsc-alias-fb8387d/projects/project14/packages/packageA/package.json000066400000000000000000000003111517463514200271530ustar00rootroot00000000000000{ "name": "packageA", "scripts": { "build": "tsc && tsc-alias", "start": "node ./dist/index.js" }, "dependencies": { "@tsconfig/node14": "1.0.0", "@types/node": "16.10.2" } } justkey007-tsc-alias-fb8387d/projects/project14/packages/packageA/tsconfig.json000066400000000000000000000005741517463514200274070ustar00rootroot00000000000000{ "compilerOptions": { "target": "es2020", "module": "commonjs", "lib": ["es2020"], "outDir": "./dist", "baseUrl": "./src", "skipLibCheck": true, "paths": { "myproject/*": ["./*"], "@commons": ["lib/commons/index.ts"], "custom/*": ["custom_modules/*"], "extra": ["../../project2/index"] } }, "include": ["index.ts"] } justkey007-tsc-alias-fb8387d/projects/project14/packages/packageB/000077500000000000000000000000001517463514200246735ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project14/packages/packageB/index.ts000066400000000000000000000000261517463514200263500ustar00rootroot00000000000000console.log('Hello'); justkey007-tsc-alias-fb8387d/projects/project14/packages/packageB/package.json000066400000000000000000000003121517463514200271550ustar00rootroot00000000000000{ "name": "packageB", "scripts": { "build": "tsc && tsc-alias", "start": "node ./dist/index.js" }, "dependencies": { "@tsconfig/node14": "1.0.0", "@types/node": "14.14.31" } } justkey007-tsc-alias-fb8387d/projects/project14/packages/packageB/tsconfig.json000066400000000000000000000005741517463514200274100ustar00rootroot00000000000000{ "compilerOptions": { "target": "es2020", "module": "commonjs", "lib": ["es2020"], "outDir": "./dist", "baseUrl": "./src", "skipLibCheck": true, "paths": { "myproject/*": ["./*"], "@commons": ["lib/commons/index.ts"], "custom/*": ["custom_modules/*"], "extra": ["../../project2/index"] } }, "include": ["index.ts"] } justkey007-tsc-alias-fb8387d/projects/project15/000077500000000000000000000000001517463514200214215ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/config/000077500000000000000000000000001517463514200226665ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/config/tsconfig.json000066400000000000000000000011311517463514200253710ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "../dist", "baseUrl": "../", "declaration": true, "skipLibCheck": true, "paths": { "@*": ["./src/*"], "@router": ["./src/controllers/index.ts"], "@aaaaaa": ["./src/aaaaaa/index.ts"], "@bbbbbb": ["./src/bbbbbb/index.ts"], "@cccccc": ["./src/cccccc/index.ts"], "@dddddd": ["./src/dddddd/index.ts"], "@eeeeee": ["./src/eeeeee/index.ts"], "@ffffff": ["./src/ffffff/index.ts"], "@gggggg": ["./src/gggggg/index.ts"], "@hhhhhh": ["./src/hhhhhh/index.ts"] } }, "include": ["../**/*"] } justkey007-tsc-alias-fb8387d/projects/project15/package.json000066400000000000000000000002731517463514200237110ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc --project ./config/tsconfig.json && tsc-alias -p ./config/tsconfig.json", "start": "npm run build && node ./dist/index.js" } } justkey007-tsc-alias-fb8387d/projects/project15/src/000077500000000000000000000000001517463514200222105ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/aaaaaa/000077500000000000000000000000001517463514200233755ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/aaaaaa/index.ts000066400000000000000000000001551517463514200250550ustar00rootroot00000000000000import { Controller } from '@controllers/index'; const aa = { aa: new Controller() }; export default aa; justkey007-tsc-alias-fb8387d/projects/project15/src/bbbbbb/000077500000000000000000000000001517463514200234035ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/bbbbbb/index.ts000066400000000000000000000002261517463514200250620ustar00rootroot00000000000000import aa from '@aaaaaa/index'; import { Controller } from '@controllers/index'; const bb = { ...aa, bb: new Controller() }; export default bb; justkey007-tsc-alias-fb8387d/projects/project15/src/cccccc/000077500000000000000000000000001517463514200234115ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/cccccc/index.ts000066400000000000000000000002361517463514200250710ustar00rootroot00000000000000import input from '@bbbbbb/index'; import { Controller } from '@controllers/index'; const out = { ...input, cc: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project15/src/controllers/000077500000000000000000000000001517463514200245565ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/controllers/index.ts000066400000000000000000000000631517463514200262340ustar00rootroot00000000000000export class Controller {} export class Router {} justkey007-tsc-alias-fb8387d/projects/project15/src/dddddd/000077500000000000000000000000001517463514200234175ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/dddddd/index.ts000066400000000000000000000002361517463514200250770ustar00rootroot00000000000000import input from '@cccccc/index'; import { Controller } from '@controllers/index'; const out = { ...input, dd: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project15/src/eeeeee/000077500000000000000000000000001517463514200234255ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/eeeeee/index.ts000066400000000000000000000002361517463514200251050ustar00rootroot00000000000000import input from '@dddddd/index'; import { Controller } from '@controllers/index'; const out = { ...input, ee: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project15/src/ffffff/000077500000000000000000000000001517463514200234335ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/ffffff/index.ts000066400000000000000000000002361517463514200251130ustar00rootroot00000000000000import input from '@eeeeee/index'; import { Controller } from '@controllers/index'; const out = { ...input, ff: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project15/src/gggggg/000077500000000000000000000000001517463514200234415ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/gggggg/index.ts000066400000000000000000000005271517463514200251240ustar00rootroot00000000000000import aaaaaa from '@aaaaaa/index'; import bbbbbb from '@bbbbbb/index'; import cccccc from '@cccccc/index'; import dddddd from '@dddddd/index'; import eeeeee from '@eeeeee/index'; import ffffff from '@ffffff/index'; console.log(aaaaaa); console.log(bbbbbb); console.log(cccccc); console.log(dddddd); console.log(eeeeee); console.log(ffffff); justkey007-tsc-alias-fb8387d/projects/project15/src/hhhhhh/000077500000000000000000000000001517463514200234475ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project15/src/hhhhhh/index.ts000066400000000000000000000002361517463514200251270ustar00rootroot00000000000000import input from '@ffffff/index'; import { Controller } from '@controllers/index'; const out = { ...input, hh: new Controller() }; export default out; justkey007-tsc-alias-fb8387d/projects/project15/src/index.ts000066400000000000000000000002551517463514200236710ustar00rootroot00000000000000import { Controller } from '@controllers/index'; import { Router } from '@router'; declare module '@router' { export class Router2 {} } new Controller(); new Router(); justkey007-tsc-alias-fb8387d/projects/project16/000077500000000000000000000000001517463514200214225ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project16/package.json000066400000000000000000000002321517463514200237050ustar00rootroot00000000000000{ "name": "project16", "scripts": { "build": "tsc && tsc-alias -r replacer.js", "start": "npm run build && node ./dist/server/index.js" } } justkey007-tsc-alias-fb8387d/projects/project16/replacer.js000066400000000000000000000001111517463514200235460ustar00rootroot00000000000000exports.default = ({ orig }) => { console.log(orig); return orig; }; justkey007-tsc-alias-fb8387d/projects/project16/src/000077500000000000000000000000001517463514200222115ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project16/src/file.ts000066400000000000000000000001111517463514200234710ustar00rootroot00000000000000import { emoji } from 'index'; const a = new emoji(); export default a; justkey007-tsc-alias-fb8387d/projects/project16/src/index.ts000066400000000000000000000011271517463514200236710ustar00rootroot00000000000000export class emoji { constructor() { const strings = [ '🥝', '🥥', '🍇', '🍈', '🍉', '🍊', '🍋', '🍌', '🍍', '🥭', '🍎', '🍏', '🍐', '🍑', '🍒', '🍓', '🍅', '🍆', '🌽', '🌶', '🍄', '🥑', '🥒', '🥬', '🥦', '🥔', '🧄', '🧅', '🥕', '🌭' ]; console.log(strings); } } import a from 'file'; const b = a; import { c } from 'test/testy'; const d = c; justkey007-tsc-alias-fb8387d/projects/project16/src/test/000077500000000000000000000000001517463514200231705ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project16/src/test/testy.ts000066400000000000000000000001211517463514200247020ustar00rootroot00000000000000export const c = 'hello'; import { emoji } from 'index'; const a = new emoji(); justkey007-tsc-alias-fb8387d/projects/project16/tsconfig.json000066400000000000000000000011371517463514200241330ustar00rootroot00000000000000{ "compilerOptions": { "incremental": true, "target": "ES2017", "module": "commonjs", "declaration": true, "declarationMap": true, "sourceMap": true, "outDir": "dist/server/", "declarationDir": "./types", "removeComments": true, "importHelpers": false, "strict": true, "baseUrl": "./src", "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "tsc-alias": { "replacers": { "default": { "enabled": false //"file": "" // File not needed for default replacers. } } } } justkey007-tsc-alias-fb8387d/projects/project17/000077500000000000000000000000001517463514200214235ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project17/package.json000066400000000000000000000002611517463514200237100ustar00rootroot00000000000000{ "name": "project17", "type": "module", "scripts": { "build": "tsc && tsc-alias --resolve-full-paths", "start": "npm run build && node ./dist/src/index.js" } } justkey007-tsc-alias-fb8387d/projects/project17/src/000077500000000000000000000000001517463514200222125ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project17/src/index.ts000066400000000000000000000000661517463514200236730ustar00rootroot00000000000000import * as tests from './utils'; console.log(tests); justkey007-tsc-alias-fb8387d/projects/project17/src/utils/000077500000000000000000000000001517463514200233525ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project17/src/utils/authorization/000077500000000000000000000000001517463514200262525ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project17/src/utils/authorization/index.ts000066400000000000000000000000411517463514200277240ustar00rootroot00000000000000const a = 'testa'; export { a }; justkey007-tsc-alias-fb8387d/projects/project17/src/utils/get-spec.ts000066400000000000000000000000411517463514200254240ustar00rootroot00000000000000const c = 'testc'; export { c }; justkey007-tsc-alias-fb8387d/projects/project17/src/utils/index.ts000066400000000000000000000002241517463514200250270ustar00rootroot00000000000000export * from './authorization'; export * from './get-spec'; export * from './regex'; export * from './test-helpers'; export * from './validation'; justkey007-tsc-alias-fb8387d/projects/project17/src/utils/regex.ts000066400000000000000000000000411517463514200250270ustar00rootroot00000000000000const d = 'testd'; export { d }; justkey007-tsc-alias-fb8387d/projects/project17/src/utils/test-helpers/000077500000000000000000000000001517463514200257715ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project17/src/utils/test-helpers/index.ts000066400000000000000000000000411517463514200274430ustar00rootroot00000000000000const b = 'testb'; export { b }; justkey007-tsc-alias-fb8387d/projects/project17/src/utils/validation.ts000066400000000000000000000000411517463514200260470ustar00rootroot00000000000000const e = 'teste'; export { e }; justkey007-tsc-alias-fb8387d/projects/project17/tsconfig.json000066400000000000000000000007071517463514200241360ustar00rootroot00000000000000{ "compilerOptions": { "target": "es2020", "module": "es2020", "outDir": "./dist", "rootDir": ".", "baseUrl": ".", "skipLibCheck": true, "paths": { "@container": ["src/container.ts"], "@interfaces": ["src/interfaces.ts"], "@main": ["src/main.ts"], "@util": ["src/utils/index.ts"] }, "moduleResolution": "node" }, "include": ["src/**/*.ts", "test/**/*.ts"], "exclude": ["node_modules"] } justkey007-tsc-alias-fb8387d/projects/project18/000077500000000000000000000000001517463514200214245ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project18/package.json000066400000000000000000000002341517463514200237110ustar00rootroot00000000000000{ "name": "project18", "type": "module", "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/src/index.js" } } justkey007-tsc-alias-fb8387d/projects/project18/src/000077500000000000000000000000001517463514200222135ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project18/src/index.ts000066400000000000000000000000671517463514200236750ustar00rootroot00000000000000import * as tests from './utils'; console.log(tests); justkey007-tsc-alias-fb8387d/projects/project18/src/utils/000077500000000000000000000000001517463514200233535ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project18/src/utils/authorization/000077500000000000000000000000001517463514200262535ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project18/src/utils/authorization/index.ts000066400000000000000000000000411517463514200277250ustar00rootroot00000000000000const a = 'testa'; export { a }; justkey007-tsc-alias-fb8387d/projects/project18/src/utils/get-spec.ts000066400000000000000000000000411517463514200254250ustar00rootroot00000000000000const c = 'testc'; export { c }; justkey007-tsc-alias-fb8387d/projects/project18/src/utils/index.ts000066400000000000000000000002241517463514200250300ustar00rootroot00000000000000export * from './authorization'; export * from './get-spec'; export * from './regex'; export * from './test-helpers'; export * from './validation'; justkey007-tsc-alias-fb8387d/projects/project18/src/utils/regex.ts000066400000000000000000000000411517463514200250300ustar00rootroot00000000000000const d = 'testd'; export { d }; justkey007-tsc-alias-fb8387d/projects/project18/src/utils/test-helpers/000077500000000000000000000000001517463514200257725ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project18/src/utils/test-helpers/index.ts000066400000000000000000000000411517463514200274440ustar00rootroot00000000000000const b = 'testb'; export { b }; justkey007-tsc-alias-fb8387d/projects/project18/src/utils/validation.ts000066400000000000000000000000411517463514200260500ustar00rootroot00000000000000const e = 'teste'; export { e }; justkey007-tsc-alias-fb8387d/projects/project18/tsconfig.json000066400000000000000000000007721517463514200241410ustar00rootroot00000000000000{ "compilerOptions": { "target": "es2020", "module": "es2020", "outDir": "./dist", "rootDir": ".", "baseUrl": ".", "skipLibCheck": true, "paths": { "@container": ["src/container.ts"], "@interfaces": ["src/interfaces.ts"], "@main": ["src/main.ts"], "@util": ["src/utils/index.ts"] }, "moduleResolution": "node" }, "include": ["src/**/*.ts", "test/**/*.ts"], "exclude": ["node_modules"], "tsc-alias": { "resolveFullPaths": true } } justkey007-tsc-alias-fb8387d/projects/project19/000077500000000000000000000000001517463514200214255ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project19/package.json000066400000000000000000000003141517463514200237110ustar00rootroot00000000000000{ "name": "project19", "type": "module", "scripts": { "build": "tsc && tsc-alias", "build:tsc-base": "tsc --outDir dist-base", "start": "npm run build && node ./dist/src/index.js" } } justkey007-tsc-alias-fb8387d/projects/project19/src/000077500000000000000000000000001517463514200222145ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project19/src/index.ts000066400000000000000000000000661517463514200236750ustar00rootroot00000000000000import * as tests from './utils'; console.log(tests); justkey007-tsc-alias-fb8387d/projects/project19/src/utils/000077500000000000000000000000001517463514200233545ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project19/src/utils/authorization/000077500000000000000000000000001517463514200262545ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project19/src/utils/authorization/index.ts000066400000000000000000000000411517463514200277260ustar00rootroot00000000000000const a = 'testa'; export { a }; justkey007-tsc-alias-fb8387d/projects/project19/src/utils/get-spec.ts000066400000000000000000000000411517463514200254260ustar00rootroot00000000000000const c = 'testc'; export { c }; justkey007-tsc-alias-fb8387d/projects/project19/src/utils/index.ts000066400000000000000000000002241517463514200250310ustar00rootroot00000000000000export * from './authorization'; export * from './get-spec'; export * from './regex'; export * from './test-helpers'; export * from './validation'; justkey007-tsc-alias-fb8387d/projects/project19/src/utils/regex.ts000066400000000000000000000000411517463514200250310ustar00rootroot00000000000000const d = 'testd'; export { d }; justkey007-tsc-alias-fb8387d/projects/project19/src/utils/test-helpers/000077500000000000000000000000001517463514200257735ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project19/src/utils/test-helpers/index.ts000066400000000000000000000000411517463514200274450ustar00rootroot00000000000000const b = 'testb'; export { b }; justkey007-tsc-alias-fb8387d/projects/project19/src/utils/validation.ts000066400000000000000000000000411517463514200260510ustar00rootroot00000000000000const e = 'teste'; export { e }; justkey007-tsc-alias-fb8387d/projects/project19/tsconfig.json000066400000000000000000000007401517463514200241350ustar00rootroot00000000000000{ "compilerOptions": { "target": "es2020", "module": "es2020", "outDir": "./dist", "rootDir": ".", "baseUrl": ".", "paths": { "@container": ["src/container.ts"], "@interfaces": ["src/interfaces.ts"], "@main": ["src/main.ts"], "@util": ["src/utils/index.ts"] }, "moduleResolution": "node" }, "include": ["src/**/*.ts", "test/**/*.ts"], "exclude": ["node_modules"], "tsc-alias": { "resolveFullPaths": true } } justkey007-tsc-alias-fb8387d/projects/project2/000077500000000000000000000000001517463514200213355ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project2/index.ts000066400000000000000000000000361517463514200230130ustar00rootroot00000000000000export const EXTRA = 'extra'; justkey007-tsc-alias-fb8387d/projects/project20/000077500000000000000000000000001517463514200214155ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project20/main.ts000066400000000000000000000000451517463514200227100ustar00rootroot00000000000000import { run } from '@core'; run(); justkey007-tsc-alias-fb8387d/projects/project20/package.json000066400000000000000000000003751517463514200237100ustar00rootroot00000000000000{ "name": "project20", "type": "commonjs", "scripts": { "build": "tsc -p packages/tsconfig.json && tsc-alias -p packages/tsconfig.json", "build:tsc-base": "tsc --outDir dist-base", "start": "npm run build && node ./dist/main.js" } } justkey007-tsc-alias-fb8387d/projects/project20/packages/000077500000000000000000000000001517463514200231735ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project20/packages/core/000077500000000000000000000000001517463514200241235ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project20/packages/core/index.ts000066400000000000000000000000351517463514200256000ustar00rootroot00000000000000export const run = () => {}; justkey007-tsc-alias-fb8387d/projects/project20/packages/path-replacer.js000066400000000000000000000001021517463514200262510ustar00rootroot00000000000000exports.default = ({ orig, file, config }) => { return orig; }; justkey007-tsc-alias-fb8387d/projects/project20/packages/tsconfig.json000066400000000000000000000003461517463514200257050ustar00rootroot00000000000000{ "extends": "../tsconfig.json", "tsc-alias": { "verbose": false, "resolveFullPaths": true, "replacers": { "pathReplacer": { "enabled": false, "file": "./path-replacer.js" } } } } justkey007-tsc-alias-fb8387d/projects/project20/tsconfig.json000066400000000000000000000005661517463514200241330ustar00rootroot00000000000000{ "compilerOptions": { "target": "es2020", "module": "commonjs", "outDir": "./dist", "rootDir": ".", "baseUrl": ".", "skipLibCheck": true, "paths": { "@core": ["packages/core/index.ts"] }, "moduleResolution": "node" }, "include": ["**/*.ts"], "exclude": ["node_modules"], "tsc-alias": { "resolveFullPaths": true } } justkey007-tsc-alias-fb8387d/projects/project21/000077500000000000000000000000001517463514200214165ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project21/package.json000066400000000000000000000002271517463514200237050ustar00rootroot00000000000000{ "name": "project21", "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/index.js" } } justkey007-tsc-alias-fb8387d/projects/project21/src/000077500000000000000000000000001517463514200222055ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project21/src/constants.ts000066400000000000000000000000231517463514200245640ustar00rootroot00000000000000export default {}; justkey007-tsc-alias-fb8387d/projects/project21/src/index.ts000066400000000000000000000001131517463514200236570ustar00rootroot00000000000000import constants from '$constants'; if (!constants) { process.exit(1); } justkey007-tsc-alias-fb8387d/projects/project21/tsconfig.json000066400000000000000000000006101517463514200241220ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "dist", "target": "es5", "module": "commonjs", "strictNullChecks": false, "noImplicitAny": false, "baseUrl": "./src", "paths": { "$constants": ["constants"] }, "moduleResolution": "node", "skipLibCheck": true }, "include": ["src/**/*.ts", "test/**/*.ts"], "exclude": ["node_modules"], "tsc-alias": {} } justkey007-tsc-alias-fb8387d/projects/project22/000077500000000000000000000000001517463514200214175ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project22/package.json000066400000000000000000000002271517463514200237060ustar00rootroot00000000000000{ "name": "project22", "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/index.js" } } justkey007-tsc-alias-fb8387d/projects/project22/src/000077500000000000000000000000001517463514200222065ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project22/src/custom_modules/000077500000000000000000000000001517463514200252505ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project22/src/custom_modules/find-json.ts000066400000000000000000000000401517463514200275010ustar00rootroot00000000000000export const FINDER = 'finder'; justkey007-tsc-alias-fb8387d/projects/project22/src/data.json000066400000000000000000000000351517463514200240100ustar00rootroot00000000000000{ "project": "tsc-alias" } justkey007-tsc-alias-fb8387d/projects/project22/src/index.ts000066400000000000000000000002011517463514200236560ustar00rootroot00000000000000import { FINDER } from 'custom/find-json'; import * as data from 'myproject/data.json'; console.log(FINDER); console.log(data); justkey007-tsc-alias-fb8387d/projects/project22/tsconfig.json000066400000000000000000000005511517463514200241270ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "dist", "target": "es5", "module": "commonjs", "strictNullChecks": false, "noImplicitAny": false, "baseUrl": "./src", "resolveJsonModule": true, "skipLibCheck": true, "paths": { "myproject/*": ["./*"], "custom/*": ["custom_modules/*"] } }, "exclude": ["node_modules"] } justkey007-tsc-alias-fb8387d/projects/project23/000077500000000000000000000000001517463514200214205ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project23/package.json000066400000000000000000000004151517463514200237060ustar00rootroot00000000000000{ "name": "project23", "private": true, "scripts": { "build": "pnpm install && tsc && tsc-alias", "start": "npm run build && node ./dist/index.js" }, "dependencies": { "i18n": "0.15.1" }, "devDependencies": { "@types/i18n": "0.13.6" } } justkey007-tsc-alias-fb8387d/projects/project23/src/000077500000000000000000000000001517463514200222075ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project23/src/i18n/000077500000000000000000000000001517463514200227665ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project23/src/i18n/index.ts000066400000000000000000000001341517463514200244430ustar00rootroot00000000000000import i18n from 'i18n'; console.log(i18n.configure); export default () => 'Translation'; justkey007-tsc-alias-fb8387d/projects/project23/src/index.ts000066400000000000000000000000611517463514200236630ustar00rootroot00000000000000import i18n from './i18n'; console.log(i18n()); justkey007-tsc-alias-fb8387d/projects/project23/tsconfig.json000066400000000000000000000002651517463514200241320ustar00rootroot00000000000000{ "compilerOptions": { "module": "commonjs", "esModuleInterop": true, "target": "es5", "outDir": "dist", "skipLibCheck": true }, "include": ["src/**/*"] } justkey007-tsc-alias-fb8387d/projects/project24/000077500000000000000000000000001517463514200214215ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project24/.gitignore000066400000000000000000000000241517463514200234050ustar00rootroot00000000000000.idea/ node_modules/justkey007-tsc-alias-fb8387d/projects/project24/README.md000066400000000000000000000012331517463514200226770ustar00rootroot00000000000000# tsc-alias-bug-demo Steps to reproduce https://github.com/justkey007/tsc-alias/issues/154: 1. Install dependencies ```sh pnpm install ``` 2. Start the app using `ts-node` ```sh npm start ``` Output: ``` [Function: i18nConfigure] Translation ``` 3. Compile TS files and start the app ```sh npm run build && node dist/index.js ``` Output: ``` console.log(i18n_1.default.configure); ^ TypeError: Cannot read property 'configure' of undefined ``` It happens because `dist/i18n/index.js` contains ```js const i18n_1 = __importDefault(require('../i18n')); ``` instead of ```js const i18n_1 = __importDefault(require('i18n')); ``` justkey007-tsc-alias-fb8387d/projects/project24/package.json000066400000000000000000000012151517463514200237060ustar00rootroot00000000000000{ "name": "tsc-alias-bug-demo", "version": "1.0.0", "description": "Demonstration of a bug with incorrect module path", "private": true, "main": "dist/index.js", "scripts": { "build": "pnpm install && tsc && tsc-alias", "start": "npm run build && node dist/index.js" }, "repository": { "type": "git", "url": "git+https://github.com/Jokero/tsc-alias-bug.git" }, "author": "Dmitry Kirilyuk ", "license": "MIT", "devDependencies": { "@types/i18n": "^0.13.6", "ts-node": "^10.9.1", "tsc-alias": "^1.8.3", "typescript": "^4.9.5" }, "dependencies": { "i18n": "^0.15.1" } } justkey007-tsc-alias-fb8387d/projects/project24/src/000077500000000000000000000000001517463514200222105ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project24/src/i18n/000077500000000000000000000000001517463514200227675ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project24/src/i18n/index.ts000066400000000000000000000001341517463514200244440ustar00rootroot00000000000000import i18n from 'i18n'; console.log(i18n.configure); export default () => 'Translation'; justkey007-tsc-alias-fb8387d/projects/project24/src/index.ts000066400000000000000000000000611517463514200236640ustar00rootroot00000000000000import i18n from './i18n'; console.log(i18n()); justkey007-tsc-alias-fb8387d/projects/project24/tsconfig.json000066400000000000000000000003511517463514200241270ustar00rootroot00000000000000{ "compilerOptions": { "types": [], "module": "commonjs", "esModuleInterop": true, "moduleResolution": "node", "target": "esnext", "outDir": "dist", "skipLibCheck": true }, "include": ["src/**/*"] } justkey007-tsc-alias-fb8387d/projects/project3/000077500000000000000000000000001517463514200213365ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project3/package.json000066400000000000000000000002001517463514200236140ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/index.js" } } justkey007-tsc-alias-fb8387d/projects/project3/src/000077500000000000000000000000001517463514200221255ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project3/src/controllers/000077500000000000000000000000001517463514200244735ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project3/src/controllers/index.ts000066400000000000000000000000331517463514200261460ustar00rootroot00000000000000export class Controller {} justkey007-tsc-alias-fb8387d/projects/project3/src/index.ts000066400000000000000000000001041517463514200235770ustar00rootroot00000000000000import { Controller } from '@controllers/index'; new Controller(); justkey007-tsc-alias-fb8387d/projects/project3/tsconfig.json000066400000000000000000000002531517463514200240450ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "./dist", "baseUrl": "./", "skipLibCheck": true, "paths": { "@controllers/*": ["./src/controllers/*"] } } } justkey007-tsc-alias-fb8387d/projects/project4/000077500000000000000000000000001517463514200213375ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project4/package.json000066400000000000000000000002151517463514200236230ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/project4/src/index.js" } } justkey007-tsc-alias-fb8387d/projects/project4/src/000077500000000000000000000000001517463514200221265ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project4/src/custom_modules/000077500000000000000000000000001517463514200251705ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project4/src/custom_modules/calculator.ts000066400000000000000000000000761517463514200276740ustar00rootroot00000000000000export function add(a: number, b: number) { return a + b; } justkey007-tsc-alias-fb8387d/projects/project4/src/custom_modules/index.ts000066400000000000000000000000561517463514200266500ustar00rootroot00000000000000export const CUSTOM_MODULE = 'custom module'; justkey007-tsc-alias-fb8387d/projects/project4/src/index.ts000066400000000000000000000004051517463514200236040ustar00rootroot00000000000000import { DATA } from '@commons'; import { CUSTOM_MODULE } from 'custom/index'; import { EXTRA } from 'extra'; import { add } from 'myproject/custom_modules/calculator'; console.log(DATA); console.log(CUSTOM_MODULE); console.log(EXTRA); console.log(add(1, 2)); justkey007-tsc-alias-fb8387d/projects/project4/src/lib/000077500000000000000000000000001517463514200226745ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project4/src/lib/commons/000077500000000000000000000000001517463514200243475ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project4/src/lib/commons/index.ts000066400000000000000000000000361517463514200260250ustar00rootroot00000000000000export const DATA = 'mydata'; justkey007-tsc-alias-fb8387d/projects/project4/tsconfig.json000066400000000000000000000006431517463514200240510ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "dist", "target": "es5", "module": "commonjs", "strictNullChecks": false, "noImplicitAny": false, "skipLibCheck": true, "baseUrl": "./", "paths": { "myproject/*": ["src/*"], "@commons": ["src/lib/commons/index.ts"], "custom/*": ["src/custom_modules/*"], "extra": ["../project2/index"] } }, "exclude": ["node_modules"] } justkey007-tsc-alias-fb8387d/projects/project5/000077500000000000000000000000001517463514200213405ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project5/package.json000066400000000000000000000002151517463514200236240ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/project5/src/index.js" } } justkey007-tsc-alias-fb8387d/projects/project5/src/000077500000000000000000000000001517463514200221275ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project5/src/custom_modules/000077500000000000000000000000001517463514200251715ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project5/src/custom_modules/calculator.ts000066400000000000000000000000761517463514200276750ustar00rootroot00000000000000export function add(a: number, b: number) { return a + b; } justkey007-tsc-alias-fb8387d/projects/project5/src/custom_modules/index.ts000066400000000000000000000000561517463514200266510ustar00rootroot00000000000000export const CUSTOM_MODULE = 'custom module'; justkey007-tsc-alias-fb8387d/projects/project5/src/index.ts000066400000000000000000000005141517463514200236060ustar00rootroot00000000000000import { DATA } from '@commons'; import { CUSTOM_MODULE } from 'custom/index'; import { EXTRA } from 'extra'; import { add } from 'myproject/custom_modules/calculator'; import { SCOPE } from '@me/myproject/scope/index'; console.log(DATA); console.log(CUSTOM_MODULE); console.log(EXTRA); console.log(add(1, 2)); console.log(SCOPE); justkey007-tsc-alias-fb8387d/projects/project5/src/lib/000077500000000000000000000000001517463514200226755ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project5/src/lib/commons/000077500000000000000000000000001517463514200243505ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project5/src/lib/commons/index.ts000066400000000000000000000000361517463514200260260ustar00rootroot00000000000000export const DATA = 'mydata'; justkey007-tsc-alias-fb8387d/projects/project5/src/scope/000077500000000000000000000000001517463514200232405ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project5/src/scope/index.ts000066400000000000000000000000331517463514200247130ustar00rootroot00000000000000export const SCOPE = 'me'; justkey007-tsc-alias-fb8387d/projects/project5/tsconfig.json000066400000000000000000000007011517463514200240450ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "dist", "target": "es5", "module": "commonjs", "strictNullChecks": false, "noImplicitAny": false, "skipLibCheck": true, "baseUrl": "./src", "paths": { "myproject/*": ["./*"], "@me/myproject/*": ["./*"], "@commons": ["lib/commons/index.ts"], "custom/*": ["custom_modules/*"], "extra": ["../../project2/index"] } }, "exclude": ["node_modules"] } justkey007-tsc-alias-fb8387d/projects/project6/000077500000000000000000000000001517463514200213415ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project6/package.json000066400000000000000000000003231517463514200236250ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "npm i && tsc && tsc-alias", "start": "npm run build && node ./dist/index.js" }, "dependencies": { "@esfx/collections-hashmap": "^1.0.0-pre.17" } } justkey007-tsc-alias-fb8387d/projects/project6/src/000077500000000000000000000000001517463514200221305ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project6/src/index.ts000066400000000000000000000001211517463514200236010ustar00rootroot00000000000000import { HashMap } from '@esfx/collections-hashmap'; const map = new HashMap(); justkey007-tsc-alias-fb8387d/projects/project6/tsconfig.json000066400000000000000000000002211517463514200240430ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "dist", "baseUrl": "./src", "skipLibCheck": true, "paths": { "@/*": ["./*"] } } } justkey007-tsc-alias-fb8387d/projects/project7/000077500000000000000000000000001517463514200213425ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project7/package.json000066400000000000000000000003231517463514200236260ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "npm i && tsc && tsc-alias", "start": "npm run build && node ./dist/project7/src/index.js" }, "devDependencies": { "@tsconfig/node14": "^1.0.0" } } justkey007-tsc-alias-fb8387d/projects/project7/src/000077500000000000000000000000001517463514200221315ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project7/src/custom_modules/000077500000000000000000000000001517463514200251735ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project7/src/custom_modules/calculator.ts000066400000000000000000000000761517463514200276770ustar00rootroot00000000000000export function add(a: number, b: number) { return a + b; } justkey007-tsc-alias-fb8387d/projects/project7/src/custom_modules/index.ts000066400000000000000000000000561517463514200266530ustar00rootroot00000000000000export const CUSTOM_MODULE = 'custom module'; justkey007-tsc-alias-fb8387d/projects/project7/src/index.ts000066400000000000000000000003211517463514200236040ustar00rootroot00000000000000import { CUSTOM_MODULE } from 'custom/index'; import { EXTRA } from 'extra'; import { add } from 'myproject/custom_modules/calculator'; console.log(CUSTOM_MODULE); console.log(EXTRA); console.log(add(1, 2)); justkey007-tsc-alias-fb8387d/projects/project7/tsconfig.json000066400000000000000000000007131517463514200240520ustar00rootroot00000000000000{ "extends": "@tsconfig/node14" /* from node_modules */, "compilerOptions": { "outDir": "dist", "target": "es5", "module": "commonjs", "strictNullChecks": false, "noImplicitAny": false, "skipLibCheck": true, "baseUrl": "./src", "paths": { "myproject/*": ["./*"], "custom/*": ["custom_modules/*"], "extra": ["../../project2/index"] }, "resolveJsonModule": true }, "exclude": ["node_modules"] } justkey007-tsc-alias-fb8387d/projects/project8/000077500000000000000000000000001517463514200213435ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project8/package.json000066400000000000000000000001771517463514200236360ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "tsc && tsc-alias", "start": "npm run build && node ./dist/main.js" } } justkey007-tsc-alias-fb8387d/projects/project8/src/000077500000000000000000000000001517463514200221325ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project8/src/api/000077500000000000000000000000001517463514200227035ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project8/src/api/invoice/000077500000000000000000000000001517463514200243375ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project8/src/api/invoice/invoice.service.ts000066400000000000000000000001551517463514200300030ustar00rootroot00000000000000import { getdateString } from '@/utils'; export function generateInvoice() { getdateString(new Date()); } justkey007-tsc-alias-fb8387d/projects/project8/src/main.ts000066400000000000000000000001251517463514200234240ustar00rootroot00000000000000import { generateInvoice } from './api/invoice/invoice.service'; generateInvoice(); justkey007-tsc-alias-fb8387d/projects/project8/src/utils/000077500000000000000000000000001517463514200232725ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project8/src/utils/index.ts000066400000000000000000000001101517463514200247410ustar00rootroot00000000000000export function getdateString(date: Date) { return date.toString(); } justkey007-tsc-alias-fb8387d/projects/project8/tsconfig.json000066400000000000000000000006371517463514200240600ustar00rootroot00000000000000{ "compilerOptions": { "resolveJsonModule": true, "module": "commonjs", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "es2017", "outDir": "./dist", "skipLibCheck": true, "baseUrl": "./", "paths": { "@/*": ["src/*"] } }, "include": ["src"] } justkey007-tsc-alias-fb8387d/projects/project9/000077500000000000000000000000001517463514200213445ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project9/package.json000066400000000000000000000003261517463514200236330ustar00rootroot00000000000000{ "private": true, "scripts": { "build": "npm i && tsc && tsc-alias --resolve-full-paths", "start": "npm run build && node ./dist/index.js" }, "dependencies": { "buffercursor.ts": "1.0.3" } } justkey007-tsc-alias-fb8387d/projects/project9/src/000077500000000000000000000000001517463514200221335ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/projects/project9/src/index.ts000066400000000000000000000004651517463514200236170ustar00rootroot00000000000000import { BufferCursor } from 'buffercursor.ts'; import { BufferCursor as BufferCursor1 } from '@cursor'; import { BufferCursor as BufferCursor2 } from '@cursor2'; const map = new BufferCursor(Buffer.alloc(0)); const map1 = new BufferCursor1(Buffer.alloc(0)); const map2 = new BufferCursor2(Buffer.alloc(0)); justkey007-tsc-alias-fb8387d/projects/project9/tsconfig.json000066400000000000000000000004151517463514200240530ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "dist", "baseUrl": "./", "skipLibCheck": true, "paths": { "@/*": ["./*"], "@cursor": ["node_modules/buffercursor.ts/dist/index"], "@cursor2": ["./node_modules/buffercursor.ts/dist/index"] } } } justkey007-tsc-alias-fb8387d/src/000077500000000000000000000000001517463514200165435ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/src/bin/000077500000000000000000000000001517463514200173135ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/src/bin/index.ts000077500000000000000000000033551517463514200210030ustar00rootroot00000000000000#! /usr/bin/env node import { Option, program } from 'commander'; import { replaceTscAliasPaths } from '..'; const { version } = require('../../package.json'); program .name('tsc-alias') .version(version) .option('-p, --project ', 'path to tsconfig.json') .option('-w, --watch', 'Observe file changes') .option( '--outDir, --dir ', 'Run in a folder leaving the "outDir" of the tsconfig.json (relative path to tsconfig)' ) .option( '-f, --resolve-full-paths', 'Attempt to fully resolve import paths if the corresponding .js file can be found' ) .addOption( new Option( '-fe, --resolve-full-extension [ext]', 'Specify the extension of incomplete import paths, works with resolveFullPaths' ) .choices(['.js', '.mjs', '.cjs']) .default('.js') ) .option( '-s, --silent', 'Reduced terminal output (default: true) [deprecated]' ) .option('-v, --verbose', 'Additional information is send to the terminal') .option('--debug', 'Debug information is send to the terminal') .option('-r, --replacer ', 'path to optional extra replacer') .option('--inputglob ', 'Overwrite glob used for file scanning') .option( '--outputcheck ', 'Overwrite file extensions used for path resolution' ) .parseAsync(process.argv); const options = program.opts(); replaceTscAliasPaths({ resolveFullExtension: options.resolveFullExtension, configFile: options.project, watch: !!options.watch, outDir: options.dir, verbose: !!options.verbose, debug: !!options.debug, resolveFullPaths: !!options.resolveFullPaths, replacers: options.replacer, fileExtensions: { inputGlob: options.inputglob, outputCheck: options.outputcheck } }); justkey007-tsc-alias-fb8387d/src/helpers/000077500000000000000000000000001517463514200202055ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/src/helpers/config.ts000066400000000000000000000174241517463514200220320ustar00rootroot00000000000000/** * @file * * This file has all helperfunctions related to configuration. */ /** */ import { existsSync, lstatSync } from 'fs'; import { parseTsconfig, TsConfigJsonResolved } from 'get-tsconfig'; import { Dir, Json } from 'mylas'; import { basename, dirname, isAbsolute, join, resolve } from 'path'; import { IConfig, IOutput, IProjectConfig, ITSCAliasConfig, ITSConfig, ReplaceTscAliasPathsOptions } from '../interfaces'; import { Output, PathCache, TrieNode } from '../utils'; import { importReplacers } from './replacers'; import normalizePath = require('normalize-path'); /** * prepareConfig prepares a IConfig object for tsc-alias to be used. * @param {ReplaceTscAliasPathsOptions} options options that are used to prepare a config object. * @returns {Promise} a promise of a IConfig object. */ export async function prepareConfig( options: ReplaceTscAliasPathsOptions ): Promise { const output = options.output ?? new Output(options.verbose, options.debug); const configFile = !options.configFile ? resolve(process.cwd(), 'tsconfig.json') : !isAbsolute(options.configFile) ? resolve(process.cwd(), options.configFile) : options.configFile; output.assert(existsSync(configFile), `Invalid file path => ${configFile}`); const { baseUrl = '', outDir, declarationDir, paths, replacers, resolveFullPaths, verbose, fileExtensions } = loadConfig(configFile, output); if (options?.fileExtensions?.inputGlob) { fileExtensions.inputGlob = options.fileExtensions.inputGlob; } if (options?.fileExtensions?.outputCheck) { fileExtensions.outputCheck = options.fileExtensions.outputCheck; } output.verbose = verbose; if (options.resolveFullPaths || resolveFullPaths) { output.debug('resolveFullPaths is active'); options.resolveFullPaths = true; } const _outDir = options.outDir ?? outDir; if (declarationDir && _outDir !== declarationDir) { options.declarationDir ??= declarationDir; } output.assert(_outDir, 'compilerOptions.outDir is not set'); const configDir: string = normalizePath(dirname(configFile)); // config with project details and paths const projectConfig: IProjectConfig = { configFile: configFile, baseUrl: baseUrl, outDir: _outDir, configDir: configDir, outPath: _outDir, confDirParentFolderName: basename(configDir), hasExtraModule: false, configDirInOutPath: null, relConfDirPathInOutPath: null, pathCache: new PathCache(!options.watch, fileExtensions?.outputCheck), inputGlob: fileExtensions?.inputGlob || '{mjs,cjs,js,jsx,d.{mts,cts,ts,tsx}}' }; output.debug('loaded project config:', projectConfig); const config: IConfig = { ...projectConfig, output: output, aliasTrie: options.aliasTrie ?? TrieNode.buildAliasTrie(projectConfig, paths), replacers: [] }; output.debug('loaded full config:', config); // Import replacers. await importReplacers(config, replacers, options.replacers); return config; } function replaceConfigDirPlaceholder(path: string, configDir: string) { return path.replace(/\$\{configDir\}/g, configDir); } /** * loadConfig loads a config file from fs. * @param {string} file file path to the config file that will be loaded. * @param {IOutput} output the output instance to log error to. * @returns {ITSConfig} a ITSConfig object */ export const loadConfig = ( file: string, output: IOutput, baseConfigDir: string | null = null ): ITSConfig => { if (!existsSync(file)) { output.error(`File ${file} not found`, true); } output.debug('Loading config file:', file); const tsConfig = parseTsconfig(file); const baseTsConfig = Json.loadS(file, true); const { compilerOptions: { baseUrl, outDir, declarationDir, paths } = { baseUrl: undefined, outDir: undefined, declarationDir: undefined, paths: undefined }, 'tsc-alias': tscAliasConfig } = tsConfig as TsConfigJsonResolved & { 'tsc-alias': ITSCAliasConfig }; const configDir = dirname(file); output.debug('configDir', configDir); const config: ITSConfig = {}; if (baseUrl) { if (baseConfigDir !== null) { config.baseUrl = replaceConfigDirPlaceholder(baseUrl, baseConfigDir); } else { config.baseUrl = baseUrl; } } if (outDir || baseTsConfig?.compilerOptions?.outDir) { let replacedOutDir = outDir || baseTsConfig?.compilerOptions?.outDir; if (baseConfigDir !== null) { replacedOutDir = replaceConfigDirPlaceholder(outDir, baseConfigDir); } config.outDir = isAbsolute(replacedOutDir) ? replacedOutDir : join(configDir, replacedOutDir); } if (paths) { if (baseConfigDir !== null) { for (const key in paths) { paths[key] = paths[key].map((path) => replaceConfigDirPlaceholder(path, baseConfigDir) ); } } config.paths = paths; } if (declarationDir) { let replacedDeclarationDir = declarationDir; if (baseConfigDir !== null) { replacedDeclarationDir = replaceConfigDirPlaceholder( declarationDir, baseConfigDir ); } config.declarationDir = isAbsolute(replacedDeclarationDir) ? replacedDeclarationDir : join(configDir, replacedDeclarationDir); } if (tscAliasConfig?.replacers) { config.replacers = tscAliasConfig.replacers; } if (tscAliasConfig?.resolveFullPaths) { config.resolveFullPaths = tscAliasConfig.resolveFullPaths; } if (tscAliasConfig?.verbose) { config.verbose = tscAliasConfig.verbose; } config.fileExtensions = tscAliasConfig?.fileExtensions ?? {}; const replacerFile = config.replacers?.pathReplacer?.file; if (replacerFile) { config.replacers.pathReplacer.file = join(configDir, replacerFile); } output.debug('loaded config (from file):', config); return config; }; /** * normalizeTsConfigExtendsOption normalizes tsconfig extends option to a directly loadable path array * @param { string|string[] } ext * @param { string } file * @returns {string[]} */ export function normalizeTsConfigExtendsOption( ext: string | string[], file: string ): string[] { if (!ext) return []; const configDir = dirname(file); const normExts = (Array.isArray(ext) ? ext : [ext]).map((e) => e.startsWith('.') ? join(configDir, e.endsWith('.json') ? e : `${e}.json`) : resolveTsConfigExtendsPath(e, file) ); return normExts; } /** * resolveTsConfigExtendsPath resolves the path to the config file that is being inherited. * @param {string} ext the value of the extends field in the loaded config file. * @param {string} file file path to the config file that was loaded. * @returns {string} a file path to the config file that is being inherited. */ export function resolveTsConfigExtendsPath(ext: string, file: string): string { const tsConfigDir = dirname(file); const node_modules: string[] = Dir.nodeModules({ cwd: tsConfigDir }); // Getting all node_modules directories. const targetPaths = node_modules.map((v) => join(tsConfigDir, v, ext)); // Mapping node_modules to target paths. // Recursively checking ancestor directories for tsconfig. for (const targetPath of targetPaths) { if (ext.endsWith('.json')) { // Check if the file exists. if (existsSync(targetPath)) { return targetPath; } else { continue; // Continue checking when ext is a file but not yet found. } } let isDirectory = false; try { const stats = lstatSync(targetPath); isDirectory = stats.isDirectory() || stats.isSymbolicLink(); } catch (err) {} if (isDirectory) { return join(targetPath, 'tsconfig.json'); } else { // When target is not a file nor directory check with '.json' extension. if (existsSync(`${targetPath}.json`)) { return `${targetPath}.json`; } } } } justkey007-tsc-alias-fb8387d/src/helpers/index.ts000066400000000000000000000001171517463514200216630ustar00rootroot00000000000000export * from './config'; export * from './path'; export * from './replacers'; justkey007-tsc-alias-fb8387d/src/helpers/path.ts000066400000000000000000000076451517463514200215250ustar00rootroot00000000000000/** * @file * * This file has all helperfunctions related to path resolution. */ /** */ import normalizePath = require('normalize-path'); import { sync } from 'globby'; import { normalize, relative, resolve } from 'path'; import { AliasPath, IProjectConfig } from '../interfaces'; /** * getProjectDirPathInOutDir finds the configDirInOutPath. * @param {string} outDir outDir loaded from tsconfig. * @param {string} projectDir projectDir loaded from tsconfig. * @returns {string} the configDirInOutPath. */ function getProjectDirPathInOutDir( outDir: string, projectDir: string ): string | undefined { const posixOutput = outDir.replace(/\\/g, '/'); const dirs = sync( [ `${posixOutput}/**/${projectDir}`, `!${posixOutput}/**/${projectDir}/**/${projectDir}`, `!${posixOutput}/**/node_modules` ], { dot: true, onlyDirectories: true } ); // Find the longest path return dirs.reduce( (prev, curr) => prev.split('/').length > curr.split('/').length ? prev : curr, dirs[0] ); } /** * relativeOutPathToConfigDir * Finds relative path access of configDir in outPath */ export function relativeOutPathToConfigDir(config: IProjectConfig) { config.configDirInOutPath = getProjectDirPathInOutDir( config.outPath, config.confDirParentFolderName ); // Find relative path access of configDir in outPath if (config.configDirInOutPath) { config.hasExtraModule = true; const stepsbackPath = relative(config.configDirInOutPath, config.outPath); const splitStepBackPath = normalizePath(stepsbackPath).split('/'); const nbOfStepBack = splitStepBackPath.length; const splitConfDirInOutPath = config.configDirInOutPath.split('/'); let i = 1; const splitRelPath: string[] = []; while (i <= nbOfStepBack) { splitRelPath.unshift( splitConfDirInOutPath[splitConfDirInOutPath.length - i] ); i++; } config.relConfDirPathInOutPath = splitRelPath.join('/'); } } /** * findBasePathOfAlias finds a basepath for every AliasPath. * And checks if isExtra should be true or false. * @param {IProjectConfig} config config object with all config values. */ export function findBasePathOfAlias(config: IProjectConfig) { return (path: string) => { const aliasPath = { path } as AliasPath; // If it's an alias that references a file outside the baseUrl if (normalize(aliasPath.path).includes('..')) { const tempBasePath = normalizePath( normalize( `${config.outDir}/` + `${ config.hasExtraModule && config.relConfDirPathInOutPath ? config.relConfDirPathInOutPath : '' }/${config.baseUrl}` ) ); const absoluteBasePath = normalizePath( normalize(`${tempBasePath}/${aliasPath.path}`) ); if (config.pathCache.existsResolvedAlias(absoluteBasePath)) { aliasPath.isExtra = false; aliasPath.basePath = tempBasePath; } else { aliasPath.isExtra = true; aliasPath.basePath = absoluteBasePath; } return aliasPath; } /** * If the alias refers to a file in the node_modules folder * located at the same level of baseUrl. * Because typescript will not include the node_modules * folder in the output folder (outDir). */ if (aliasPath.path.match(/^(\.\/|)node_modules/g)) { aliasPath.basePath = resolve(config.baseUrl, 'node_modules'); aliasPath.isExtra = false; return aliasPath; } // If the project references another external project if (config.hasExtraModule) { aliasPath.isExtra = false; aliasPath.basePath = normalizePath( normalize( `${config.outDir}/` + `${config.relConfDirPathInOutPath}/${config.baseUrl}` ) ); return aliasPath; } aliasPath.basePath = config.outDir; aliasPath.isExtra = false; return aliasPath; }; } justkey007-tsc-alias-fb8387d/src/helpers/replacers.ts000066400000000000000000000127301517463514200225400ustar00rootroot00000000000000/** * @file * * This file has all helperfunctions related to replacing. */ /** */ import { existsSync, promises as fsp } from 'fs'; import { Dir } from 'mylas'; import { isAbsolute, join } from 'path'; import { IConfig, ReplacerOptions } from '../interfaces'; import { replaceSourceImportPaths, resolveFullImportPaths } from '../utils'; import normalizePath = require('normalize-path'); /** * importReplacers imports replacers for tsc-alias to use. * @param {IConfig} config the tsc-alias config object. * @param {ReplacerOptions} replacers the tsc-alias replacer options. * @param {string[]} cmdReplacers array of filepaths to replacers from command-line. */ export async function importReplacers( config: IConfig, replacers: ReplacerOptions, cmdReplacers?: string[] ) { config.output.debug('Started loading replacers'); const dir = process.cwd(); const node_modules: string[] = Dir.nodeModules({ cwd: dir }); config.output.debug('Found node_modules:', node_modules); // List of default replacers. const defaultReplacers: ReplacerOptions = { default: { enabled: true }, 'base-url': { enabled: !!config.baseUrl } }; // List of all replacers. let merged: ReplacerOptions = { ...defaultReplacers, ...replacers }; // Added replacers to list from command-line filepaths. config.output.debug( 'Added replacers to list from command-line filepaths:', cmdReplacers ); cmdReplacers?.forEach((v) => { merged[v] = { enabled: true, file: v }; }); config.output.debug('Reading replacers config'); const entries = Object.entries(merged); for await (const replacer of entries) { if (replacer[1].enabled) { // Importing default replacers. if (Object.keys(defaultReplacers).includes(replacer[0])) { config.output.debug('Loading default replacer:', replacer); const replacerModule = await import( `../replacers/${replacer[0]}.replacer` ); config.replacers.push(replacerModule.default); } const file = replacer[1]?.file; if (!file) { config.output.debug('Replacer has no file:', replacer); continue; // When file is undefined don't try to import. } // Try to import replacer. const tryImportReplacer = async (targetPath: string) => { const replacerModule = await import(targetPath); config.output.debug('Imported replacerModule:', replacerModule); const replacerFunction = replacerModule.default; if (typeof replacerFunction == 'function') { config.replacers.push(replacerFunction); config.output.info(`Added replacer "${file}"`); } else { config.output.error( `Failed to import replacer "${file}", not in replacer format.` ); } }; // Look for replacer in cwd. const isRelativePath = !isAbsolute(file); const path = isRelativePath ? normalizePath(join(dir, file)) : file; if (existsSync(path)) { try { await tryImportReplacer(path); config.output.debug('Imported replacer:', path); continue; } catch {} } // Look for replacer in node_modules. if (isRelativePath) { for (const targetPath of node_modules.map((v) => join(dir, v, file))) { try { await tryImportReplacer(targetPath); config.output.debug('Imported replacer:', targetPath); continue; } catch {} } } config.output.error(`Failed to import replacer "${file}"`); } } config.output.debug('Loaded replacers:', config.replacers); } /** * replaceAlias replaces aliases in file. * @param {IConfig} config configuration * @param {string} file file to replace aliases in. * @param {boolean} resolveFullPath if tsc-alias should resolve the full path * @returns {Promise} if something has been replaced. */ export async function replaceAlias( config: IConfig, file: string, resolveFullPath?: boolean, resolveFullExtension?: string ): Promise { config.output.debug('Starting to replace file:', file); const code = await fsp.readFile(file, 'utf8'); const tempCode = replaceAliasString( config, file, code, resolveFullPath, resolveFullExtension ); if (code !== tempCode) { config.output.debug('replaced file with changes:', file); await fsp.writeFile(file, tempCode, 'utf8'); return true; } config.output.debug('replaced file without changes:', file); return false; } /** * replaceAliasString replaces aliases in the given code content and returns the changed code. * @param {IConfig} config configuration * @param {string} file path of the file to replace aliases in. * @param {string} code contents of the file to replace aliases in. * @param {boolean} resolveFullPath if tsc-alias should resolve the full path * @returns {string} content of the file with any replacements possible applied. */ export function replaceAliasString( config: IConfig, file: string, code: string, resolveFullPath?: boolean, resolveFullExtension?: string ): string { config.replacers.forEach((replacer) => { code = replaceSourceImportPaths(code, file, (orig) => replacer({ orig, file, config }) ); }); // Fully resolve all import paths (not just aliased ones) // *after* the aliases are resolved if (resolveFullPath) { code = resolveFullImportPaths(code, file, resolveFullExtension); } return code; } justkey007-tsc-alias-fb8387d/src/index.ts000066400000000000000000000065701517463514200202320ustar00rootroot00000000000000import { watch } from 'chokidar'; import { sync } from 'globby'; import { pLimit } from 'plimit-lit'; import { prepareConfig, replaceAlias, replaceAliasString } from './helpers'; import { AliasReplacer, AliasReplacerArguments, IConfig, IOutput, IProjectConfig, ReplaceTscAliasPathsOptions } from './interfaces'; // export interfaces for api use. export { ReplaceTscAliasPathsOptions, AliasReplacer, AliasReplacerArguments, IConfig, IProjectConfig, IOutput }; const defaultConfig = { watch: false, verbose: false, debug: false, declarationDir: undefined, output: undefined, aliasTrie: undefined }; const OpenFilesLimit = pLimit(500); /** * replaceTscAliasPaths replaces the aliases in the project. * @param {ReplaceTscAliasPathsOptions} options tsc-alias options. */ export async function replaceTscAliasPaths( options: ReplaceTscAliasPathsOptions = { ...defaultConfig } ) { const config = await prepareConfig(options); const output = config.output; // Finding files and changing alias paths const posixOutput = config.outPath.replace(/\\/g, '/').replace(/\/+$/g, ''); const globPattern = [ `${posixOutput}/**/*.${config.inputGlob}`, `!${posixOutput}/**/node_modules` ]; output.debug('Search pattern:', globPattern); const files = sync(globPattern, { dot: true, onlyFiles: true }); output.debug('Found files:', files); // Make array with promises for file changes // Wait for all promises to resolve const replaceList = await Promise.all( files.map((file) => OpenFilesLimit(() => replaceAlias( config, file, options?.resolveFullPaths, options?.resolveFullExtension ) ) ) ); // Count all changed files const replaceCount = replaceList.filter(Boolean).length; output.info(`${replaceCount} files were affected!`); if (options.watch) { output.verbose = true; output.info('[Watching for file changes...]'); const filesWatcher = watch(globPattern); const tsconfigWatcher = watch(config.configFile); const onFileChange = async (file: string) => await replaceAlias(config, file, options?.resolveFullPaths); filesWatcher.on('add', onFileChange); filesWatcher.on('change', onFileChange); tsconfigWatcher.on('change', () => { output.clear(); filesWatcher.close(); tsconfigWatcher.close(); replaceTscAliasPaths(options); }); } if (options.declarationDir) { replaceTscAliasPaths({ ...options, outDir: options.declarationDir, declarationDir: undefined, output: config.output, aliasTrie: undefined }); } } export type SingleFileReplacer = (input: { fileContents: string; filePath: string; }) => string; /** * prepareSingleFileReplaceTscAliasPaths prepares a SingleFileReplacer. * @param {ReplaceTscAliasPathsOptions} options tsc-alias options. * @returns {Promise} a SingleFileReplacer to use for replacing aliases in a single file. */ export async function prepareSingleFileReplaceTscAliasPaths( options: ReplaceTscAliasPathsOptions = { ...defaultConfig } ): Promise { const config = await prepareConfig(options); return ({ fileContents, filePath }) => { return replaceAliasString( config, filePath, fileContents, options?.resolveFullPaths, options?.resolveFullExtension ); }; } justkey007-tsc-alias-fb8387d/src/interfaces.ts000066400000000000000000000056041517463514200212430ustar00rootroot00000000000000import { PathCache, TrieNode } from './utils'; export interface ITSCAliasConfig { replacers?: ReplacerOptions; resolveFullPaths?: boolean; verbose?: boolean; fileExtensions?: Partial; } export type PathLike = { [key: string]: string[]; }; export type StringReplacer = (importStatement: string) => string; export interface FileExtensions { inputGlob: string; outputCheck: string[]; } export interface ITSConfig { baseUrl?: string; outDir?: string; declarationDir?: string; paths?: PathLike; replacers?: ReplacerOptions; resolveFullPaths?: boolean; verbose?: boolean; fileExtensions?: Partial; } export interface IProjectConfig { configFile: string; baseUrl: string; outDir: string; configDir: string; outPath: string; confDirParentFolderName: string; hasExtraModule: boolean; configDirInOutPath: string; relConfDirPathInOutPath: string; pathCache: PathCache; inputGlob: string; } export interface IConfig extends IProjectConfig { output: IOutput; aliasTrie: TrieNode; replacers: AliasReplacer[]; } export interface ReplaceTscAliasPathsOptions { configFile?: string; outDir?: string; declarationDir?: string; watch?: boolean; verbose?: boolean; debug?: boolean; resolveFullPaths?: boolean; resolveFullExtension?: '.js' | '.mjs' | '.cjs'; replacers?: string[]; output?: IOutput; aliasTrie?: TrieNode; fileExtensions?: Partial; } export interface Alias { shouldPrefixMatchWildly: boolean; prefix: string; paths: AliasPath[]; } export interface AliasPath { basePath: string; path: string; isExtra: boolean; } export interface AliasReplacerArguments { orig: string; file: string; config: IConfig; } export type AliasReplacer = (args: AliasReplacerArguments) => string; export interface ReplacerOptions { [key: string]: { enabled: boolean; file?: string; }; } export interface IOutput { /** * verbose value sets if the output should act verbose. */ verbose: boolean; /** * debug logs a message on the debug level. * @param {string} message message to log. */ debug: (message: string, obj?: unknown) => void; /** * info logs a message on the info level. * @param {string} message message to log. */ info(message: string): void; /** * error logs a message on the error level and may exit the process. * @param {string} message message to log. * @param {boolean} exitProcess if process should exit after this error. */ error(message: string, exitProcess?: boolean): void; /** * clear clears the displayed logs. */ clear(): void; /** * assert claim an assertion when it fails an error is logged * and the process exited. * @param {unknown} claim assertion that is being claimed. * @param {string} message message to log when claim fails. */ assert(claim: unknown, message: string): void; } justkey007-tsc-alias-fb8387d/src/replacers/000077500000000000000000000000001517463514200205235ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/src/replacers/base-url.replacer.ts000066400000000000000000000035521517463514200244060ustar00rootroot00000000000000/** * @file * * The baseUrl replacer replaces the import statement * with the baseUrl + import statement location. */ /** */ import normalizePath = require('normalize-path'); import { dirname, relative } from 'path'; import { AliasReplacerArguments } from '../interfaces'; import { newStringRegex } from '../utils'; export default function replaceBaseUrlImport({ orig, file, config }: AliasReplacerArguments): string { const requiredModule = orig.match(newStringRegex())?.groups?.path; config.output.debug('base-url replacer - requiredModule: ', requiredModule); config.output.assert( typeof requiredModule == 'string', `Unexpected import statement pattern ${orig}` ); // Check if import is already resolved. if (requiredModule.startsWith('.')) { config.output.debug('base-url replacer - already resolved'); return orig; } // If there are files matching the target, resolve the path. if ( config.pathCache.existsResolvedAlias(`${config.outPath}/${requiredModule}`) ) { let relativePath: string = normalizePath( relative( dirname(file), config.pathCache .getAbsoluteAliasPath(config.outPath, '') .replace('---', '') ) ); if (!relativePath.startsWith('.')) { relativePath = './' + relativePath; } config.output.debug('base-url replacer - relativePath: ', relativePath); const index = orig.indexOf(requiredModule); const newImportScript = orig.substring(0, index) + relativePath + '/' + orig.substring(index); config.output.debug( 'base-url replacer - newImportScript: ', newImportScript ); const modulePath = newImportScript.match(newStringRegex()).groups.path; config.output.debug('base-url replacer - modulePath: ', modulePath); return newImportScript.replace(modulePath, normalizePath(modulePath)); } return orig; } justkey007-tsc-alias-fb8387d/src/replacers/default.replacer.ts000066400000000000000000000074041517463514200243200ustar00rootroot00000000000000/** * @file * * The default replacer replaces the alias in an import statement * with the proper aliased location. */ /** */ import normalizePath = require('normalize-path'); import { dirname, relative } from 'path'; import { Alias, AliasReplacerArguments } from '../interfaces'; import { newStringRegex } from '../utils'; function escapeSpecialChars(str: string) { return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); } function getAliasPrefixRegExp(alias: Alias) { return new RegExp( `(?:^${escapeSpecialChars(alias.prefix)})|(?:\\.(js|ts|json)$)`, 'g' ); } function removeAliasPrefix(requiredModule: string, alias: Alias) { return requiredModule.replace(getAliasPrefixRegExp(alias), ''); } export default function replaceImportStatement({ orig, file, config }: AliasReplacerArguments) { const requiredModule = orig.match(newStringRegex())?.groups?.path; config.output.debug('default replacer - requiredModule: ', requiredModule); config.output.assert( typeof requiredModule == 'string', `Unexpected import statement pattern ${orig}` ); // Lookup which alias should be used for this given requiredModule. const alias = config.aliasTrie.search(requiredModule); config.output.debug('default replacer - alias: ', alias); // If an alias isn't found the original. if (!alias) return orig; const isAlias = alias.shouldPrefixMatchWildly ? // if the alias is like alias* // beware that typescript expects requiredModule be more than just alias requiredModule.startsWith(alias.prefix) && requiredModule !== alias.prefix : // need to be a bit more careful if the alias doesn't ended with a * // in this case the statement must be like either // require('alias') or require('alias/path'); // but not require('aliaspath'); requiredModule === alias.prefix || requiredModule.startsWith(alias.prefix + '/'); if (isAlias) { for (let i = 0; i < alias.paths.length; i++) { let absoluteAliasPath = config.pathCache.getAbsoluteAliasPath( alias.paths[i].basePath, alias.paths[i].path ); config.output.debug( 'default replacer - absoluteAliasPath: ', absoluteAliasPath ); if (absoluteAliasPath.startsWith('---')) { if (i === alias.paths.length - 1) { absoluteAliasPath = absoluteAliasPath.replace('---', ''); } else { continue; } } // Check if path is valid. if ( !config.pathCache.existsResolvedAlias( alias.prefix.length == requiredModule.length ? normalizePath(absoluteAliasPath) : normalizePath( `${absoluteAliasPath}/${removeAliasPrefix( requiredModule, alias )}` ) ) ) { config.output.debug('default replacer - Invalid path'); continue; } let relativeAliasPath: string = normalizePath( relative(dirname(file), absoluteAliasPath) ); if (!relativeAliasPath.startsWith('.')) { relativeAliasPath = './' + relativeAliasPath; } config.output.debug( 'default replacer - relativeAliasPath: ', relativeAliasPath ); const index = orig.indexOf(alias.prefix); const newImportScript = orig.substring(0, index) + relativeAliasPath + '/' + orig.substring(index + alias.prefix.length); config.output.debug( 'default replacer - newImportScript: ', newImportScript ); const modulePath = newImportScript.match(newStringRegex()).groups.path; config.output.debug('default replacer - modulePath: ', modulePath); return newImportScript.replace(modulePath, normalizePath(modulePath)); } } return orig; } justkey007-tsc-alias-fb8387d/src/utils/000077500000000000000000000000001517463514200177035ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/src/utils/import-path-resolver.ts000066400000000000000000000120421517463514200243550ustar00rootroot00000000000000/** * @file * * Import statements come in a lot of flavors, so having a single * regex that can capture all of those with minimal side effects * is trickly. In this file this regex is constructed from multiple parts. * * Using a named captured group (supported in ES2018/Node 10+) * to allow arbitrary complexity of the regex without worrying * about messing up indexing. * * Meant to match ESM/CommonJS import patterns. * * ⚠ Can match content of strings and comments! * * @example * // Examples of import statements that must be matched * // (Note that there could be newlines between tokens.) * const module = require('some/path') * import module from 'some/path' * import "some/path" * import theDefault, {namedExport} from 'some/path' * const asyncImport = await import('some/path') * export * from 'some/path'; */ /** */ import normalizePath = require('normalize-path'); import { existsSync } from 'fs'; import { dirname, join, resolve } from 'path'; import { StringReplacer } from '../interfaces'; const anyQuote = `["']`; const pathStringContent = `[^"'\r\n]+`; const importString = `(?:${anyQuote}${pathStringContent}${anyQuote})`; // Separate patterns for each style of import statement, // wrapped in non-capturing groups, // so that they can be strung together in one big pattern. const funcStyle = `(?:\\b(?:import|require)\\s*\\(\\s*(\\/\\*.*\\*\\/\\s*)?${importString}\\s*\\))`; const globalStyle = `(?:\\bimport\\s+${importString})`; const globalMinimizedStyle = `(?:\\bimport${importString})`; const fromStyle = `(?:\\bfrom\\s+${importString})`; const fromMinimizedStyle = `(?:\\bfrom${importString})`; const moduleStyle = `(?:\\bmodule\\s+${importString})`; const importRegexString = `(?:${[ funcStyle, globalStyle, globalMinimizedStyle, fromStyle, fromMinimizedStyle, moduleStyle ].join(`|`)})`; class ImportPathResolver { constructor(public source: string, readonly sourcePath: string) {} get sourceDir() { return dirname(this.sourcePath); } /** * Replace all source import paths, using a replacer * function (a la `String.prototype.replace(globalRegex,replacer)`) */ replaceSourceImportPaths(replacer: StringReplacer) { this.source = this.source.replace( ImportPathResolver.newImportStatementRegex('g'), replacer ); return this; } /** * For a JavaScript code string, find all local import paths * and resolve them to full filenames (including the .js extension). * If no matching file is found for a path, leave it alone. */ resolveFullImportPaths(ext = '.js') { this.replaceSourceImportPaths((importStatement) => { // Find substring that is just quotes const importPathMatch = importStatement.match(newStringRegex()); if (!importPathMatch) { return importStatement; } const { path, pathWithQuotes } = importPathMatch.groups; const fullPath = normalizePath(this.resolveFullPath(path, ext)); return importStatement.replace( pathWithQuotes, pathWithQuotes.replace(path, fullPath) ); }); return this; } /** * Given an import path, resolve the full path (including extension). * If no corresponding file can be found, return the original path. */ private resolveFullPath(importPath: string, ext = '.js') { // If bare import or already a full path import if ( !importPath.startsWith('.') || importPath.match(new RegExp(`\${ext}$`)) ) { return importPath; } // Try adding the extension (if not obviously a directory) if (!importPath.match(/[/\\]$/)) { const asFilePath = `${importPath}${ext}`; if (existsSync(resolve(this.sourceDir, asFilePath))) { return asFilePath; } } // Assume the path is a folder; try adding index.js let asFilePath = join(importPath, 'index' + ext); if ( (importPath.startsWith('./') || importPath === '.') && !asFilePath.startsWith('./') ) { asFilePath = './' + asFilePath; } return existsSync(resolve(this.sourceDir, asFilePath)) ? asFilePath : importPath; } static newStringRegex() { return new RegExp( `(?${anyQuote}(?${pathStringContent})${anyQuote})` ); } static newImportStatementRegex(flags = '') { return new RegExp(importRegexString, flags); } static resolveFullImportPaths(code: string, path: string, ext = '.js') { return new ImportPathResolver(code, path).resolveFullImportPaths(ext) .source; } static replaceSourceImportPaths( code: string, path: string, replacer: StringReplacer ) { return new ImportPathResolver(code, path).replaceSourceImportPaths(replacer) .source; } } // Export aliases for the static functions // to make usage more friendly. export const resolveFullImportPaths = ImportPathResolver.resolveFullImportPaths; export const newImportStatementRegex = ImportPathResolver.newImportStatementRegex; export const replaceSourceImportPaths = ImportPathResolver.replaceSourceImportPaths; export const newStringRegex = ImportPathResolver.newStringRegex; justkey007-tsc-alias-fb8387d/src/utils/index.ts000066400000000000000000000001701517463514200213600ustar00rootroot00000000000000export * from './import-path-resolver'; export * from './output'; export * from './path-cache'; export * from './trie'; justkey007-tsc-alias-fb8387d/src/utils/output.ts000066400000000000000000000026221517463514200216150ustar00rootroot00000000000000/** * @file * * Keeping formatting consistent in large projects is difficult. * That's why this output class exists, it is used to standardize * logging and assertions. */ /** */ import { IOutput } from '../interfaces'; import { inspect } from 'util'; export class Output implements IOutput { // Default empty debug = (message: string, obj?: unknown) => {}; constructor(private verb = false, debugMode = false) { if (debugMode) { // When in debug mode. Add debug function. this.debug = (message: string, obj?: unknown) => { console.debug( `tsc-alias debug: ${message} ${ obj ? inspect(obj, { showHidden: true, depth: Infinity, colors: true }) : '' }` ); }; } } public set verbose(value: boolean) { if (value) { this.verb = value; } } info(message: string) { if (!this.verb) return; console.log(`tsc-alias info: ${message}`); } error(message: string, exitProcess = false) { console.error( //[BgRed]tsc-alias error:[Reset] [FgRed_]${message}[Reset] `\x1b[41mtsc-alias error:\x1b[0m \x1b[31m${message}\x1b[0m` ); if (exitProcess) process.exit(1); } clear() { console.clear(); } assert(claim: unknown, message: string) { claim || this.error(message, true); } } justkey007-tsc-alias-fb8387d/src/utils/path-cache.ts000066400000000000000000000062621517463514200222560ustar00rootroot00000000000000/** * @file * * The PathCache class is meant to cache path lookups like * exists and getAbsoluteAliasPath. */ /** */ import { existsSync } from 'fs'; import { join } from 'path'; export class PathCache { useCache: boolean; existsCache: Map; absoluteCache: Map; fileExtensions: string[]; constructor(useCache: boolean, fileExtensions?: string[]) { this.fileExtensions = fileExtensions || [ 'js', 'json', 'jsx', 'cjs', 'mjs', 'd.ts', 'd.tsx', 'd.cts', 'd.mts' ]; this.useCache = useCache; if (useCache) { this.existsCache = new Map(); this.absoluteCache = new Map(); } } /** * existsResolvedAlias checks if file exists, uses cache when possible. * @param {string} path the filepath to check. * @returns {boolean} result of check. */ public existsResolvedAlias(path: string): boolean { if (!this.useCache) return this.exists(path); if (this.existsCache.has(path)) { return this.existsCache.get(path); } else { const result = this.exists(path); this.existsCache.set(path, result); return result; } } /** * getAbsoluteAliasPath finds the absolute alias path, uses cache when possible. * @param {string} basePath the basepath of the alias. * @param {string} aliasPath the aliaspath of the alias. * @returns {string} the absolute alias path. */ public getAbsoluteAliasPath(basePath: string, aliasPath: string): string { const request = { basePath, aliasPath }; if (!this.useCache) return this.getAAP(request); if (this.absoluteCache.has(this.getCacheKey(request))) { return this.absoluteCache.get(this.getCacheKey(request)); } else { const result = this.getAAP(request); this.absoluteCache.set(this.getCacheKey(request), result); return result; } } private getCacheKey({ basePath, aliasPath }: { basePath: string; aliasPath: string; }): string { return `${basePath}___${aliasPath}`; } /** * getAAP finds the absolute alias path. * @param {string} basePath the basepath of the alias. * @param {string} aliasPath the aliaspath of the alias. * @returns {string} the absolute alias path. */ private getAAP({ basePath, aliasPath }: { basePath: string; aliasPath: string; }): string { const aliasPathParts = aliasPath .split('/') .filter((part) => !part.match(/^\.$|^\s*$/)); let aliasPathPart = aliasPathParts.shift() || ''; let pathExists = false; while ( !(pathExists = this.exists(join(basePath, aliasPathPart))) && aliasPathParts.length ) { aliasPathPart = aliasPathParts.shift(); } if (pathExists) { return join(basePath, aliasPathPart, aliasPathParts.join('/')); } return '---' + join(basePath, aliasPathParts.join('/')); } /** * exists checks if file exists. * @param path the filepath to check. * @returns {boolean} result of check. */ private exists(path: string): boolean { return ( existsSync(path) || this.fileExtensions.some((extension) => existsSync(`${path}.${extension}`) ) ); } } justkey007-tsc-alias-fb8387d/src/utils/trie.ts000066400000000000000000000103101517463514200212110ustar00rootroot00000000000000/** * @file * * The TrieNode class is a prefix tree. * [Trie](https://en.wikipedia.org/wiki/Trie) * * This is a tree data structure used for locating specific keys * from within a set. The links between nodes defined by individual characters. * A node's position in the trie defines the key with which it is associated. * This distributes the value of each key across the data structure, * and means that not every node necessarily has an associated value. */ /** */ import { isAbsolute, normalize, relative, resolve } from 'path'; import { findBasePathOfAlias, relativeOutPathToConfigDir } from '../helpers'; import { Alias, IProjectConfig, PathLike } from '../interfaces'; export class TrieNode { private children: Map>; public data: T | null; constructor() { this.children = new Map(); this.data = null; } /** * add adds an alias to the prefix tree. * @param {string} name the prefix of the alias. * @param {T} data the alias data. * @returns {void}. */ public add(name: string, data: T): void { if (name.length <= 0) return; const node = this.children.has(name[0]) ? this.children.get(name[0]) : new TrieNode(); if (name.length == 1) { node.data = data; } else { node.add(name.substring(1), data); } this.children.set(name[0], node); } /** * search searches the prefix tree for the most correct alias data for a given prefix. * @param {string} name the prefix to search for. * @returns {T | null} the alias data or null. */ public search(name: string): T | null { if (name.length <= 0) return null; const node = this.children.get(name[0]); return node ? name.length == 1 ? node.data : node.search(name.substring(1)) ?? node.data : this.data; } /** * buildAliasTrie builds an alias trie * @param {IProjectConfig} config projectConfig is an object with config details * @param {PathLike} paths optional the paths to put into the trie * @returns {TrieNode} a TrieNode with the paths/aliases inside */ static buildAliasTrie( config: IProjectConfig, paths?: PathLike ): TrieNode { const aliasTrie = new this(); if (paths) { Object.keys(paths) .map((alias) => { return { shouldPrefixMatchWildly: alias.endsWith('*'), prefix: alias.replace(/\*$/, ''), // Normalize paths. paths: paths[alias].map((path) => { path = path.replace(/\*$/, ''); const dotIndex = path.lastIndexOf('.'); const beforeDot = path.slice(0, dotIndex); const afterDot = path.slice(dotIndex); // Refuse to normalize extensions for paths that look like "a.b/c" or "a.b\c". // Even if the current system is Linux the original author could've written a Windows path. if (!afterDot.includes('/') && !afterDot.includes('\\')) { const extension = afterDot; let normalizedExtension = afterDot; if (!isDTS(extension)) { normalizedExtension = extension.replace( /\.([mc])?ts(x)?$/, '.$1js$2' ); } path = beforeDot + normalizedExtension; } if (isAbsolute(path)) { path = relative( resolve(config.configDir, config.baseUrl), path ); } if ( normalize(path).includes('..') && !config.configDirInOutPath ) { relativeOutPathToConfigDir(config); } return path; }) }; }) .forEach((alias) => { if (alias.prefix) { // Add all aliases to AliasTrie. aliasTrie.add(alias.prefix, { ...alias, // Find basepath of aliases. paths: alias.paths.map(findBasePathOfAlias(config)) }); } }); } return aliasTrie; } } function isDTS(extension: string): boolean { return /\.d(\..*)?\.[mc]?ts(x)?$/.test(extension); } justkey007-tsc-alias-fb8387d/tests/000077500000000000000000000000001517463514200171165ustar00rootroot00000000000000justkey007-tsc-alias-fb8387d/tests/single-file-replacer.spec.ts000066400000000000000000000037031517463514200244130ustar00rootroot00000000000000import { readFileSync } from 'fs'; import { sync } from 'globby'; import { join, normalize } from 'path'; import * as rimraf from 'rimraf'; import * as shell from 'shelljs'; import { ReplaceTscAliasPathsOptions, prepareSingleFileReplaceTscAliasPaths, replaceTscAliasPaths } from '../src'; const projectsRoot = join(__dirname, '../projects'); it('prepareSingleFileReplaceTscAliasPaths() works', async () => { const projectDir = join(projectsRoot, `project19`); const outPath = join(projectDir, 'dist'); const basePath = join(projectDir, 'dist-base'); rimraf.sync(outPath); rimraf.sync(basePath); const runTask = (task: string) => { shell.exec(task, { cwd: projectDir, silent: true }); }; // Compile TypeScript only (no tsc-alias CLI dependency) runTask('npm run build:tsc-base'); // tsc --outDir dist-base runTask('tsc'); // tsc → dist/ per tsconfig outDir const options: ReplaceTscAliasPathsOptions = { configFile: join(projectDir, 'tsconfig.json'), resolveFullPaths: true }; // Apply alias replacement via JS API instead of CLI to avoid PATH/version differences await replaceTscAliasPaths(options); const runFile = await prepareSingleFileReplaceTscAliasPaths(options); // Finding files and changing alias paths const posixOutput = basePath.replace(/\\/g, '/'); const globPattern = [ `${posixOutput}/**/*.{mjs,cjs,js,jsx,d.{mts,cts,ts,tsx}}`, `!${posixOutput}/**/node_modules` ]; const files = sync(globPattern, { dot: true, onlyFiles: true }); expect(files.length).toBeGreaterThan(0); files.map((filePath) => { const altFilePath = normalize(filePath.replace(posixOutput, outPath)); const fileContents = readFileSync(filePath, 'utf8'); const expectedContents = readFileSync(altFilePath, 'utf8'); const newContents = runFile({ fileContents, filePath }); expect(newContents).toEqual(expectedContents); }); expect.assertions(files.length + 1); }, 120000); justkey007-tsc-alias-fb8387d/tests/test.spec.ts000066400000000000000000000054301517463514200214000ustar00rootroot00000000000000import { join } from 'path'; import * as rimraf from 'rimraf'; import * as shell from 'shelljs'; import { newImportStatementRegex, newStringRegex } from '../src/utils'; const projectsRoot = join(__dirname, '../projects'); /** * Sample JavaScript code with a bunch of require/import * statements with various spacing etc. Import paths from * valid statements are incrementing numbers, starting from 0, * so that it is easy to verify validity of results. */ const sampleImportStatements = ` const module = require('0') var module = require ( '1' ) ; import module from '2'; import "3" imported ("invalid/import") import theDefault, {namedExport} from "4" import { extraLinesOhNo } from '5' const asyncImport = await import('6'); export * from '7'; import '8' const notAnImport = unimport('something'); `; function runTestProject(projectNumber: number) { const projectDir = join(projectsRoot, `project${projectNumber}`); rimraf.sync(join(projectDir, 'dist')); const { code, stdout, stderr } = shell.exec('npm start', { cwd: projectDir, silent: true }); if (code !== 0) { console.error(`Project ${projectNumber} failed`); console.error('stdout:\n', stdout); console.error('stderr:\n', stderr); } expect(code).toEqual(0); } it(`Import regex matches import statements`, () => { const expectedImportPaths = sampleImportStatements.match( /(\d+)/g ) as string[]; const importStatementMatches = sampleImportStatements.match( newImportStatementRegex('g') ) as RegExpMatchArray; expect(importStatementMatches).toHaveLength(expectedImportPaths.length); const foundImportPaths: string[] = []; for (const importStatement of importStatementMatches) { // Global match is a string, not a match group, so re-match without the global flag. const pathMatch = importStatement.match( newStringRegex() ) as RegExpMatchArray; expect(pathMatch).toBeTruthy(); if (pathMatch.groups) foundImportPaths.push(pathMatch.groups.path); } expectedImportPaths.forEach((expectedPath, i) => { expect(expectedPath).toEqual(foundImportPaths[i]); }); }); it(`Import regex does not match edge cases from keywords in strings`, function () { const testCase = ` 'a string with keyword from ' // The from keyword in that string can cause // a match up to the next quote, since the regex does not // know that the keyword is in a string context 'another string using same quote type' `; expect(newImportStatementRegex().exec(testCase)?.[0]).toBeUndefined(); }); // Run tests on projects. 9-11 are for testing fullpath file resolution [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24 ].forEach((value) => { it(`Project ${value} runs after alias resolution`, () => { runTestProject(value); }); }); justkey007-tsc-alias-fb8387d/tsconfig.json000066400000000000000000000011521517463514200204620ustar00rootroot00000000000000{ "compilerOptions": { "outDir": "./dist", "target": "es2015", "module": "commonjs", "baseUrl": ".", "moduleResolution": "node", "lib": ["es2018"], "declaration": true, "removeComments": true, "sourceMap": true, "rootDir": "./src", "inlineSources": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "skipLibCheck": true, "pretty": true, "newLine": "lf" }, "exclude": [ "**/*.test.ts", "**/*.spec.ts", "**/tests", "**/dist", "**/projects", "node_modules" ], "include": ["**/*.ts", "**/package.json"] }