{
  "compilerOptions": {
    /* Adapted version of https://aka.ms/tsconfig.json */

    /*** Language and Environment ***/
    /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
    "target": "ES2020",
    /* Specify a set of bundled library declaration files that describe the target runtime environment. */
    "lib": ["ES2020", "DOM", "DOM.Iterable", "es2022.error"],
    /* Specify what JSX code is generated. */
    "jsx": "react-jsx",
    /* Enable experimental support for TC39 stage 2 draft decorators. */
    "experimentalDecorators": true,
    /* Emit design-type metadata for decorated declarations in source files. */
    "emitDecoratorMetadata": true,
    /* Emit ECMAScript-standard-compliant class fields. */
    "useDefineForClassFields": true,

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

    /*** JavaScript Support ***/
    /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
    "allowJs": true,
    // "checkJs": true,                                  /* Enable error reporting in type-checked JavaScript files. */
    // "maxNodeModuleJsDepth": 1,                        /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */

    /*** Emit ***/
    /* Disable emitting files from a compilation. */
    "noEmit": true,

    /*** Interop Constraints ***/
    /* Ensure that each file can be safely transpiled without relying on other imports. */
    "isolatedModules": true,
    /* Allow 'import x from y' when a module doesn't have a default export. */
    "allowSyntheticDefaultImports": true,
    /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
    // "esModuleInterop": true,
    // "preserveSymlinks": true,                         /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
    /* Ensure that casing is correct in imports. */
    "forceConsistentCasingInFileNames": true,
    "allowImportingTsExtensions": false,

    /*** Type Checking ***/
    /* Enable all strict type-checking options. */
    "strict": true,
    // "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,               /* Type catch clause variables as 'unknown' instead of 'any'. */
    // "alwaysStrict": true,                             /* Ensure 'use strict' is always emitted. */
    "noUnusedLocals": false /* Enable error reporting when a local variables aren't read. */,
    "noUnusedParameters": false /* 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,                 /* Include 'undefined' in index signature results */
    // "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": true,                        /* Disable error reporting for unused labels. */
    // "allowUnreachableCode": true,                     /* Disable error reporting for unreachable code. */
    "exactOptionalPropertyTypes": false,

    /*** Completeness ***/
    // "skipDefaultLibCheck": true,                      /* Skip type checking .d.ts files that are included with TypeScript. */
    /* Skip type checking all .d.ts files. */
    "skipLibCheck": true,
    /* We include the types from UI5. Only used by Component.ts */
    "types": ["@sapui5/types"]
  },
  "include": ["src", "ui5", "src-generated"],
  /* Nice trick from Vite. We reference another config for checking TS conf files on root level. */
  "references": [
    {
      "path": "./tsconfig.node.json"
    }
  ]
}
