{
  "compilerOptions": {
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "target": "ESNext",
    "lib": [
      "ESNext",
      "DOM"
    ],
    "module": "NodeNext",
    "rootDir": "./src",
    "allowJs": true,
    "outDir": "build",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "baseUrl": ".",
    "typeRoots": [
      "./node_modules/@types"
    ],
    "types": [
      "node"
    ],
    "paths": {
      "*": [
        "src/*"
      ],
      "types": [
        "src/types/global/index.d.ts"
      ],
    }
  },
  "include": [
    "src/**/*",
    "src/index.mts",
    "src/index.cts",
    "src/types/**/*"
  ],
  "exclude": [
    "node_modules",
    "node_modules/**/*",
    "public/types"
  ],
  "ts-node": {
    // It is faster to skip typechecking.
    // Remove if you want ts-node to do typechecking.
    "transpileOnly": true,
    "files": true,
    "compilerOptions": {
      "rootDir": "./src",
      "baseUrl": ".",
      "paths": {
        "*": [
          "src/*"
        ],
        "types": [
          "src/types/global/index.d.ts"
        ]
      }
    }
  }
}