{
  // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs
  "include": ["./src"],
  "compilerOptions": {
    "outDir": "./dist",
    "module": "esnext",
    "allowJs": true,
    "target": "es5",
    "lib": ["ESNext"],
    "importHelpers": true,
    // output .d.ts declaration files for consumers
    "declaration": true,
    // output .js.map sourcemap files for consumers
    "sourceMap": true,
    // stricter type-checking for stronger correctness. Recommended by TS
    "strict": true,
    // linter checks for common issues
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    // noUnused* overlap with @typescript-eslint/no-unused-vars, can disable if duplicative
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    // use Node's module resolution algorithm, instead of the legacy TS one
    "moduleResolution": "node",
    // interop between ESM and CJS modules. Recommended by TS
    "esModuleInterop": true,
    // significant perf increase by skipping checking .d.ts files, particularly those in node_modules. Recommended by TS
    "skipLibCheck": true,
    // error out if import and file system have a casing mismatch. Recommended by TS
    "forceConsistentCasingInFileNames": true,
  },
  "ts-node": {
    "compilerOptions": {
      "module": "commonjs",
      "typeRoots" : ["./node_modules/@types", "./types"]
    }
  }
}
