{
  "compilerOptions": {
    "isolatedModules": true,
    "allowSyntheticDefaultImports": true,
    "forceConsistentCasingInFileNames": true,
    "incremental": true,
    "lib": ["DOM", "ES2022"],
    "noFallthroughCasesInSwitch": true,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noUncheckedIndexedAccess": true,
    "outDir": "target",
    "resolveJsonModule": true,
    "skipLibCheck": true,
    "strictBindCallApply": true,
    "strictFunctionTypes": true,
    "strictNullChecks": false,
    "typeRoots": ["../../../node_modules/@types", "./node_modules/@types"],
    "rootDir": ".",
    "baseUrl": ".", // affects where output files end up
    "target": "es2021", // goal: ship *the most modern syntax* that is supported by *all* browsers that support our Wasm
    "module": "nodenext", // allow top-level await
    "moduleResolution": "nodenext", // comply with node + "type": "module"
    "esModuleInterop": true, // to silence jest

    "experimentalDecorators": true, // needed for decorators
    "emitDecoratorMetadata": true, // needed for decorators
    "useDefineForClassFields": false, // ensure correct behaviour of class fields with decorators

    "strict": true, // for the full TypeScript experience
    "strictPropertyInitialization": false, // to enable generic constructors, e.g. on CircuitValue
    "importHelpers": true, // reduces size
    "declaration": true, // declaration files are how library consumers get our types
    "noEmitOnError": false, // avoid accidentally shipping with type errors
    "allowJs": true, // to use JSDoc in some places where TS would be too cumbersome
    "sourceMap": true,
    "paths": {
      "xstate": ["../../../node_modules/xstate"],
      "o1js": ["../../../node_modules/o1js"],
      "*": ["*", "src/*", "../../../node_modules/*"]
    }
  },
  "exclude": ["../../../node_modules", "node_modules", "target"],
  "include": ["src/**/*", "**/*.json"]
}

// {
//   "compilerOptions": {
//     "target": "ES2021",
//     "module": "nodenext",
//     "lib": ["DOM", "ES2022"],
//     "outDir": "./build",
//     "rootDir": ".",
//     "strict": true,
//     "strictPropertyInitialization": false, // to enable generic constructors, e.g. on CircuitValue
//     "skipLibCheck": true,
//     "forceConsistentCasingInFileNames": true,
//     "esModuleInterop": true,
//     "moduleResolution": "nodenext",
//     "experimentalDecorators": true,
//     "emitDecoratorMetadata": true,
//     "allowJs": true,
//     "declaration": true,
//     "sourceMap": true,
//     "noFallthroughCasesInSwitch": true,
//     "allowSyntheticDefaultImports": true
// "useDefineForClassFields": false,
// "incremental": true,
// "noImplicitAny": true,
// "noImplicitReturns": true,
// "noImplicitThis": true,
// "noUncheckedIndexedAccess": true,
// "resolveJsonModule": true,
// "strictBindCallApply": true,
// "strictFunctionTypes": true,
// "strictNullChecks": true,
// "typeRoots": ["node_modules/@types"],
// "importHelpers": true,
// "noEmitOnError": false
// },
// "exclude": ["node_modules", "target"],
// "include": ["./src"]
// }
// {
//   "compilerOptions": {

//     "typeRoots": ["node_modules/@types"],
//     "baseUrl": ".", // affects where output files end up

//     "importHelpers": true, // reduces size
//     "noEmitOnError": false, // avoid accidentally shipping with type errors

//   },
//   "exclude": ["node_modules", "target"],
//   "include": ["."]
// }
// "incremental": true,
// "noImplicitAny": true,
// "noImplicitReturns": true,
// "noImplicitThis": true,
// "noUncheckedIndexedAccess": true,
// "resolveJsonModule": true,
// "strictBindCallApply": true,
// "strictFunctionTypes": true,
// "strictNullChecks": true,
