{
  "compilerOptions": {
    // input/output
    "target": "es5",
    "noLib": true, // "lib": ["es5"],
    "skipLibCheck": false,

    "module": "commonjs",

    // toggle these to check everything (and optionally change the include below to "apps/myapp/*.js")
    // "checkJs": true,
    // "noEmit": true,

    "ignoreDeprecations": "5.0",

    // code-gen
    "declaration": false,
    "emitDeclarationOnly": false,
    "removeComments": true,
    //REMOVED "noImplicitUseStrict": true, // disable "use strict"

    "newLine": "lf",
    "noEmitHelpers": true, // we link to specific banglejs implementations
    "noEmitOnError": false,
    "preserveConstEnums": false,
    //REMOVED "importsNotUsedAsValues": "error",
    "preserveValueImports": false,

    // interop constraints
    "isolatedModules": false, // we're global scripts

    // type checking
    "noImplicitAny": true,
    "noUncheckedIndexedAccess": true,
    "noPropertyAccessFromIndexSignature": true,
    "noImplicitThis": true,
    "noImplicitReturns": true,
    "noImplicitOverride": true,
    "exactOptionalPropertyTypes": true,
    "useUnknownInCatchVariables": true,
    //"strict": true, // can't have this with noImplicitUseStrict, instead:
    "strictNullChecks": true,
    "strictBindCallApply": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,

    // simple type checking
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "allowUnusedLabels": false,
    "allowUnreachableCode": false,

    // paths
    "rootDir": "./",
    "typeRoots": ["./typescript/types/"]
  },
  "include": [
    "*/*/*.ts",
    "apps/*/*.js", // with checkJs: true
    "*/*/*.d.ts",
    "modules/*.ts",
    "typescript/types/*.d.ts"
  ]
}
