UNPKG

expression-language

Version:

Javascript implementation of symfony/expression-language

54 lines (53 loc) 2.1 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 = _interopRequireDefault(require("locutus/php/array/array_intersect")); var _count = _interopRequireDefault(require("locutus/php/array/count")); var _implode = _interopRequireDefault(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 `implode(${glue}, ${pieces})`; }, function evaluator(values, glue, pieces) { return (0, _implode.default)(glue, pieces); }); const countFn = exports.countFn = new _ExpressionFunction.default('count', function compiler(mixedVar, mode) { let remaining = ''; if (mode) { remaining = `, ${mode}`; } return `count(${mixedVar}${remaining})`; }, function evaluator(values, mixedVar, mode) { return (0, _count.default)(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 `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.default.apply(null, newArgs); if (allArrays) { return Object.values(res); } return res; });