fastify-tsconfig
Advanced tools
Comparing version 1.0.1 to 2.0.0
{ | ||
"name": "fastify-tsconfig", | ||
"version": "1.0.1", | ||
"version": "2.0.0", | ||
"description": "Shared TypeScript configuration", | ||
@@ -17,3 +17,3 @@ "license": "MIT", | ||
"engines": { | ||
"node": ">=10.4.0" | ||
"node": ">=18.0.0" | ||
}, | ||
@@ -20,0 +20,0 @@ "files": [ |
119
README.md
@@ -13,17 +13,119 @@ # tsconfig | ||
Extend your own `tsconfig.json` file from `fastify-tsconfig` and override/add the desired settings. By default no `outDir` is set (because of [this issue](https://github.com/Microsoft/TypeScript/issues/29172)) , so be sure to add one. | ||
Create your own `tsconfig.json` in the projects' root folder and extend it from `fastify-tsconfig`, overriding or adding the desired settings. By default, no `outDir` is set (because of [this issue](https://github.com/Microsoft/TypeScript/issues/29172)), so be sure to add one. | ||
### Configuration module and moduleResolution | ||
This configuration sets `"module"` and `"moduleResolution"` to [`NodeNext`](https://www.typescriptlang.org/docs/handbook/esm-node.html). This means that TypeScript will read the nearest `package.json` file in the scope and search for the `"type"` field or the absence of it. | ||
If `type` is not set or is `"type": "commonjs"` the emitted code will be CommonJS, with `.js` extension. Moreover, `tsc` will complain if ESM-only properties/features are used in source files. If you want to emit `.mjs` files, use the `.mts` extension. | ||
On the other hand, if `"type": "module"` is set, the sources will be compiled to the ESM with the `.js` extension. In this case, if you want to emit `.cjs` files, use the `.cts` extension for the source file. | ||
The "following the Node.js rules" goes also for the `package.json` `exports` field. If `type` is set, regardless of the value, TypeScript will check the `exports` field to know where the compiled code and the types are located. If the `type` field is not set, it will check for the `main` and `types` fields. | ||
#### CommonJS example | ||
`package.json` | ||
```jsonc | ||
{ | ||
"name": "my-package", | ||
"type": "commonjs", | ||
"main": "dist/index.js", // this is for older Node.js versions | ||
"types": "dist/index.d.ts", // this is optional and can be omitted | ||
"exports": { | ||
"import": "./dist/index.js", | ||
"require": "./dist/index.js", | ||
"types": "./dist/index.d.ts" // this is optional and can be omitted | ||
} | ||
} | ||
``` | ||
`tsconfig.json` | ||
```jsonc | ||
{ | ||
"extends": "fastify-tsconfig", | ||
"compilerOptions": { | ||
"outDir": "dist", | ||
"sourceMap": true | ||
}, | ||
"include": [ | ||
"src/**/*.ts" | ||
] | ||
} | ||
``` | ||
#### ESM example | ||
`package.json` | ||
```jsonc | ||
{ | ||
"name": "my-package", | ||
"type": "module", | ||
"main": "dist/index.js", // this is for older Node.js versions | ||
"types": "dist/index.d.ts", // this is optional and can be omitted | ||
"exports": { | ||
"import": "./dist/index.js", | ||
"require": "./dist/index.js", | ||
"types": "./dist/index.d.ts" // this is optional and can be omitted | ||
} | ||
} | ||
``` | ||
`tsconfig.json` | ||
```jsonc | ||
{ | ||
"extends": "fastify-tsconfig", | ||
"compilerOptions": { | ||
"outDir": "dist", | ||
"sourceMap": true | ||
}, | ||
"include": [ | ||
"src/**/*.ts" | ||
] | ||
} | ||
``` | ||
### Extending this configuration | ||
Depending on the type of the project, you should add the following settings. | ||
#### Application | ||
`tsconfig.json` | ||
```json | ||
{ | ||
"extends": "fastify-tsconfig", | ||
"compilerOptions": { | ||
"outDir": "build", | ||
"target": "es2018", | ||
"lib": ["es2018"] | ||
} | ||
"extends": "fastify-tsconfig", | ||
"compilerOptions": { | ||
"outDir": "dist", | ||
"sourceMap": true | ||
}, | ||
"include": [ | ||
"src/**/*.ts" | ||
] | ||
} | ||
``` | ||
#### NPM Package | ||
`tsconfig.json` | ||
```json | ||
{ | ||
"extends": "fastify-tsconfig", | ||
"compilerOptions": { | ||
"outDir": "dist", | ||
"declaration": true | ||
}, | ||
"include": [ | ||
"src/**/*.ts" | ||
] | ||
} | ||
``` | ||
#### Monorepo Package | ||
`tsconfig.json` | ||
```json | ||
{ | ||
"extends": "fastify-tsconfig", | ||
"compilerOptions": { | ||
"outDir": "dist", | ||
"declarationMap": true, | ||
"composite": true | ||
}, | ||
"include": [ | ||
"src/**/*.ts" | ||
] | ||
} | ||
``` | ||
Check the other settings [here](./tsconfig.json) | ||
@@ -33,3 +135,3 @@ | ||
The configuration targets es2018, that is supported in Node.js 10 and later. There is only one feature that is is missing from Node.js v10: [Proxy "ownKeys"](https://node.green/#ES2018) . However using es2018 as target makes some widely used features ("object rest properties", "object spread properties", and "Asynchronous Iterators") not being transpiled. To target some other version, just override `target` property. | ||
The configuration targets ES2022, which is supported in Node.js 16 and later. Only one feature still needs to be implemented: [RegExp Match Indices shows up in flags](https://node.green/#ES2022). However, using ES2022 as a target makes widely used features not being compiled. To target an older version, override the `target` property. | ||
@@ -43,1 +145,2 @@ ## License | ||
Inspired by: [sindresorhus/tsconfig](https://github.com/sindresorhus/tsconfig) | ||
{ | ||
"$schema": "https://json.schemastore.org/tsconfig", | ||
"compilerOptions": { | ||
"target": "es2018", | ||
"module": "commonjs", | ||
"moduleResolution": "node", | ||
"declaration": true, | ||
"pretty": true, | ||
"noEmitOnError": true, | ||
"target": "ES2022", | ||
"module": "NodeNext", | ||
"moduleResolution": "NodeNext", | ||
"esModuleInterop": true, | ||
"strict": true, | ||
@@ -15,9 +14,9 @@ "resolveJsonModule": true, | ||
"noFallthroughCasesInSwitch": true, | ||
"useDefineForClassFields": true, | ||
"isolatedModules": true, | ||
"forceConsistentCasingInFileNames": true, | ||
"skipLibCheck": true, | ||
"lib": [ | ||
"esnext" | ||
"ESNext" | ||
] | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
6082
144
21