{
  // This tsconfig file contains the shared config for the build (tsconfig.build.json) and type checking (tsconfig.json) config.
  "include": [],
  "compilerOptions": {
    // Incremental builds
    // NOTE: Enabling incremental builds speeds up `tsc`. Keep in mind though that it does not reliably bust the cache when the `tsconfig.json` file changes.
    "incremental": true,

    // Type checking
    "strict": true,
    "useDefineForClassFields": true, // Not enabled by default in `strict` mode unless we bump `target` to ES2022.
    "noFallthroughCasesInSwitch": true, // Not enabled by default in `strict` mode.
    "noImplicitReturns": true, // Not enabled by default in `strict` mode.
    "useUnknownInCatchVariables": true, // TODO: This would normally be enabled in `strict` mode but would require some adjustments to the codebase.
    "noImplicitOverride": true, // Not enabled by default in `strict` mode.
    "noUnusedLocals": true, // Not enabled by default in `strict` mode.
    "noUnusedParameters": true, // Not enabled by default in `strict` mode.

    // this isn't in the viem config I added this for evmts
    "checkJs": true,
    // this isn't in the viem config I added this for evmts
    "allowJs": true,

    // TODO: The following options are also not enabled by default in `strict` mode and would be nice to have but would require some adjustments to the codebase.
    // "exactOptionalPropertyTypes": true,
    // "noUncheckedIndexedAccess": true,


    // Interop constraints
    "esModuleInterop": false,
    "allowSyntheticDefaultImports": false,
    "forceConsistentCasingInFileNames": true,
    "verbatimModuleSyntax": true,
    "importHelpers": true, // This is only used for build validation. Since we do not have `tslib` installed, this will fail if we accidentally make use of anything that'd require injection of helpers.

    // Language and environment
    "moduleResolution": "NodeNext",
    "module": "NodeNext",
    "target": "ES2021", // Setting this to `ES2021` enables native support for `Node v16+`: https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping.
    "lib": [
      "ES2022", // By using ES2022 we get access to the `.cause` property on `Error` instances.
      "DOM" // We are adding `DOM` here to get the `fetch`, etc. types. This should be removed once these types are available via DefinitelyTyped.
    ],

    // Skip type checking for node modules
    "skipLibCheck": true
  }
}
