This page shows several ways to configure your project for use with ts-api-decorators-*, depending on what other frameworks you're using. Replace ts-api-decorators-* below with the name of the package you're using - e.g. ts-api-decorators-express.
The simplest way is to use ttypescript to compile instead of tsc directly.
Step 1: Install Dependencies
First, install ttypescript as a dev dependency. Also be sure you have the correct tsapi package installed (e.g. ts-api-decorators-express).
npm i --save-dev ttypescript
Step 2: Update your tsconfig.json
// tsconfig.json
{
"compilerOptions": {
"plugins": [
{ "transform": "ts-api-decorators-*/transformer" }
]
},
}Step 3: Update your Build Script
If you've been building your typescript by running tsc, then just replace tsc with ttypescript. The recommended way is to add a command in your package.json, like this:
// package.json
{
"scripts": {
"build": "ttypescript"
}
}Now you can build with npm run build.
See examples/webpack for detail.
// webpack.config.js
const tsapiTransformer = require('ts-api-decorators-express/transformer').default;
module.exports = {
// ...
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader',
options: {
getCustomTransformers: program => ({
before: [
tsapiTransformer(program)
]
})
}
}
]
}
};See test for detail.
You can try it with $ npm test.
const ts = require('typescript');
const tsapiTransformer = require('ts-api-decorators-express/transformer').default;
const program = ts.createProgram([/* your files to compile */], {
module: ts.ModuleKind.CommonJS,
noEmitOnError: true,
noImplicitAny: false,
experimentalDecorators: true,
target: ts.ScriptTarget.ES2019,
downlevelIteration: true,
sourceMap: true,
});
const transformers = {
before: [tsapiTransformer(program)],
after: []
};
const { emitSkipped, diagnostics } = program.emit(undefined, undefined, undefined, false, transformers);
if (emitSkipped) {
throw new Error(diagnostics.map(diagnostic => diagnostic.messageText).join('\n'));
}