@zero-scripts/core
Version:
Framework for creating presets, configurations and extensions
36 lines • 1.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReadOptions = void 0;
const AbstractOptionsContainer_1 = require("../AbstractOptionsContainer");
const readZeroScriptsOptions_1 = require("../utils/readZeroScriptsOptions");
/**
* ReadOptions Decorator
*
* @param OptionsContainer
* @param optionsKey
* @constructor
*
* Decorated class need to accepting OptionsContainer as first argument
*
* Example:
*
* @ReadOptions(MyOptionsContainer, 'myKeyInPackageJson')
* class Foo {
* constructor(optionsContainer: AbstractOptionsContainer, secondArg: number, thirdArg: string): {}
* }
*/
function ReadOptions(OptionsContainer, optionsKey) {
return (DecoratedClass) => ({
[DecoratedClass.name]: class extends DecoratedClass {
constructor(...args) {
const externalOptions = readZeroScriptsOptions_1.readZeroScriptsOptions(optionsKey);
const [optionsContainerInstance, ...restArgs] = args[0] instanceof AbstractOptionsContainer_1.AbstractOptionsContainer
? args
: [new OptionsContainer(externalOptions), ...args.slice(1)];
super(optionsContainerInstance, ...restArgs);
}
}
}[DecoratedClass.name]);
}
exports.ReadOptions = ReadOptions;
//# sourceMappingURL=ReadOptions.js.map