dsl-framework
Version:
Easy function chaining.
88 lines (87 loc) • 2.69 kB
JavaScript
import _containerCoreIndexJs from "././container/core/index.mjs";
var module = {
exports: {}
};
var exports = module.exports;
/* eslint-disable no-trailing-spaces */
/* eslint-disable block-spacing */
/* eslint-disable brace-style */
/* eslint-disable indent */
const RETURN_FROM_CALLBACK = 0;
// const safetyExecutor = require('./detached-executor.js')
const container = _containerCoreIndexJs;
// const f = function
const coreFactory = () => {
const core = function me(callback, state = false) {
let {
coreData
} = core;
state = state || function () {
// if(coreData.command.has('factory')){
//
// }
return container();
}();
coreData = coreData || container().getFrom(0);
const callerRaw = function (...args) {
// parameters
if (!callerRaw.called) {
callerRaw.called = true;
return caller;
}
const callerArguments = Array.from(args);
if (callerArguments.length) {
state.setCommandArguments(callerArguments);
}
const data = callerRaw.data = state.getFrom(0);
// if (!coreData.command.has('noPromoises')) {
// callerRaw.p = require('./caller-promise-factory-factory.js')(state, callback)
// }
// l(coreData, coreData.command)()
// const noTriggerEndOfExecution = coreData.command.has('noTriggerEndOfExecution')
/* istanbul ignore else */
if (!args.length && callback && typeof callback === 'function') {
// if (!noTriggerEndOfExecution) {
// clearTimeout(state.timeoutSate)
// }
state.resetMe = true;
state.start();
return callback(RETURN_FROM_CALLBACK, data);
}
/* istanbul ignore else */
if (!args.length && !callback) {
state.start();
return data;
}
/* istanbul ignore else */
// if (args.length && !noTriggerEndOfExecution) {
// /* istanbul ignore else */
// if (state.timeoutSate) {
// clearTimeout(state.timeoutSate)
// }
// state.timeoutSate = safetyExecutor(data, callback)
// }
state.level++;
return caller;
};
const caller = new Proxy(callerRaw, {
get(obj, prop) {
if (prop === 'p' || prop === 'data' || prop === 'apply' || prop === 'then') {
return obj[prop];
}
state.setCommandName(prop);
return caller;
},
apply(target, thisArg, argumentsList) {
return target(...argumentsList);
}
});
return caller();
};
core.setCoreData = function (data) {
this.coreData = data;
};
return core;
};
module.exports = coreFactory();
export default module.exports;