{
	"$schema": "https://json.schemastore.org/tsconfig.json",
	// Mapped from https://www.typescriptlang.org/tsconfig
	"compilerOptions": {
		// Type Checking
		"allowUnreachableCode": false,
		"allowUnusedLabels": false,
		"exactOptionalPropertyTypes": true,
		"noFallthroughCasesInSwitch": true,
		"noImplicitOverride": true,
		"noImplicitReturns": true,
		"noPropertyAccessFromIndexSignature": false,
		"noUncheckedIndexedAccess": true,
		"noUnusedLocals": true,
		"noUnusedParameters": true,
		"strict": true,

		// Modules
		"allowArbitraryExtensions": false,
		"allowImportingTsExtensions": false,
		"module": "ESNext",
		"moduleResolution": "Bundler",
		"resolveJsonModule": true,
		"resolvePackageJsonExports": true,
		"resolvePackageJsonImports": true,

		// Emit
		"declaration": true,
		"declarationMap": true,
		"importHelpers": false,
		"newLine": "lf",
		"noEmitHelpers": true,
		"outDir": "dist",
		"removeComments": false,
		"sourceMap": true,

		// Interop Constraints
		"allowSyntheticDefaultImports": true,
		"esModuleInterop": false,
		"forceConsistentCasingInFileNames": true,
		"isolatedModules": true,

		// Language and Environment
		"experimentalDecorators": true,
		"lib": ["ESNext"],
		"target": "ESNext",
		"useDefineForClassFields": true
	},
	"exclude": ["node_modules"]
}
