UNPKG

decorator-transforms

Version:
1 lines 6.83 kB
{"version":3,"file":"runtime-D1TsO5tA.cjs","sources":["../src/runtime.ts"],"sourcesContent":["export interface Descriptor {\n configurable?: boolean;\n enumerable?: boolean;\n writable?: boolean;\n get?(): any;\n set?(v: any): void;\n initializer?: null | (() => any);\n value?: any;\n}\nexport type LegacyDecorator = (\n target: object,\n prop: unknown,\n desc: Descriptor,\n) => Descriptor | null | undefined | void;\n\nexport type LegacyClassDecorator = (target: new (...args: any) => any) =>\n | {\n new (...args: any): any;\n }\n | null\n | undefined\n | void;\n\nconst deferred: WeakMap<\n object,\n Map<string | number | symbol, Descriptor>\n> = new WeakMap();\n\nfunction deferDecorator(\n proto: object,\n prop: string | number | symbol,\n desc: Descriptor,\n): void {\n let map = deferred.get(proto);\n if (!map) {\n map = new Map();\n deferred.set(proto, map);\n }\n map.set(prop, desc);\n}\n\nfunction findDeferredDecorator(\n target: object,\n prop: string | number | symbol,\n): Descriptor | undefined {\n let cursor: object = (target as any).prototype;\n while (cursor) {\n let desc = deferred.get(cursor)?.get(prop);\n if (desc) {\n return desc;\n }\n cursor = Object.getPrototypeOf(cursor);\n }\n}\n\nfunction decorateFieldV1(\n target: { prototype: object },\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n initializer?: () => any,\n): void {\n return decorateFieldV2(target.prototype, prop, decorators, initializer);\n}\n\nfunction decorateFieldV2(\n prototype: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n initializer?: () => any,\n): void {\n let desc: Descriptor = {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null,\n };\n if (initializer) {\n desc.initializer = initializer;\n }\n for (let decorator of decorators) {\n desc = decorator(prototype, prop, desc) || desc;\n }\n if (desc.initializer === undefined) {\n Object.defineProperty(prototype, prop, desc);\n } else {\n deferDecorator(prototype, prop, desc);\n }\n}\n\nfunction decorateMethodV1(\n { prototype }: { prototype: object },\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n): void {\n return decorateMethodV2(prototype, prop, decorators);\n}\n\nfunction decorateMethodV2(\n prototype: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n): void {\n const origDesc = Object.getOwnPropertyDescriptor(prototype, prop);\n let desc: Descriptor = { ...origDesc };\n for (let decorator of decorators) {\n desc = decorator(prototype, prop, desc) || desc;\n }\n if (desc.initializer !== undefined) {\n desc.value = desc.initializer ? desc.initializer.call(prototype) : void 0;\n desc.initializer = undefined;\n }\n Object.defineProperty(prototype, prop, desc);\n}\n\nfunction initializeDeferredDecorator(\n target: object,\n prop: string | number | symbol,\n): void {\n let desc = findDeferredDecorator(target.constructor, prop);\n if (desc) {\n Object.defineProperty(target, prop, {\n enumerable: desc.enumerable,\n configurable: desc.configurable,\n writable: desc.writable,\n value: desc.initializer ? desc.initializer.call(target) : undefined,\n });\n }\n}\n\nfunction decorateClass(\n target: new (...args: any) => any,\n decorators: LegacyClassDecorator[],\n): new (...args: any) => any {\n return decorators.reduce(\n (accum, decorator) => decorator(accum) || accum,\n target,\n );\n}\n\nfunction decoratePOJO(\n pojo: object,\n decorated: [\n 'field' | 'method',\n string | number | symbol,\n LegacyDecorator[],\n ][],\n) {\n for (let [type, prop, decorators] of decorated) {\n if (type === 'field') {\n decoratePojoField(pojo, prop, decorators);\n } else {\n decorateMethodV2(pojo, prop, decorators);\n }\n }\n return pojo;\n}\nfunction decoratePojoField(\n pojo: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n) {\n let desc: Descriptor = {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: () => Object.getOwnPropertyDescriptor(pojo, prop)?.value,\n };\n for (let decorator of decorators) {\n desc = decorator(pojo, prop, desc) || desc;\n }\n if (desc.initializer) {\n desc.value = desc.initializer.call(pojo);\n delete desc.initializer;\n }\n Object.defineProperty(pojo, prop, desc);\n}\n\nexport {\n decorateFieldV1 as f,\n decorateFieldV2 as g,\n decorateMethodV1 as m,\n decorateMethodV2 as n,\n initializeDeferredDecorator as i,\n decorateClass as c,\n decoratePOJO as p,\n};\n"],"names":[],"mappings":"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"}