{
  "compilerOptions": {
    /* Custom settings */
    "outDir": "dist",
    "allowJs": true,
    "checkJs": false,
    /* Visit https://aka.ms/tsconfig.json to read more about this file */

    /* Projects */
    "incremental": false                              /* Enable incremental compilation */,
    "composite": false                                /* Enable constraints that allow a TypeScript project to be used with project references. */,
    "disableSourceOfProjectReferenceRedirect": false  /* Disable preferring source files instead of declaration files when referencing composite projects */,

    /* Language and Environment */
    "target": "es6"                                /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
    "lib": [
      "es6"
    ]                                                 /* Specify a set of bundled library declaration files that describe the target runtime environment. */,
    "experimentalDecorators": true                    /* Enable experimental support for TC39 stage 2 draft decorators. */,
    "emitDecoratorMetadata": true                     /* Emit design-type metadata for decorated declarations in source files. */,

    /* Modules */
    "module": "commonjs"                              /* Specify what module code is generated. */,
    /*"moduleResolution": "Node16"*/                      /* Specify how TypeScript looks up a file from a given module specifier. */
    "resolveJsonModule": true                         /* Enable importing .json files */,

    /* Emit */
    "declaration": true                               /* Generate .d.ts files from TypeScript and JavaScript files in your project. */,
    "declarationMap": true                            /* Create sourcemaps for d.ts files. */,
    "sourceMap": true                                 /* Create source map files for emitted JavaScript files. */,
    "removeComments": true                            /* Disable emitting comments. */,
    "noEmit": false,                                   /* Disable emitting files from a compilation. */
    "importsNotUsedAsValues": "error",                /* Specify emit/checking behavior for imports that are only used for types. */
    "noEmitOnError": true                             /* Disable emitting files if any type checking errors are reported. */,

    /* Interop Constraints */
    "esModuleInterop": true                           /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
    "forceConsistentCasingInFileNames": true          /* Ensure that casing is correct in imports. */,

    /* Type Checking */
    "noImplicitAny": true,                            /* Enable error reporting for expressions and declarations with an implied 'any' type. */
    "strictNullChecks": true,                         /* When type checking, take into account 'null' and 'undefined'. */
    "strictFunctionTypes": true,                      /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
    "strictBindCallApply": true,                      /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
    "strictPropertyInitialization": true,             /* Check for class properties that are declared but not set in the constructor. */
    "noImplicitThis": true,                           /* Enable error reporting when 'this' is given the type 'any'. */
    "useUnknownInCatchVariables": true,               /* Default catch clause variables as 'unknown' instead of 'any'. */
    "alwaysStrict": true,                             /* Ensure 'use strict' is always emitted. */
    "noUnusedLocals": true,                           /* Enable error reporting when local variables aren't read. */
    "noUnusedParameters": true,                       /* Raise an error when a function parameter isn't read. */
    "exactOptionalPropertyTypes": true,               /* Interpret optional property types as written, rather than adding 'undefined'. */
    "noImplicitReturns": true,                        /* Enable error reporting for codepaths that do not explicitly return in a function. */
    "noFallthroughCasesInSwitch": true,               /* Enable error reporting for fallthrough cases in switch statements. */
    "noUncheckedIndexedAccess": true,                 /* Add 'undefined' to a type when accessed using an index. */
    "noImplicitOverride": true,                       /* Ensure overriding members in derived classes are marked with an override modifier. */
    "noPropertyAccessFromIndexSignature": true,       /* Enforces using indexed accessors for keys declared using an indexed type. */
    "allowUnusedLabels": false,                       /* Disable error reporting for unused labels. */
    "allowUnreachableCode": false,                    /* Disable error reporting for unreachable code. */

    /* Completeness */
    "skipLibCheck": true                              /* Skip type checking all .d.ts files. */,
  },
  "include": [
    "./src/**/*.ts"
  ]
}
