{
  "include": [".eslintrc.cjs", ".prettierrc.cjs", "src", "tsup.config.ts", "../reset.d.ts"],
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "~/*": ["./src/*"]
    },
    /* LANGUAGE COMPILATION OPTIONS */
    "target": "ES2020",
    "lib": ["DOM", "DOM.Iterable", "ES2020"],
    "module": "Node16",
    "moduleResolution": "nodenext",
    "resolveJsonModule": true,
    "allowJs": true,
    "checkJs": true,

    /* EMIT RULES */
    "outDir": "./dist",
    "noEmit": true, // TSUP takes care of emitting js for us, in a MUCH faster way
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "removeComments": true,

    /* TYPE CHECKING RULES */
    "strict": true,
    // "noImplicitAny": true, // Included in "Strict"
    // "noImplicitThis": true, // Included in "Strict"
    // "strictBindCallApply": true, // Included in "Strict"
    // "strictFunctionTypes": true, // Included in "Strict"
    // "strictNullChecks": true, // Included in "Strict"
    // "strictPropertyInitialization": true, // Included in "Strict"
    "noFallthroughCasesInSwitch": true,
    "noImplicitOverride": true,
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "useUnknownInCatchVariables": true,
    "noUncheckedIndexedAccess": true, // TLDR - Checking an indexed value (array[0]) now forces type <T | undefined> as there is no confirmation that index exists
    // THE BELOW ARE EXTRA STRICT OPTIONS THAT SHOULD ONLY BY CONSIDERED IN VERY SAFE PROJECTS
    // "exactOptionalPropertyTypes": true, // TLDR - Setting to undefined is not the same as a property not being defined at all
    // "noPropertyAccessFromIndexSignature": true, // TLDR - Use dot notation for objects if youre sure it exists, use ['index'] notaion if unsure

    /* OTHER OPTIONS */
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    // "emitDecoratorMetadata": true,
    // "experimentalDecorators": true,
    "forceConsistentCasingInFileNames": true,
    "skipLibCheck": true,
    "useDefineForClassFields": true
  }
}
