UNPKG

@zero-scripts/core

Version:

Framework for creating presets, configurations and extensions

58 lines 2.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Option = void 0; require("reflect-metadata"); const graph_1 = require("../graph"); const metadata_1 = require("../metadata"); function Option(getValue, dependencies = [], postModifier) { return (target, propertyName) => { const values = new Map(); Object.defineProperty(target, propertyName, { set(firstValue) { Object.defineProperty(this, propertyName, { get() { return values.get(this); }, set(value) { values.set(this, value); }, enumerable: true }); this[propertyName] = firstValue; const getOptionValue = (options, externalValue) => { const defaultValue = this[propertyName]; if (getValue) { return getValue({ dependencies: dependencies.length > 0 ? dependencies.reduce((object, dependency) => (Object.assign(Object.assign({}, object), { [dependency]: options[dependency] || this[dependency] })), {}) : {}, defaultValue, externalValue }); } return externalValue !== undefined ? externalValue : defaultValue; }; const prevMeta = Reflect.getMetadata(metadata_1.METADATA_OPTIONS, this.constructor.prototype, propertyName); if (prevMeta) { Reflect.deleteMetadata(metadata_1.METADATA_OPTIONS, this.constructor.prototype, propertyName); } Reflect.defineMetadata(metadata_1.METADATA_OPTIONS, Object.assign(Object.assign({}, prevMeta), { getOptionValue, postModifier }), target, propertyName); if (!Reflect.hasMetadata(metadata_1.METADATA_ROOT_DEPENDENCY_NODE, target)) { Reflect.defineMetadata(metadata_1.METADATA_ROOT_DEPENDENCY_NODE, { instance: new graph_1.DependencyNode('root') }, target); } const { instance: rootNode } = Reflect.getMetadata(metadata_1.METADATA_ROOT_DEPENDENCY_NODE, target); const node = rootNode.addOrGetEdge(propertyName); dependencies.forEach(propertyName => { node.addOrGetEdge(propertyName); }); }, enumerable: true, configurable: true }); }; } exports.Option = Option; //# sourceMappingURL=Option.js.map