{
	"compilerOptions": {
		/* Enable incremental compilation for faster subsequent builds. */
		"incremental": true,

		/* Specify file to store incremental compilation information. */
		"tsBuildInfoFile": "${configDir}/out/tsconfig.tsbuildinfo",

		/* Target ECMAScript version for generated code. */
		"target": "esnext",

		/* JSX compilation mode - generates React.createElement calls. */
		"jsx": "react",

		/* Custom JSX factory function to use instead of React.createElement. */
		"jsxFactory": "React.createElement",

		/* Custom JSX fragment factory function to use instead of React.Fragment. */
		"jsxFragmentFactory": "React.Fragment",

		/* Force TypeScript to consider all files as modules. */
		"moduleDetection": "force",

		/* Disable including default library files (lib.d.ts). */
		"noLib": true,

		/* Enable experimental support for decorators. */
		"experimentalDecorators": true,

		/* Root directory of input files. */
		"rootDir": "${configDir}/src",

		/* Specify module system for generated code. */
		"module": "preserve",

		/* Module resolution strategy optimized for bundlers. */
		"moduleResolution": "bundler",

		/* Base directory for resolving non-relative module names. */
		"paths": { "*": ["${configDir}/src/*"] },

		/* Enable importing .json files. */
		"resolveJsonModule": true,

		/* Specify directories to search for type definitions. */
		"typeRoots": ["${configDir}/node_modules/@rbxts"],

		/* Include types for roblox-ts APIs. */
		"types": ["compiler-types"],

		/* Enable all strict TypeScript checks. */
		"strict": true,

		/* Disallow unreachable code (code after return, throw, etc.). */
		"allowUnreachableCode": false,

		/* Interpret optional property types as written, rather than adding undefined. */
		"exactOptionalPropertyTypes": true,

		/* Report errors for fallthrough cases in switch statements. */
		"noFallthroughCasesInSwitch": true,

		/* Require override keyword for overridden methods. */
		"noImplicitOverride": true,

		/* Require explicit return in all branches of functions with return type. */
		"noImplicitReturns": true,

		/* Disallow property access through indexes without explicit declaration. */
		"noPropertyAccessFromIndexSignature": true,

		/* Make index checks stricter (may return undefined). */
		"noUncheckedIndexedAccess": true,

		/* Specify output directory for generated files. */
		"outDir": "${configDir}/out",

		/* Enable source maps for generated code. */
		"sourceMap": true,

		/* Allow default imports from modules with no default export. */
		"allowSyntheticDefaultImports": true,

		/* Enforce consistent casing in file names when importing. */
		"forceConsistentCasingInFileNames": true,

		/* Skip type checking in library files (.d.ts). */
		"skipLibCheck": true
	},

	/* Specify files or patterns to include in the compilation. */
	"include": ["${configDir}/**/*.ts", "${configDir}/**/*.tsx"],

	/* Specify files or patterns to exclude from the compilation. */
	"exclude": ["${configDir}/node_modules", "${configDir}/out", "${configDir}/**/.*/"]
}
