ts-runtime-reflection
TypeScript icon, indicating that this package has built-in type declarations

1.3.0 • Public • Published

tsruntime

Build Status npm version

Library for emitting metadata for classes, using latest customTransformers api.

Installation

  1. install 2.3.0+ typescript and 3.1.3+ awesome-typescript-laoder
  2. npm i tsruntime
  3. for now remove new CheckerPlugin(), since it fork Checker and it's impossibble to pass function as options. see https://github.com/s-panferov/awesome-typescript-loader/pull/423
  4. 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:

  1. 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> {
 
}
 
  1. 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")
  1. 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);

Package Sidebar

Install

npm i ts-runtime-reflection

Weekly Downloads

1

Version

1.3.0

License

MIT

Unpacked Size

237 kB

Total Files

69

Last publish

Collaborators

  • efreeti