@orchestrator/core
Version:
> Core package of Orchestrator library.
63 lines • 10.6 kB
JavaScript
import { Property } from '@orchestrator/gen-io-ts';
import { chain } from 'fp-ts/lib/Either';
import { pipe } from 'fp-ts/function';
import * as t from 'io-ts';
import { addConfig } from '../../metadata/configuration';
import { parseFunction } from '../../util';
export const CUSTOM_FUNCTION_ARGUMENT_PREFIX = '$';
export const FunctionFromMeta = new t.Type('FunctionFromMeta', isFunctionWithMeta, (m, c) => pipe(t.UnknownRecord.validate(m, c), chain((obj) => {
if (!hasFunctionMeta(obj)) {
return t.failure(m, c);
}
// Move custom arguments to the end
obj.args.sort((arg1, arg2) => {
const is1Custom = arg1.startsWith(CUSTOM_FUNCTION_ARGUMENT_PREFIX);
const is2Custom = arg2.startsWith(CUSTOM_FUNCTION_ARGUMENT_PREFIX);
if (is1Custom === is2Custom) {
return 0;
}
return is1Custom ? 1 : -1;
});
const fn = new Function(...obj.args, obj.body);
fn.args = obj.args;
fn.body = obj.body;
return t.success(fn);
})), (fn) => ({ args: fn.args, body: fn.body }));
export const FunctionFromString = new t.Type('FunctionFromString', isFunctionWithMeta, (m, c) => pipe(t.string.validate(m, c), chain((str) => {
try {
return FunctionFromMeta.validate(parseFunction(str), c);
}
catch {
return t.failure(str, c);
}
})), (fn) => fn.toString());
// eslint-disable-next-line @typescript-eslint/ban-types
export const FunctionWithMeta = new t.Type('FunctionWithMeta', isFunctionWithMeta, (m, c) => pipe(t.Function.validate(m, c), chain((fn) => {
try {
// Reconstruct function from string to reorder arguments
return FunctionFromString.validate(fn.toString(), c);
}
catch {
return t.failure(fn, c);
}
})), (fn) => fn);
export function OptionFunction(customInjector) {
const decorator = Property({
typeFactory: () => t.union([FunctionFromString, FunctionFromMeta, FunctionWithMeta]),
});
return (target, prop) => {
decorator(target, prop);
addConfig(target, {
prop,
decorator: OptionFunction,
args: [customInjector],
});
};
}
function hasFunctionMeta(obj) {
return obj && Array.isArray(obj.args) && typeof obj.body === 'string';
}
function isFunctionWithMeta(fn) {
return typeof fn === 'function' && hasFunctionMeta(fn);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jb25maWcvb3B0aW9uL2Z1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTNCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBVzNDLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLEdBQUcsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ3hDLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxJQUFJLENBQ0YsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUM5QixLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN4QjtJQUVELG1DQUFtQztJQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFD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SUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxHQUFRO0lBQy9CLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsRUFBTztJQUNqQyxPQUFPLE9BQU8sRUFBRSxLQUFLLFVBQVUsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gJ0BvcmNoZXN0cmF0b3IvZ2VuLWlvLXRzJztcbmltcG9ydCB7IGNoYWluIH0gZnJvbSAnZnAtdHMvbGliL0VpdGhlcic7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAnZnAtdHMvZnVuY3Rpb24nO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5cbmltcG9ydCB7IGFkZENvbmZpZyB9IGZyb20gJy4uLy4uL21ldGFkYXRhL2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgcGFyc2VGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5leHBvcnQgdHlwZSBDdXN0b21JbmplY3RvckZhY3RvcnkgPSAocGFyZW50SW5qZWN0b3I6IEluamVjdG9yKSA9PiBJbmplY3RvcjtcblxuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbk1ldGEge1xuICBhcmdzOiBzdHJpbmdbXTtcbiAgYm9keTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uV2l0aE1ldGEgZXh0ZW5kcyBGdW5jdGlvbiwgRnVuY3Rpb25NZXRhIHt9XG5cbmV4cG9ydCBjb25zdCBDVVNUT01fRlVOQ1RJT05fQVJHVU1FTlRfUFJFRklYID0gJyQnO1xuXG5leHBvcnQgY29uc3QgRnVuY3Rpb25Gcm9tTWV0YSA9IG5ldyB0LlR5cGU8RnVuY3Rpb25XaXRoTWV0YSwgRnVuY3Rpb25NZXRhPihcbiAgJ0Z1bmN0aW9uRnJvbU1ldGEnLFxuICBpc0Z1bmN0aW9uV2l0aE1ldGEsXG4gIChtLCBjKSA9PlxuICAgIHBpcGUoXG4gICAgICB0LlVua25vd25SZWNvcmQudmFsaWRhdGUobSwgYyksXG4gICAgICBjaGFpbigob2JqKSA9PiB7XG4gICAgICAgIGlmICghaGFzRnVuY3Rpb25NZXRhKG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gdC5mYWlsdXJlKG0sIGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSBjdXN0b20gYXJndW1lbnRzIHRvIHRoZSBlbmRcbiAgICAgICAgb2JqLmFyZ3Muc29ydCgoYXJnMSwgYXJnMikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzMUN1c3RvbSA9IGFyZzEuc3RhcnRzV2l0aChDVVNUT01fRlVOQ1RJT05fQVJHVU1FTlRfUFJFRklYKTtcbiAgICAgICAgICBjb25zdCBpczJDdXN0b20gPSBhcmcyLnN0YXJ0c1dpdGgoQ1VTVE9NX0ZVTkNUSU9OX0FSR1VNRU5UX1BSRUZJWCk7XG5cbiAgICAgICAgICBpZiAoaXMxQ3VzdG9tID09PSBpczJDdXN0b20pIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpczFDdXN0b20gPyAxIDogLTE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKC4uLm9iai5hcmdzLCBvYmouYm9keSkgYXMgRnVuY3Rpb25XaXRoTWV0YTtcbiAgICAgICAgZm4uYXJncyA9IG9iai5hcmdzO1xuICAgICAgICBmbi5ib2R5ID0gb2JqLmJvZHk7XG5cbiAgICAgICAgcmV0dXJuIHQuc3VjY2Vzcyhmbik7XG4gICAgICB9KSxcbiAgICApLFxuICAoZm4pID0+ICh7IGFyZ3M6IGZuLmFyZ3MsIGJvZHk6IGZuLmJvZHkgfSksXG4pO1xuXG5leHBvcnQgY29uc3QgRnVuY3Rpb25Gcm9tU3RyaW5nID0gbmV3IHQuVHlwZTxGdW5jdGlvbldpdGhNZXRhLCBzdHJpbmc+KFxuICAnRnVuY3Rpb25Gcm9tU3RyaW5nJyxcbiAgaXNGdW5jdGlvbldpdGhNZXRhLFxuICAobSwgYykgPT5cbiAgICBwaXBlKFxuICAgICAgdC5zdHJpbmcudmFsaWRhdGUobSwgYyksXG4gICAgICBjaGFpbigoc3RyKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uRnJvbU1ldGEudmFsaWRhdGUocGFyc2VGdW5jdGlvbihzdHIpLCBjKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHQuZmFpbHVyZShzdHIsIGMpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApLFxuICAoZm4pID0+IGZuLnRvU3RyaW5nKCksXG4pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGNvbnN0IEZ1bmN0aW9uV2l0aE1ldGEgPSBuZXcgdC5UeXBlPEZ1bmN0aW9uV2l0aE1ldGEsIEZ1bmN0aW9uPihcbiAgJ0Z1bmN0aW9uV2l0aE1ldGEnLFxuICBpc0Z1bmN0aW9uV2l0aE1ldGEsXG4gIChtLCBjKSA9PlxuICAgIHBpcGUoXG4gICAgICB0LkZ1bmN0aW9uLnZhbGlkYXRlKG0sIGMpLFxuICAgICAgY2hhaW4oKGZuKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gUmVjb25zdHJ1Y3QgZnVuY3Rpb24gZnJvbSBzdHJpbmcgdG8gcmVvcmRlciBhcmd1bWVudHNcbiAgICAgICAgICByZXR1cm4gRnVuY3Rpb25Gcm9tU3RyaW5nLnZhbGlkYXRlKGZuLnRvU3RyaW5nKCksIGMpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gdC5mYWlsdXJlKGZuLCBjKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKSxcbiAgKGZuKSA9PiBmbixcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBPcHRpb25GdW5jdGlvbihcbiAgY3VzdG9tSW5qZWN0b3I/OiBDdXN0b21JbmplY3RvckZhY3RvcnksXG4pOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIGNvbnN0IGRlY29yYXRvciA9IFByb3BlcnR5KHtcbiAgICB0eXBlRmFjdG9yeTogKCkgPT5cbiAgICAgIHQudW5pb24oW0Z1bmN0aW9uRnJvbVN0cmluZywgRnVuY3Rpb25Gcm9tTWV0YSwgRnVuY3Rpb25XaXRoTWV0YV0pLFxuICB9KTtcbiAgcmV0dXJuICh0YXJnZXQsIHByb3ApID0+IHtcbiAgICBkZWNvcmF0b3IodGFyZ2V0LCBwcm9wKTtcbiAgICBhZGRDb25maWcodGFyZ2V0LCB7XG4gICAgICBwcm9wLFxuICAgICAgZGVjb3JhdG9yOiBPcHRpb25GdW5jdGlvbixcbiAgICAgIGFyZ3M6IFtjdXN0b21JbmplY3Rvcl0sXG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0Z1bmN0aW9uTWV0YShvYmo6IGFueSk6IG9iaiBpcyBGdW5jdGlvbk1ldGEge1xuICByZXR1cm4gb2JqICYmIEFycmF5LmlzQXJyYXkob2JqLmFyZ3MpICYmIHR5cGVvZiBvYmouYm9keSA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb25XaXRoTWV0YShmbjogYW55KTogZm4gaXMgRnVuY3Rpb25XaXRoTWV0YSB7XG4gIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgaGFzRnVuY3Rpb25NZXRhKGZuKTtcbn1cbiJdfQ==