UNPKG

@surface/core

Version:

Provides core functionality of many @surfaces modules.

28 lines (27 loc) 1.12 kB
const HOOKABLE_METADATA = Symbol("core:hookable-metadata"); export default class HookableMetadata { finishers = []; initializers = []; hooked = false; static from(target) { if (!Reflect.has(target, HOOKABLE_METADATA)) { Reflect.defineProperty(target, HOOKABLE_METADATA, { configurable: false, enumerable: false, value: new HookableMetadata() }); } else if (!target.hasOwnProperty(HOOKABLE_METADATA)) { Reflect.defineProperty(target, HOOKABLE_METADATA, { configurable: false, enumerable: false, value: Reflect.get(target, HOOKABLE_METADATA).clone() }); } return Reflect.get(target, HOOKABLE_METADATA); } clone() { const metadata = new HookableMetadata(); metadata.finishers.push(...this.finishers); metadata.initializers.push(...this.initializers); return metadata; } finish(instance) { this.finishers.forEach(finisher => finisher(instance)); } initialize(instance) { this.initializers.forEach(initializer => initializer(instance)); } }