README
tsruntime
Library for emitting metadata for classes, using latest customTransformers
api.
Installation
- install 2.3.0+
typescript
and 3.1.3+awesome-typescript-laoder
npm i tsruntime
- for now remove
new CheckerPlugin()
, since it forkChecker
and it's impossibble to pass function as options. see https://github.com/s-panferov/awesome-typescript-loader/pull/423 - configure awesome-typescript-loader
const tsRuntimeTransformer = require('tsruntime/dist/transformer').default;
function getCustomTransformers() {
return {
before: [tsRuntimeTransformer()]
}
}
//...
{
loader: 'awesome-typescript-loader',
options: {
getCustomTransformers
}
}
Transformer Options
Configuration options can be passed to the transformer to change it's behavior. Supported options include:
- decoratorNames: string[] - If a class has a decorator named in this list, then it will have tsruntime data attached. default: ['Reflective']
Options should be passed using an options object.
function getCustomTransformers() {
return {
before: [tsRuntimeTransformer({
decoratorNames: ['CustomDecorator', 'Reflective']
})]
}
}
Usage:
- decorate classes you want to reflect with proper decorator
import {Reflective} from 'tsruntime';
@Reflective
export class StatsModel {
a?: number
b: string
c: Array<string>
d: number | string | null
}
@Reflective
class Foo extends Array<string> {
}
- get runtime class info:
import {Types, getType} from 'tsruntime';
const clsType = getType(Foo)
console.log(clsType.props, clsType.extends);
const dType = getType(StatsModel.prototype, "d")
- what info available - https://github.com/goloveychuk/tsruntime/blob/master/src/types.ts#L22
Example emitted output
var StatsModel = (function () {
function StatsModel() {
}
return StatsModel;
}());
__decorate([
Reflect.metadata("tsruntime:type", { kind: 7, types: [{ kind: 2 }, { kind: 5 }] })
], StatsModel.prototype, "a", void 0);
__decorate([
Reflect.metadata("tsruntime:type", { kind: 1 })
], StatsModel.prototype, "b", void 0);
__decorate([
Reflect.metadata("tsruntime:type", { kind: 6, type: Array, arguments: [{ kind: 1 }] })
], StatsModel.prototype, "c", void 0);
__decorate([
Reflect.metadata("tsruntime:type", { kind: 7, types: [{ kind: 2 }, { kind: 1 }, { kind: 4 }] })
], StatsModel.prototype, "d", void 0);
StatsModel = __decorate([
Reflect.metadata("tsruntime:type", { kind: 8, props: ["a", "b", "c", "d"] })
], StatsModel);
var Foo = (function (_super) {
__extends(Foo, _super);
function Foo() {
return _super !== null && _super.apply(this, arguments) || this;
}
return Foo;
}(Array));
Foo = __decorate([
Reflect.metadata("tsruntime:type", { kind: 8, props: [], extends: { kind: 6, type: Array, arguments: [{ kind: 1 }] } })
], Foo);