UNPKG

expression-language

Version:

Javascript implementation of symfony/expression-language

54 lines (53 loc) 2.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.implodeFn = exports.default = exports.countFn = exports.arrayIntersectFn = void 0; var _ExpressionFunction = _interopRequireDefault(require("../ExpressionFunction")); var _AbstractProvider = _interopRequireDefault(require("./AbstractProvider")); var _array_intersect = require("locutus/php/array/array_intersect"); var _count = require("locutus/php/array/count"); var _implode = require("locutus/php/strings/implode"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } class ArrayProvider extends _AbstractProvider.default { getFunctions() { return [implodeFn, countFn, arrayIntersectFn]; } } exports.default = ArrayProvider; const implodeFn = exports.implodeFn = new _ExpressionFunction.default('implode', function compiler(glue, pieces) { //console.log("compile implode: ", pieces, glue, typeof pieces); return `__runtime.implode(${glue}, ${pieces})`; }, function evaluator(values, glue, pieces) { return (0, _implode.implode)(glue, pieces); }); const countFn = exports.countFn = new _ExpressionFunction.default('count', function compiler(mixedVar, mode) { let remaining = ''; if (mode) { remaining = `, ${mode}`; } return `__runtime.count(${mixedVar}${remaining})`; }, function evaluator(values, mixedVar, mode) { return (0, _count.count)(mixedVar, mode); }); const arrayIntersectFn = exports.arrayIntersectFn = new _ExpressionFunction.default('array_intersect', function compiler(arr1, ...rest) { let remaining = ''; if (rest.length > 0) { remaining = ", " + rest.join(", "); } return `__runtime.array_intersect(${arr1}${remaining})`; }, function evaluator(values) { let newArgs = [], allArrays = true; for (let i = 1; i < arguments.length; i++) { newArgs.push(arguments[i]); if (!Array.isArray(arguments[i])) { allArrays = false; } } let res = _array_intersect.array_intersect.apply(null, newArgs); if (allArrays) { return Object.values(res); } return res; });