{"version":3,"sources":["../../src/utils/macroable.ts"],"names":["macroable","target","constructor","arguments","__macros","Proxy","get","prop","receiver","Reflect","has","args","runMacro","String","Error","macro","name","callback","apply","macros"],"mappings":";;;AAUA,cAAA,EAAA;AAAO,SAASA,SAAAA,GAAAA;AACZ,EAAA,OAAO,CAACC,MAAAA,KAAAA;AACJ,IAAA,OAAO,cAAcA,MAAAA,CAAAA;MAEjBC,WAAc,GAAA;AACV,QAAA,KAAA,CAAK,GAAIC,SAAAA,CAAAA;AAFbC,QAAAA,aAAAA,CAAAA,IAAAA,EAAAA,UAAAA,EAAW,EAAC,CAAA;AAGR,QAAO,OAAA,IAAIC,MAAM,IAAM,EAAA;UACnBC,GAAIL,CAAAA,OAAAA,EAAQM,MAAMC,QAAQ,EAAA;AACtB,YAAA,IAAGC,OAAQC,CAAAA,GAAAA,CAAIT,OAAQM,EAAAA,IAAAA,CAAM,EAAA;AACzB,cAAA,OAAOE,OAAQH,CAAAA,GAAAA,CAAIL,OAAQM,EAAAA,IAAAA,EAAMC,QAAAA,CAAAA;AACrC;AACA,YAAGD,IAAAA,IAAAA,IAAQN,QAAOG,QAAS,EAAA;AACvB,cAAO,OAAA,CAAA,GAAIO,SAASV,OAAOW,CAAAA,QAAAA,CAASC,OAAON,IAAAA,CAAAA,EAAAA,GAAUI,IAAAA,CAAAA;AACzD;AACA,YAAA,MAAM,IAAIG,KAAM,CAAA,CAAA,OAAA,EAAUD,MAAON,CAAAA,IAAAA,CAAAA,CAAuB,gBAAA,CAAA,CAAA;AAC5D;SACJ,CAAA;AACJ;AACAQ,MAAAA,KAAAA,CAAMC,MAAcC,QAA0B,EAAA;AAC1C,QAAKb,IAAAA,CAAAA,QAAAA,CAASY,IAAAA,CAAQC,GAAAA,QAAAA;AAC1B;AACAL,MAAAA,QAAAA,CAASI,SAAiBL,IAAkB,EAAA;AACxC,QAAGK,IAAAA,IAAAA,IAAQ,KAAKZ,QAAS,EAAA;AACrB,UAAA,OAAO,KAAKA,QAASY,CAAAA,IAAAA,CAAME,CAAAA,KAAAA,CAAM,MAAKP,IAAAA,CAAAA;AAC1C;AACA,QAAA,MAAM,IAAIG,KAAAA,CAAM,CAAUE,OAAAA,EAAAA,IAAAA,CAAsB,gBAAA,CAAA,CAAA;AACpD;MACAG,MAAiB,GAAA;AACb,QAAO,OAAA;AAAC,UAAA,GAAG,IAAKf,CAAAA;AAAQ,SAAA;AAC5B;AACJ,KAAA;AACJ,GAAA;AACJ;AAhCgBJ,MAAAA,CAAAA,SAAAA,EAAAA,WAAAA,CAAAA","file":"chunk-QCMGPNJ4.mjs","sourcesContent":["export interface Macros {\n    [key:string]: Function\n}\n\nexport type Macroable<T,I> = T & I & {\n    macro(name: string, callback: (this:T, ...args:any[]) => any): void;\n    runMacro(name: string, ...args: any[]): any;\n    macros(): Macros;\n}\n\nexport function macroable():ClassDecorator{\n    return (target:any) => {\n        return class extends target {\n            __macros = {};\n            constructor() {\n                super(...arguments);\n                return new Proxy(this, {\n                    get(target, prop, receiver) {\n                        if(Reflect.has(target, prop)){\n                            return Reflect.get(target, prop, receiver);\n                        }\n                        if(prop in target.__macros){\n                            return (...args) => target.runMacro(String(prop), ...args);\n                        }\n                        throw new Error(`Method ${String(prop)} does not exist.`);\n                    }\n                });\n            }\n            macro(name: string, callback: Function): void {\n                this.__macros[name] = callback;\n            }\n            runMacro(name: string, ...args: any[]): any {\n                if(name in this.__macros){\n                    return this.__macros[name].apply(this,args);\n                }\n                throw new Error(`Method ${name} does not exist.`);\n            }\n            macros(): Macros {\n                return {...this.__macros};\n            }\n        } as any\n    }\n}\n"]}