@zedux/atoms
Version:
A Molecular State Engine for React
25 lines (24 loc) • 1.27 kB
JavaScript
import { readInstance } from '../classes/EvaluationStack.js';
export const createInjector = (operation, first, next) => {
let type;
const injector = (...args) => {
const instance = readInstance();
const { _injectors, _nextInjectors, status, template } = instance;
if (status === 'Initializing') {
const descriptor = first(instance, ...args);
type = descriptor.type;
_nextInjectors === null || _nextInjectors === void 0 ? void 0 : _nextInjectors.push(descriptor);
return descriptor.result;
}
const prevDescriptor = _injectors === null || _injectors === void 0 ? void 0 : _injectors[_nextInjectors === null || _nextInjectors === void 0 ? void 0 : _nextInjectors.length];
if (true /* DEV */ && (!prevDescriptor || prevDescriptor.type !== type)) {
throw new Error(`Zedux: ${operation} in atom "${template.key}" - injectors cannot be added, removed, or reordered`);
}
const descriptor = next
? next(prevDescriptor, instance, ...args)
: prevDescriptor;
_nextInjectors === null || _nextInjectors === void 0 ? void 0 : _nextInjectors.push(descriptor);
return descriptor.result;
};
return injector;
};