[
  {
    "path": ".gitattributes",
    "content": "# Treat all bases as \nbases/*.json linguist-language=JSON-with-Comments\n"
  },
  {
    "path": ".github/workflows/CI.yml",
    "content": "name: CI\n\n# For testing\non: pull_request\n\njobs:\n  ci:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout tree\n        uses: actions/checkout@v3\n\n      - name: Set-up Deno\n        uses: denoland/setup-deno@v1\n        with:\n          deno-version: v1.x\n\n      # Build all the packages\n      - name: Create packages for TSConfig JSONs\n        run: deno run --allow-read --allow-write --allow-net scripts/create-npm-packages.ts\n\n      - name: Test\n        working-directory: test/\n        run: |\n          corepack enable\n          pnpm install\n          pnpm test\n\n      - name: Update the README\n        run: deno run --allow-read --allow-write --allow-net scripts/update-markdown-readme.ts\n\n      - name: Fail if the README needs updating\n        run: |\n          if [[ -z $(git status -s) ]]\n          then\n            echo \"\"\n          else\n            echo \"Please update the README via: deno run --allow-read --allow-write scripts/update-markdown-readme.ts\"\n            exit 1\n          fi\n"
  },
  {
    "path": ".github/workflows/deploy.yml",
    "content": "name: Daily builds of changes to the TSConfig bases dir\n\n# For testing\n# on: push\n\n# For production\non:\n  schedule:\n    - cron: 0 4 * * *\n  workflow_dispatch:\n\npermissions:\n  id-token: write\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout tree\n        uses: actions/checkout@v3\n\n      - name: Set-up Node.js\n        uses: actions/setup-node@v3\n        with:\n          node-version: lts/*\n          registry-url: https://registry.npmjs.org\n\n      - name: Set-up Deno\n        uses: denoland/setup-deno@v1\n        with:\n          deno-version: v1.x\n\n      # Build all the packages\n      - name: Create packages for TSConfig JSONs\n        run: deno run --allow-read --allow-write --allow-net scripts/create-npm-packages.ts\n\n      # Deploy anything which differs from the npm version of a tsconfig\n      - name: \"Deploy built packages to NPM\"\n        run: |\n          deno run --allow-read --allow-run --allow-env --allow-net scripts/deploy-changed-npm-packages.ts\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "*.log\npackages/\n.idea/\nnode_modules\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\"denoland.vscode-deno\"]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"cSpell.words\": [\"Deno\"],\n  \"deno.enable\": true,\n  \"[typescript]\": {\n    \"editor.defaultFormatter\": \"denoland.vscode-deno\"\n  },\n  \"files.associations\": {\n    \"**/bases/*.json\": \"jsonc\"\n  },\n}\n"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) Microsoft Corporation.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE\n"
  },
  {
    "path": "README.md",
    "content": "## Centralized Recommendations for TSConfig bases\n\nHosts TSConfigs for you to extend in your apps, tuned to a particular runtime environment. Owned and improved by the community.\nBasically Definitely Typed for TSConfigs.\n\nWe target the latest stable version of TypeScript, note that because we want to be consistent with the versioning the target runtime we can't always do semver releases.\n\n### Table of TSConfigs\n\n| Name                                                                 | Package                                                                              |\n| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |\n| [Recommended](#recommended-tsconfigjson)                             | [`@tsconfig/recommended`](https://npmjs.com/package/@tsconfig/recommended)           |\n| [Bun](#bun-tsconfigjson)                                             | [`@tsconfig/bun`](https://npmjs.com/package/@tsconfig/bun)                           |\n| [Create React App](#create-react-app-tsconfigjson)                   | [`@tsconfig/create-react-app`](https://npmjs.com/package/@tsconfig/create-react-app) |\n| [Cypress](#cypress-tsconfigjson)                                     | [`@tsconfig/cypress`](https://npmjs.com/package/@tsconfig/cypress)                   |\n| [Deno](#deno-tsconfigjson)                                           | [`@tsconfig/deno`](https://npmjs.com/package/@tsconfig/deno)                         |\n| [Docusaurus v2](#docusaurus-v2-tsconfigjson)                         | [`@tsconfig/docusaurus`](https://npmjs.com/package/@tsconfig/docusaurus)             |\n| [Ember](#ember-tsconfigjson)                                         | [`@tsconfig/ember`](https://npmjs.com/package/@tsconfig/ember)                       |\n| [Next.js](#nextjs-tsconfigjson)                                      | [`@tsconfig/next`](https://npmjs.com/package/@tsconfig/next)                         |\n| [Node LTS](#node-lts-22-tsconfigjson)                                | [`@tsconfig/node-lts`](https://npmjs.com/package/@tsconfig/node-lts)                 |\n| [Node 10](#node-10-tsconfigjson)                                     | [`@tsconfig/node10`](https://npmjs.com/package/@tsconfig/node10)                     |\n| [Node 12](#node-12-tsconfigjson)                                     | [`@tsconfig/node12`](https://npmjs.com/package/@tsconfig/node12)                     |\n| [Node 14](#node-14-tsconfigjson)                                     | [`@tsconfig/node14`](https://npmjs.com/package/@tsconfig/node14)                     |\n| [Node 16](#node-16-tsconfigjson)                                     | [`@tsconfig/node16`](https://npmjs.com/package/@tsconfig/node16)                     |\n| [Node 17](#node-17-tsconfigjson)                                     | [`@tsconfig/node17`](https://npmjs.com/package/@tsconfig/node17)                     |\n| [Node 18](#node-18-tsconfigjson)                                     | [`@tsconfig/node18`](https://npmjs.com/package/@tsconfig/node18)                     |\n| [Node 19](#node-19-tsconfigjson)                                     | [`@tsconfig/node19`](https://npmjs.com/package/@tsconfig/node19)                     |\n| [Node 20](#node-20-tsconfigjson)                                     | [`@tsconfig/node20`](https://npmjs.com/package/@tsconfig/node20)                     |\n| [Node 21](#node-21-tsconfigjson)                                     | [`@tsconfig/node21`](https://npmjs.com/package/@tsconfig/node21)                     |\n| [Node 22](#node-22-tsconfigjson)                                     | [`@tsconfig/node22`](https://npmjs.com/package/@tsconfig/node22)                     |\n| [Node 23](#node-23-tsconfigjson)                                     | [`@tsconfig/node23`](https://npmjs.com/package/@tsconfig/node23)                     |\n| [Node 24](#node-24-tsconfigjson)                                     | [`@tsconfig/node24`](https://npmjs.com/package/@tsconfig/node24)                     |\n| [Node with TypeScript](#node-with-typescript-ts-58-only-tsconfigjson)| [`@tsconfig/node-ts`](https://npmjs.com/package/@tsconfig/node-ts)                   |\n| [Nuxt](#nuxt-tsconfigjson)                                           | [`@tsconfig/nuxt`](https://npmjs.com/package/@tsconfig/nuxt)                         |\n| [QJSEngine](#qjsengine-tsconfigjson)                                 | [`@tsconfig/qjsengine`](https://npmjs.com/package/@tsconfig/qtsengine)               |\n| [React Native](#react-native-tsconfigjson)                           | [`@tsconfig/react-native`](https://npmjs.com/package/@tsconfig/react-native)         |\n| [Remix](#remix-tsconfigjson)                                         | [`@tsconfig/remix`](https://npmjs.com/package/@tsconfig/remix)                       |\n| [Strictest](#strictest-tsconfigjson)                                 | [`@tsconfig/strictest`](https://npmjs.com/package/@tsconfig/strictest)               |\n| [Svelte](#svelte-tsconfigjson)                                       | [`@tsconfig/svelte`](https://npmjs.com/package/@tsconfig/svelte)                     |\n| [Taro](#taro-tsconfigjson)                                           | [`@tsconfig/taro`](https://npmjs.com/package/@tsconfig/taro)                         |\n| [Vite React](#vite-react-tsconfigjson)                               | [`@tsconfig/vite-react`](https://npmjs.com/package/@tsconfig/vite-react)             |\n| [Bases](#bases-tsconfigjson)                               | [`@tsconfig/bases`](https://npmjs.com/package/@tsconfig/bases)             |\n\n\n### Available TSConfigs\n\n<!-- AUTO -->\n### Recommended <kbd><a href=\"./bases/recommended.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/recommended\nyarn add --dev @tsconfig/recommended\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/recommended/tsconfig.json\"\n```\n\n### Bun <kbd><a href=\"./bases/bun.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/bun\nyarn add --dev @tsconfig/bun\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/bun/tsconfig.json\"\n```\n\n### Create React App <kbd><a href=\"./bases/create-react-app.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/create-react-app\nyarn add --dev @tsconfig/create-react-app\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/create-react-app/tsconfig.json\"\n```\n\n### Cypress <kbd><a href=\"./bases/cypress.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/cypress\nyarn add --dev @tsconfig/cypress\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/cypress/tsconfig.json\"\n```\n\n### Deno <kbd><a href=\"./bases/deno.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/deno\nyarn add --dev @tsconfig/deno\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/deno/tsconfig.json\"\n```\n\n### Docusaurus v2 <kbd><a href=\"./bases/docusaurus.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/docusaurus\nyarn add --dev @tsconfig/docusaurus\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/docusaurus/tsconfig.json\"\n```\n\n\n\n> **NOTE**: You may need to add `\"baseUrl\": \".\"` to your `tsconfig.json` to support proper file resolution.\n\n### Ember <kbd><a href=\"./bases/ember.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/ember\nyarn add --dev @tsconfig/ember\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/ember/tsconfig.json\"\n```\n\n\n\n> **NOTE**: You may need to add `\"baseUrl\": \".\"` to your `tsconfig.json` to support proper file resolution.\n\n### Next.js <kbd><a href=\"./bases/next.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/next\nyarn add --dev @tsconfig/next\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/next/tsconfig.json\"\n```\n\n### Node LTS (24) <kbd><a href=\"./bases/node-lts.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node-lts\nyarn add --dev @tsconfig/node-lts\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node-lts/tsconfig.json\"\n```\n\n### Node with TypeScript (TS >=5.8 ONLY) <kbd><a href=\"./bases/node-ts.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node-ts\nyarn add --dev @tsconfig/node-ts\n```\n\n\n> This base require TypeScript 5.8+ (See [announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-5-8-beta/#the---erasablesyntaxonly-option))\n\nThis file is meant to be used in conjunction with other Node.js configurations, you can do so by extending multiple files in the `extends` clause of your `tsconfig.json`:\n\n```json\n{\n  \"extends\": [\"@tsconfig/node22/tsconfig.json\", \"@tsconfig/node-ts/tsconfig.json\"]\n}\n```\n\n### Node 10 <kbd><a href=\"./bases/node10.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node10\nyarn add --dev @tsconfig/node10\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node10/tsconfig.json\"\n```\n\n### Node 12 <kbd><a href=\"./bases/node12.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node12\nyarn add --dev @tsconfig/node12\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node12/tsconfig.json\"\n```\n\n### Node 14 <kbd><a href=\"./bases/node14.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node14\nyarn add --dev @tsconfig/node14\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node14/tsconfig.json\"\n```\n\n### Node 16 <kbd><a href=\"./bases/node16.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node16\nyarn add --dev @tsconfig/node16\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node16/tsconfig.json\"\n```\n\n### Node 17 <kbd><a href=\"./bases/node17.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node17\nyarn add --dev @tsconfig/node17\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node17/tsconfig.json\"\n```\n\n### Node 18 <kbd><a href=\"./bases/node18.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node18\nyarn add --dev @tsconfig/node18\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node18/tsconfig.json\"\n```\n\n### Node 19 <kbd><a href=\"./bases/node19.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node19\nyarn add --dev @tsconfig/node19\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node19/tsconfig.json\"\n```\n\n### Node 20 <kbd><a href=\"./bases/node20.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node20\nyarn add --dev @tsconfig/node20\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node20/tsconfig.json\"\n```\n\n### Node 21 <kbd><a href=\"./bases/node21.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node21\nyarn add --dev @tsconfig/node21\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node21/tsconfig.json\"\n```\n\n### Node 22 <kbd><a href=\"./bases/node22.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node22\nyarn add --dev @tsconfig/node22\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node22/tsconfig.json\"\n```\n\n### Node 23 <kbd><a href=\"./bases/node23.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node23\nyarn add --dev @tsconfig/node23\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node23/tsconfig.json\"\n```\n\n### Node 24 <kbd><a href=\"./bases/node24.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/node24\nyarn add --dev @tsconfig/node24\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/node24/tsconfig.json\"\n```\n\n### Nuxt <kbd><a href=\"./bases/nuxt.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/nuxt\nyarn add --dev @tsconfig/nuxt\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/nuxt/tsconfig.json\"\n```\n\n\n\n> **NOTE**: You may need to add `\"baseUrl\": \".\"` to your `tsconfig.json` to support proper file resolution.\n\n### QJSEngine <kbd><a href=\"./bases/qjsengine.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/qjsengine\nyarn add --dev @tsconfig/qjsengine\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/qjsengine/tsconfig.json\"\n```\n\n### React Native <kbd><a href=\"./bases/react-native.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/react-native\nyarn add --dev @tsconfig/react-native\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/react-native/tsconfig.json\"\n```\n\n### Remix <kbd><a href=\"./bases/remix.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/remix\nyarn add --dev @tsconfig/remix\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/remix/tsconfig.json\"\n```\n\n\n\n> **NOTE**: You may need to add `\"baseUrl\": \".\"` to your `tsconfig.json` to support proper file resolution.\n\n### Strictest <kbd><a href=\"./bases/strictest.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/strictest\nyarn add --dev @tsconfig/strictest\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/strictest/tsconfig.json\"\n```\n\n### Svelte <kbd><a href=\"./bases/svelte.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/svelte\nyarn add --dev @tsconfig/svelte\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/svelte/tsconfig.json\"\n```\n\n\n\n> **NOTE**: After `@tsconfig/svelte@2.0.0`, you should add `/// <reference types=\"svelte\" />` to a `d.ts` or a `index.ts`(entry) file to prevent typescript error.\n\n### Taro <kbd><a href=\"./bases/taro.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/taro\nyarn add --dev @tsconfig/taro\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/taro/tsconfig.json\"\n```\n\n### Vite React <kbd><a href=\"./bases/vite-react.json\">tsconfig.json</a></kbd>\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/vite-react\nyarn add --dev @tsconfig/vite-react\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/vite-react/tsconfig.json\"\n```\n\n\n<!-- /AUTO -->\n\n### Bases tsconfig.json\n\nInstall:\n\n```sh\nnpm install --save-dev @tsconfig/bases\nyarn add --dev @tsconfig/bases\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n// \"extends\": \"@tsconfig/bases/<base>\"\n\"extends\": \"@tsconfig/bases/node-lts\"\n```\n\n### What about combined configs?\n\nBecause of previous limitations in the config extension system of TypeScript,\nthis repo used to provide combined configs from a few common bases (like Node + ESM,\nNode + Strictest and so on).\n\nThis issue is now moot since TypeScript v5.0.0, which provides the [ability to\nextend from multiple configs at once](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-rc/#supporting-multiple-configuration-files-in-extends). For instance, if you want\nto start from a Node 18 + Strictest base config, you can install [@tsconfig/bases](#bases-tsconfigjson) (or both\n`@tsconfig/node18` and `@tsconfig/strictest`) package and extend those configs like so:\n\n```jsonc\n// tsconfig.json\n{\n  \"extends\": [\"@tsconfig/bases/strictest\", \"@tsconfig/bases/node18\"]\n  // or \"extends\": [\"@tsconfig/strictest/tsconfig\", \"@tsconfig/node18/tsconfig\"]\n}\n```\n\nYou can see the result of the combined configs via `tsc --showConfig`.\n\n### What about `@tsconfig/esm`?\n\nWe deprecated it in favour of setting [module/moduleResolution](https://github.com/tsconfig/bases/pull/197) to node/bundler.\n\n### Contributing\n\n```sh\ngit clone https://github.com/tsconfig/bases.git tsconfig-bases\ncd tsconfig-bases\n```\n\nThen edit the tsconfig.json files in [`bases/`](./bases).\n\nEvery morning there is a GitHub Action which deploys any changed bases.\n\nTo generate the recommended TSConfig which is generated via `tsc --init`, run:\n\n```sh\ndeno run --allow-read --allow-run --allow-env --allow-write --allow-net scripts/generate-recommend.ts\n```\n\n### Developing\n\nCreate a set of npm packages via:\n\n```sh\ndeno run --allow-read --allow-write --allow-net scripts/create-npm-packages.ts\n```\n\nYou can inspect them in the `packages/` folder, then they are deployed by passing in the paths to the base files via stdin:\n\n```sh\ndeno run --allow-read --allow-run --allow-env --allow-net scripts/deploy-changed-npm-packages.ts\n```\n\nThe rest of the files in this repo are for deploying, which uses [Deno](https://deno.land) 1.0.\n\nIf you add a new json file, please run `deno run --allow-read --allow-write scripts/update-markdown-readme.ts` to update the README.\n"
  },
  {
    "path": "bases/bun.json",
    "content": "{\n  // This is based on https://bun.com/docs/typescript#suggested-compileroptions\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Bun\",\n  \"docs\": \"https://bun.com/docs/typescript\",\n\n  \"compilerOptions\": {\n    // Environment setup & latest features\n    \"lib\": [\"ESNext\"],\n    \"target\": \"ESNext\",\n    \"module\": \"Preserve\",\n    \"moduleDetection\": \"force\",\n    \"jsx\": \"react-jsx\",\n    \"allowJs\": true,\n\n    // Bundler mode\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"verbatimModuleSyntax\": true,\n    \"noEmit\": true,\n\n    // Best practices\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitOverride\": true,\n\n    // Some stricter flags (disabled by default)\n    \"noUnusedLocals\": false,\n    \"noUnusedParameters\": false,\n    \"noPropertyAccessFromIndexSignature\": false\n  }\n}\n"
  },
  {
    "path": "bases/create-react-app.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Create React App\",\n  \"_version\": \"2.0.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"target\": \"es2015\",\n\n    \"allowJs\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"react-jsx\",\n    \"noEmit\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"resolveJsonModule\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true\n  }\n}\n"
  },
  {
    "path": "bases/cypress.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Cypress\",\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\"es5\", \"dom\"],\n    \"types\": [\"cypress\"]\n  }\n}\n"
  },
  {
    "path": "bases/deno.json",
    "content": "{\n  // This is based on https://deno.land/manual/getting_started/typescript#custom-typescript-compiler-options\n  // then the defaults are removed.\n\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Deno\",\n\n  \"compilerOptions\": {\n    \"jsx\": \"react\",\n    \"lib\": [],\n    \"resolveJsonModule\": true,\n    \"strict\": true\n  }\n}\n"
  },
  {
    "path": "bases/docusaurus.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Docusaurus v2\",\n  \"docs\": \"https://v2.docusaurus.io/docs/typescript-support\",\n  \"_version\": \"2.0.0\",\n  \n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"esModuleInterop\": true,\n    \"jsx\": \"react\",\n    \"lib\": [\"dom\"],\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"noEmit\": true,\n    \"types\": [\"node\", \"@docusaurus/module-type-aliases\", \"@docusaurus/theme-classic\"],\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@site/*\": [\"./*\"]\n    },\n    \"skipLibCheck\": true\n  }\n}\n"
  },
  {
    "path": "bases/ember.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Ember\",\n  \"docs\": \"https://guides.emberjs.com/release/typescript/\",\n  \"_version\": \"3.0.0\",\n  \"_deprecated\": true,  \n\n  // This is the base config used by Ember apps and addons. When actually used\n  // via Ember CLI (e.g. ember-cli-typescript's blueprint), it additionally has\n  // `compilerOptions.baseUrl`, `compilerOptions.paths`, and `include` set.\n  \"compilerOptions\": {\n    \"target\": \"es2023\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n\n    // We don't want to include types dependencies in our compiled output, so tell TypeScript\n    // to enforce using `import type` instead of `import` for Types.\n    \"verbatimModuleSyntax\": true,\n\n    // Trying to check Ember apps and addons with `allowJs: true` is a recipe\n    // for many unresolveable type errors, because with *considerable* extra\n    // configuration it ends up including many files which are *not* valid and\n    // cannot be: they *appear* to be resolve-able to TS, but are in fact not in\n    // valid Node-resolveable locations and may not have TS-ready types. This\n    // will likely improve over time\n    \"allowJs\": false,\n\n    // Practically, it is *nearly* impossible to have every type-checked\n    // package in your dependency graph to have compatible types.\n    // Good stewards of the ecosystem may opt to set this to false and try to \n    // fix packages with failures, but for most people, the error information\n    // is inactionable noise.\n    \"skipLibCheck\": true,\n\n    // --- TS for SemVer Types compatibility\n    // Strictness settings -- you should *not* change these: Ember code is not\n    // guaranteed to type check with these set to looser values.\n    \"strict\": true,\n    \"noUncheckedIndexedAccess\": true,\n\n    // Interop: this is viral and will require anyone downstream of your package\n    // to *also* set them to true. However, this represents the way that\n    // bundlers actually work, and is future-compatible with the closest module\n    // modes: \"nodenext\" in TS 4.7+ and \"mixed\" in 5.0+ mode. Since Ember apps\n    // and addons never emit with `tsc`, this is safe: it makes type-checking do\n    // the right thing, but does not result in changes to what gets emitted. We\n    // intentionally leave `esModuleInterop` unset, so that it gets whatever TS\n    // provides as the default for the currently-specified `module` mode.\n    \"allowSyntheticDefaultImports\": true,\n\n    // --- Lint-style rules\n\n    // TypeScript also supplies some lint-style checks; nearly all of them are\n    // better handled by ESLint with the `@typescript-eslint`. This one is more\n    // like a safety check, though, so we leave it on.\n    \"noPropertyAccessFromIndexSignature\": true,\n\n    // --- Compilation/integration settings\n    // Setting `noEmitOnError` here allows tools trying to respect the tsconfig\n    // to still emit code without breaking on errors.\n    // Errors are still reported in the CLI when running `tsc` or `glint`,\n    // but the errors won't prevent code from being emitted.\n    // This helps hasten development by allowing devs to prototype before coming\n    // to a decision on what they want their types to be.\n    \"noEmitOnError\": false,\n\n    // We use Babel for emitting runtime code, because it's very important that\n    // we always and only use the same transpiler for non-stable features, in\n    // particular decorators. If you were to change this to `true`, it could\n    // lead to accidentally generating code with `tsc` instead of Babel, and\n    // could thereby result in broken code at runtime.\n    \"noEmit\": true,\n\n    // Ember makes heavy use of decorators; TS does not support them at all\n    // without this flag.\n    \"experimentalDecorators\": true,\n\n    // We don't use TS for compilation, so we can disable these.\n    // Library authors should set declaration and declarationMap to true, however\n    \"declaration\": false,\n    \"declarationMap\": false,\n    \"inlineSourceMap\": false,\n    \"inlineSources\": false,\n\n    // Don't implicitly pull in declarations from `@types` packages unless we\n    // actually import from them AND the package in question doesn't bring its\n    // own types. \n    // \n    // You  may wish to override this e.g. with `\"types\": [\"ember-source/types\"]`\n    \"types\": []\n  }\n}\n"
  },
  {
    "path": "bases/next.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Next.js\",\n  \"_version\": \"2.0.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\",\n    \"incremental\": true,\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ]\n  },\n  \"include\": [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\", \".next/types/**/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "bases/node-lts.json",
    "content": "// This file was autogenerated by a script\n// Equivalent to a config of: node24\n{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node LTS (24)\",\n  \"_version\": \"24.0.0\",\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2024\",\n      \"ESNext.Array\",\n      \"ESNext.Collection\",\n      \"ESNext.Iterator\",\n      \"ESNext.Promise\"\n    ],\n    \"module\": \"nodenext\",\n    \"target\": \"es2024\",\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node-ts.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node with TypeScript (TS >=5.8 ONLY)\",\n  \"docs\": [\n    \"https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/#path-rewriting-for-relative-paths\",\n    \"https://devblogs.microsoft.com/typescript/announcing-typescript-5-8-beta/#the---erasablesyntaxonly-option\"\n  ],\n  \"_version\": \"23.6.0\",\n  \"compilerOptions\": {\n    \"rewriteRelativeImportExtensions\": true,\n    \"erasableSyntaxOnly\": true,\n    \"verbatimModuleSyntax\": true\n  }\n}\n"
  },
  {
    "path": "bases/node10.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 10\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2018\"],\n    \"module\": \"commonjs\",\n    \"target\": \"es2018\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\"\n  }\n}\n"
  },
  {
    "path": "bases/node12.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 12\",\n  \"_version\": \"12.1.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2019\", \"es2020.promise\", \"es2020.bigint\", \"es2020.string\"],\n    \"module\": \"node16\",\n    \"target\": \"es2019\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node14.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 14\",\n  \"_version\": \"14.1.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2020\"],\n    \"module\": \"node16\",\n    \"target\": \"es2020\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node16.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 16\",\n  \"_version\": \"16.1.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2021\"],\n    \"module\": \"node16\",\n    \"target\": \"es2021\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node17.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 17\",\n  \"_version\": \"17.1.0\",\n  \"compilerOptions\": {\n    \"lib\": [\"es2022\"],\n    \"module\": \"node16\",\n    \"target\": \"es2022\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"useDefineForClassFields\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node18.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 18\",\n\n  \"_version\": \"18.2.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2023\"],\n    \"module\": \"node16\",\n    \"target\": \"es2022\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node19.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 19\",\n\n  \"_version\": \"19.1.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2023\"],\n    \"module\": \"node16\",\n    \"target\": \"es2022\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node20.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 20\",\n  \"_version\": \"20.1.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2023\"],\n    \"module\": \"nodenext\",\n    \"target\": \"es2022\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node21.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 21\",\n  \"_version\": \"21.0.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2023\"],\n    \"module\": \"nodenext\",\n    \"target\": \"es2022\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node22.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 22\",\n  \"_version\": \"22.0.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2024\", \"ESNext.Array\", \"ESNext.Collection\", \"ESNext.Iterator\"],\n    \"module\": \"nodenext\",\n    \"target\": \"es2022\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node23.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 23\",\n  \"_version\": \"23.0.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"es2024\", \"ESNext.Array\", \"ESNext.Collection\", \"ESNext.Iterator\", \"ESNext.Promise\"],\n    \"module\": \"nodenext\",\n    \"target\": \"es2024\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/node24.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Node 24\",\n  \"_version\": \"24.0.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2024\",\n      \"ESNext.Array\",\n      \"ESNext.Collection\",\n      \"ESNext.Error\",\n      \"ESNext.Iterator\",\n      \"ESNext.Promise\"\n    ],\n    \"module\": \"nodenext\",\n    \"target\": \"es2024\",\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node16\"\n  }\n}\n"
  },
  {
    "path": "bases/nuxt.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Nuxt\",\n  \"_version\": \"2.0.0\",\n  \n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"lib\": [\n      \"esnext\",\n      \"esnext.asynciterable\",\n      \"dom\"\n    ],\n    \"esModuleInterop\": true,\n    \"allowJs\": true,\n    \"sourceMap\": true,\n    \"strict\": true,\n    \"noEmit\": true,\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"~/*\": [\n        \"./*\"\n      ],\n      \"@/*\": [\n        \"./*\"\n      ]\n    },\n    \"types\": [\n      \"@types/node\",\n      \"@nuxt/types\"\n    ]\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".nuxt\", \n    \"dist\"\n  ]\n}\n"
  },
  {
    "path": "bases/qjsengine.json",
    "content": "{\n\t// https://doc.qt.io/qt-5/qjsengine.html\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"QJSEngine\",\n\n  \"compilerOptions\": {\n    // Technically QTJSEngine supportes ES2016, however there are issues with\n    // arrow functions where in certain contexts \"this\" does not exist.\n    // Targeting ES5 instead fixes these issues by binding this to a variable\n    // and closing over that instead.\n    \"target\": \"ES5\",\n    \"lib\": [\"ES2016\"],\n    \"module\": \"none\",\n    \"esModuleInterop\": false,\n    \"strict\": true\n  }\n}\n"
  },
  {
    "path": "bases/react-native.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"React Native\",\n  \"_version\": \"3.0.2\",\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"commonjs\",\n    \"types\": [\"react-native\", \"jest\"],\n    \"lib\": [\n      \"es2019\",\n      \"es2020.bigint\",\n      \"es2020.date\",\n      \"es2020.number\",\n      \"es2020.promise\",\n      \"es2020.string\",\n      \"es2020.symbol.wellknown\",\n      \"es2021.promise\",\n      \"es2021.string\",\n      \"es2021.weakref\",\n      \"es2022.array\",\n      \"es2022.object\",\n      \"es2022.string\"\n    ],\n    \"allowJs\": true,\n    \"jsx\": \"react-native\",\n    \"noEmit\": true,\n    \"isolatedModules\": true,\n    \"strict\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true\n  }\n}\n"
  },
  {
    "path": "bases/recommended.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es2016\",\n    \"module\": \"commonjs\",\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"strict\": true,\n    \"skipLibCheck\": true\n  },\n  \"display\": \"Recommended\",\n  \"$schema\": \"https://www.schemastore.org/tsconfig\"\n}\n"
  },
  {
    "path": "bases/remix.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Remix\",\n  \"_version\": \"2.0.0\",\n\n  \"compilerOptions\": {\n    \"lib\": [\"dom\", \"dom.iterable\", \"es2019\"],\n    \"isolatedModules\": true,\n    \"esModuleInterop\": true,\n    \"jsx\": \"react-jsx\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"target\": \"es2019\",\n    \"strict\": true,\n    \"allowJs\": true,\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"~/*\": [\"./app/*\"]\n    },\n\n    // Remix takes care of building everything in `remix build`.\n    \"noEmit\": true\n  }\n}\n"
  },
  {
    "path": "bases/strictest.json",
    "content": "{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"allowUnusedLabels\": false,\n    \"allowUnreachableCode\": false,\n    \"exactOptionalPropertyTypes\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noImplicitOverride\": true,\n    \"noImplicitReturns\": true,\n    \"noPropertyAccessFromIndexSignature\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n\n    \"isolatedModules\": true,\n\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true\n  },\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Strictest\",\n  \"_version\": \"2.0.0\"\n}\n"
  },
  {
    "path": "bases/svelte.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Svelte\",\n  \"_version\": \"5.0.0\",\n\n  \"compilerOptions\": {\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"target\": \"es2017\",\n    /**\n      Svelte Preprocess cannot figure out whether you have a value or a type, so tell TypeScript\n      to enforce using `import type` instead of `import` for Types.\n     */\n    \"verbatimModuleSyntax\": true,\n    /**\n      To have warnings/errors of the Svelte compiler at the correct position,\n      enable source maps by default.\n     */\n    \"sourceMap\": true,\n\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true\n  }\n}\n"
  },
  {
    "path": "bases/taro.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Taro\",\n  \"compileOnSave\": false,\n  \"compilerOptions\": {\n    \"target\": \"es2017\",\n    \"module\": \"commonjs\",\n    \"moduleResolution\": \"node\",\n    \"allowJs\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"experimentalDecorators\": true,\n    \"resolveJsonModule\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\"\n  }\n}\n"
  },
  {
    "path": "bases/vite-react.json",
    "content": "{\n  \"$schema\": \"https://www.schemastore.org/tsconfig\",\n  \"display\": \"Vite React\",\n  \"_version\": \"7.0.0\",\n\n  \"compilerOptions\": {\n    \"tsBuildInfoFile\": \"./node_modules/.tmp/tsconfig.app.tsbuildinfo\",\n    \"target\": \"ES2022\",\n    \"useDefineForClassFields\": true,\n    \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n    \"module\": \"ESNext\",\n    \"skipLibCheck\": true,\n\n    /* Bundler mode */\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"verbatimModuleSyntax\": true,\n    \"moduleDetection\": \"force\",\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\",\n\n    /* Linting */\n    \"strict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"erasableSyntaxOnly\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUncheckedSideEffectImports\": true\n  }\n}\n"
  },
  {
    "path": "readme-extras/docusaurus.md",
    "content": "> **NOTE**: You may need to add `\"baseUrl\": \".\"` to your `tsconfig.json` to support proper file resolution.\n"
  },
  {
    "path": "readme-extras/ember.md",
    "content": "> **NOTE**: You may need to add `\"baseUrl\": \".\"` to your `tsconfig.json` to support proper file resolution.\n"
  },
  {
    "path": "readme-extras/node-ts.md",
    "content": "> This base require TypeScript 5.8+ (See [announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-5-8-beta/#the---erasablesyntaxonly-option))\n\nThis file is meant to be used in conjunction with other Node.js configurations, you can do so by extending multiple files in the `extends` clause of your `tsconfig.json`:\n\n```json\n{\n  \"extends\": [\"@tsconfig/node22/tsconfig.json\", \"@tsconfig/node-ts/tsconfig.json\"]\n}\n```\n"
  },
  {
    "path": "readme-extras/nuxt.md",
    "content": "> **NOTE**: You may need to add `\"baseUrl\": \".\"` to your `tsconfig.json` to support proper file resolution.\n"
  },
  {
    "path": "readme-extras/remix.md",
    "content": "> **NOTE**: You may need to add `\"baseUrl\": \".\"` to your `tsconfig.json` to support proper file resolution.\n"
  },
  {
    "path": "readme-extras/svelte.md",
    "content": "> **NOTE**: After `@tsconfig/svelte@2.0.0`, you should add `/// <reference types=\"svelte\" />` to a `d.ts` or a `index.ts`(entry) file to prevent typescript error.\n"
  },
  {
    "path": "scripts/create-npm-packages.ts",
    "content": "import * as path from \"https://deno.land/std/path/mod.ts\";\nimport stripJsonComments from \"https://esm.sh/strip-json-comments\";\n\nfor await (const tsconfigEntry of Deno.readDir(\"bases\")) {\n  if (!tsconfigEntry.isFile) continue\n  \n  const tsconfigFilePath = path.join(\"bases\", tsconfigEntry.name)\n  const name = path.basename(tsconfigEntry.name).replace(\".json\", \"\")\n\n  // Make the folder\n  const packagePath = path.join(\"packages\", name)\n  Deno.mkdirSync(packagePath, { recursive: true })\n\n  // Copy over the template files\n  const templateDir = \"./template\"\n  for await (const templateFile of Deno.readDir(templateDir)) {\n    if (!templateFile.isFile) continue\n    if (templateFile.name === \"README-combined.md\") continue // README-combined.md is only for the combined bases\n    const templatedFile = path.join(templateDir, templateFile.name)\n    Deno.copyFileSync(templatedFile, path.join(packagePath, templateFile.name))\n  }\n  \n  // Copy the create a tsconfig.json from the base json\n  const newPackageTSConfigPath = path.join(packagePath, \"tsconfig.json\")\n  Deno.copyFileSync(tsconfigFilePath, newPackageTSConfigPath)\n  \n  const tsconfigText = await Deno.readTextFile(newPackageTSConfigPath)\n  const tsconfigJSON = JSON.parse(stripJsonComments(tsconfigText))\n\n// Drop `display` field in tsconfig.json for npm package \n  await Deno.writeTextFile(newPackageTSConfigPath, tsconfigText.replace(/\\s*\"display.*/,''))\n\n  // Edit the package.json\n  const packageText = await Deno.readTextFile(path.join(packagePath, \"package.json\"))\n  const packageJSON = JSON.parse(packageText)\n  packageJSON.name = `@tsconfig/${name}`\n  packageJSON.description = `A base TSConfig for working with ${tsconfigJSON.display}.`\n  packageJSON.keywords = [\"tsconfig\", name]\n\n  // Do some string replacements in the other templated files\n  const replaceTextIn = [\"README.md\"]\n  for (const filenameToEdit of replaceTextIn) {\n    const fileToEdit =  path.join(packagePath, filenameToEdit)\n  \n    const defaultTitle = `A base TSConfig for working with ${tsconfigJSON.display}`\n    const title = name !== \"recommended\" ? defaultTitle : \"The recommended base for a TSConfig\"\n\n    let packageText = await Deno.readTextFile(fileToEdit)\n    packageText = packageText.replace(/\\[filename\\]/g, name)\n                             .replace(/\\[display_title\\]/g, title)\n                             .replace(/\\[tsconfig\\]/g, Deno.readTextFileSync(newPackageTSConfigPath))\n    \n    // Inject readme-extra if any\n    try {\n      const readmeExtra = (await Deno.readTextFile(path.join(\"readme-extras\", `${name}.md`))).trim()\n      \n      if (readmeExtra)\n        packageText = packageText.replace(/\\[readme-extra\\]/g, `\\n${readmeExtra}\\n`)\n    } catch (error) {\n      // NOOP, there is no extra readme \n      // console.log(error)\n    }\n    \n    // Remove readme-extra placeholders if any\n    packageText = packageText.replace(/\\[readme-extra\\]/g, '')\n\n    await Deno.writeTextFile(fileToEdit, packageText)\n  };\n\n  // Bump the last version of the number from npm,\n  // or use the _version in tsconfig if it's higher,\n  // or default to 1.0.0\n  let version = tsconfigJSON._version || \"1.0.0\"\n  try {\n    const npmResponse = await fetch(`https://registry.npmjs.org/${packageJSON.name}`)\n    const npmPackage = await npmResponse.json()\n\n    const semverMarkers = npmPackage[\"dist-tags\"].latest.split(\".\");\n    const bumpedVersion = `${semverMarkers[0]}.${semverMarkers[1]}.${Number(semverMarkers[2]) + 1}`;\n    if (isBumpedVersionHigher(version, bumpedVersion)) {\n      version = bumpedVersion;\n    }\n  } catch (error) {\n    // NOOP, this is for the first deploy \n    // console.log(error)\n  }\n  \n  packageJSON.version = version\n  await Deno.writeTextFile(path.join(packagePath, \"package.json\"), JSON.stringify(packageJSON, null, \"  \"))\n\n  console.log(\"Built:\", tsconfigEntry.name);\n}\n\nawait buildTsconfigBases()\n\nfunction isBumpedVersionHigher (packageJSONVersion: string, bumpedVersion: string) {\n  const semverMarkersPackageJSON = packageJSONVersion.split('.')\n  const semverMarkersBumped = bumpedVersion.split('.')\n  for (let i = 0; i < 3; i++) {\n    if (Number(semverMarkersPackageJSON[i]) > Number(semverMarkersBumped[i])) {\n      return false\n    }\n  }\n\n  return true\n}\n\n// build @tsconfig/bases catch all package\nasync function buildTsconfigBases() {\n  const name = \"bases\"\n\n  // Make the folder\n  const packagePath = path.join(\"packages\", name)\n  Deno.mkdirSync(packagePath, { recursive: true })\n\n  // Copy over the template files\n  const templateDir = \"./template\"\n  for await (const templateFile of Deno.readDir(templateDir)) {\n    if (!templateFile.isFile) continue\n    if (templateFile.name === \"README.md\") continue\n    const templatedFile = path.join(templateDir, templateFile.name)\n    Deno.copyFileSync(\n      templatedFile,\n      path.join(\n        packagePath,\n        templateFile.name === \"README-combined.md\" ? \"README.md\" : templateFile.name,\n      ),\n    )\n  }\n\n  const exportsOverride = {}\n\n  // Copy the tsconfig.json files from all bases\n  for await (const tsconfigEntry of Deno.readDir(\"bases\")) {\n    if (!tsconfigEntry.isFile) continue\n\n    // remove extension\n    const name = tsconfigEntry.name.replace(/\\.json$/, \"\")\n\n    const finalTsconfigFile = `${name}.tsconfig.json`\n\n    // add entry to package.json exports\n    exportsOverride[`./${name}`] = `./${finalTsconfigFile}`\n\n    const tsconfigFilePath = path.join(\"bases\", tsconfigEntry.name)\n\n    const newPackageTSConfigPath = path.join(packagePath, finalTsconfigFile)\n\n    Deno.copyFileSync(tsconfigFilePath, newPackageTSConfigPath)\n\n    const tsconfigText = await Deno.readTextFile(newPackageTSConfigPath)\n\n    // Drop `display` field in tsconfig.json for npm package\n    await Deno.writeTextFile(newPackageTSConfigPath, tsconfigText.replace(/\\s*\"display.*/, \"\"))\n  }\n\n  const tsconfigJSON = { display: \"Bases\" }\n\n  // Edit the package.json\n  const packageText = await Deno.readTextFile(path.join(packagePath, \"package.json\"))\n  const packageJSON = JSON.parse(packageText)\n  packageJSON.name = `@tsconfig/${name}`\n  packageJSON.description = `Combined tsconfig bases.`\n  packageJSON.keywords = [\"tsconfig\", name, \"combined\"]\n  packageJSON.exports = exportsOverride\n\n  // Do some string replacements in the other templated files\n  const replaceTextIn = [\"README.md\"]\n  for (const filenameToEdit of replaceTextIn) {\n    const fileToEdit = path.join(packagePath, filenameToEdit)\n\n    const defaultTitle = `A base TSConfig for working with ${tsconfigJSON.display}`\n    const title = name !== \"recommended\" ? defaultTitle : \"The recommended base for a TSConfig\"\n\n    let packageText = await Deno.readTextFile(fileToEdit)\n    packageText = packageText.replace(/\\[filename\\]/g, name).replace(/\\[display_title\\]/g, title)\n\n    // Inject readme-extra if any\n    try {\n      const readmeExtra = (await Deno.readTextFile(path.join(\"readme-extras\", `${name}.md`))).trim()\n\n      if (readmeExtra) {\n        packageText = packageText.replace(/\\[readme-extra\\]/g, `\\n${readmeExtra}\\n`)\n      }\n    } catch (error) {\n      // NOOP, there is no extra readme\n      // console.log(error)\n    }\n\n    // Remove readme-extra placeholders if any\n    packageText = packageText.replace(/\\[readme-extra\\]/g, \"\")\n\n    await Deno.writeTextFile(fileToEdit, packageText)\n  }\n\n  // Bump the last version of the number from npm,\n  // or use the _version in tsconfig if it's higher,\n  // or default to 1.0.0\n  let version = tsconfigJSON._version || \"1.0.0\"\n  try {\n    const npmResponse = await fetch(`https://registry.npmjs.org/${packageJSON.name}`)\n    const npmPackage = await npmResponse.json()\n\n    const semverMarkers = npmPackage[\"dist-tags\"].latest.split(\".\")\n    const bumpedVersion = `${semverMarkers[0]}.${semverMarkers[1]}.${Number(semverMarkers[2]) + 1}`\n    if (isBumpedVersionHigher(version, bumpedVersion)) {\n      version = bumpedVersion\n    }\n  } catch (error) {\n    // NOOP, this is for the first deploy\n    // console.log(error)\n  }\n\n  packageJSON.version = version\n  await Deno.writeTextFile(\n    path.join(packagePath, \"package.json\"),\n    JSON.stringify(packageJSON, null, \"  \"),\n  )\n\n  console.log(\"Built:\", \"bases\")\n}\n"
  },
  {
    "path": "scripts/deploy-changed-npm-packages.ts",
    "content": "import * as path from \"https://deno.land/std@0.164.0/path/mod.ts\";\nimport * as bufio from \"https://deno.land/std@0.164.0/io/buffer.ts\";\n\n// Loop through generated packages, deploying versions for anything which has a different tsconfig\nconst uploaded = []\n\nfor (const dirEntry of Deno.readDirSync(\"packages\")) {\n  if (dirEntry.name === 'bases') continue // @tsconfig/bases package is special, it doesn't have a single tsconfig entry, it will be deployed separately\n\n  const localTsconfigPath = path.join(\"packages\", dirEntry.name, \"tsconfig.json\");\n  const newTSConfig = Deno.readTextFileSync(localTsconfigPath);\n\n  let upload = false;\n  try {\n    const unpkgURL = `https://unpkg.com/@tsconfig/${dirEntry.name}/tsconfig.json`;\n    const currentJSONReq = await fetch(unpkgURL);\n    const currentJSONTxt = await currentJSONReq.text();\n    upload = currentJSONTxt !== newTSConfig;\n  } catch (error) {\n    // Not here, definitely needs to be uploaded\n    upload = true;\n  }\n\n  if (upload) {\n    const process = Deno.run({\n      cmd: [\"npm\", \"publish\", \"--provenance\", \"--access\", \"public\"],\n      stdout: \"piped\",\n      cwd: path.join(\"packages\", dirEntry.name),\n      env: { NODE_AUTH_TOKEN: Deno.env.get(\"NODE_AUTH_TOKEN\")! },\n    });\n\n    for await (const line of bufio.readLines(process.stdout!)) {\n      console.warn(line);\n    }\n\n    uploaded.push(dirEntry.name)\n  }\n}\n\nif (uploaded.length) {\n  // If there's any uploads, we need to update the combined package too\n    const process = Deno.run({\n      cmd: [\"npm\", \"publish\", \"--provenance\", \"--access\", \"public\"],\n      stdout: \"piped\",\n      cwd: path.join(\"packages\", \"bases\"),\n      env: { NODE_AUTH_TOKEN: Deno.env.get(\"NODE_AUTH_TOKEN\")! },\n    });\n\n    for await (const line of bufio.readLines(process.stdout!)) {\n      console.warn(line);\n    }\n\n\n  console.log(\"Uploaded: \", uploaded.join(\", \"))\n} else {\n  console.log(\"No uploads\")\n}\n"
  },
  {
    "path": "scripts/generate-lts.ts",
    "content": "// deno run --allow-read --allow-write --allow-net scripts/generate-lts.ts\n//\n\nimport { gt } from \"https://deno.land/std@0.192.0/semver/gt.ts\";\nimport { parse } from \"https://deno.land/std@0.192.0/semver/parse.ts\";\n\ninterface NodeReleaseMetadata {\n  version: string;\n  date: string;\n  files: string[];\n  npm?: string;\n  v8: string;\n  uv?: string;\n  zlib?: string;\n  openssl?: string;\n  modules?: string;\n  lts: string | boolean;\n  security: boolean;\n}\n\ntype Tsconfig = Record<string, any>;\n\nconst versionRegex = /v(\\d+)\\.(\\d+)\\.(\\d+)/;\n\nconst releasesResponse = await fetch(\"https://nodejs.org/download/release/index.json\");\nconst releasesJson = (await releasesResponse.json()) as NodeReleaseMetadata[];\nconst lts = releasesJson\n  .filter((r) => r.lts)\n  .reduce(\n    (prevValue, currValue) => (gt(parse(currValue.version), parse(prevValue.version)) ? currValue : prevValue),\n    {\n      version: \"v0.0.0\"\n    }\n  );\nconst baseMajorVersion = (lts.version.match(versionRegex) || [])[1];\nconst base = `node${baseMajorVersion}`;\nconst versioned = {\n  $schema: \"https://www.schemastore.org/tsconfig\",\n  display: `Node LTS (${baseMajorVersion})`,\n  _version: lts.version.substring(lts.version.indexOf(\"v\") + 1)\n};\n\nimport * as path from \"https://deno.land/std/path/mod.ts\";\nimport stripJsonComments from \"https://esm.sh/strip-json-comments\";\nimport { deepMerge } from \"https://deno.land/std/collections/deep_merge.ts\";\n\nconst packageText = await Deno.readTextFile(path.join(Deno.cwd(), \"bases\", `${base}.json`));\n\nconst parsed = JSON.parse(stripJsonComments(packageText)) as Tsconfig;\n\n// This is to get the _version property to show up directly under the display property\nconst parsedAndOrdered = deepMerge(versioned, parsed);\nparsedAndOrdered.display = versioned.display;\n\nconst serializedConfig =\n  \"// This file was autogenerated by a script\\n\" +\n  `// Equivalent to a config of: ${base}\\n` +\n  JSON.stringify(parsedAndOrdered, null, \"  \") +\n  \"\\n\";\n\nconst filePath = path.join(Deno.cwd(), \"bases/node-lts.json\");\nDeno.writeTextFile(filePath, serializedConfig);\n"
  },
  {
    "path": "scripts/generate-recommend.ts",
    "content": "import stripJsonComments from \"https://esm.sh/strip-json-comments\";\nimport * as bufio from \"https://deno.land/std@0.164.0/io/buffer.ts\";\nimport * as path from \"https://deno.land/std/path/mod.ts\";\n\nconst tsconfigStorage = await Deno.makeTempDir({ prefix: \"tsconfig\" });\n\n// Generate a tsconfig\nconst p = await Deno.run({ cmd: [\"npx\", \"-p\", \"typescript\", \"tsc\", \"--init\"], stdout: \"piped\", cwd: tsconfigStorage });\nfor await (const line of bufio.readLines(p.stdout!)) {\n  console.warn(line);\n}\n\nlet packageText = await Deno.readTextFile(path.join(tsconfigStorage, \"tsconfig.json\"));\n// This will strip comments\nconst parsed = JSON.parse(stripJsonComments(packageText));\n\n// `display` field will be dropped at generating npm package, so prevent the order from being last in the JSON file\nparsed.display = \"Recommended\";\nparsed[\"$schema\"] = \"https://www.schemastore.org/tsconfig\";\n\nconst result = JSON.stringify(parsed, null, \"  \");\n\nconst npmResponse = await fetch(`https://unpkg.com/@tsconfig/svelte/tsconfig.json`);\nconst npmPackage = await npmResponse.text();\n\nif (npmPackage !== result) {\n  Deno.writeTextFile(\"bases/recommended.json\", result);\n}\n"
  },
  {
    "path": "scripts/update-markdown-readme.ts",
    "content": "// deno run --allow-read --allow-write scripts/update-markdown-readme.ts\n//\nimport * as path from \"https://deno.land/std/path/mod.ts\";\nimport stripJsonComments from \"https://esm.sh/strip-json-comments\";\n\nconst readme = await Deno.readTextFileSync(\"./README.md\")\nlet center = \"\"\n\nconst paths = []\nfor await (const tsconfigEntry of Deno.readDir(\"bases\")) {\n  if (!tsconfigEntry.isFile) continue\n  paths.push(tsconfigEntry.name)\n}\n\nconst sortedPaths = paths.sort((l, r) => l.localeCompare(r)).filter(r => !r.includes(\"recommended\"))\nconst basePaths = [\"recommended.json\", ...sortedPaths]\nfor (const base of basePaths) {\n  if (base === \"esm.json\") continue\n  const tsconfigFilePath = path.join(\"bases\", base)\n  const name = path.basename(base).replace(\".json\", \"\")\n  \n  const tsconfigText = await Deno.readTextFile(tsconfigFilePath)\n  const tsconfigJSON = JSON.parse(stripJsonComments(tsconfigText))\n\n  center += `### ${tsconfigJSON.display} <kbd><a href=\"./bases/${base}\">tsconfig.json</a></kbd>\\n`\n\n  center += `\nInstall:\n\n\\`\\`\\`sh\nnpm install --save-dev @tsconfig/${name}\nyarn add --dev @tsconfig/${name}\n\\`\\`\\`\n\n`\n\n  const hasReadmeExtra = await Deno.stat(`./readme-extras/${name}.md`).then(() => true).catch(() => false)\n  const readmeExtra = hasReadmeExtra ? (await Deno.readTextFile(`./readme-extras/${name}.md`)).trim() : \"\"\n\n  const defaultInstructions = `Add to your \\`tsconfig.json\\`:\n\n\\`\\`\\`json\n\"extends\": \"@tsconfig/${name}/tsconfig.json\"\n\\`\\`\\`\n\n`\n\n    if (readmeExtra) {\n      if (!readmeExtra.includes(\"extends\")) {\n        center += defaultInstructions + \"\\n\"\n      }\n\n      center += `\\n${readmeExtra}\\n\\n`\n      \n    } else {\n      center += defaultInstructions \n    }\n};\n\nconst startMarker =\"<!-- AUTO -->\"\nconst start = readme.split(startMarker)[0]\nconst endMarker =\"<!-- /AUTO -->\"\nconst end = readme.split(endMarker)[1]\nconst newREADME = start + startMarker +  \"\\n\" + center + \"\\n\" + endMarker  + end\n\nawait Deno.writeTextFileSync(\"./README.md\", newREADME)\n"
  },
  {
    "path": "template/LICENSE",
    "content": "MIT License\n\nCopyright (c) Microsoft Corporation.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE\n"
  },
  {
    "path": "template/README-combined.md",
    "content": "### [display_title].\n\nAdd the package to your `\"devDependencies\"`:\n\n```sh\nnpm install --save-dev @tsconfig/[filename]\nyarn add --dev @tsconfig/[filename]\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/[filename]/<base>\"\n# eg \"extends\": \"@tsconfig/[filename]/node-lts\"\n```\n\nYou can find the [code here](https://github.com/tsconfig/bases/blob/master/bases/).\n"
  },
  {
    "path": "template/README.md",
    "content": "### [display_title].\n\nAdd the package to your `\"devDependencies\"`:\n\n```sh\nnpm install --save-dev @tsconfig/[filename]\nyarn add --dev @tsconfig/[filename]\n```\n\nAdd to your `tsconfig.json`:\n\n```json\n\"extends\": \"@tsconfig/[filename]/tsconfig.json\"\n```\n[readme-extra]\n---\n\nThe `tsconfig.json`: \n\n```jsonc\n[tsconfig]\n```\n\nYou can find the [code here](https://github.com/tsconfig/bases/blob/master/bases/[filename].json).\n"
  },
  {
    "path": "template/package.json",
    "content": "{\n  \"name\": \"replaced-later\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/tsconfig/bases.git\",\n    \"directory\": \"bases\"\n  },\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "test/index.ts",
    "content": "console.log(\"Hello World\")\n"
  },
  {
    "path": "test/package.json",
    "content": "{\n  \"name\": \"test-bases\",\n  \"scripts\": {\n    \"test\": \"tsc --noEmit\"\n  },\n  \"packageManager\": \"pnpm@10.12.4\",\n  \"devDependencies\": {\n    \"@tsconfig/bases\": \"link:../packages/bases\",\n    \"@types/node\": \"^24.2.1\",\n    \"typescript\": \"^5.9.2\"\n  }\n}\n"
  },
  {
    "path": "test/tsconfig.json",
    "content": "{\n  \"extends\": [\"@tsconfig/bases/node-lts\"]\n}\n"
  }
]