├── .github ├── CODEOWNERS └── workflows │ ├── build-and-release.yml │ └── build.yml ├── .gitignore ├── LICENSE ├── README.md ├── package.json ├── packages ├── core │ ├── package.json │ ├── src │ │ ├── check │ │ │ └── mod.ts │ │ ├── compileTypescript │ │ │ └── mod.ts │ │ ├── mod.ts │ │ ├── replaceImportWithDummy │ │ │ └── mod.ts │ │ └── treeche │ │ │ └── mod.ts │ └── tsconfig.json ├── node-cli │ ├── package.json │ ├── src │ │ └── cli.ts │ └── tsconfig.json └── tests │ ├── package.json │ └── test-cases │ └── should-output-ok-without-side-effects │ ├── __fixture__ │ └── sample.ts │ └── should-output-ok-without-side-effects.test.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml └── tsconfig.base.json /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @Shinyaigeek -------------------------------------------------------------------------------- /.github/workflows/build-and-release.yml: -------------------------------------------------------------------------------- 1 | name: Build and Release 2 | 3 | env: 4 | CI: true 5 | on: 6 | push: 7 | branches: 8 | - release 9 | 10 | permissions: 11 | contents: write 12 | packages: write 13 | jobs: 14 | release: 15 | name: Setup 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: checkout 19 | uses: actions/checkout@v1 20 | - name: setup Node 21 | uses: actions/setup-node@v1 22 | with: 23 | node-version: 16.x 24 | registry-url: "https://npm.pkg.github.com" 25 | - uses: pnpm/action-setup@v2.0.1 26 | name: Install pnpm 27 | id: pnpm-install 28 | with: 29 | version: 7.1.9 30 | run_install: false 31 | - name: install 32 | run: pnpm i 33 | - name: test 34 | run: pnpm test 35 | - name: build 36 | run: pnpm build 37 | # if unpublished, publish with current version 38 | - name: publish 39 | working-directory: ./packages/node-cli 40 | run: | 41 | npx can-npm-publish --verbose && pnpm publish-modules || echo "Does not publish" 42 | env: 43 | NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 44 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build Check 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | permissions: 9 | contents: write 10 | packages: write 11 | jobs: 12 | build: 13 | 14 | runs-on: ubuntu-latest 15 | 16 | strategy: 17 | matrix: 18 | node-version: [16.x] 19 | 20 | steps: 21 | - uses: actions/checkout@v3 22 | - name: Use Node.js ${{ matrix.node-version }} 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: ${{ matrix.node-version }} 26 | - uses: pnpm/action-setup@v2.0.1 27 | name: Install pnpm 28 | id: pnpm-install 29 | with: 30 | version: 7.1.9 31 | run_install: false 32 | - run: pnpm i 33 | - run: pnpm build:check 34 | - run: pnpm test 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### https://raw.github.com/github/gitignore/b0012e4930d0a8c350254a3caeedf7441ea286a3/Node.gitignore 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | lerna-debug.log* 10 | .pnpm-debug.log* 11 | 12 | # Diagnostic reports (https://nodejs.org/api/report.html) 13 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 14 | 15 | # Runtime data 16 | pids 17 | *.pid 18 | *.seed 19 | *.pid.lock 20 | 21 | # Directory for instrumented libs generated by jscoverage/JSCover 22 | lib-cov 23 | 24 | # Coverage directory used by tools like istanbul 25 | coverage 26 | *.lcov 27 | 28 | # nyc test coverage 29 | .nyc_output 30 | 31 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 32 | .grunt 33 | 34 | # Bower dependency directory (https://bower.io/) 35 | bower_components 36 | 37 | # node-waf configuration 38 | .lock-wscript 39 | 40 | # Compiled binary addons (https://nodejs.org/api/addons.html) 41 | build/Release 42 | 43 | # Dependency directories 44 | node_modules/ 45 | jspm_packages/ 46 | 47 | # Snowpack dependency directory (https://snowpack.dev/) 48 | web_modules/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Microbundle cache 60 | .rpt2_cache/ 61 | .rts2_cache_cjs/ 62 | .rts2_cache_es/ 63 | .rts2_cache_umd/ 64 | 65 | # Optional REPL history 66 | .node_repl_history 67 | 68 | # Output of 'npm pack' 69 | *.tgz 70 | 71 | # Yarn Integrity file 72 | .yarn-integrity 73 | 74 | # dotenv environment variables file 75 | .env 76 | .env.test 77 | .env.production 78 | 79 | # parcel-bundler cache (https://parceljs.org/) 80 | .cache 81 | .parcel-cache 82 | 83 | # Next.js build output 84 | .next 85 | out 86 | 87 | # Nuxt.js build / generate output 88 | .nuxt 89 | dist 90 | 91 | # Gatsby files 92 | .cache/ 93 | # Comment in the public line in if your project uses Gatsby and not Next.js 94 | # https://nextjs.org/blog/next-9-1#public-directory-support 95 | # public 96 | 97 | # vuepress build output 98 | .vuepress/dist 99 | 100 | # Serverless directories 101 | .serverless/ 102 | 103 | # FuseBox cache 104 | .fusebox/ 105 | 106 | # DynamoDB Local files 107 | .dynamodb/ 108 | 109 | # TernJS port file 110 | .tern-port 111 | 112 | # Stores VSCode versions used for testing VSCode extensions 113 | .vscode-test 114 | 115 | # yarn v2 116 | .yarn/cache 117 | .yarn/unplugged 118 | .yarn/build-state.yml 119 | .yarn/install-state.gz 120 | .pnp.* 121 | 122 | lib 123 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Shinobu Hayashi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Treeche 🌴 2 | 3 | ## What is this 4 | 5 | **Tree** shakable **Che**cker. 6 | 7 | check your module is tree-shakable or not, in each module and reduce bundle size!! 8 | 9 | ## Feature ✨ 10 | 11 | - typescript support 12 | - you can check in each file 13 | - you can check with the unique entrypoint 14 | - glob pattern support 15 | - pretty diagnostics report. 16 | 17 | 18 | ## How to use 🔧 19 | 20 | ```bash 21 | npm install treeche -D // TBD 22 | treeche "**/*.ts" --excludes "node_modules" "**/*.test.ts" 23 | ``` 24 | 25 | ## Example 📕 26 | 27 | ```typescript 28 | // this is not tree-shakable because have side-effect 29 | 30 | const currentYear = new Date().getFullYear(); 31 | 32 | export function getCurrentYear() { 33 | return `Year ${currentYear}` 34 | } 35 | ``` 36 | 37 | ```bash 38 | treeche "~~~" 39 | ``` 40 | 41 | log 42 | ```bash 43 | 44 | 🚨 ~/application/side_effect.ts is not tree-shakable due to the following code: 45 | 46 | \`\`\` 47 | const currentYear = new Date().getFullYear(); 48 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 49 | \`\`\` 50 | ``` 51 | 52 | if you fix this code such above 53 | 54 | ```typescript 55 | // this is tree-shakable because this does not have side-effect 56 | 57 | export function getCurrentYear(currentYear: string) { 58 | return `Year ${currentYear}` 59 | } 60 | ``` 61 | 62 | log 63 | ```bash 64 | Congratulation 🎉 All files are tree-shakeable ✨ 65 | ``` 66 | 67 | ## command 💻 68 | 69 | |kind|name|description|example| 70 | |:--:|:--:|:--:|:--:| 71 | |argument|inputs|input files to check tree-shakable. you can use Node glob pattern| treeche "src/**/*.ts"| 72 | |option|excludes|excludes files to filter from inputs. you can use Node glob pattern| treeche "src/**/*.ts" --e "node_modules"| 73 | |option|entry point|the unique entry point to check tree-shakable. if you specify input with this, treeche will bundle so you can check tree-shakable also in node_modules| treeche --entry-point ./src/main.ts| 74 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "treeche-monorepo-root", 3 | "version": "0.1.8", 4 | "description": "Tree-Shakable checker for you JavaScript/TypeScript application", 5 | "main": "lib/main.js", 6 | "bin": "lib/main.js", 7 | "type": "module", 8 | "scripts": { 9 | "build": "pnpm --filter '*' build", 10 | "build:check": "pnpm --filter '*' build:check", 11 | "publish-modules": "pnpm --filter '*' publish-module", 12 | "test": "pnpm --filter ./packages/tests test" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/Shinyaigeek/treeche.git" 17 | }, 18 | "keywords": ["tree-shake", "bundler", "rollup", "bundle size", "side effect", "performance"], 19 | "author": "@Shinyaigeek/Shinobu Hayashi", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/Shinyaigeek/treeche/issues" 23 | }, 24 | "homepage": "https://github.com/Shinyaigeek/treeche#readme", 25 | "devDependencies": { 26 | "@types/node": "^17.0.21", 27 | "typescript": "^4.6.2" 28 | }, 29 | "packageManager": "pnpm@7.1.9" 30 | } 31 | -------------------------------------------------------------------------------- /packages/core/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "treeche-core", 3 | "version": "0.1.8", 4 | "description": "", 5 | "type": "module", 6 | "main": "lib/mod.js", 7 | "types": "src/mod.ts", 8 | "scripts": { 9 | "build": "tsc -p .", 10 | "build:check": "tsc -p . --noEmit", 11 | "publish-module": "npm publish" 12 | }, 13 | "dependencies": { 14 | "@babel/generator": "^7.17.3", 15 | "@babel/parser": "^7.17.3", 16 | "@babel/traverse": "^7.17.3", 17 | "@rollup/plugin-typescript": "^8.4.0", 18 | "@types/babel__generator": "^7.6.4", 19 | "esbuild": "^0.15.5", 20 | "globby": "^13.1.1", 21 | "rollup": "^2.75.6", 22 | "rollup-plugin-typescript2": "^0.31.2", 23 | "rollup-plugin-virtual": "^1.0.1", 24 | "tslib": "^2.3.1", 25 | "typescript": "^4.6.2" 26 | }, 27 | "devDependencies": { 28 | "@types/babel__traverse": "^7.14.2", 29 | "@types/estree": "0.0.51" 30 | }, 31 | "keywords": ["tree-shake", "bundler", "rollup", "bundle size", "side effect", "performance"], 32 | "author": "@Shinyaigeek/Shinobu Hayashi", 33 | "license": "MIT" 34 | } 35 | -------------------------------------------------------------------------------- /packages/core/src/check/mod.ts: -------------------------------------------------------------------------------- 1 | import { rollup } from "rollup"; 2 | import { parse } from "@babel/parser"; 3 | // @ts-ignore 4 | import virtual from "rollup-plugin-virtual"; 5 | import { replaceImportWithDummy } from "../replaceImportWithDummy/mod.js"; 6 | import { promises as fs } from "fs"; 7 | import { compileTypescript } from "../compileTypescript/mod.js"; 8 | import typescript from "@rollup/plugin-typescript"; 9 | 10 | export const check: ( 11 | filename: string, 12 | shouldBundle: boolean, 13 | pureFunctions: string[] 14 | ) => Promise<{ 15 | file: string; 16 | shaken: boolean; 17 | diagnostics: string[]; 18 | }> = async function (filename, shouldBundle, pureFunctions) { 19 | const fileContent = await fs.readFile(filename, "utf8"); 20 | const bundled = await rollup({ 21 | input: "__treeche__entry__", 22 | plugins: [ 23 | virtual({ 24 | __treeche__entry__: `import "${ 25 | shouldBundle ? filename : "__treeche__target__" 26 | }"`, 27 | __treeche__target__: `${replaceImportWithDummy( 28 | await compileTypescript(fileContent) 29 | )}`, 30 | }), 31 | shouldBundle && typescript(), 32 | ], 33 | onwarn: (warning, handle) => { 34 | if ( 35 | warning.code === "UNRESOLVED_IMPORT" || 36 | warning.code === "EMPTY_BUNDLE" 37 | ) { 38 | return; // ignore 39 | } 40 | handle(warning); 41 | }, 42 | }); 43 | 44 | const result = await bundled.generate({ 45 | format: "esm", 46 | }); 47 | 48 | const { code } = result.output[0]; 49 | 50 | const ast = parse(code, { 51 | sourceType: "module", 52 | plugins: ["typescript", "jsx"], 53 | }); 54 | 55 | const nodes = ast.program.body 56 | .filter((node) => { 57 | return node.type !== "ImportDeclaration"; 58 | }) 59 | .filter((node) => { 60 | if ( 61 | node.type !== "VariableDeclaration" && 62 | node.type !== "ExpressionStatement" 63 | ) { 64 | return true; 65 | } 66 | 67 | if (node.type === "VariableDeclaration") { 68 | return !node.declarations.every((declaration) => { 69 | return ( 70 | declaration.init?.type === "CallExpression" && 71 | declaration.init.callee.type === "Identifier" && 72 | pureFunctions.includes(declaration.init.callee.name) 73 | ); 74 | }); 75 | } 76 | 77 | if (node.type === "ExpressionStatement") { 78 | return !( 79 | node.expression.type === "CallExpression" && 80 | node.expression.callee.type === "Identifier" && 81 | pureFunctions.includes(node.expression.callee.name) 82 | ); 83 | } 84 | }); 85 | 86 | return { 87 | file: filename, 88 | shaken: nodes.length === 0, 89 | diagnostics: nodes 90 | .map((node) => { 91 | const loc = node.loc; 92 | if (!loc) { 93 | return ""; 94 | } 95 | 96 | const diagnoseCodeLines = code 97 | .split("\n") 98 | .slice(loc.start.line - 1, loc.end.line); 99 | 100 | const diagnoseCodeLinesWithPointer = diagnoseCodeLines.map( 101 | (diagnose, idx) => { 102 | const pointer = (() => { 103 | if (diagnoseCodeLines.length === 1) { 104 | return ( 105 | " ".repeat(loc.start.column) + 106 | "^".repeat(loc.end.column - loc.start.column) 107 | ); 108 | } 109 | 110 | if (idx === 0) { 111 | return ( 112 | " ".repeat(loc.start.column) + 113 | "^".repeat(diagnose.length - loc.start.column) 114 | ); 115 | } 116 | 117 | if (idx === diagnoseCodeLines.length - 1) { 118 | return "^".repeat(loc.end.column); 119 | } 120 | 121 | return "^".repeat(diagnose.length); 122 | })(); 123 | 124 | return `${diagnose}${ 125 | diagnose.endsWith("\n") ? "" : "\n" 126 | }${pointer}`; 127 | } 128 | ); 129 | 130 | return diagnoseCodeLinesWithPointer.join("\n"); 131 | }) 132 | .filter((diagnose) => !!diagnose), 133 | }; 134 | }; 135 | -------------------------------------------------------------------------------- /packages/core/src/compileTypescript/mod.ts: -------------------------------------------------------------------------------- 1 | import { transform } from "esbuild"; 2 | 3 | export const compileTypescript: (content: string) => Promise = 4 | async function (content) { 5 | // transpile 6 | const { code } = await transform(content, { 7 | loader: "tsx", 8 | }); 9 | 10 | return code; 11 | }; 12 | -------------------------------------------------------------------------------- /packages/core/src/mod.ts: -------------------------------------------------------------------------------- 1 | export { treeche, type TreecheOptions } from "./treeche/mod.js"; 2 | -------------------------------------------------------------------------------- /packages/core/src/replaceImportWithDummy/mod.ts: -------------------------------------------------------------------------------- 1 | import { parse } from "@babel/parser"; 2 | import traverse from "@babel/traverse"; 3 | import generate from "@babel/generator"; 4 | 5 | export const replaceImportWithDummy: (content: string) => string = function ( 6 | content 7 | ) { 8 | const ast = parse(content, { 9 | sourceType: "module", 10 | plugins: ["typescript"], 11 | }); 12 | 13 | traverse(ast, { 14 | ImportDeclaration(path) { 15 | if (path.node.importKind !== "type") { 16 | path.node.source.value = `dummy:${path.node.source.value}`; 17 | } 18 | }, 19 | ExportNamedDeclaration(path) { 20 | if (path.node.exportKind !== "type" && path.node.source) { 21 | path.node.source.value = `dummy:${path.node.source.value}`; 22 | } 23 | }, 24 | ExportAllDeclaration(path) { 25 | if (path.node.exportKind !== "type" && path.node.source) { 26 | path.node.source.value = `dummy:${path.node.source.value}`; 27 | } 28 | }, 29 | ExpressionStatement(path) { 30 | if (path.node.expression.type === "CallExpression") { 31 | if ( 32 | path.node.expression.callee.type === "Identifier" && 33 | ["require", "import"].includes(path.node.expression.callee.name) 34 | ) { 35 | if (path.node.expression.arguments[0].type === "StringLiteral") { 36 | path.node.expression.arguments[0].value = `dummy:${path.node.expression.arguments[0].value}`; 37 | } 38 | } 39 | } 40 | }, 41 | }); 42 | 43 | const { code } = generate(ast); 44 | return code; 45 | }; 46 | -------------------------------------------------------------------------------- /packages/core/src/treeche/mod.ts: -------------------------------------------------------------------------------- 1 | import { globby } from "globby"; 2 | import path from "path"; 3 | import { check } from "../check/mod.js"; 4 | 5 | export interface TreecheOptions { 6 | inputs: string[]; 7 | excludes?: string[]; 8 | entryPoint?: string; 9 | pureFunctions?: string[]; 10 | } 11 | 12 | export const treeche: (options: TreecheOptions) => Promise = 13 | async function ({ 14 | inputs: rawInputs, 15 | excludes: rawExcludes, 16 | entryPoint, 17 | pureFunctions, 18 | }) { 19 | const targetFiles = await (async () => { 20 | if (entryPoint) { 21 | return [path.join(process.cwd(), entryPoint)]; 22 | } 23 | const inputs = await globby(rawInputs); 24 | const excludes = rawExcludes ? await globby(rawExcludes) : []; 25 | return inputs 26 | .filter((input) => { 27 | return !excludes.includes(input); 28 | }) 29 | .map((file) => path.join(process.cwd(), file)); 30 | })(); 31 | 32 | const results = await Promise.all( 33 | targetFiles.map( 34 | async (file) => await check(file, !!entryPoint, pureFunctions ?? []) 35 | ) 36 | ); 37 | if (results.every((result) => result.shaken)) { 38 | console.log("Congratulation 🎉 All files are tree-shakeable ✨"); 39 | return; 40 | } 41 | 42 | for (const result of results) { 43 | if (!result.shaken) { 44 | console.log( 45 | `🚨 ${result.file} is not tree-shakable due to the following code:` 46 | ); 47 | console.log(""); 48 | console.log("```"); 49 | for (const diagnostic of result.diagnostics) { 50 | console.log(diagnostic); 51 | } 52 | console.log("```"); 53 | console.log(""); 54 | console.log(""); 55 | } 56 | } 57 | }; 58 | -------------------------------------------------------------------------------- /packages/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "./lib", 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/node-cli/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "treeche", 3 | "version": "0.1.8", 4 | "description": "", 5 | "main": "lib/cli.js", 6 | "bin": "lib/cli.js", 7 | "type": "module", 8 | "scripts": { 9 | "build": "tsc -p .", 10 | "build:check": "tsc -p . --noEmit", 11 | "publish-module": "npm publish" 12 | }, 13 | "dependencies": { 14 | "commander": "^9.0.0", 15 | "treeche-core": "0.1.8" 16 | }, 17 | "keywords": ["tree-shake", "bundler", "rollup", "bundle size", "side effect", "performance"], 18 | "author": "@Shinyaigeek/Shinobu Hayashi", 19 | "license": "MIT" 20 | } 21 | -------------------------------------------------------------------------------- /packages/node-cli/src/cli.ts: -------------------------------------------------------------------------------- 1 | import { Command } from "commander"; 2 | import { treeche, TreecheOptions } from "treeche-core/src/mod"; 3 | 4 | function main() { 5 | const program = new Command(); 6 | 7 | program 8 | .argument("[strings...]", "target file path, you can use Node glob pattern") 9 | .option( 10 | "-e, --excludes ", 11 | "exclude files, you can use node glob pattern" 12 | ) 13 | .option( 14 | "--entry-point ", 15 | "the unique entry point, you can check the module is tree-shakable also in node_modules " 16 | ) 17 | .option( 18 | "--pure-functions ", 19 | "register pure function to ignore treeche checker" 20 | ) 21 | .action((inputs, options) => { 22 | treeche({ 23 | inputs, 24 | ...options, 25 | } as TreecheOptions); 26 | }); 27 | 28 | program.parse(); 29 | } 30 | 31 | main(); 32 | -------------------------------------------------------------------------------- /packages/node-cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "./lib" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "treeche-tests", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "vitest run" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "vitest": "^0.23.4", 14 | "treeche-core": "workspace:treeche-core" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/tests/test-cases/should-output-ok-without-side-effects/__fixture__/sample.ts: -------------------------------------------------------------------------------- 1 | export const module = () => { 2 | return 1; 3 | }; 4 | -------------------------------------------------------------------------------- /packages/tests/test-cases/should-output-ok-without-side-effects/should-output-ok-without-side-effects.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, test, vi, afterEach, expect } from "vitest"; 2 | import { treeche } from "treeche-core/src/mod"; 3 | 4 | const stdouts: string[] = []; 5 | 6 | afterEach(() => { 7 | vi.resetAllMocks(); 8 | stdouts.splice(0); 9 | }); 10 | 11 | describe("should output ok without side-effects", () => { 12 | test("sample.ts", async () => { 13 | const logMock = vi.spyOn(console, "log"); 14 | logMock.mockImplementation((message: string) => { 15 | stdouts.push(message); 16 | }); 17 | 18 | await treeche({ 19 | inputs: ["./test-cases/should-output-ok-without-side-effects/__fixture__/sample.ts"], 20 | }); 21 | 22 | expect(logMock).toHaveBeenCalled(); 23 | expect(stdouts.length).toEqual(1); 24 | expect(stdouts.at(0)).toEqual( 25 | "Congratulation 🎉 All files are tree-shakeable ✨" 26 | ); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | importers: 4 | 5 | .: 6 | specifiers: 7 | '@types/node': ^17.0.21 8 | typescript: ^4.6.2 9 | devDependencies: 10 | '@types/node': 17.0.45 11 | typescript: 4.8.2 12 | 13 | packages/core: 14 | specifiers: 15 | '@babel/generator': ^7.17.3 16 | '@babel/parser': ^7.17.3 17 | '@babel/traverse': ^7.17.3 18 | '@rollup/plugin-typescript': ^8.4.0 19 | '@types/babel__generator': ^7.6.4 20 | '@types/babel__traverse': ^7.14.2 21 | '@types/estree': 0.0.51 22 | esbuild: ^0.15.5 23 | globby: ^13.1.1 24 | rollup: ^2.75.6 25 | rollup-plugin-typescript2: ^0.31.2 26 | rollup-plugin-virtual: ^1.0.1 27 | tslib: ^2.3.1 28 | typescript: ^4.6.2 29 | dependencies: 30 | '@babel/generator': 7.18.13 31 | '@babel/parser': 7.18.13 32 | '@babel/traverse': 7.18.13 33 | '@rollup/plugin-typescript': 8.4.0_lgw3yndmlomwrra4tomb66mtni 34 | '@types/babel__generator': 7.6.4 35 | esbuild: 0.15.6 36 | globby: 13.1.2 37 | rollup: 2.79.0 38 | rollup-plugin-typescript2: 0.31.2_id3sp2lbl4kx3dskm7teaj32um 39 | rollup-plugin-virtual: 1.0.1 40 | tslib: 2.4.0 41 | typescript: 4.8.2 42 | devDependencies: 43 | '@types/babel__traverse': 7.18.1 44 | '@types/estree': 0.0.51 45 | 46 | packages/node-cli: 47 | specifiers: 48 | commander: ^9.0.0 49 | treeche-core: 0.1.8 50 | dependencies: 51 | commander: 9.4.0 52 | treeche-core: link:../core 53 | 54 | packages/tests: 55 | specifiers: 56 | treeche-core: workspace:treeche-core 57 | vitest: ^0.23.4 58 | devDependencies: 59 | treeche-core: link:../core 60 | vitest: 0.23.4 61 | 62 | packages: 63 | 64 | /@babel/code-frame/7.18.6: 65 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 66 | engines: {node: '>=6.9.0'} 67 | dependencies: 68 | '@babel/highlight': 7.18.6 69 | dev: false 70 | 71 | /@babel/generator/7.18.13: 72 | resolution: {integrity: sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==} 73 | engines: {node: '>=6.9.0'} 74 | dependencies: 75 | '@babel/types': 7.18.13 76 | '@jridgewell/gen-mapping': 0.3.2 77 | jsesc: 2.5.2 78 | dev: false 79 | 80 | /@babel/helper-environment-visitor/7.18.9: 81 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} 82 | engines: {node: '>=6.9.0'} 83 | dev: false 84 | 85 | /@babel/helper-function-name/7.18.9: 86 | resolution: {integrity: sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==} 87 | engines: {node: '>=6.9.0'} 88 | dependencies: 89 | '@babel/template': 7.18.10 90 | '@babel/types': 7.18.13 91 | dev: false 92 | 93 | /@babel/helper-hoist-variables/7.18.6: 94 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 95 | engines: {node: '>=6.9.0'} 96 | dependencies: 97 | '@babel/types': 7.18.13 98 | dev: false 99 | 100 | /@babel/helper-split-export-declaration/7.18.6: 101 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 102 | engines: {node: '>=6.9.0'} 103 | dependencies: 104 | '@babel/types': 7.18.13 105 | dev: false 106 | 107 | /@babel/helper-string-parser/7.18.10: 108 | resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} 109 | engines: {node: '>=6.9.0'} 110 | 111 | /@babel/helper-validator-identifier/7.18.6: 112 | resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} 113 | engines: {node: '>=6.9.0'} 114 | 115 | /@babel/highlight/7.18.6: 116 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 117 | engines: {node: '>=6.9.0'} 118 | dependencies: 119 | '@babel/helper-validator-identifier': 7.18.6 120 | chalk: 2.4.2 121 | js-tokens: 4.0.0 122 | dev: false 123 | 124 | /@babel/parser/7.18.13: 125 | resolution: {integrity: sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==} 126 | engines: {node: '>=6.0.0'} 127 | hasBin: true 128 | dependencies: 129 | '@babel/types': 7.18.13 130 | dev: false 131 | 132 | /@babel/template/7.18.10: 133 | resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} 134 | engines: {node: '>=6.9.0'} 135 | dependencies: 136 | '@babel/code-frame': 7.18.6 137 | '@babel/parser': 7.18.13 138 | '@babel/types': 7.18.13 139 | dev: false 140 | 141 | /@babel/traverse/7.18.13: 142 | resolution: {integrity: sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==} 143 | engines: {node: '>=6.9.0'} 144 | dependencies: 145 | '@babel/code-frame': 7.18.6 146 | '@babel/generator': 7.18.13 147 | '@babel/helper-environment-visitor': 7.18.9 148 | '@babel/helper-function-name': 7.18.9 149 | '@babel/helper-hoist-variables': 7.18.6 150 | '@babel/helper-split-export-declaration': 7.18.6 151 | '@babel/parser': 7.18.13 152 | '@babel/types': 7.18.13 153 | debug: 4.3.4 154 | globals: 11.12.0 155 | transitivePeerDependencies: 156 | - supports-color 157 | dev: false 158 | 159 | /@babel/types/7.18.13: 160 | resolution: {integrity: sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==} 161 | engines: {node: '>=6.9.0'} 162 | dependencies: 163 | '@babel/helper-string-parser': 7.18.10 164 | '@babel/helper-validator-identifier': 7.18.6 165 | to-fast-properties: 2.0.0 166 | 167 | /@esbuild/linux-loong64/0.15.6: 168 | resolution: {integrity: sha512-hqmVU2mUjH6J2ZivHphJ/Pdse2ZD+uGCHK0uvsiLDk/JnSedEVj77CiVUnbMKuU4tih1TZZL8tG9DExQg/GZsw==} 169 | engines: {node: '>=12'} 170 | cpu: [loong64] 171 | os: [linux] 172 | requiresBuild: true 173 | optional: true 174 | 175 | /@jridgewell/gen-mapping/0.3.2: 176 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 177 | engines: {node: '>=6.0.0'} 178 | dependencies: 179 | '@jridgewell/set-array': 1.1.2 180 | '@jridgewell/sourcemap-codec': 1.4.14 181 | '@jridgewell/trace-mapping': 0.3.15 182 | dev: false 183 | 184 | /@jridgewell/resolve-uri/3.1.0: 185 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 186 | engines: {node: '>=6.0.0'} 187 | dev: false 188 | 189 | /@jridgewell/set-array/1.1.2: 190 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 191 | engines: {node: '>=6.0.0'} 192 | dev: false 193 | 194 | /@jridgewell/sourcemap-codec/1.4.14: 195 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 196 | dev: false 197 | 198 | /@jridgewell/trace-mapping/0.3.15: 199 | resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} 200 | dependencies: 201 | '@jridgewell/resolve-uri': 3.1.0 202 | '@jridgewell/sourcemap-codec': 1.4.14 203 | dev: false 204 | 205 | /@nodelib/fs.scandir/2.1.5: 206 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 207 | engines: {node: '>= 8'} 208 | dependencies: 209 | '@nodelib/fs.stat': 2.0.5 210 | run-parallel: 1.2.0 211 | dev: false 212 | 213 | /@nodelib/fs.stat/2.0.5: 214 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 215 | engines: {node: '>= 8'} 216 | dev: false 217 | 218 | /@nodelib/fs.walk/1.2.8: 219 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 220 | engines: {node: '>= 8'} 221 | dependencies: 222 | '@nodelib/fs.scandir': 2.1.5 223 | fastq: 1.13.0 224 | dev: false 225 | 226 | /@rollup/plugin-typescript/8.4.0_lgw3yndmlomwrra4tomb66mtni: 227 | resolution: {integrity: sha512-QssfoOP6V4/6skX12EfOW5UzJAv/c334F4OJWmQpe2kg3agEa0JwVCckwmfuvEgDixyX+XyxjFenH7M2rDKUyQ==} 228 | engines: {node: '>=8.0.0'} 229 | peerDependencies: 230 | rollup: ^2.14.0 231 | tslib: '*' 232 | typescript: '>=3.7.0' 233 | peerDependenciesMeta: 234 | tslib: 235 | optional: true 236 | dependencies: 237 | '@rollup/pluginutils': 3.1.0_rollup@2.79.0 238 | resolve: 1.22.1 239 | rollup: 2.79.0 240 | tslib: 2.4.0 241 | typescript: 4.8.2 242 | dev: false 243 | 244 | /@rollup/pluginutils/3.1.0_rollup@2.79.0: 245 | resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} 246 | engines: {node: '>= 8.0.0'} 247 | peerDependencies: 248 | rollup: ^1.20.0||^2.0.0 249 | dependencies: 250 | '@types/estree': 0.0.39 251 | estree-walker: 1.0.1 252 | picomatch: 2.3.1 253 | rollup: 2.79.0 254 | dev: false 255 | 256 | /@rollup/pluginutils/4.2.1: 257 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 258 | engines: {node: '>= 8.0.0'} 259 | dependencies: 260 | estree-walker: 2.0.2 261 | picomatch: 2.3.1 262 | dev: false 263 | 264 | /@types/babel__generator/7.6.4: 265 | resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} 266 | dependencies: 267 | '@babel/types': 7.18.13 268 | dev: false 269 | 270 | /@types/babel__traverse/7.18.1: 271 | resolution: {integrity: sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==} 272 | dependencies: 273 | '@babel/types': 7.18.13 274 | dev: true 275 | 276 | /@types/chai-subset/1.3.3: 277 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 278 | dependencies: 279 | '@types/chai': 4.3.3 280 | dev: true 281 | 282 | /@types/chai/4.3.3: 283 | resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} 284 | dev: true 285 | 286 | /@types/estree/0.0.39: 287 | resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} 288 | dev: false 289 | 290 | /@types/estree/0.0.51: 291 | resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} 292 | dev: true 293 | 294 | /@types/node/17.0.45: 295 | resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} 296 | 297 | /@yarn-tool/resolve-package/1.0.47: 298 | resolution: {integrity: sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==} 299 | dependencies: 300 | pkg-dir: 5.0.0 301 | tslib: 2.4.0 302 | upath2: 3.1.15 303 | dev: false 304 | 305 | /acorn/8.8.0: 306 | resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} 307 | engines: {node: '>=0.4.0'} 308 | hasBin: true 309 | dev: true 310 | 311 | /ansi-styles/3.2.1: 312 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 313 | engines: {node: '>=4'} 314 | dependencies: 315 | color-convert: 1.9.3 316 | dev: false 317 | 318 | /assertion-error/1.1.0: 319 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 320 | dev: true 321 | 322 | /braces/3.0.2: 323 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 324 | engines: {node: '>=8'} 325 | dependencies: 326 | fill-range: 7.0.1 327 | dev: false 328 | 329 | /chai/4.3.6: 330 | resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} 331 | engines: {node: '>=4'} 332 | dependencies: 333 | assertion-error: 1.1.0 334 | check-error: 1.0.2 335 | deep-eql: 3.0.1 336 | get-func-name: 2.0.0 337 | loupe: 2.3.4 338 | pathval: 1.1.1 339 | type-detect: 4.0.8 340 | dev: true 341 | 342 | /chalk/2.4.2: 343 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 344 | engines: {node: '>=4'} 345 | dependencies: 346 | ansi-styles: 3.2.1 347 | escape-string-regexp: 1.0.5 348 | supports-color: 5.5.0 349 | dev: false 350 | 351 | /check-error/1.0.2: 352 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} 353 | dev: true 354 | 355 | /color-convert/1.9.3: 356 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 357 | dependencies: 358 | color-name: 1.1.3 359 | dev: false 360 | 361 | /color-name/1.1.3: 362 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 363 | dev: false 364 | 365 | /commander/9.4.0: 366 | resolution: {integrity: sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==} 367 | engines: {node: ^12.20.0 || >=14} 368 | dev: false 369 | 370 | /commondir/1.0.1: 371 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 372 | dev: false 373 | 374 | /debug/4.3.4: 375 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 376 | engines: {node: '>=6.0'} 377 | peerDependencies: 378 | supports-color: '*' 379 | peerDependenciesMeta: 380 | supports-color: 381 | optional: true 382 | dependencies: 383 | ms: 2.1.2 384 | 385 | /deep-eql/3.0.1: 386 | resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} 387 | engines: {node: '>=0.12'} 388 | dependencies: 389 | type-detect: 4.0.8 390 | dev: true 391 | 392 | /dir-glob/3.0.1: 393 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 394 | engines: {node: '>=8'} 395 | dependencies: 396 | path-type: 4.0.0 397 | dev: false 398 | 399 | /esbuild-android-64/0.15.6: 400 | resolution: {integrity: sha512-Z1CHSgB1crVQi2LKSBwSkpaGtaloVz0ZIYcRMsvHc3uSXcR/x5/bv9wcZspvH/25lIGTaViosciS/NS09ERmVA==} 401 | engines: {node: '>=12'} 402 | cpu: [x64] 403 | os: [android] 404 | requiresBuild: true 405 | optional: true 406 | 407 | /esbuild-android-arm64/0.15.6: 408 | resolution: {integrity: sha512-mvM+gqNxqKm2pCa3dnjdRzl7gIowuc4ga7P7c3yHzs58Im8v/Lfk1ixSgQ2USgIywT48QWaACRa3F4MG7djpSw==} 409 | engines: {node: '>=12'} 410 | cpu: [arm64] 411 | os: [android] 412 | requiresBuild: true 413 | optional: true 414 | 415 | /esbuild-darwin-64/0.15.6: 416 | resolution: {integrity: sha512-BsfVt3usScAfGlXJiGtGamwVEOTM8AiYiw1zqDWhGv6BncLXCnTg1As+90mxWewdTZKq3iIy8s9g8CKkrrAXVw==} 417 | engines: {node: '>=12'} 418 | cpu: [x64] 419 | os: [darwin] 420 | requiresBuild: true 421 | optional: true 422 | 423 | /esbuild-darwin-arm64/0.15.6: 424 | resolution: {integrity: sha512-CnrAeJaEpPakUobhqO4wVSA4Zm6TPaI5UY4EsI62j9mTrjIyQPXA1n4Ju6Iu5TVZRnEqV6q8blodgYJ6CJuwCA==} 425 | engines: {node: '>=12'} 426 | cpu: [arm64] 427 | os: [darwin] 428 | requiresBuild: true 429 | optional: true 430 | 431 | /esbuild-freebsd-64/0.15.6: 432 | resolution: {integrity: sha512-+qFdmqi+jkAsxsNJkaWVrnxEUUI50nu6c3MBVarv3RCDCbz7ZS1a4ZrdkwEYFnKcVWu6UUE0Kkb1SQ1yGEG6sg==} 433 | engines: {node: '>=12'} 434 | cpu: [x64] 435 | os: [freebsd] 436 | requiresBuild: true 437 | optional: true 438 | 439 | /esbuild-freebsd-arm64/0.15.6: 440 | resolution: {integrity: sha512-KtQkQOhnNciXm2yrTYZMD3MOm2zBiiwFSU+dkwNbcfDumzzUprr1x70ClTdGuZwieBS1BM/k0KajRQX7r504Xw==} 441 | engines: {node: '>=12'} 442 | cpu: [arm64] 443 | os: [freebsd] 444 | requiresBuild: true 445 | optional: true 446 | 447 | /esbuild-linux-32/0.15.6: 448 | resolution: {integrity: sha512-IAkDNz3TpxwISTGVdQijwyHBZrbFgLlRi5YXcvaEHtgbmayLSDcJmH5nV1MFgo/x2QdKcHBkOYHdjhKxUAcPwg==} 449 | engines: {node: '>=12'} 450 | cpu: [ia32] 451 | os: [linux] 452 | requiresBuild: true 453 | optional: true 454 | 455 | /esbuild-linux-64/0.15.6: 456 | resolution: {integrity: sha512-gQPksyrEYfA4LJwyfTQWAZaVZCx4wpaLrSzo2+Xc9QLC+i/sMWmX31jBjrn4nLJCd79KvwCinto36QC7BEIU/A==} 457 | engines: {node: '>=12'} 458 | cpu: [x64] 459 | os: [linux] 460 | requiresBuild: true 461 | optional: true 462 | 463 | /esbuild-linux-arm/0.15.6: 464 | resolution: {integrity: sha512-xZ0Bq2aivsthDjA/ytQZzxrxIZbG0ATJYMJxNeOIBc1zUjpbVpzBKgllOZMsTSXMHFHGrow6TnCcgwqY0+oEoQ==} 465 | engines: {node: '>=12'} 466 | cpu: [arm] 467 | os: [linux] 468 | requiresBuild: true 469 | optional: true 470 | 471 | /esbuild-linux-arm64/0.15.6: 472 | resolution: {integrity: sha512-aovDkclFa6C9EdZVBuOXxqZx83fuoq8097xZKhEPSygwuy4Lxs8J4anHG7kojAsR+31lfUuxzOo2tHxv7EiNHA==} 473 | engines: {node: '>=12'} 474 | cpu: [arm64] 475 | os: [linux] 476 | requiresBuild: true 477 | optional: true 478 | 479 | /esbuild-linux-mips64le/0.15.6: 480 | resolution: {integrity: sha512-wVpW8wkWOGizsCqCwOR/G3SHwhaecpGy3fic9BF1r7vq4djLjUcA8KunDaBCjJ6TgLQFhJ98RjDuyEf8AGjAvw==} 481 | engines: {node: '>=12'} 482 | cpu: [mips64el] 483 | os: [linux] 484 | requiresBuild: true 485 | optional: true 486 | 487 | /esbuild-linux-ppc64le/0.15.6: 488 | resolution: {integrity: sha512-z6w6gsPH/Y77uchocluDC8tkCg9rfkcPTePzZKNr879bF4tu7j9t255wuNOCE396IYEGxY7y8u2HJ9i7kjCLVw==} 489 | engines: {node: '>=12'} 490 | cpu: [ppc64] 491 | os: [linux] 492 | requiresBuild: true 493 | optional: true 494 | 495 | /esbuild-linux-riscv64/0.15.6: 496 | resolution: {integrity: sha512-pfK/3MJcmbfU399TnXW5RTPS1S+ID6ra+CVj9TFZ2s0q9Ja1F5A1VirUUvViPkjiw+Kq3zveyn6U09Wg1zJXrw==} 497 | engines: {node: '>=12'} 498 | cpu: [riscv64] 499 | os: [linux] 500 | requiresBuild: true 501 | optional: true 502 | 503 | /esbuild-linux-s390x/0.15.6: 504 | resolution: {integrity: sha512-OZeeDu32liefcwAE63FhVqM4heWTC8E3MglOC7SK0KYocDdY/6jyApw0UDkDHlcEK9mW6alX/SH9r3PDjcCo/Q==} 505 | engines: {node: '>=12'} 506 | cpu: [s390x] 507 | os: [linux] 508 | requiresBuild: true 509 | optional: true 510 | 511 | /esbuild-netbsd-64/0.15.6: 512 | resolution: {integrity: sha512-kaxw61wcHMyiEsSsi5ut1YYs/hvTC2QkxJwyRvC2Cnsz3lfMLEu8zAjpBKWh9aU/N0O/gsRap4wTur5GRuSvBA==} 513 | engines: {node: '>=12'} 514 | cpu: [x64] 515 | os: [netbsd] 516 | requiresBuild: true 517 | optional: true 518 | 519 | /esbuild-openbsd-64/0.15.6: 520 | resolution: {integrity: sha512-CuoY60alzYfIZapUHqFXqXbj88bbRJu8Fp9okCSHRX2zWIcGz4BXAHXiG7dlCye5nFVrY72psesLuWdusyf2qw==} 521 | engines: {node: '>=12'} 522 | cpu: [x64] 523 | os: [openbsd] 524 | requiresBuild: true 525 | optional: true 526 | 527 | /esbuild-sunos-64/0.15.6: 528 | resolution: {integrity: sha512-1ceefLdPWcd1nW/ZLruPEYxeUEAVX0YHbG7w+BB4aYgfknaLGotI/ZvPWUZpzhC8l1EybrVlz++lm3E6ODIJOg==} 529 | engines: {node: '>=12'} 530 | cpu: [x64] 531 | os: [sunos] 532 | requiresBuild: true 533 | optional: true 534 | 535 | /esbuild-windows-32/0.15.6: 536 | resolution: {integrity: sha512-pBqdOsKqCD5LRYiwF29PJRDJZi7/Wgkz46u3d17MRFmrLFcAZDke3nbdDa1c8YgY78RiemudfCeAemN8EBlIpA==} 537 | engines: {node: '>=12'} 538 | cpu: [ia32] 539 | os: [win32] 540 | requiresBuild: true 541 | optional: true 542 | 543 | /esbuild-windows-64/0.15.6: 544 | resolution: {integrity: sha512-KpPOh4aTOo//g9Pk2oVAzXMpc9Sz9n5A9sZTmWqDSXCiiachfFhbuFlsKBGATYCVitXfmBIJ4nNYYWSOdz4hQg==} 545 | engines: {node: '>=12'} 546 | cpu: [x64] 547 | os: [win32] 548 | requiresBuild: true 549 | optional: true 550 | 551 | /esbuild-windows-arm64/0.15.6: 552 | resolution: {integrity: sha512-DB3G2x9OvFEa00jV+OkDBYpufq5x/K7a6VW6E2iM896DG4ZnAvJKQksOsCPiM1DUaa+DrijXAQ/ZOcKAqf/3Hg==} 553 | engines: {node: '>=12'} 554 | cpu: [arm64] 555 | os: [win32] 556 | requiresBuild: true 557 | optional: true 558 | 559 | /esbuild/0.15.6: 560 | resolution: {integrity: sha512-sgLOv3l4xklvXzzczhRwKRotyrfyZ2i1fCS6PTOLPd9wevDPArGU8HFtHrHCOcsMwTjLjzGm15gvC8uxVzQf+w==} 561 | engines: {node: '>=12'} 562 | hasBin: true 563 | requiresBuild: true 564 | optionalDependencies: 565 | '@esbuild/linux-loong64': 0.15.6 566 | esbuild-android-64: 0.15.6 567 | esbuild-android-arm64: 0.15.6 568 | esbuild-darwin-64: 0.15.6 569 | esbuild-darwin-arm64: 0.15.6 570 | esbuild-freebsd-64: 0.15.6 571 | esbuild-freebsd-arm64: 0.15.6 572 | esbuild-linux-32: 0.15.6 573 | esbuild-linux-64: 0.15.6 574 | esbuild-linux-arm: 0.15.6 575 | esbuild-linux-arm64: 0.15.6 576 | esbuild-linux-mips64le: 0.15.6 577 | esbuild-linux-ppc64le: 0.15.6 578 | esbuild-linux-riscv64: 0.15.6 579 | esbuild-linux-s390x: 0.15.6 580 | esbuild-netbsd-64: 0.15.6 581 | esbuild-openbsd-64: 0.15.6 582 | esbuild-sunos-64: 0.15.6 583 | esbuild-windows-32: 0.15.6 584 | esbuild-windows-64: 0.15.6 585 | esbuild-windows-arm64: 0.15.6 586 | 587 | /escape-string-regexp/1.0.5: 588 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 589 | engines: {node: '>=0.8.0'} 590 | dev: false 591 | 592 | /estree-walker/1.0.1: 593 | resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} 594 | dev: false 595 | 596 | /estree-walker/2.0.2: 597 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 598 | dev: false 599 | 600 | /fast-glob/3.2.11: 601 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 602 | engines: {node: '>=8.6.0'} 603 | dependencies: 604 | '@nodelib/fs.stat': 2.0.5 605 | '@nodelib/fs.walk': 1.2.8 606 | glob-parent: 5.1.2 607 | merge2: 1.4.1 608 | micromatch: 4.0.5 609 | dev: false 610 | 611 | /fastq/1.13.0: 612 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 613 | dependencies: 614 | reusify: 1.0.4 615 | dev: false 616 | 617 | /fill-range/7.0.1: 618 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 619 | engines: {node: '>=8'} 620 | dependencies: 621 | to-regex-range: 5.0.1 622 | dev: false 623 | 624 | /find-cache-dir/3.3.2: 625 | resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 626 | engines: {node: '>=8'} 627 | dependencies: 628 | commondir: 1.0.1 629 | make-dir: 3.1.0 630 | pkg-dir: 4.2.0 631 | dev: false 632 | 633 | /find-up/4.1.0: 634 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 635 | engines: {node: '>=8'} 636 | dependencies: 637 | locate-path: 5.0.0 638 | path-exists: 4.0.0 639 | dev: false 640 | 641 | /find-up/5.0.0: 642 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 643 | engines: {node: '>=10'} 644 | dependencies: 645 | locate-path: 6.0.0 646 | path-exists: 4.0.0 647 | dev: false 648 | 649 | /fs-extra/10.1.0: 650 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 651 | engines: {node: '>=12'} 652 | dependencies: 653 | graceful-fs: 4.2.10 654 | jsonfile: 6.1.0 655 | universalify: 2.0.0 656 | dev: false 657 | 658 | /fsevents/2.3.2: 659 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 660 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 661 | os: [darwin] 662 | requiresBuild: true 663 | optional: true 664 | 665 | /function-bind/1.1.1: 666 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 667 | 668 | /get-func-name/2.0.0: 669 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} 670 | dev: true 671 | 672 | /glob-parent/5.1.2: 673 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 674 | engines: {node: '>= 6'} 675 | dependencies: 676 | is-glob: 4.0.3 677 | dev: false 678 | 679 | /globals/11.12.0: 680 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 681 | engines: {node: '>=4'} 682 | dev: false 683 | 684 | /globby/13.1.2: 685 | resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==} 686 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 687 | dependencies: 688 | dir-glob: 3.0.1 689 | fast-glob: 3.2.11 690 | ignore: 5.2.0 691 | merge2: 1.4.1 692 | slash: 4.0.0 693 | dev: false 694 | 695 | /graceful-fs/4.2.10: 696 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 697 | dev: false 698 | 699 | /has-flag/3.0.0: 700 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 701 | engines: {node: '>=4'} 702 | dev: false 703 | 704 | /has/1.0.3: 705 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 706 | engines: {node: '>= 0.4.0'} 707 | dependencies: 708 | function-bind: 1.1.1 709 | 710 | /ignore/5.2.0: 711 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 712 | engines: {node: '>= 4'} 713 | dev: false 714 | 715 | /is-core-module/2.10.0: 716 | resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} 717 | dependencies: 718 | has: 1.0.3 719 | 720 | /is-extglob/2.1.1: 721 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 722 | engines: {node: '>=0.10.0'} 723 | dev: false 724 | 725 | /is-glob/4.0.3: 726 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 727 | engines: {node: '>=0.10.0'} 728 | dependencies: 729 | is-extglob: 2.1.1 730 | dev: false 731 | 732 | /is-number/7.0.0: 733 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 734 | engines: {node: '>=0.12.0'} 735 | dev: false 736 | 737 | /js-tokens/4.0.0: 738 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 739 | dev: false 740 | 741 | /jsesc/2.5.2: 742 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 743 | engines: {node: '>=4'} 744 | hasBin: true 745 | dev: false 746 | 747 | /jsonfile/6.1.0: 748 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 749 | dependencies: 750 | universalify: 2.0.0 751 | optionalDependencies: 752 | graceful-fs: 4.2.10 753 | dev: false 754 | 755 | /local-pkg/0.4.2: 756 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} 757 | engines: {node: '>=14'} 758 | dev: true 759 | 760 | /locate-path/5.0.0: 761 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 762 | engines: {node: '>=8'} 763 | dependencies: 764 | p-locate: 4.1.0 765 | dev: false 766 | 767 | /locate-path/6.0.0: 768 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 769 | engines: {node: '>=10'} 770 | dependencies: 771 | p-locate: 5.0.0 772 | dev: false 773 | 774 | /loupe/2.3.4: 775 | resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} 776 | dependencies: 777 | get-func-name: 2.0.0 778 | dev: true 779 | 780 | /make-dir/3.1.0: 781 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 782 | engines: {node: '>=8'} 783 | dependencies: 784 | semver: 6.3.0 785 | dev: false 786 | 787 | /merge2/1.4.1: 788 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 789 | engines: {node: '>= 8'} 790 | dev: false 791 | 792 | /micromatch/4.0.5: 793 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 794 | engines: {node: '>=8.6'} 795 | dependencies: 796 | braces: 3.0.2 797 | picomatch: 2.3.1 798 | dev: false 799 | 800 | /ms/2.1.2: 801 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 802 | 803 | /nanoid/3.3.4: 804 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 805 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 806 | hasBin: true 807 | dev: true 808 | 809 | /p-limit/2.3.0: 810 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 811 | engines: {node: '>=6'} 812 | dependencies: 813 | p-try: 2.2.0 814 | dev: false 815 | 816 | /p-limit/3.1.0: 817 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 818 | engines: {node: '>=10'} 819 | dependencies: 820 | yocto-queue: 0.1.0 821 | dev: false 822 | 823 | /p-locate/4.1.0: 824 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 825 | engines: {node: '>=8'} 826 | dependencies: 827 | p-limit: 2.3.0 828 | dev: false 829 | 830 | /p-locate/5.0.0: 831 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 832 | engines: {node: '>=10'} 833 | dependencies: 834 | p-limit: 3.1.0 835 | dev: false 836 | 837 | /p-try/2.2.0: 838 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 839 | engines: {node: '>=6'} 840 | dev: false 841 | 842 | /path-exists/4.0.0: 843 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 844 | engines: {node: '>=8'} 845 | dev: false 846 | 847 | /path-is-network-drive/1.0.16: 848 | resolution: {integrity: sha512-nnU+ssj5jUxQ5lTxNXHkPJeQ2ZVpsoGLEyM+eSCe9Q7v2NhiJhxlCECuUvhICOIgJd3OVFTWlrmCoAE64X6qsQ==} 849 | dependencies: 850 | tslib: 2.4.0 851 | dev: false 852 | 853 | /path-parse/1.0.7: 854 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 855 | 856 | /path-strip-sep/1.0.13: 857 | resolution: {integrity: sha512-lxc+Mv83LrhLolN1E7lhIb2XLT3epL6QT/rrLySo6MEK08E5dTKxGFGSiqr71H9W9xe7uOgzlpN8hFqpavF0Gg==} 858 | dependencies: 859 | tslib: 2.4.0 860 | dev: false 861 | 862 | /path-type/4.0.0: 863 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 864 | engines: {node: '>=8'} 865 | dev: false 866 | 867 | /pathval/1.1.1: 868 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 869 | dev: true 870 | 871 | /picocolors/1.0.0: 872 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 873 | dev: true 874 | 875 | /picomatch/2.3.1: 876 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 877 | engines: {node: '>=8.6'} 878 | dev: false 879 | 880 | /pkg-dir/4.2.0: 881 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 882 | engines: {node: '>=8'} 883 | dependencies: 884 | find-up: 4.1.0 885 | dev: false 886 | 887 | /pkg-dir/5.0.0: 888 | resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} 889 | engines: {node: '>=10'} 890 | dependencies: 891 | find-up: 5.0.0 892 | dev: false 893 | 894 | /postcss/8.4.16: 895 | resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==} 896 | engines: {node: ^10 || ^12 || >=14} 897 | dependencies: 898 | nanoid: 3.3.4 899 | picocolors: 1.0.0 900 | source-map-js: 1.0.2 901 | dev: true 902 | 903 | /queue-microtask/1.2.3: 904 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 905 | dev: false 906 | 907 | /resolve/1.22.1: 908 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 909 | hasBin: true 910 | dependencies: 911 | is-core-module: 2.10.0 912 | path-parse: 1.0.7 913 | supports-preserve-symlinks-flag: 1.0.0 914 | 915 | /reusify/1.0.4: 916 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 917 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 918 | dev: false 919 | 920 | /rollup-plugin-typescript2/0.31.2_id3sp2lbl4kx3dskm7teaj32um: 921 | resolution: {integrity: sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==} 922 | peerDependencies: 923 | rollup: '>=1.26.3' 924 | typescript: '>=2.4.0' 925 | dependencies: 926 | '@rollup/pluginutils': 4.2.1 927 | '@yarn-tool/resolve-package': 1.0.47 928 | find-cache-dir: 3.3.2 929 | fs-extra: 10.1.0 930 | resolve: 1.22.1 931 | rollup: 2.79.0 932 | tslib: 2.4.0 933 | typescript: 4.8.2 934 | dev: false 935 | 936 | /rollup-plugin-virtual/1.0.1: 937 | resolution: {integrity: sha512-HCTBpV8MwP5lNzZrHD2moVxHIToHU1EkzkKGVj6Z0DcgUfxrxrZmeQirQeLz2yhnkJqRjwiVywK9CS8jDYakrw==} 938 | deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-virtual. 939 | dev: false 940 | 941 | /rollup/2.78.1: 942 | resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} 943 | engines: {node: '>=10.0.0'} 944 | hasBin: true 945 | optionalDependencies: 946 | fsevents: 2.3.2 947 | dev: true 948 | 949 | /rollup/2.79.0: 950 | resolution: {integrity: sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==} 951 | engines: {node: '>=10.0.0'} 952 | hasBin: true 953 | optionalDependencies: 954 | fsevents: 2.3.2 955 | dev: false 956 | 957 | /run-parallel/1.2.0: 958 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 959 | dependencies: 960 | queue-microtask: 1.2.3 961 | dev: false 962 | 963 | /semver/6.3.0: 964 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 965 | hasBin: true 966 | dev: false 967 | 968 | /slash/4.0.0: 969 | resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} 970 | engines: {node: '>=12'} 971 | dev: false 972 | 973 | /source-map-js/1.0.2: 974 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 975 | engines: {node: '>=0.10.0'} 976 | dev: true 977 | 978 | /strip-literal/0.4.2: 979 | resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} 980 | dependencies: 981 | acorn: 8.8.0 982 | dev: true 983 | 984 | /supports-color/5.5.0: 985 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 986 | engines: {node: '>=4'} 987 | dependencies: 988 | has-flag: 3.0.0 989 | dev: false 990 | 991 | /supports-preserve-symlinks-flag/1.0.0: 992 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 993 | engines: {node: '>= 0.4'} 994 | 995 | /tinybench/2.1.5: 996 | resolution: {integrity: sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ==} 997 | dev: true 998 | 999 | /tinypool/0.3.0: 1000 | resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==} 1001 | engines: {node: '>=14.0.0'} 1002 | dev: true 1003 | 1004 | /tinyspy/1.0.2: 1005 | resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==} 1006 | engines: {node: '>=14.0.0'} 1007 | dev: true 1008 | 1009 | /to-fast-properties/2.0.0: 1010 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1011 | engines: {node: '>=4'} 1012 | 1013 | /to-regex-range/5.0.1: 1014 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1015 | engines: {node: '>=8.0'} 1016 | dependencies: 1017 | is-number: 7.0.0 1018 | dev: false 1019 | 1020 | /tslib/2.4.0: 1021 | resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} 1022 | dev: false 1023 | 1024 | /type-detect/4.0.8: 1025 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1026 | engines: {node: '>=4'} 1027 | dev: true 1028 | 1029 | /typescript/4.8.2: 1030 | resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==} 1031 | engines: {node: '>=4.2.0'} 1032 | hasBin: true 1033 | 1034 | /universalify/2.0.0: 1035 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 1036 | engines: {node: '>= 10.0.0'} 1037 | dev: false 1038 | 1039 | /upath2/3.1.15: 1040 | resolution: {integrity: sha512-b2QxNkfs6w+LZcgYZaBrS0Eo0OXsg5BbFtbVQleSpr8l8Iz+N2baP6eUvOJG0s+6M/qeCf8JI9BQXBXDwB5yOA==} 1041 | dependencies: 1042 | '@types/node': 17.0.45 1043 | path-is-network-drive: 1.0.16 1044 | path-strip-sep: 1.0.13 1045 | tslib: 2.4.0 1046 | dev: false 1047 | 1048 | /vite/3.1.2: 1049 | resolution: {integrity: sha512-wTDKPkiVbeT+drTPdkuvjVIC/2vKKUc1w3qNOuwgpyvPCZF6fvdxB5v5WEcCsqaYea0zrwA4+XialJKCHM3oVQ==} 1050 | engines: {node: ^14.18.0 || >=16.0.0} 1051 | hasBin: true 1052 | peerDependencies: 1053 | less: '*' 1054 | sass: '*' 1055 | stylus: '*' 1056 | terser: ^5.4.0 1057 | peerDependenciesMeta: 1058 | less: 1059 | optional: true 1060 | sass: 1061 | optional: true 1062 | stylus: 1063 | optional: true 1064 | terser: 1065 | optional: true 1066 | dependencies: 1067 | esbuild: 0.15.6 1068 | postcss: 8.4.16 1069 | resolve: 1.22.1 1070 | rollup: 2.78.1 1071 | optionalDependencies: 1072 | fsevents: 2.3.2 1073 | dev: true 1074 | 1075 | /vitest/0.23.4: 1076 | resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==} 1077 | engines: {node: '>=v14.16.0'} 1078 | hasBin: true 1079 | peerDependencies: 1080 | '@edge-runtime/vm': '*' 1081 | '@vitest/browser': '*' 1082 | '@vitest/ui': '*' 1083 | happy-dom: '*' 1084 | jsdom: '*' 1085 | peerDependenciesMeta: 1086 | '@edge-runtime/vm': 1087 | optional: true 1088 | '@vitest/browser': 1089 | optional: true 1090 | '@vitest/ui': 1091 | optional: true 1092 | happy-dom: 1093 | optional: true 1094 | jsdom: 1095 | optional: true 1096 | dependencies: 1097 | '@types/chai': 4.3.3 1098 | '@types/chai-subset': 1.3.3 1099 | '@types/node': 17.0.45 1100 | chai: 4.3.6 1101 | debug: 4.3.4 1102 | local-pkg: 0.4.2 1103 | strip-literal: 0.4.2 1104 | tinybench: 2.1.5 1105 | tinypool: 0.3.0 1106 | tinyspy: 1.0.2 1107 | vite: 3.1.2 1108 | transitivePeerDependencies: 1109 | - less 1110 | - sass 1111 | - stylus 1112 | - supports-color 1113 | - terser 1114 | dev: true 1115 | 1116 | /yocto-queue/0.1.0: 1117 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1118 | engines: {node: '>=10'} 1119 | dev: false 1120 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - packages/* -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | 26 | /* Modules */ 27 | "module": "ESNext" /* Specify what module code is generated. */, 28 | // "rootDir": "./", /* Specify the root folder within your source files. */ 29 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 30 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 31 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 32 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 33 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 34 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 35 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 36 | // "resolveJsonModule": true, /* Enable importing .json files */ 37 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 38 | 39 | /* JavaScript Support */ 40 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 41 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 42 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 43 | 44 | /* Emit */ 45 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 46 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 47 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 48 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 49 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 50 | // "outDir": "./lib" /* Specify an output folder for all emitted files. */, 51 | // "removeComments": true, /* Disable emitting comments. */ 52 | // "noEmit": true, /* Disable emitting files from a compilation. */ 53 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 54 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 55 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 56 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 58 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 59 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 60 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 61 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 62 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 63 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 64 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 65 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 66 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 67 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 68 | 69 | /* Interop Constraints */ 70 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 71 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 72 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, 73 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 74 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 75 | 76 | /* Type Checking */ 77 | "strict": true /* Enable all strict type-checking options. */, 78 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 79 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 80 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 81 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 82 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 83 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 84 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 85 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 86 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 87 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 88 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 89 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 90 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 91 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 92 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 93 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 94 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 95 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 96 | 97 | /* Completeness */ 98 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 99 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 100 | } 101 | } 102 | --------------------------------------------------------------------------------