expression-language
Version:
Javascript implementation of symfony/expression-language
54 lines (53 loc) • 2.1 kB
JavaScript
;
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;
});