# Directory Structure
```
├── .gitignore
├── Dockerfile
├── LICENSE
├── package-lock.json
├── package.json
├── README.md
├── smithery.yaml
├── src
│ ├── index.ts
│ └── tools
│ ├── addressSearchByPlaceName.ts
│ ├── directionSearchByAddress.ts
│ ├── directionSearchByCoordinates.ts
│ ├── futureDirectionSearchByCoordinates.ts
│ ├── geocode.ts
│ └── multiDestinationDirectionSearch.ts
└── tsconfig.json
```
# Files
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
```
1 | # Dependencies
2 | node_modules/
3 | npm-debug.log*
4 | yarn-debug.log*
5 | yarn-error.log*
6 |
7 | # Environment variables
8 | .env
9 | .env.local
10 | .env.*.local
11 |
12 | # Build output
13 | dist/
14 | build/
15 |
16 | # IDE
17 | .idea/
18 | .vscode/
19 | *.swp
20 | *.swo
21 |
22 | # OS
23 | .DS_Store
24 | Thumbs.db
```
--------------------------------------------------------------------------------
/smithery.yaml:
--------------------------------------------------------------------------------
```yaml
1 | app:
2 | name: kakao-mobility-mcp-server
3 | version: 1.0.2
4 |
5 | build:
6 | type: docker
7 | dockerfile: ./Dockerfile
8 |
9 | deploy:
10 | env:
11 | - name: KAKAO_REST_API_KEY
12 | required: true
13 |
14 | port: 3000
15 |
16 | health:
17 | path: /health
18 | port: 3000
19 |
20 | resources:
21 | memory: 512
22 | cpu: 1
23 |
24 | startCommand:
25 | type: stdio
26 | configSchema:
27 | type: object
28 | properties:
29 | kakaoRestApiKey:
30 | type: string
31 | description: "Kakao REST API 키"
32 | required:
33 | - kakaoRestApiKey
34 | commandFunction: |-
35 | (config) => ({
36 | "command": "node",
37 | "args": [
38 | "dist/index.js"
39 | ],
40 | "env": {
41 | "KAKAO_REST_API_KEY": config.kakaoRestApiKey
42 | }
43 | })
44 |
```
--------------------------------------------------------------------------------
/src/tools/geocode.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { z } from "zod";
2 | import dotenv from "dotenv";
3 | import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
4 | dotenv.config();
5 |
6 | export const geocodeSchema = {
7 | placeName: z.string(),
8 | };
9 |
10 | export const geocodeHandler = async ({ placeName }: { placeName: string }): Promise<CallToolResult> => {
11 | const response = await fetch(
12 | `https://dapi.kakao.com/v2/local/search/address?query=${placeName}`,
13 | {
14 | method: "GET",
15 | headers: {
16 | "Content-Type": "application/json",
17 | Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`,
18 | },
19 | }
20 | );
21 | const data = await response.json();
22 |
23 | return {
24 | content: [{
25 | type: "text",
26 | text: JSON.stringify(data),
27 | }],
28 | isError: false,
29 | };
30 | };
31 |
```
--------------------------------------------------------------------------------
/src/tools/addressSearchByPlaceName.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { z } from "zod";
2 | import dotenv from "dotenv";
3 | import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
4 | dotenv.config();
5 |
6 | export const addressSearchByPlaceNameSchema = {
7 | placeName: z.string(),
8 | };
9 |
10 | export const addressSearchByPlaceNameHandler = async ({ placeName }: { placeName: string }): Promise<CallToolResult> => {
11 | const response = await fetch(
12 | `https://dapi.kakao.com/v2/local/search/keyword?query=${placeName}`,
13 | {
14 | method: "GET",
15 | headers: {
16 | "Content-Type": "application/json",
17 | Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`,
18 | },
19 | }
20 | );
21 | const data = await response.json();
22 |
23 | return {
24 | content: [{
25 | type: "text",
26 | text: JSON.stringify(data),
27 | }],
28 | isError: false,
29 | };
30 | };
31 |
```
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "name": "traffic-data-mcp-server",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "scripts": {
6 | "test": "echo \"Error: no test specified\" && exit 1",
7 | "build": "tsc",
8 | "start": "node dist/index.js",
9 | "inspect": "npx @modelcontextprotocol/inspector node dist/index.js"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/CaChiJ/traffic-data-mcp-server.git"
14 | },
15 | "author": "",
16 | "license": "ISC",
17 | "bugs": {
18 | "url": "https://github.com/CaChiJ/traffic-data-mcp-server/issues"
19 | },
20 | "homepage": "https://github.com/CaChiJ/traffic-data-mcp-server#readme",
21 | "description": "",
22 | "dependencies": {
23 | "@modelcontextprotocol/sdk": "^1.8.0",
24 | "dotenv": "^16.4.7"
25 | },
26 | "devDependencies": {
27 | "@types/node": "^22.14.0",
28 | "typescript": "^5.8.3"
29 | }
30 | }
31 |
```
--------------------------------------------------------------------------------
/src/tools/directionSearchByCoordinates.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { z } from "zod";
2 | import dotenv from "dotenv";
3 | import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
4 | dotenv.config();
5 |
6 | export const directionSearchByCoordinatesSchema = {
7 | originLongitude: z.number(),
8 | originLatitude: z.number(),
9 | destLongitude: z.number(),
10 | destLatitude: z.number(),
11 | };
12 |
13 | export const directionSearchByCoordinatesHandler = async ({
14 | originLongitude,
15 | originLatitude,
16 | destLongitude,
17 | destLatitude,
18 | }: {
19 | originLongitude: number;
20 | originLatitude: number;
21 | destLongitude: number;
22 | destLatitude: number;
23 | }): Promise<CallToolResult> => {
24 | const response = await fetch(
25 | `https://apis-navi.kakaomobility.com/v1/directions?origin=${originLongitude},${originLatitude}&destination=${destLongitude},${destLatitude}`,
26 | {
27 | method: "GET",
28 | headers: {
29 | "Content-Type": "application/json",
30 | Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`,
31 | },
32 | }
33 | );
34 |
35 | const data = await response.json();
36 |
37 | return {
38 | content: [{
39 | type: "text",
40 | text: JSON.stringify(data),
41 | }],
42 | isError: false,
43 | };
44 | };
45 |
```
--------------------------------------------------------------------------------
/src/tools/futureDirectionSearchByCoordinates.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { z } from "zod";
2 | import dotenv from "dotenv";
3 | import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
4 | dotenv.config();
5 |
6 | export const futureDirectionSearchByCoordinatesSchema = {
7 | originLatitude: z.number(),
8 | originLongitude: z.number(),
9 | destinationLatitude: z.number(),
10 | destinationLongitude: z.number(),
11 | departureTime: z.string(),
12 | waypoints: z.string().optional(),
13 | priority: z.enum(["RECOMMEND", "TIME", "DISTANCE"]).optional(),
14 | avoid: z.string().optional(),
15 | roadEvent: z.number().optional(),
16 | alternatives: z.boolean().optional(),
17 | roadDetails: z.boolean().optional(),
18 | carType: z.number().optional(),
19 | carFuel: z.enum(["GASOLINE", "DIESEL", "LPG"]).optional(),
20 | carHipass: z.boolean().optional(),
21 | summary: z.boolean().optional(),
22 | };
23 |
24 | export const futureDirectionSearchByCoordinatesHandler = async ({
25 | originLatitude,
26 | originLongitude,
27 | destinationLatitude,
28 | destinationLongitude,
29 | departureTime,
30 | waypoints,
31 | priority,
32 | avoid,
33 | roadEvent,
34 | alternatives,
35 | roadDetails,
36 | carType,
37 | carFuel,
38 | carHipass,
39 | summary,
40 | }: {
41 | originLatitude: number;
42 | originLongitude: number;
43 | destinationLatitude: number;
44 | destinationLongitude: number;
45 | departureTime: string;
46 | waypoints?: string;
47 | priority?: string;
48 | avoid?: string;
49 | roadEvent?: number;
50 | alternatives?: boolean;
51 | roadDetails?: boolean;
52 | carType?: number;
53 | carFuel?: string;
54 | carHipass?: boolean;
55 | summary?: boolean;
56 | }): Promise<CallToolResult> => {
57 | let url = `https://apis-navi.kakaomobility.com/v1/future/directions?origin=${originLongitude},${originLatitude}&destination=${destinationLongitude},${destinationLatitude}&departure_time=${departureTime}`;
58 |
59 | if (waypoints) url += `&waypoints=${waypoints}`;
60 | if (priority) url += `&priority=${priority}`;
61 | if (avoid) url += `&avoid=${avoid}`;
62 | if (roadEvent !== undefined) url += `&roadevent=${roadEvent}`;
63 | if (alternatives !== undefined) url += `&alternatives=${alternatives}`;
64 | if (roadDetails !== undefined) url += `&road_details=${roadDetails}`;
65 | if (carType !== undefined) url += `&car_type=${carType}`;
66 | if (carFuel) url += `&car_fuel=${carFuel}`;
67 | if (carHipass !== undefined) url += `&car_hipass=${carHipass}`;
68 | if (summary !== undefined) url += `&summary=${summary}`;
69 |
70 | const response = await fetch(url, {
71 | method: "GET",
72 | headers: {
73 | "Content-Type": "application/json",
74 | Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`,
75 | },
76 | });
77 |
78 | const data = await response.json();
79 |
80 | return {
81 | content: [{
82 | type: "text",
83 | text: JSON.stringify(data),
84 | }],
85 | isError: false,
86 | };
87 | };
88 |
```
--------------------------------------------------------------------------------
/src/tools/directionSearchByAddress.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { z } from "zod";
2 | import dotenv from "dotenv";
3 | import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
4 | dotenv.config();
5 |
6 | export const directionSearchByAddressSchema = {
7 | originAddress: z.string(),
8 | destAddress: z.string(),
9 | };
10 |
11 | export const directionSearchByAddressHandler = async ({
12 | originAddress,
13 | destAddress,
14 | }: {
15 | originAddress: string;
16 | destAddress: string;
17 | }): Promise<CallToolResult> => {
18 | const [originResult, destResult]: [any, any] = await Promise.all([
19 | (async () => {
20 | const response = await fetch(
21 | `https://dapi.kakao.com/v2/local/search/address?query=${originAddress}`,
22 | {
23 | method: "GET",
24 | headers: {
25 | "Content-Type": "application/json",
26 | Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`,
27 | },
28 | }
29 | );
30 | if (!response.ok) {
31 | throw new Error(
32 | `Kakao geocode API request failed for origin: ${response.statusText}`
33 | );
34 | }
35 | const data = await response.json();
36 | return data;
37 | })(),
38 | (async () => {
39 | const response = await fetch(
40 | `https://dapi.kakao.com/v2/local/search/address?query=${destAddress}`,
41 | {
42 | method: "GET",
43 | headers: {
44 | "Content-Type": "application/json",
45 | Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`,
46 | },
47 | }
48 | );
49 | if (!response.ok) {
50 | throw new Error(
51 | `Kakao geocode API request failed for destination: ${response.statusText}`
52 | );
53 | }
54 | const data = await response.json();
55 | return data;
56 | })(),
57 | ]);
58 |
59 | // Add basic error handling for geocoding results
60 | if (
61 | !originResult?.documents?.[0]?.x ||
62 | !originResult?.documents?.[0]?.y ||
63 | !destResult?.documents?.[0]?.x ||
64 | !destResult?.documents?.[0]?.y
65 | ) {
66 | // Consider returning a more informative error structure for MCP
67 | return {
68 | content: [{
69 | type: "text",
70 | text: "Geocoding failed or returned incomplete data for one or both locations.",
71 | }],
72 | isError: true,
73 | };
74 | }
75 |
76 | const originLongitude = originResult.documents[0].x;
77 | const originLatitude = originResult.documents[0].y;
78 | const destLongitude = destResult.documents[0].x;
79 | const destLatitude = destResult.documents[0].y;
80 |
81 | const response = await fetch(
82 | `https://apis-navi.kakaomobility.com/v1/directions?origin=${originLongitude},${originLatitude}&destination=${destLongitude},${destLatitude}`,
83 | {
84 | method: "GET",
85 | headers: {
86 | "Content-Type": "application/json",
87 | Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`,
88 | },
89 | }
90 | );
91 |
92 | const data = await response.json();
93 |
94 | return {
95 | content: [{
96 | type: "text",
97 | text: JSON.stringify(data),
98 | }],
99 | isError: false,
100 | };
101 | };
102 |
```
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
```typescript
1 | import {
2 | McpServer,
3 | ResourceTemplate,
4 | } from "@modelcontextprotocol/sdk/server/mcp.js";
5 | import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6 | import dotenv from "dotenv";
7 | dotenv.config();
8 |
9 | import { directionSearchByCoordinatesSchema, directionSearchByCoordinatesHandler } from "./tools/directionSearchByCoordinates.js";
10 | import { directionSearchByAddressSchema, directionSearchByAddressHandler } from "./tools/directionSearchByAddress.js";
11 | import { addressSearchByPlaceNameSchema, addressSearchByPlaceNameHandler } from "./tools/addressSearchByPlaceName.js";
12 | import { geocodeSchema, geocodeHandler } from "./tools/geocode.js";
13 | import { futureDirectionSearchByCoordinatesSchema, futureDirectionSearchByCoordinatesHandler } from "./tools/futureDirectionSearchByCoordinates.js";
14 | import { multiDestinationDirectionSearchSchema, multiDestinationDirectionSearchHandler } from "./tools/multiDestinationDirectionSearch.js";
15 |
16 | // Create an MCP server
17 | const server = new McpServer({
18 | name: "Traffic Data MCP Server",
19 | version: "1.0.2",
20 | });
21 |
22 | // Register tools
23 | server.tool(
24 | "direction_search_by_coords",
25 | "Search for directions between two points using their coordinates (longitude and latitude). This tool provides navigation information including distance, duration, and route details.",
26 | directionSearchByCoordinatesSchema,
27 | directionSearchByCoordinatesHandler
28 | );
29 |
30 | server.tool(
31 | "direction_search_by_address",
32 | "Search for directions between two locations using their addresses. The tool first geocodes the addresses to coordinates, then finds the optimal route between them.",
33 | directionSearchByAddressSchema,
34 | directionSearchByAddressHandler
35 | );
36 |
37 | server.tool(
38 | "address_search_by_place_name",
39 | "Search for addresses using a place name or keyword. Returns detailed location information including coordinates and address details.",
40 | addressSearchByPlaceNameSchema,
41 | addressSearchByPlaceNameHandler
42 | );
43 |
44 | server.tool(
45 | "geocode",
46 | "Convert an address into geographic coordinates (geocoding). Returns the exact location coordinates and address details for the given place name.",
47 | geocodeSchema,
48 | geocodeHandler
49 | );
50 |
51 | server.tool(
52 | "future_direction_search_by_coords",
53 | "Search for directions with future departure time. Provides navigation information considering traffic predictions for a specific future time. Supports various options like waypoints, route preferences, and vehicle details.",
54 | futureDirectionSearchByCoordinatesSchema,
55 | futureDirectionSearchByCoordinatesHandler
56 | );
57 |
58 | server.tool(
59 | "multi_destination_direction_search",
60 | "Search for directions between a starting point and multiple destinations with coordinates. Returns a summary of the route including distance, duration, and route details. For detailed route information, additional calls to the car navigation API are required.",
61 | multiDestinationDirectionSearchSchema,
62 | multiDestinationDirectionSearchHandler
63 | );
64 |
65 |
66 | (async () => {
67 | const transport = new StdioServerTransport();
68 | await server.connect(transport);
69 | })();
70 |
```
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig to read more about this file */
4 |
5 | /* Projects */
6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12 |
13 | /* Language and Environment */
14 | "target": "es2017", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16 | // "jsx": "preserve", /* Specify what JSX code is generated. */
17 | // "libReplacement": true, /* Enable lib replacement. */
18 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
19 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
20 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
21 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
22 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
23 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
24 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
25 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
26 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
27 |
28 | /* Modules */
29 | "module": "nodenext", /* Specify what module code is generated. */
30 | // "rootDir": "./", /* Specify the root folder within your source files. */
31 | "moduleResolution": "nodenext", /* Specify how TypeScript looks up a file from a given module specifier. */
32 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
33 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
34 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
35 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
36 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */
37 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
38 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
39 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
40 | // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
41 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
42 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
43 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
44 | // "noUncheckedSideEffectImports": true, /* Check side effect imports. */
45 | // "resolveJsonModule": true, /* Enable importing .json files. */
46 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
47 | // "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
48 |
49 | /* JavaScript Support */
50 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
51 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
52 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
53 |
54 | /* Emit */
55 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
56 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */
57 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
58 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
59 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
60 | // "noEmit": true, /* Disable emitting files from a compilation. */
61 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
62 | "outDir": "./dist", /* Specify an output folder for all emitted files. */
63 | // "removeComments": true, /* Disable emitting comments. */
64 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
65 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
66 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
67 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
68 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
69 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
70 | // "newLine": "crlf", /* Set the newline character for emitting files. */
71 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
72 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
73 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
74 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
75 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
76 |
77 | /* Interop Constraints */
78 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
79 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
80 | // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
81 | // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */
82 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
83 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
84 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
85 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
86 |
87 | /* Type Checking */
88 | "strict": true, /* Enable all strict type-checking options. */
89 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
90 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
91 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
92 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
93 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
94 | // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
95 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
96 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
97 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
98 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
99 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
100 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
101 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
102 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
103 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
104 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
105 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
106 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
107 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
108 |
109 | /* Completeness */
110 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
111 | "skipLibCheck": true /* Skip type checking all .d.ts files. */
112 | }
113 | }
114 |
```