UNPKG

@mondaydotcomorg/atp-compiler

Version:

Production-ready compiler for transforming async iteration patterns into resumable operations with checkpoint-based state management

88 lines 3.96 kB
import * as t from '@babel/types'; /** * Wrap batch result with post-processing for filter() * Filter must return filtered ITEMS, not boolean results */ export function wrapFilterResult(batchCall, array, methodId) { const resultsVar = `__filter_results_${methodId}`; const indexVar = `__i_${methodId}`; const arrayClone = t.cloneNode(array, true); return t.awaitExpression(t.callExpression(t.arrowFunctionExpression([], t.blockStatement([ t.variableDeclaration('const', [ t.variableDeclarator(t.identifier(resultsVar), batchCall.argument), ]), t.returnStatement(t.callExpression(t.memberExpression(arrayClone, t.identifier('filter')), [ t.arrowFunctionExpression([t.identifier('_'), t.identifier(indexVar)], t.callExpression(t.identifier('Boolean'), [ t.memberExpression(t.identifier(resultsVar), t.identifier(indexVar), true), ])), ])), ]), true), [])); } /** * Wrap batch result with post-processing for find() * Find must return first matching ITEM (not boolean) */ export function wrapFindResult(batchCall, array, methodId) { const resultsVar = `__find_results_${methodId}`; const arrayClone = t.cloneNode(array, true); return t.awaitExpression(t.callExpression(t.arrowFunctionExpression([], t.blockStatement([ t.variableDeclaration('const', [ t.variableDeclarator(t.identifier(resultsVar), batchCall.argument), ]), t.returnStatement(t.callExpression(t.memberExpression(arrayClone, t.identifier('find')), [ t.arrowFunctionExpression([t.identifier('_'), t.identifier('__i')], t.callExpression(t.identifier('Boolean'), [ t.memberExpression(t.identifier(resultsVar), t.identifier('__i'), true), ])), ])), ]), true), [])); } /** * Wrap batch result with post-processing for some() * Some must return boolean: true if ANY result is truthy */ export function wrapSomeResult(batchCall, methodId) { const resultsVar = `__some_results_${methodId}`; return t.awaitExpression(t.callExpression(t.arrowFunctionExpression([], t.blockStatement([ t.variableDeclaration('const', [ t.variableDeclarator(t.identifier(resultsVar), batchCall.argument), ]), t.returnStatement(t.callExpression(t.memberExpression(t.identifier(resultsVar), t.identifier('some')), [ t.arrowFunctionExpression([t.identifier('r')], t.callExpression(t.identifier('Boolean'), [t.identifier('r')])), ])), ]), true), [])); } /** * Wrap batch result with post-processing for every() * Every must return boolean: true if ALL results are truthy */ export function wrapEveryResult(batchCall, methodId) { const resultsVar = `__every_results_${methodId}`; return t.awaitExpression(t.callExpression(t.arrowFunctionExpression([], t.blockStatement([ t.variableDeclaration('const', [ t.variableDeclarator(t.identifier(resultsVar), batchCall.argument), ]), t.returnStatement(t.callExpression(t.memberExpression(t.identifier(resultsVar), t.identifier('every')), [ t.arrowFunctionExpression([t.identifier('r')], t.callExpression(t.identifier('Boolean'), [t.identifier('r')])), ])), ]), true), [])); } /** * Wrap batch result if method needs post-processing */ export function wrapBatchResultIfNeeded(batchCall, methodName, array, methodId) { switch (methodName) { case 'filter': return wrapFilterResult(batchCall, array, methodId); case 'find': return wrapFindResult(batchCall, array, methodId); case 'some': return wrapSomeResult(batchCall, methodId); case 'every': return wrapEveryResult(batchCall, methodId); case 'forEach': return batchCall; default: return batchCall; } } //# sourceMappingURL=array-transformer-wrappers.js.map