{"_id":"@plumjs/reflect","_rev":"30-99b9a8583ae4d86559fcbcc1aebdb9ff","name":"@plumjs/reflect","dist-tags":{"canary":"1.4.0-alpha.1bcecb6e","latest":"1.4.1"},"versions":{"1.4.0-alpha.0614ea60":{"name":"@plumjs/reflect","version":"1.4.0-alpha.0614ea60","description":"TypeScript reflection and type inspector library","main":"lib/index.js","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json","package-prod":"node ../../.script/modify-package production","package-dev":"node ../../.script/modify-package"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"types":"lib/index.d.ts","_id":"@plumjs/reflect@1.4.0-alpha.0614ea60","dist":{"shasum":"e66f4e638d781dc51dd97520823ad666559097b4","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.0614ea60.tgz","fileCount":6,"unpackedSize":13617,"integrity":"sha512-Z7olYbsBFOGkIynBOKKRPlrHur5BKU3rkVQewGhlMqZWectRf0hKpedt+fPbxusRV728f0/3Ep7p3sVFTa1mWA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHaTbThKijL2Whr394W/MS6J5untcGb7gdTzpgzRm9LOAiA01GBMUi++vAusdnhiWtUuc4KdwXLdFSKHshR8glq2DQ=="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.0614ea60_1531715475550_0.25992706883734473"},"_hasShrinkwrap":false},"1.4.0-alpha.a486b022":{"name":"@plumjs/reflect","version":"1.4.0-alpha.a486b022","description":"TypeScript reflection and type inspector library","main":"lib/index.js","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json","package-prod":"node ../../.script/modify-package production","package-dev":"node ../../.script/modify-package"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","types":"lib/index.d.ts","readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.a486b022","dist":{"shasum":"53c6413264cee7e914b38063d974d654c5f8dc73","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.a486b022.tgz","fileCount":6,"unpackedSize":13568,"integrity":"sha512-npk5akcwZ+JnAZrYSjuoooMKT0zt+M+5HVLTkHdd3TChTjb7boyTZzGCgWG5/otkh/qCta3XbS6ADViZKewzFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRukRNWsVajDw/NDGvYSyIrWU0v2VbDvhHbjwFA+f3VQIgdfbRkfXQ1NB8+N0D/dLfxV9XgNVi6Jii4z2MBJOkJBo="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.a486b022_1531730913638_0.05518155671350522"},"_hasShrinkwrap":false},"1.4.0-alpha.56f2ec99":{"name":"@plumjs/reflect","version":"1.4.0-alpha.56f2ec99","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.56f2ec99","dist":{"shasum":"c272eb03047429fff445944c58b55ee29689425f","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.56f2ec99.tgz","fileCount":6,"unpackedSize":13546,"integrity":"sha512-qsTWU/gRg2PpaCjxexCVM9FHXZ6+R/WSIDuJPhZABk12jZL6NyH+tzyDT191GimeOV2ehkry3kMTCfAMuXD24A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLTlRJkhgGQzUMEstL9AVyTj7q6qP6OFs9jYl34IriEQIga9zL8884yZSfYqwV4zk89XOM4NaY5Uyik/oru9Kmfwg="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.56f2ec99_1532066204780_0.42770831126792985"},"_hasShrinkwrap":false},"1.4.0-alpha.e8d121b4":{"name":"@plumjs/reflect","version":"1.4.0-alpha.e8d121b4","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.e8d121b4","dist":{"shasum":"a12140801cb54c1db5d0ea8acd8f3292b090dad5","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.e8d121b4.tgz","fileCount":6,"unpackedSize":13595,"integrity":"sha512-1yMrBNwJhDHpJ7jlMm7TFLuOvdXC3ntiIQvNauQK++ZtnpFyP6x74l4R2ZSXCGur6fSbntUqdVxCueJ0D+k+iw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDFo8Ey/Y7qbbvQSayHyGG6bhslT2bb4Kb/d8PkBZLRGAiBD90OTSrs4zG8Jnhe6VZIBDYLAP2gzQkZqmDk7Mp7CCA=="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.e8d121b4_1532066505487_0.2330715469829856"},"_hasShrinkwrap":false},"1.4.0-alpha.10b371a0":{"name":"@plumjs/reflect","version":"1.4.0-alpha.10b371a0","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.10b371a0","dist":{"shasum":"1669b3b166ef64d5faaeaa48e8e39565b0491530","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.10b371a0.tgz","fileCount":6,"unpackedSize":13595,"integrity":"sha512-UyLTbrAkvz6vofhHxvOdc9Z0jut2ajM+uAwhq+RsVGdV1r81R3iOYPBCUzBqrW5hjZUheiDLjby9Djnb0QyjSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEritAMUelKsDD4Df+1RNRfH2NtVAsbv9wC6qK8W+I0mAiAU1d20aUwGejMX5UmhVxtRHFrMM9Pb+8mhFZRZVtltOQ=="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.10b371a0_1532068881798_0.700954705437858"},"_hasShrinkwrap":false},"1.4.0-alpha.a709e511":{"name":"@plumjs/reflect","version":"1.4.0-alpha.a709e511","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.a709e511","dist":{"shasum":"023bd3361d2adca25afba804c3f0cb68c20284a9","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.a709e511.tgz","fileCount":6,"unpackedSize":13595,"integrity":"sha512-LyDjCf8DQbEr1Idx9p7V8gE8NcxljkYUZ5X7Fr0UqfXGj7CmqWBk0C2RDTuX0BfvWERCkJnYwKCen0WOZB+RLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICNFL9AgBchk09oCnCib+QNCvxJrfRSOVcIvJiBYFCU2AiEAk9qnN6FaAMdsX4YrAHouoagIS/tJk/qhEaauPsRVdck="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.a709e511_1532082609724_0.04981230989053942"},"_hasShrinkwrap":false},"1.4.0-alpha.b45edf92":{"name":"@plumjs/reflect","version":"1.4.0-alpha.b45edf92","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.b45edf92","dist":{"shasum":"7194e408799014d2b6e3e80ad58a8897d000bf91","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.b45edf92.tgz","fileCount":6,"unpackedSize":13591,"integrity":"sha512-oRZOQm0i8o6z0xIfeTIk9tikxILJ7A0aYben4/+RkuJyQocyUkoKqhhdVVxOG4wQepKcfG5AhzwBbc7Ih9HKWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7E+r2nlD+CyeBI9x1EHwxWmIHhU9PSFYED1ONtm69UgIhAKEsq2Eg8JXk47Vt3no9QlVXUCCYZN9CuQLoFeEY5HKr"}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.b45edf92_1532087015794_0.916496017331931"},"_hasShrinkwrap":false},"1.4.0-alpha.dbe9c682":{"name":"@plumjs/reflect","version":"1.4.0-alpha.dbe9c682","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.dbe9c682","dist":{"shasum":"beea5800cedd2799b2d903db0aef9b800f5abfb5","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.dbe9c682.tgz","fileCount":6,"unpackedSize":13591,"integrity":"sha512-ComuoBHDUrna8YU35uldpdLiIFk+jNuSGwSNcBsjZGYkO8oTmr1/resi8dTe93G1hOBfUJtHC9zcriLTgbI//Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFabKlkVZMEZ8z9OOJd1wGwkNr3+jfFeeU6nqqRmXU36AiAbehJCo6w879yEWpbBpFyh77D0Er24Z+NtkH01IAnfow=="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.dbe9c682_1532211624546_0.7764361298062095"},"_hasShrinkwrap":false},"1.4.0-alpha.9aaa0a15":{"name":"@plumjs/reflect","version":"1.4.0-alpha.9aaa0a15","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.9aaa0a15","dist":{"shasum":"bf3609ad76f067deb450187ff93fe0a527fda6f8","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.9aaa0a15.tgz","fileCount":3,"unpackedSize":4312,"integrity":"sha512-yD+CGTtTvuct00wBM0DspyQXJEZy9yVQoh+qdoGYqLFqL3+OAgZm9Pvu29lVWS8Wq0fmAEcnmC1++hhV4nOxxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBYsw1F662XnENq3DNm2i2tPNBCpCuK+mnXAfk8glEGJAiBGZeOu0tnf0Z3nNkGfMWolPsAkc+Yu1bjOBvDwDkw3XA=="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.9aaa0a15_1532223954386_0.7708789265667393"},"_hasShrinkwrap":false},"1.4.0-alpha.7020144f":{"name":"@plumjs/reflect","version":"1.4.0-alpha.7020144f","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.7020144f","dist":{"shasum":"a6cdd98d573a6c310de33b2e49670b695a298484","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.7020144f.tgz","fileCount":6,"unpackedSize":13591,"integrity":"sha512-K14uKmnCGW4B3lb09vBsUdSm42FQu2f5tJ8l1KecLA4qJNNIn2ccPuJiSrGZIsXD1HLCzpun3jAKkahfmuB71w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEW7n195CT6FO1/i2Qgk7BKJUPrccc6IwKjgpZA+iDXWAiEAt7jHI/sXtBlWKFfAZtqImJ98M1vFvZVUOVakR7KRff0="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.7020144f_1532265201972_0.046743545908783934"},"_hasShrinkwrap":false},"1.4.0-alpha.292e1ec3":{"name":"@plumjs/reflect","version":"1.4.0-alpha.292e1ec3","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.292e1ec3","dist":{"shasum":"e5bbc28c0508b419002e1784c3601396521d48b9","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.292e1ec3.tgz","fileCount":6,"unpackedSize":14608,"integrity":"sha512-MchJyEMMhWB4DXP0poF9yA1Dqs15oQn1bdWkdJs+dK1HW9G+wBSmj1E98CDteC6Pk4acxpYlBLzBAAME6V06aQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFjiZBse0rYDdFDwwZQJw6gG7u/4qTDN7Gr6tx1VYBnVAiEAkUm/BfXT42c1eqE1ePKWyMnSaTmrbH4en3zdl14B3do="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.292e1ec3_1532388657934_0.7551681151203857"},"_hasShrinkwrap":false},"1.4.0-alpha.82f2f2c1":{"name":"@plumjs/reflect","version":"1.4.0-alpha.82f2f2c1","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.82f2f2c1","dist":{"shasum":"948840b5088f09224691afe4c45c3ad7ff46cbc3","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.82f2f2c1.tgz","fileCount":6,"unpackedSize":14608,"integrity":"sha512-i60NAlUICSAibD9utjqb3jVZMMEJuhXU2yWTLZFJ8qVcbXUnKKlU9mosNlesZ5YVWbwiIOXtZkECl+ynVY618A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBS72F4EV/fEqOuQEG82eXJRDzS3rwP8AjsyekXkYqzjAiBv7KOW8a/bRJecLDvpWGPxIPxYWfymwJ73001Xa/eLWQ=="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.82f2f2c1_1532762826467_0.5796923467712825"},"_hasShrinkwrap":false},"1.4.0-alpha.d1c9bcf4":{"name":"@plumjs/reflect","version":"1.4.0-alpha.d1c9bcf4","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.d1c9bcf4","dist":{"shasum":"8f4eac257b032291e79dda60eb24c0113478a1ff","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.d1c9bcf4.tgz","fileCount":6,"unpackedSize":14608,"integrity":"sha512-f4Yjqye/qoQI8IllrBVUhWELnwvH4OXrz0kzsHf96amMNqaArnCOFnVOLhby9vc0I8To0bbqXhzQJkm3xlJ1OA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCK9TnA4EvakViaHFGncnFiWsbH/YYnbAe0JdTB1GqFcAIgLatNspgE5ZbGUpfkS6FXYMh5GELE8AO2d6QdYVEgtWU="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.d1c9bcf4_1532987824741_0.5990710849755463"},"_hasShrinkwrap":false},"1.4.0-alpha.fecd14a5":{"name":"@plumjs/reflect","version":"1.4.0-alpha.fecd14a5","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.fecd14a5","dist":{"shasum":"f306b3fed94fd91b8b9f2f343e52fceb21979ede","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.fecd14a5.tgz","fileCount":6,"unpackedSize":14608,"integrity":"sha512-4QID9Vg7CXiFJEEiYlTD1lXGqw+RS2+Wt82xXRBAC+5kQIBBWUJL38UvsjIgr3qnUUR+nt7kqmUkelzuYd9siA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICineWsr4+LEX5Q2dJVd1FPuVnnyJauDmQoPfXcYy7lJAiEA/wfLI/9mVn6FbpY5KUHxQ0q5rcRENmYUOcZTwK7sP8o="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.fecd14a5_1532988233403_0.39413114608589206"},"_hasShrinkwrap":false},"1.4.0-alpha.3202365f":{"name":"@plumjs/reflect","version":"1.4.0-alpha.3202365f","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.3202365f","dist":{"shasum":"2244729fb0770ba4b9007d5ff64872315fd52387","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.3202365f.tgz","fileCount":6,"unpackedSize":15616,"integrity":"sha512-aEk/h5qCFyb+9vh3Zmx5NPFBielgzK7XE5hZJhkR6Dd8hOVKp1aW/i4w5PXPsVpcMES94GByCUgDGFiBvan0rA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIARfwnA/JR4MTCI1gJ19NSORxUb1hgnfZk0oJukTkpy9AiBuyhveJ8hoS3yhhl0XIeh7l68KhMdUU+P59w+sW2776w=="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.3202365f_1533115724874_0.9416437831070681"},"_hasShrinkwrap":false},"1.4.0-alpha.3f26c2c9":{"name":"@plumjs/reflect","version":"1.4.0-alpha.3f26c2c9","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.3f26c2c9","dist":{"shasum":"b466da1f69c6618bbbf16dcddc54515bc2ee3171","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.3f26c2c9.tgz","fileCount":6,"unpackedSize":15616,"integrity":"sha512-Osy/DYio5ZwDpcRytuOTg+xaE353B3vmvsj9KUzzPw+qd5MNdBsFRJJeXUV/fhU/DVql9bn8gDAHnJQYIndKLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWazpyFCjtZ5ty4t6tJhzdbIyLn8n+ONaF6gtoLaLerwIgTIW+ugjiLeh3PoyX8ccnxSV6J241BFYlxQ0kamjje6w="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.3f26c2c9_1533122472045_0.28113727679766143"},"_hasShrinkwrap":false},"1.4.0-alpha.9f9383f0":{"name":"@plumjs/reflect","version":"1.4.0-alpha.9f9383f0","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"@types/debug":"^0.0.30","chalk":"^2.4.1","debug":"^3.1.0","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.9f9383f0","dist":{"shasum":"7db8e6f489c125bba4346e1b6c1f668eb34fb114","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.9f9383f0.tgz","fileCount":6,"unpackedSize":15616,"integrity":"sha512-zgnbQVqoHETrsajP57Rj/PaOmyWkgaWVLc/BI8IPRNeEbP6BIhL9ZIj2lESPbRXwhMWFEPS7C1ncZWnh8CRiRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2ZeKTz45tJM3GQ/7ASArKl44DfmwuwwA2vBNY1VsvqQIgNiuF2FKfkYcLisgZj7jvsAs1F/F+QcS0dpB0NB0dUlE="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.9f9383f0_1533240004458_0.4840661782102529"},"_hasShrinkwrap":false},"1.4.0-alpha.5c21ba07":{"name":"@plumjs/reflect","version":"1.4.0-alpha.5c21ba07","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.5c21ba07","dist":{"shasum":"256891345ed3abafd762e06cacb310cf1ed19b0e","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.5c21ba07.tgz","fileCount":6,"unpackedSize":14743,"integrity":"sha512-Wm4k4MWKy6+u/LmQs/ufmwB+r18wDhG5sLtPOGR9dlNmobDhrBrPum9Ug4hoaBIJUQlQ5gSY/6NVDetAuJpykA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwbfSggGOQV5f41oXJvi6DjRbwePCWdzl7R/r2yOzEzwIhAPHxIR4Jr6DjI68LD8x61zH0Oc51Ru86KsUW1ldzySyW"}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.5c21ba07_1533327017710_0.26011093282669107"},"_hasShrinkwrap":false},"1.4.0-alpha.a1d8df90":{"name":"@plumjs/reflect","version":"1.4.0-alpha.a1d8df90","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.a1d8df90","dist":{"shasum":"6d4027e56ca316b4f3afffffb9052d9fac72eed2","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.a1d8df90.tgz","integrity":"sha512-whlNv139OQMBQtsVYenSd9oMF/Wden4Hev2fgI+v9yZcwGfluldrFong7Ev0i5sP3zsPCWp+DwdLd37ySWy/zA==","fileCount":6,"unpackedSize":14743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZQ7JCRA9TVsSAnZWagAAmsIP+gO1q/Et6SlrIdNwTCdK\n218yHt2rS8WhKSNwvS4JxV8Qwuce33PX5RfdelmMJ+aoUZWtxVktWOt8mR+t\nmYHjO3sclcZN/YC2vub1OMg/AzxiGiPOYXTlBvRCFZZ1KmaZsUyxzJSrPf+7\nGbeUNXZfFMvmvWIC7fx7eCxpmgjnqoBlAZbqD/3vw+GsKnbE/5CNte1XtQHa\n1JrC+DrxOyZOgPyqFjaGFtLLZDLZDKzuFBhfmL6UB/VQkzsbtxhnRxsCOAyf\nW26qMJTxpileRui4R+oeT9pp66z/kaEHjI4wfiT+L2ccx45YBtOPrs5xpQfV\nVMLL/6vYUKQfHbxV7+RN2wFCfpwb+7xk5bYa63qMhJ/avhm/JF3DEQPwcflb\nWoOE9F0XDs1NPA+zIVGhaMzdTPe1yfxTc9QzUhG+bflRWqB8HAvn726hed2G\narvpAGjqjSZr5/RM7tq/hf+x19esUrGeqgXcKiAQY13vcpkDLYFa3YoQ+efP\nxt1hTPCAXXBuMU/m4+vH4eftMExsJa1x81wVpUfrE1YIXTe7cPr05MZI472Q\nMd9bs/HdRq/8Mg4UrHOK2e3s1MvLXxO232etpk/ra7U4mU22q3ssmsxV27mb\naW0mC08jwAboIHdaUzizMfcAKTDVSaTUhOjiOaHmUpusn1h7C41YZJVvO8jW\nEfxr\r\n=oDP/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDR/w4wzwSfDYfU3Qqoc9sbo0pRVu6OyVYcTloWuPAVOgIgDaZdLonGhbtfknljtvYxfbz4fRq66gLEo2yjHkvIN5I="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.a1d8df90_1533349576556_0.4217176301995187"},"_hasShrinkwrap":false},"1.4.0-alpha.e8eb024f":{"name":"@plumjs/reflect","version":"1.4.0-alpha.e8eb024f","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.e8eb024f","dist":{"shasum":"26fdc1eb4a3c0062f9f0661e571e3a3ffbe6314e","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.e8eb024f.tgz","integrity":"sha512-szNR82DeNQNgh3poxdY8y0bfgMgXr84Q9jy0ka9PZeyjCCJfcDwbnJ12tC90wpX4G4utTbZ2h+3OW3vKZGrdaQ==","fileCount":6,"unpackedSize":14743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZZw1CRA9TVsSAnZWagAAP3kP/jxa+b4hwWZKksMekTWJ\n1z2wpLDuUvFUwEj7rVt65S+8oNfW+no115yKmqG2S7otYTAz4+FuNvgTtlpC\nFROIVTd4Yjh8bpO5btcLVRy9cJi+/KSXLzucYO2FSx936l8clGjeA1mWqs5r\nj0s5I1RHWXcePa7jJW/1cA9L8ny7+ormOfLYvyxvWxu8/UF8pEigljrWxuPi\nyz9siFvgmMRoW9A0M/eB9WLjuTEqq84Xb1a0L5mqHXf02I6Q8o2737MLnUys\n4WIs+U3qEHE854UI7DrghusX8ZOSO/bthIMdFZY4/WA/dYe6p1zG5q/dCJIu\nh23OvScSzghhZYMR+D4OI0WIqXqw11k0YH/tx4uGqkjZ4xKImOtoRAE5g0Jh\n3KoGF1W0lOavW6rrJoav1Acl+QUbU8BjrLtJItW3RUFm61bPAbhS44rBPuP7\n83aS8yDK/h3VcGXPbf36DtmVFRYdd40L6nPxlKCbr9CQxgMVQJadbrZsvN2q\nX5k2FedhnExuP4OvdyDZdXlW60+u64qni7zWKCaMLyxhn3qnI9lXaCBqw4+Z\njJy6uPtExzZSFIGWEbyUdveDqN/JI+rSjwBLLySrUgWMf6qkLdFw1k8LhUwl\nbV7/HA/6IXIbNxNXhQhlBIOqDVkdQ+r+ohU9EiTJ14pNMOG799V0FtYPxE2U\nPj7s\r\n=Rra+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBOCE+x3MnyxLjOMiRVMm7OMGt5l7hb1oOnxenQDsNilAiEA7LZL0WkKZTD1FZ7mTtLBi1ybwEnAmVCRwF8mHOF6N6s="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.e8eb024f_1533385780935_0.40981933338471643"},"_hasShrinkwrap":false},"1.4.0-alpha.7cef1761":{"name":"@plumjs/reflect","version":"1.4.0-alpha.7cef1761","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.7cef1761","dist":{"shasum":"261e276b25d6620435c398cbfdff14ebc0f7a48b","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.7cef1761.tgz","integrity":"sha512-gCd9nsopjWpLukL2ot5AzIDgXb6HQg+qmnGqBqwdPBG3MiMg7JHcC1b8PkJgkCFp0hplGWDyamjO+FMvHhBJFw==","fileCount":6,"unpackedSize":14743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJba/4PCRA9TVsSAnZWagAABv8P/iMw3en+S8pP/oxK4OEg\ndqRuSum1TIFtSWLg6nqxGaMZpH4F+EpbCzYA02qqLUqUULfGScFvPfke+i32\nOQLUwJr9LEbFB11e5wIXKXApPHrW4P5GwhjapnJcqq924msFCw9qYoGZe39v\nN6CflKnMk6dcwjaI2TosxcP0sIwTOhoATUj94R46/gNFwJS5B2CkYi7X+37Y\nYg1LWh0YSJBcTcB8c6xGwzpgGeYOTpy0kw1EY6WV73O/VEz8Gf1IGWRiQ/ji\nhv8mXbzBe0fh+Qiq8RbCw1lC2FemgO5Srz/h7O7GRX9OyzIXCus2a5BCfpaI\nyOsezmUbVauPLvmh2J4uZWsjZK57DavbaQqS7Cib7rvttrkGb4dedoOpJ7Xx\nLMZsXpgaC5yme5B92fF8FuSMQKvG0GrJzELZRUo/8jDc6f6vaqDmwL2Y3cki\nhebstCCBrPpoCZUL4F2wxA4Hm3JHiQ3Ewvj3z8cQmgUgPaZsLjQieK/gROVP\nhzxPVMf3qpJK21aE+ljPcEfEecOajnMhLw1Qyubt2s5nKRDsSEpXpTbejHsS\nZxuS5kABd+Cq+tC4W0iT9ibn6wbC0g1/siWP27G7pVzVWcObN3v5y7Xk5AcF\njD/qWQVG++/22y1AT/WT1LD8L95UNHSYcoDoZOPs8nimsQJZqST2dYiOqxqJ\njHss\r\n=/Att\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiXxua9mTfvdSQYQMWUFQH9lqgL74lUu4EFH2rdIwyCQIhAOaOFHi4eLLM2jOnmvjz3K9OQj4sTpstjeecopiuWHrj"}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.7cef1761_1533804047477_0.4699250425277468"},"_hasShrinkwrap":false},"1.4.0-alpha.917ab04a":{"name":"@plumjs/reflect","version":"1.4.0-alpha.917ab04a","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.917ab04a","dist":{"shasum":"d3c8fe7c7afd624cbcf80225f87763ad6eb0c041","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.917ab04a.tgz","integrity":"sha512-pGTrrSmDec5ylEuHJAefpBZR8+vItt31mU/jFX/Grf8YXsQuLpdOJrLM7CJyYvGyAWRoytGd/k0NUarbtTD4vQ==","fileCount":6,"unpackedSize":14743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbKcYCRA9TVsSAnZWagAAsIUP/337Qt+4ZVEP1bZEb4EC\nEdx3Cl49qRE0KyMnlH3EyetVRDreV28NoeyCQt1u3FVC/SS8QUtL+t/ZqtGv\n5J9lk+ilyueJuMeaJHwLtU1bBQMT8mClLqlERzTaSLHM3U8UchMoAP77KN+m\nLdwhWgcalPySt7ws7PxvfH1yBuGMPO7tC5TifXV/D1NORRbx0ifxkIyPO4/0\nVrV+tw9gt721d8gOOIgLWEQr5YKIFNjQbODq/c/V9VAOZOcYu0kn04oTsnTU\nHB8SReVbQc8IHrOaUVNgKIPjqOav+434SlkHyFcRa3mhagSk+qQiUvKDyK50\n//mqF+2nTTXawtoPyXbtYun9iKRVlCY1vQM28Eq1LVPMvxiG9USJlxL0wYg8\nygK9Wy/y79uEb2FNWFzDHBl/b4fbDOrOz2KMsHJSWXulyVdlQl5dMQRwGqPS\nApBC6IcySbzkOOQxMang+xuAxrCFRcQOk9Rzv5sUDYBWNT2WTHzBYlliBTpQ\nzsjsaK2gi0VH5VVP5ZcoT7Gf3+aNi+k+h8eWA4SiDfbuYm8LUr18rWN5xwFq\n7fY23BuAkZYGAYS6hZnyBkf75VOq18kr1+YuvQLnihT46O7Lc2+iZLRMh+1w\nk/JHtmJe2Q4Ko1mjYiBgR/LndY8Qylwc8wPjH5f8IywAmgF9msr1vYYGwx9g\nIT6y\r\n=8sCN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUOyI1ZhFWdr6qzB3KQkVWEshbHGm3ujdAHHeEtQpSUwIgN1UOzQ0A+LLbjLkV2OvYfuQOg3boVKUI4hv9GBRJrZQ="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.917ab04a_1533847319990_0.05543587649550075"},"_hasShrinkwrap":false},"1.4.0-alpha.56800706":{"name":"@plumjs/reflect","version":"1.4.0-alpha.56800706","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.56800706","dist":{"shasum":"eddb56248b0b246c1b2483831ebda521fd474453","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.56800706.tgz","integrity":"sha512-QavJe1U8DJxPnW8Zwj3Clq8fUkudXtFNnhRrti8wKpALN6b5V1034JvxsGRsjIKL614aLPKSmV+ZskQsU5HIpA==","fileCount":6,"unpackedSize":14743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbY+hCRA9TVsSAnZWagAAMScQAIr9RRL79c42OYxd2xM4\ntyQRotml57RE/0MJQpBkrvmjnCKGHYVBIN2h9mPXGQB4z8YhoGH5nLvhMg8k\nf/Hg4KvKeqrEaN/yyPr2dNgdJPzWgk1urgVqkZX7t/YBsF+4uWCG4gy4HGmu\nmRM6kC/fbLJBdTcCizWsaojUxxof11txu8rm+/wDwoYHY7/2l5r7Z7YrJ8Rg\ndIQ8Lj8FZpf9E1f38m8fpi+kErx/SUUEzZpev8M4dGcLCqgH1rPUdwn8mz2F\nJMqhqNXpSouoX4PfMIRAQxPE+9jvS9Kx6V0Jy9sVlekNaL6sU6WMIz+ZKjx/\nv6sjOdJ6SJ6oSfbQVxiQFinlKcNYBaddpnM+Rs5WZcRYW+IFh2jC27Rd292r\nvVi4Xqj/OAzSUew8Xc57MxdAXK0YRlAu1zROJirVEc2Up5TcJhMPhxNUB9kv\nOcq7mkOxWgQ9gVuWYQowXjRRKnImi64dX/1lFC6gC4FcG1Y6uKufi7xIrDD+\nCFmMOdLoBpjNbp12lxxkEvNOtr3Gu5POircLib6hU+/0vfyhwp0EomZiSoz9\nLZfXfU0Czc+nmGBRLN7Tj5Srg7iHFAxdmHe/IAxfftOAkF20nZZpZ/UXEl9X\n53FPhPMRwa+59p8UPYUMAiye86K9Nk2Vk6szdNpNAr9lXRHW3faAHKvTi5IV\nlzdd\r\n=Trus\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhxNLgTx46bvcDuJhuz4bb9diD2gS9tPJ4G4k3X/Uh7gIgK4nSp6AnAtOoPd2UKvxZBVW6Y/jI5J2QjcG19i7BiDQ="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.56800706_1533906848799_0.25792476801226205"},"_hasShrinkwrap":false},"1.4.0-alpha.93a6edbd":{"name":"@plumjs/reflect","version":"1.4.0-alpha.93a6edbd","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.93a6edbd","dist":{"shasum":"9952c77f2b7d8ef80497288e29e39fa312340e79","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.93a6edbd.tgz","integrity":"sha512-Vp4+0qoUwSRg4jLcFbRpe1enUCfnU7pX8CzXDVuqqD5K7dQJ0IWtHRvGFMkblzVvfMMsvCC/ExogLiVbnTbWHw==","fileCount":6,"unpackedSize":14743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbf1xCRA9TVsSAnZWagAAxdQP/38Ku7KnUZhwzqGcV8fl\nOS7OJpJY4/OihU+k05ewhIECwLIUPMJawiW+Ea0lPf2rWusJ3uMth6XRwHBt\nNxlL8wi/oGlaZLkIRTi7yLCpXqK9TbGQOc9ynRJEjbpP7DZiTEdCuBxmBTJD\nMIoXpgvp/AwDFbz9KrXDvlGVhVGXltsOzDbMpo5Ax7lL2/wwKKxNHBVVZ3zN\nxGe2B/wqFHrAE3VjU7A9WP2FFW0g+xtBQtad2Hd0BIojCTI59vepVsTio5ho\n4t2LI4HOPuhYA0Dw2rXvRbTCMc5i+Nhb1BS5vlA62MyTM59ZJ1iv9orcSgSV\n5XWa9FQsus+ZezIXLqfWfX+ssQ8yS8J2Dt6YU0VJtTF5q1L4WI5BJ51NVUuT\nFUgY79l6qt+ZzLwXqizK+8jnB9OLuW8CTXRAb3gMZejXj7ul0xS71ax7l64r\noGgKlVsje1zA63balLP9InctGqK77uKp1OlAMz9yKICuZGqGeyYEbC856sgn\ny8SNKVCRmn80PZw48XG9gU3FQQpD23Avjy1HDgCYgbxfIY2USSfnJyqU1QIB\nYsEjamG7XtvLcizJIFzGc7C6w/XvF/mBd0frKjAq87CauiKAhgDnIK0LsSyP\n9bkVFq0zKz0z+nPKNxirApO0vMJ4FIRs4Hl4zW2293rbZ7E2Gh/lcgF0yk4L\nmSoZ\r\n=HCuY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEbe4I/GMDRUAaUfVE5aIKqP5smhWwHrh1K+DzeRE9+QIgUwE1ilOegkcrkknKQ4TlvJrfw10EoFrU92UewKjUIsE="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.93a6edbd_1533934960900_0.1880739330513912"},"_hasShrinkwrap":false},"1.4.0-alpha.9dad2c63":{"name":"@plumjs/reflect","version":"1.4.0-alpha.9dad2c63","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.9dad2c63","dist":{"shasum":"29612a06bcef9c7c6ea2cf8d01d4467d83ca16f5","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.9dad2c63.tgz","integrity":"sha512-TcYMdU4HArxK64L3fInU/Bo9GMrjXAqkAQGESX4S6fdPhqxvc/6Gg8dyqpDC6+M0jt7mBI4CyTXkmV3/s/ORHg==","fileCount":6,"unpackedSize":14743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbmHGCRA9TVsSAnZWagAAlYoP/2uxjO7HUBVHfkPZbFJ5\nhI5Ljo4znXlKo0IoiKqDox9s7UfcRkzHiREANnu+Gq8bv8Xgy6qU7UXxmnsc\nzobKnBb5ASya0yFxbcGkSbKQdjRFs3DkXuFf59EasvuJpcXCHOXnVsyWbNBG\n6vqmInvhVYpwXFlEItqVALR0/c6tsu26pFmxpi6uQDNFlqGj8Iji0t2M7Dzs\nX9C6037m2Yp6MvdsXIeGOCDM0/L4joPiQkbIAjH32EaNTiGEGQyyqIUJm518\naex18d+FRcmIfq+o0lkVUGL1rE4uNAQi3jLaNMin4TlUxWeYyub793LIo13p\nOCTJ150xN3DBIa5DqLHM0M/jXlVkKWmWr+KEw3uN6Oxw73TsOfKy8332IPyW\nNkxpJTeRrklyTbzD/akYY8jcfad+axPny93Y3zZ0S95ruN11/PFgxv+R5iB8\nncZhy+BitwbQS7BEK8KsAICA1cx8oHqN09uCDGhc5FlJilQAXlwH1KXEgMmd\nez6sxFTcuqQY5V+DdoaUfRRBOf9kHONUAlbYrPSxbqU9wmwOwJ7NJxidPYq3\ntxvBouF+yXz0fEZlxn5CjwPZAG+weBN+qIcc3HwnZ4jfhhKnYspS/Es2DG7s\nCE5Q8s2MD53zHySi9iHSYotAzh0YU/+EG6oK2EDJ3zTavzKx3p7zK9ppIjcR\nxg+9\r\n=E8vY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDN/KYK5l28zHnQNDDHWosqtU5fSR2yU7XQKBwKHhV6OAiB+czLZK1b8sPVH6nLf1hhq1ogLYOMI9DqiEvobtXEjgw=="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.9dad2c63_1533960645711_0.917340983123875"},"_hasShrinkwrap":false},"1.4.0-alpha.1bcecb6e":{"name":"@plumjs/reflect","version":"1.4.0-alpha.1bcecb6e","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"readmeFilename":"readme.md","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","_id":"@plumjs/reflect@1.4.0-alpha.1bcecb6e","dist":{"shasum":"4395e252e76a9bc5dc612c588664fe0cd1721755","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0-alpha.1bcecb6e.tgz","integrity":"sha512-dargxmb2aIRlaITs0kf+beP4OKMVM+FkT1gwAPKxb38Ad5OtY8COx/Ggq+GZWpZYh6dqJGlut6c96PX6FZKrhw==","fileCount":6,"unpackedSize":14743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbboLTCRA9TVsSAnZWagAAC9kP/28Cv8JtZkZyweFfhGa6\nep47Aui9TEu3sXPQgTzFQXx6mw/9r6MSquyzuEPFsSuRAhZYhMDH378VvnkX\nL6AMKEzz4pdzDNYhAXHoQTjIw2eMt96OJ4RHOEynNW6+MTmRpBWP4TyMxDNh\n3EQsmy8mctOj49rSuVwqdCAqKGituhIFVgOqeEoh3hwGtDX+rDocJXcSZO+m\n854AZ4bEbphafBa+cb5ZES4otQPVcFs/yOXze5FjtYK5yDIY2Va7DrrnHqWo\nQ4jTGbWQ9JSJfF2HfijJCt8VkthrSUxExyDtIKCP+9AfgQO928fJN+rCtdSQ\nyLT4c52b8INhDjeZU4vf9NG/XwrQux0sXcxym5DBrJEZN+P9OiHAGFeCgD8u\nO4//F0VQnKNbfyyf1qWCGZTvsGFcEtlnwfTIkqrSYvR4btkBKswGj8wiiy5y\napjFD2rPxYUHesYR1X3IsT7UcRa8biYI5CdgPufr02CYr6ci+5LHvFZArHTC\neQwcfcXB/6Ggj3TVxOv+KQwmXjytqa8gsCNv2RSsI/oySFj9GXmXh9YNRo+4\nIZihCZPkxx1BZBoO9p2syBAO1U/N+dYS7LOrv03dCe7lIJPsbPGuKt0Xg8h9\niqztkEP40feqYvvOeAwGnZ7wwVl8FLpI0Zw4JhCgTCnv/MXq1zqXGYPu9hkF\njS8r\r\n=rhRn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSSU0Z37P4P2tsAAdQ28COohmRLZpQ5pYXWwko4OrGiwIgaHcscbdI2pbuskeLEbSNS6pXCz2I2eXkpxQcDvY3GGA="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0-alpha.1bcecb6e_1533969107260_0.3573251812872873"},"_hasShrinkwrap":false},"1.4.0":{"name":"@plumjs/reflect","version":"1.4.0","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"_id":"@plumjs/reflect@1.4.0","dist":{"shasum":"11bb4485ecfeb43dcb0f9d863c418ca42e11ef32","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.0.tgz","integrity":"sha512-6jFjSTkrut+/EFl8GAN19INNaP5o3yB3owlIkeuKgWzrfIq0SNttkzsutDDRCqO+7IUv7rPXUoCoXsqAJ87p8w==","fileCount":6,"unpackedSize":14728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbsCACRA9TVsSAnZWagAAWgcP/0driQTeRXDaByP1wva/\nZJ5FThVEIbiCHakjItBBt9Y9R9xqvHwBB3Vm6YdhXaoCczQxfN4T3TKkyVJu\ngpEg/fUkUpyutV59hWCMn+azh1jZKs0eoL/MjlPw8d59SzyFfgeu7yyiQ2/I\nBaTYW1O5BigNBH3r5z+Ad70XjUrxwpnZgRDTN2odJf0auvlv6m5JLCcFhCd/\nUxuLBmZRn+VME3Sj1au68ME5VtpnX50hkeQNNjiYYbY6xsizru3/rXCNBjz8\npXd4oEWuB94bxdpor6MeB2Tm2cmdIhJFHpm+UUjEGk5XPusUmDRf4Bj0WGnP\nfGagX4HxQhODhk8yLAInEYU64Y6QjCnE7pmYF0JINevfqswIElKfVuaAFWOj\nrSJ72tZscVWDMWgE3UBEJqGsOMfmuBNxJREIRNph8C8pqZF5KLiexIycOnbJ\n7WeZbi9H2iE9eEv8A2yWDK6YfYefM3GDU93d87FNKh7rhycPMVoIkbFgAjkM\nYUbIDT8ZRGvXWqbPVzOolov0aK+0QAbrn1Hws5TVhB8OX5oyA+p1IsWsqcER\n7jfqpvsqgPpkqI4nd2HuJvdEzlP5rvDFN3faXnb0cQHddT1oiCl7ppkqitso\nfEuk5Dx+2u0zQxErk3rYhgXKrlhUUn+XxNydmfYQ0UdB+S7WiHMpwoyHJXkz\n2Z0Z\r\n=thOm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXfQwx06xPxJc5qY6PvidP1C21ZOvqON0B9rtBE2P7xwIgJLz1qxvkprYxTK6/+q8Rg18HPZ0hH5r95XEnp5ZJJ2Y="}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.0_1533984896338_0.42809611636056366"},"_hasShrinkwrap":false},"1.4.1":{"name":"@plumjs/reflect","version":"1.4.1","description":"TypeScript reflection and type inspector library","main":"lib/index.js","types":"lib/index.d.ts","keywords":["reflection","introspection"],"scripts":{"compile":"tsc -p tsconfig.build.json"},"author":{"name":"Ketut Sandiarsa"},"license":"MIT","dependencies":{"chalk":"^2.4.1","reflect-metadata":"^0.1.12"},"devDependencies":{"@types/ejs":"^2.6.0","benalu":"^2.0.0-beta-1","ejs":"^2.6.1"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"homepage":"https://github.com/ktutnik/plumier","publishConfig":{"access":"public"},"_id":"@plumjs/reflect@1.4.1","dist":{"shasum":"5f09a2b90609ec64eea152ebb55de938f66e8ded","tarball":"https://registry.npmjs.org/@plumjs/reflect/-/reflect-1.4.1.tgz","integrity":"sha512-6tPpTf3vkcdYoZp3SvbP++jubvCzic9BvpKbm7Mg8pcA0vzwAJkKCT2sjOnMDq4Ahatn/3YDZUf/f8CRYZW+eg==","fileCount":6,"unpackedSize":15099,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb3V7dCRA9TVsSAnZWagAAo2AP/0Rjw0RtodFTKeDiBksb\nblAunuvwSTcGG0H+xsiXK3BqJL3RK43xFuIONV7QZ0U0/3HwVe1LFnnBcW1V\neh87VAkCNs+ZSZuVPAljsDva4jLREw7MJqk0fqp0r9MhTGOT/SuIJc9eHroR\nKFxTMdQ2oYgJoOOWom/N+Qi35y+g92TAQOKgke/QymhZ1e5/fROQ6+yTVkzg\nxLqI4VzXCPVKb8YMq1JZMMVCL5txtlpgzhSGLxFA+c2BAFB2iqMaJuz+HYV3\nxFiwQA3tToo98LKeMNi0OF84eRMgh9vR0Bsu6e14BkH62zUyCFm2UU+5a4NX\nL5745MzM0xhUmEvpRAxpcjH4HGgW7P6rqbH2XZ/os8U8N8lPcHosE44t2OQF\nIaWlRT/UWWX/+T2NizZRAkASHATf9N3qvNrgPtOEJY+OrrnwvfQXy7veBa68\nXHWUQ5eBMqadeAdrZ/CEyoy+Mn6ZSQ7rQ1n6shCCk/8+iP4VinXqeHQBXaIq\nHwUoPcmSHEJD64lt94GdIrnax9Y6DUV1Pk+wxUSn2X+uqiUep7k+nIzTRGx/\nxPHNgUGCeE2O0BCScS+Vo5ZG9TeSwGQB40VoFOQUrQ7PuaQQufsDzr8sdMIt\nb/5bEF52nUxX+Bz1WgSjWPpwU7ROsHAmydMgy5PY/rNxWsK1YSoOjtD31B1j\nToSr\r\n=a+mb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDfZycw2LdVd/p0GppJYNfGPJopdej1M9IhBcxghYtNQIhAJhFWF+e4pJnzZUTfg8r/UvmZ87A1/uVmL2VZ+pwsUEz"}]},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"_npmUser":{"name":"ktutnik","email":"ktutnik@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reflect_1.4.1_1541234396314_0.6538261638985243"},"_hasShrinkwrap":false}},"time":{"created":"2018-07-16T04:31:15.406Z","1.4.0-alpha.0614ea60":"2018-07-16T04:31:15.622Z","modified":"2022-06-12T22:41:04.323Z","1.4.0-alpha.a486b022":"2018-07-16T08:48:33.734Z","1.4.0-alpha.56f2ec99":"2018-07-20T05:56:44.845Z","1.4.0-alpha.e8d121b4":"2018-07-20T06:01:45.556Z","1.4.0-alpha.10b371a0":"2018-07-20T06:41:22.405Z","1.4.0-alpha.a709e511":"2018-07-20T10:30:09.816Z","1.4.0-alpha.b45edf92":"2018-07-20T11:43:35.880Z","1.4.0-alpha.dbe9c682":"2018-07-21T22:20:24.630Z","1.4.0-alpha.9aaa0a15":"2018-07-22T01:45:54.460Z","1.4.0-alpha.7020144f":"2018-07-22T13:13:22.028Z","1.4.0-alpha.292e1ec3":"2018-07-23T23:30:58.008Z","1.4.0-alpha.82f2f2c1":"2018-07-28T07:27:06.550Z","1.4.0-alpha.d1c9bcf4":"2018-07-30T21:57:04.895Z","1.4.0-alpha.fecd14a5":"2018-07-30T22:03:53.656Z","1.4.0-alpha.3202365f":"2018-08-01T09:28:45.073Z","1.4.0-alpha.3f26c2c9":"2018-08-01T11:21:12.100Z","1.4.0-alpha.9f9383f0":"2018-08-02T20:00:04.511Z","1.4.0-alpha.5c21ba07":"2018-08-03T20:10:17.869Z","1.4.0-alpha.a1d8df90":"2018-08-04T02:26:16.678Z","1.4.0-alpha.e8eb024f":"2018-08-04T12:29:41.022Z","1.4.0-alpha.7cef1761":"2018-08-09T08:40:47.579Z","1.4.0-alpha.917ab04a":"2018-08-09T20:42:00.112Z","1.4.0-alpha.56800706":"2018-08-10T13:14:08.898Z","1.4.0-alpha.93a6edbd":"2018-08-10T21:02:41.095Z","1.4.0-alpha.9dad2c63":"2018-08-11T04:10:45.771Z","1.4.0-alpha.1bcecb6e":"2018-08-11T06:31:47.424Z","1.4.0":"2018-08-11T10:54:56.418Z","1.4.1":"2018-11-03T08:39:56.431Z"},"maintainers":[{"name":"ktutnik","email":"ktutnik@gmail.com"}],"description":"TypeScript reflection and type inspector library","homepage":"https://github.com/ktutnik/plumier","keywords":["reflection","introspection"],"author":{"name":"Ketut Sandiarsa"},"bugs":{"url":"https://github.com/ktutnik/plumier/issues"},"license":"MIT","readme":"# tinspector\nTypeScript type inspector library\n\n[![Build Status](https://travis-ci.org/ktutnik/my-own-reflect.svg?branch=master)](https://travis-ci.org/ktutnik/my-own-reflect)\n[![Coverage Status](https://coveralls.io/repos/github/ktutnik/my-own-reflect/badge.svg?branch=master)](https://coveralls.io/github/ktutnik/my-own-reflect?branch=master)\n\n## Motivation\ntinspector is a type inspector library, it can parse all exported functions and classes inside a module into Abstract Syntax Tree. \n\n## How to Use It\nExample you have a file with classes like below:\n\n```typescript\n//filename: src/mock.ts\nexport function myFun(firstPar: string, secondPar: string) { }\nexport function myOtherFun() { }\n\nexport class MyClass {\n    myMethod(firstPar: string, secondPar: string) { }\n    myOtherMethod(){}\n}\n```\nYou can retrieve AST from above module using:\n\n```typescript\n//filename: src/index.ts\nimport {reflect} from \"./reflect\"\n\nconst result = reflect(\"./mock\")\n```\n\nThe result will be like below:\n\n```javascript\n{\n    type: 'Object',\n    name: 'module',\n    members: [{\n        type: 'Function',\n        name: 'myFun',\n        parameters:\n            [{ type: 'Parameter', name: 'firstPar' },\n            { type: 'Parameter', name: 'secondPar' }]\n    },\n    { type: 'Function', name: 'myOtherFun', parameters: [] },\n    {\n        type: 'Class',\n        name: 'MyClass',\n        methods:\n            [{\n                type: 'Function',\n                name: 'myMethod',\n                parameters:\n                    [{ type: 'Parameter', name: 'firstPar' },\n                    { type: 'Parameter', name: 'secondPar' }]\n            },\n            { type: 'Function', name: 'myOtherMethod', parameters: [] }]\n    }]\n}\n```\n\nThe parameter of the `reflect` method is the path of the module that will be parsed, it is respect the JavaScript import naming such as absolute `\"./module\"`, `\"/path/of/module\"`, relative `\"../../module\"` or global `\"module\"`\n\ntinspector can handle TypeScript style decorator properly\n\n```typescript\nimport {decorateClass, decorateMethod, decorateParameter} from \"./reflect\"\n\n@decorateClass({ url: \"/animal\" })\nexport class AnimalClass {\n    @decorateMethod({ url: \"/get\" })\n    myMethod(@decorateParameter({ required: true }) firstPar: string, @decorateParameter({ required: false }) secondPar: string) { }\n    myOtherMethod(@decorateParameter({ required: true }) par1: string, par2: string) { }\n}\n```\n\nThe reflection result is like below:\n\n```javascript\n{\n    type: 'Class',\n    name: 'AnimalClass',\n    methods:\n        [{\n            type: 'Function',\n            name: 'myMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'firstPar',\n                    decorators:\n                        [{ required: true }]\n                },\n                {\n                    type: 'Parameter',\n                    name: 'secondPar',\n                    decorators:\n                        [{ required: false }]\n                }],\n            decorators:\n                [{ url: '/get' }]\n        },\n        {\n            type: 'Function',\n            name: 'myOtherMethod',\n            parameters:\n                [{\n                    type: 'Parameter',\n                    name: 'par1',\n                    decorators:\n                        [{ required: true }]\n                },\n                { type: 'Parameter', name: 'par2', decorators: [] }],\n            decorators: []\n        }],\n    decorators:\n        [{ url: '/animal' }]\n}\n```","readmeFilename":"readme.md"}