{
  // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs
  "include": ["src"],
  "exclude": ["node_modules"],
  "compilerOptions": {
    "typeRoots": ["node_modules/@types"],
    "module": "CommonJS",
    "lib": ["DOM", "ES6"],
    "target": "ES6",
    "importHelpers": true,
    // output .d.ts declaration files for consumers
    "declaration": true,
    // output .js.map sourcemap files for consumers
    "sourceMap": true,
    "outDir": "./dist",
    // match output dir to input dir. e.g. lib/index instead of lib/src/index
    "rootDir": "./src",
    // 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,
    // import JSON files
    "resolveJsonModule": 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
  }
}
