{"id":20494123,"url":"https://github.com/jaystack/metacode","last_synced_at":"2025-08-03T15:33:20.579Z","repository":{"id":146253167,"uuid":"48779640","full_name":"jaystack/metacode","owner":"jaystack","description":"Metaprogramming tools for JavaScript","archived":false,"fork":false,"pushed_at":"2015-12-30T05:57:39.000Z","size":11,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-03-27T08:11:22.565Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jaystack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-12-30T03:28:13.000Z","updated_at":"2024-06-01T23:33:24.000Z","dependencies_parsed_at":"2023-04-17T06:31:26.523Z","dependency_job_id":null,"html_url":"https://github.com/jaystack/metacode","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaystack%2Fmetacode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaystack%2Fmetacode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaystack%2Fmetacode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaystack%2Fmetacode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaystack","download_url":"https://codeload.github.com/jaystack/metacode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248750850,"owners_count":21155795,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T17:38:20.350Z","updated_at":"2025-04-13T17:21:29.744Z","avatar_url":"https://github.com/jaystack.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"#Metacode\n\nJavaScript metaprogramming tools for TypeScript and Babel.\n\n##What is metaprogramming?\nhttps://en.wikipedia.org/wiki/Metaprogramming\n\nIt has many uses but some of the most importants are:\n- Allow model driven designs - limitless DDD\n- Aspects and attached behavior\n- DataAnnotations and data validation\n- Tooling aid\n\n... and a whole lot more\n\n\n\n## Usage\n```\n$ npm install --save metacode\n```\n\nApp.ts\n\n```javascript\nimport {member} from 'metacode'\n\nvar env = \"DEV\"\nvar config : { slow: 500 }\nclass MyCustomClass extends SomeBaseClass {\n    \n    @member.hidden // modify property descriptor, ctor time\n    public myFun1() { \n    \n    }\n   \n    @member.before(console.log.bind(console)) //monitor invocation\n    @member.before( args =\u003e { args[0] += 10 } )   // tamper with inparams\n    @member.after( retVal =\u003e retVal * 2)      //or with the result\n    public myFunc2(a, b) {\n         return a + b   \n    }\n       \n    @member.before(( ) =\u003e ENV !== \"DEV\" : false : true)  //turn logger into noop in prod\n    @member.before( () =\u003e ENV === \"DEV\") //same but shorter\n    public logger(msg, data) {\n         console.log(arguments)\n    }\n\n    @member.after( (retval, inparams, name, time) =\u003e {\n        if (time \u003e config.slow) {\n            console.log(\"Method is not fast!\", name)\n        }   \n    }) //attach some conditional logging\n    public slowmethod(msg, data) {\n         console.log(arguments)\n    }\n    \n}\n```\n\n\n###The hidden meta \nHides a member from member listings (enumerable = false) in propdescriptor wise.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaystack%2Fmetacode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaystack%2Fmetacode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaystack%2Fmetacode/lists"}