UNPKG

spel2js

Version:

Parse Spring Expression Language in JavaScript

69 lines (59 loc) 2.05 kB
/* * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import {SpelNode} from './SpelNode'; /** * Represents projection, where a given operation is performed on all elements in some * input sequence, returning a new sequence of the same size. For example: * "{1,2,3,4,5,6,7,8,9,10}.!{#isEven(#this)}" returns "[n, y, n, y, n, y, n, y, n, y]" * * @author Andy Clement * @author Mark Fisher * @author Ben March * @since 0.2.0 */ function projectCollection(collection, expr, state) { return collection.map(function (element) { var matches; state.activeContext.push(element); matches = expr.getValue(state); state.activeContext.pop(); return matches; }); } function createNode(nullSafeNavigation, position, expr) { var node = SpelNode.create('projection', position, expr); node.getValue = function (state) { var collection = state.activeContext.peek(), entries = [], key; if (Array.isArray(collection)) { return projectCollection(collection, expr, state); } else if (typeof collection === 'object') { for (key in collection) { if (collection.hasOwnProperty(key)) { entries.push(collection[key]); } } return projectCollection(entries, expr, state); } return null; }; return node; } export var Projection = { create: createNode };