js-reflector
js-reflector for Typescript
An engineer built an airplane, and he recorded its structure.
A pilot comes, starts the motor, flies to the sky.
Why is Reflection
- First-Class-Value
- Know more at runtime
- Useful for increasing the flexibility
Get started
Give a definite name to the class
; @metadataclassName"namespace.BaseClass" @metadataclassName"namespace.SampleClass"@metadata { thisid = id; } id: string; console;// namespace.SampleClassconsole;// [Function: SampleClass]console;// xxxxxxxconsole;// [Function: BaseClass]console;// namespace.BaseClass
Add more metadata
; @ console;// This is a SampleClass
Class metadata schema
; @metadataclassName"namespace.BaseClass" @metadataclassName"namespace.SampleClass"@metadata @ static staticSampleProperty: string; @ static { } @ sampleProperty: string; @ { }console;// {// className: "namespace.SampleClass",// superClass: "namespace.BaseClass",// staticProperties: {// staticSampleProperty: {// name: "staticSampleProperty",// meta: "value"// },// staticSampleMethod: {// name: "staticSampleMethod",// isMethod: true,// meta: "value"// }// },// properties: {// sampleProperty: {// name: "sampleProperty",// meta: "value"// },// sampleMethod: {// name: "sampleMethod",// isMethod: true,// meta: "value"// }// }// }
Declared metadata
@@metadataclassName"namespace.Base" @metadata@metadataclassName"namespace.Child" console;// {// className: "namespace.Child",// superClass: "namespace.Base",// staticProperties: {},// properties: {}// }console;// {// className: "namespace.Child",// superClass: "namespace.Base",// meta: "value",// staticProperties: {},// properties: {}// }
Inheritable & Mergeable metadata
@@ @ @ prop;@@metadata @ prop;console;// valueconsole;// ChildValueconsole;// valueconsole;// ChildValue
Dynamic object reflection
@@metadataclassName"descripbe.SampleClass" var dynamicObject = stringValue: "text" numberValue: 1 booleanValue: true dateValue: undefinedValue: undefined nullValue: null NaNValue: NaN arrayValue: objectValue: {} { } sampleValue: console;// {// "type": "Object",// "properties": {// "stringValue": {// "name": "stringValue",// "type": "String"// },// "numberValue": {// "name": "numberValue",// "type": "Number"// },// "booleanValue": {// "name": "booleanValue",// "type": "Boolean"// },// "dateValue": {// "name": "dateValue",// "type": "Date"// },// "undefinedValue": {// "name": "undefinedValue",// "type": "Undefined"// },// "nullValue": {// "name": "nullValue",// "type": "Null"// },// "NaNValue": {// "name": "NaNValue",// "type": "Number"// },// "arrayValue": {// "name": "arrayValue",// "type": "Array"// },// "objectValue": {// "name": "objectValue",// "type": "Object"// },// "functionValue": {// "name": "functionValue",// "type": "Function"// },// "sampleValue": {// "sampleMeta": "value",// "name": "sampleValue",// "type": "descripbe.SampleClass"// }// }// }
Build
$ npm build
Test
$ npm test
Using karma-sauceLabs-launcher
For run the tests across many browsers and platforms on Sauce Labs, you must make file 'karma.sauceLabs.json' in the project:
The customLaunchers object configures individual browsers in file 'karma.conf.js', and the sauceLabs reporter allows your tests results to be properly displayed on https://saucelabs.com.
karma.conf.js
var karma_sauceLabs = ; module { config}