json-string-mapper
Version:
transform json string to key value pair map
542 lines (540 loc) • 20.1 kB
JavaScript
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
import { isBlank } from '../facade/lang';
var ParserError = (function () {
function ParserError(message, input, errLocation, ctxLocation) {
this.input = input;
this.errLocation = errLocation;
this.ctxLocation = ctxLocation;
this.message = "Parser Error: " + message + " " + errLocation + " [" + input + "] in " + ctxLocation;
}
return ParserError;
}());
export { ParserError };
var ParseSpan = (function () {
function ParseSpan(start, end) {
this.start = start;
this.end = end;
}
return ParseSpan;
}());
export { ParseSpan };
var AST = (function () {
function AST(span) {
this.span = span;
}
AST.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return null;
};
AST.prototype.toString = function () { return 'AST'; };
return AST;
}());
export { AST };
/**
* Represents a quoted expression of the form:
*
* quote = prefix `:` uninterpretedExpression
* prefix = identifier
* uninterpretedExpression = arbitrary string
*
* A quoted expression is meant to be pre-processed by an AST transformer that
* converts it into another AST that no longer contains quoted expressions.
* It is meant to allow third-party developers to extend Angular template
* expression language. The `uninterpretedExpression` part of the quote is
* therefore not interpreted by the Angular's own expression parser.
*/
var Quote = (function (_super) {
__extends(Quote, _super);
function Quote(span, prefix, uninterpretedExpression, location) {
var _this = _super.call(this, span) || this;
_this.prefix = prefix;
_this.uninterpretedExpression = uninterpretedExpression;
_this.location = location;
return _this;
}
Quote.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitQuote(this, context);
};
Quote.prototype.toString = function () { return 'Quote'; };
return Quote;
}(AST));
export { Quote };
var EmptyExpr = (function (_super) {
__extends(EmptyExpr, _super);
function EmptyExpr() {
return _super !== null && _super.apply(this, arguments) || this;
}
EmptyExpr.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
// do nothing
};
return EmptyExpr;
}(AST));
export { EmptyExpr };
var ImplicitReceiver = (function (_super) {
__extends(ImplicitReceiver, _super);
function ImplicitReceiver() {
return _super !== null && _super.apply(this, arguments) || this;
}
ImplicitReceiver.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitImplicitReceiver(this, context);
};
return ImplicitReceiver;
}(AST));
export { ImplicitReceiver };
/**
* Multiple expressions separated by a semicolon.
*/
var Chain = (function (_super) {
__extends(Chain, _super);
function Chain(span, expressions) {
var _this = _super.call(this, span) || this;
_this.expressions = expressions;
return _this;
}
Chain.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitChain(this, context);
};
return Chain;
}(AST));
export { Chain };
var Conditional = (function (_super) {
__extends(Conditional, _super);
function Conditional(span, condition, trueExp, falseExp) {
var _this = _super.call(this, span) || this;
_this.condition = condition;
_this.trueExp = trueExp;
_this.falseExp = falseExp;
return _this;
}
Conditional.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitConditional(this, context);
};
return Conditional;
}(AST));
export { Conditional };
var PropertyRead = (function (_super) {
__extends(PropertyRead, _super);
function PropertyRead(span, receiver, name) {
var _this = _super.call(this, span) || this;
_this.receiver = receiver;
_this.name = name;
return _this;
}
PropertyRead.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitPropertyRead(this, context);
};
return PropertyRead;
}(AST));
export { PropertyRead };
var PropertyWrite = (function (_super) {
__extends(PropertyWrite, _super);
function PropertyWrite(span, receiver, name, value) {
var _this = _super.call(this, span) || this;
_this.receiver = receiver;
_this.name = name;
_this.value = value;
return _this;
}
PropertyWrite.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitPropertyWrite(this, context);
};
return PropertyWrite;
}(AST));
export { PropertyWrite };
var SafePropertyRead = (function (_super) {
__extends(SafePropertyRead, _super);
function SafePropertyRead(span, receiver, name) {
var _this = _super.call(this, span) || this;
_this.receiver = receiver;
_this.name = name;
return _this;
}
SafePropertyRead.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitSafePropertyRead(this, context);
};
return SafePropertyRead;
}(AST));
export { SafePropertyRead };
var KeyedRead = (function (_super) {
__extends(KeyedRead, _super);
function KeyedRead(span, obj, key) {
var _this = _super.call(this, span) || this;
_this.obj = obj;
_this.key = key;
return _this;
}
KeyedRead.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitKeyedRead(this, context);
};
return KeyedRead;
}(AST));
export { KeyedRead };
var KeyedWrite = (function (_super) {
__extends(KeyedWrite, _super);
function KeyedWrite(span, obj, key, value) {
var _this = _super.call(this, span) || this;
_this.obj = obj;
_this.key = key;
_this.value = value;
return _this;
}
KeyedWrite.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitKeyedWrite(this, context);
};
return KeyedWrite;
}(AST));
export { KeyedWrite };
var BindingPipe = (function (_super) {
__extends(BindingPipe, _super);
function BindingPipe(span, exp, name, args) {
var _this = _super.call(this, span) || this;
_this.exp = exp;
_this.name = name;
_this.args = args;
return _this;
}
BindingPipe.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitPipe(this, context);
};
return BindingPipe;
}(AST));
export { BindingPipe };
var LiteralPrimitive = (function (_super) {
__extends(LiteralPrimitive, _super);
function LiteralPrimitive(span, value) {
var _this = _super.call(this, span) || this;
_this.value = value;
return _this;
}
LiteralPrimitive.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitLiteralPrimitive(this, context);
};
return LiteralPrimitive;
}(AST));
export { LiteralPrimitive };
var LiteralArray = (function (_super) {
__extends(LiteralArray, _super);
function LiteralArray(span, expressions) {
var _this = _super.call(this, span) || this;
_this.expressions = expressions;
return _this;
}
LiteralArray.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitLiteralArray(this, context);
};
return LiteralArray;
}(AST));
export { LiteralArray };
var LiteralMap = (function (_super) {
__extends(LiteralMap, _super);
function LiteralMap(span, keys, values) {
var _this = _super.call(this, span) || this;
_this.keys = keys;
_this.values = values;
return _this;
}
LiteralMap.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitLiteralMap(this, context);
};
return LiteralMap;
}(AST));
export { LiteralMap };
var Interpolation = (function (_super) {
__extends(Interpolation, _super);
function Interpolation(span, strings, expressions) {
var _this = _super.call(this, span) || this;
_this.strings = strings;
_this.expressions = expressions;
return _this;
}
Interpolation.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitInterpolation(this, context);
};
return Interpolation;
}(AST));
export { Interpolation };
var Binary = (function (_super) {
__extends(Binary, _super);
function Binary(span, operation, left, right) {
var _this = _super.call(this, span) || this;
_this.operation = operation;
_this.left = left;
_this.right = right;
return _this;
}
Binary.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitBinary(this, context);
};
return Binary;
}(AST));
export { Binary };
var PrefixNot = (function (_super) {
__extends(PrefixNot, _super);
function PrefixNot(span, expression) {
var _this = _super.call(this, span) || this;
_this.expression = expression;
return _this;
}
PrefixNot.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitPrefixNot(this, context);
};
return PrefixNot;
}(AST));
export { PrefixNot };
var MethodCall = (function (_super) {
__extends(MethodCall, _super);
function MethodCall(span, receiver, name, args) {
var _this = _super.call(this, span) || this;
_this.receiver = receiver;
_this.name = name;
_this.args = args;
return _this;
}
MethodCall.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitMethodCall(this, context);
};
return MethodCall;
}(AST));
export { MethodCall };
var SafeMethodCall = (function (_super) {
__extends(SafeMethodCall, _super);
function SafeMethodCall(span, receiver, name, args) {
var _this = _super.call(this, span) || this;
_this.receiver = receiver;
_this.name = name;
_this.args = args;
return _this;
}
SafeMethodCall.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitSafeMethodCall(this, context);
};
return SafeMethodCall;
}(AST));
export { SafeMethodCall };
var FunctionCall = (function (_super) {
__extends(FunctionCall, _super);
function FunctionCall(span, target, args) {
var _this = _super.call(this, span) || this;
_this.target = target;
_this.args = args;
return _this;
}
FunctionCall.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return visitor.visitFunctionCall(this, context);
};
return FunctionCall;
}(AST));
export { FunctionCall };
var ASTWithSource = (function (_super) {
__extends(ASTWithSource, _super);
function ASTWithSource(ast, source, location, errors) {
var _this = _super.call(this, new ParseSpan(0, isBlank(source) ? 0 : source.length)) || this;
_this.ast = ast;
_this.source = source;
_this.location = location;
_this.errors = errors;
return _this;
}
ASTWithSource.prototype.visit = function (visitor, context) {
if (context === void 0) { context = null; }
return this.ast.visit(visitor, context);
};
ASTWithSource.prototype.toString = function () { return this.source + " in " + this.location; };
return ASTWithSource;
}(AST));
export { ASTWithSource };
var TemplateBinding = (function () {
function TemplateBinding(span, key, keyIsVar, name, expression) {
this.span = span;
this.key = key;
this.keyIsVar = keyIsVar;
this.name = name;
this.expression = expression;
}
return TemplateBinding;
}());
export { TemplateBinding };
var RecursiveAstVisitor = (function () {
function RecursiveAstVisitor() {
}
RecursiveAstVisitor.prototype.visitBinary = function (ast, context) {
ast.left.visit(this);
ast.right.visit(this);
return null;
};
RecursiveAstVisitor.prototype.visitChain = function (ast, context) { return this.visitAll(ast.expressions, context); };
RecursiveAstVisitor.prototype.visitConditional = function (ast, context) {
ast.condition.visit(this);
ast.trueExp.visit(this);
ast.falseExp.visit(this);
return null;
};
RecursiveAstVisitor.prototype.visitPipe = function (ast, context) {
ast.exp.visit(this);
this.visitAll(ast.args, context);
return null;
};
RecursiveAstVisitor.prototype.visitFunctionCall = function (ast, context) {
ast.target.visit(this);
this.visitAll(ast.args, context);
return null;
};
RecursiveAstVisitor.prototype.visitImplicitReceiver = function (ast, context) { return null; };
RecursiveAstVisitor.prototype.visitInterpolation = function (ast, context) {
return this.visitAll(ast.expressions, context);
};
RecursiveAstVisitor.prototype.visitKeyedRead = function (ast, context) {
ast.obj.visit(this);
ast.key.visit(this);
return null;
};
RecursiveAstVisitor.prototype.visitKeyedWrite = function (ast, context) {
ast.obj.visit(this);
ast.key.visit(this);
ast.value.visit(this);
return null;
};
RecursiveAstVisitor.prototype.visitLiteralArray = function (ast, context) {
return this.visitAll(ast.expressions, context);
};
RecursiveAstVisitor.prototype.visitLiteralMap = function (ast, context) { return this.visitAll(ast.values, context); };
RecursiveAstVisitor.prototype.visitLiteralPrimitive = function (ast, context) { return null; };
RecursiveAstVisitor.prototype.visitMethodCall = function (ast, context) {
ast.receiver.visit(this);
return this.visitAll(ast.args, context);
};
RecursiveAstVisitor.prototype.visitPrefixNot = function (ast, context) {
ast.expression.visit(this);
return null;
};
RecursiveAstVisitor.prototype.visitPropertyRead = function (ast, context) {
ast.receiver.visit(this);
return null;
};
RecursiveAstVisitor.prototype.visitPropertyWrite = function (ast, context) {
ast.receiver.visit(this);
ast.value.visit(this);
return null;
};
RecursiveAstVisitor.prototype.visitSafePropertyRead = function (ast, context) {
ast.receiver.visit(this);
return null;
};
RecursiveAstVisitor.prototype.visitSafeMethodCall = function (ast, context) {
ast.receiver.visit(this);
return this.visitAll(ast.args, context);
};
RecursiveAstVisitor.prototype.visitAll = function (asts, context) {
var _this = this;
asts.forEach(function (ast) { return ast.visit(_this, context); });
return null;
};
RecursiveAstVisitor.prototype.visitQuote = function (ast, context) { return null; };
return RecursiveAstVisitor;
}());
export { RecursiveAstVisitor };
var AstTransformer = (function () {
function AstTransformer() {
}
AstTransformer.prototype.visitImplicitReceiver = function (ast, context) { return ast; };
AstTransformer.prototype.visitInterpolation = function (ast, context) {
return new Interpolation(ast.span, ast.strings, this.visitAll(ast.expressions));
};
AstTransformer.prototype.visitLiteralPrimitive = function (ast, context) {
return new LiteralPrimitive(ast.span, ast.value);
};
AstTransformer.prototype.visitPropertyRead = function (ast, context) {
return new PropertyRead(ast.span, ast.receiver.visit(this), ast.name);
};
AstTransformer.prototype.visitPropertyWrite = function (ast, context) {
return new PropertyWrite(ast.span, ast.receiver.visit(this), ast.name, ast.value);
};
AstTransformer.prototype.visitSafePropertyRead = function (ast, context) {
return new SafePropertyRead(ast.span, ast.receiver.visit(this), ast.name);
};
AstTransformer.prototype.visitMethodCall = function (ast, context) {
return new MethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
};
AstTransformer.prototype.visitSafeMethodCall = function (ast, context) {
return new SafeMethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
};
AstTransformer.prototype.visitFunctionCall = function (ast, context) {
return new FunctionCall(ast.span, ast.target.visit(this), this.visitAll(ast.args));
};
AstTransformer.prototype.visitLiteralArray = function (ast, context) {
return new LiteralArray(ast.span, this.visitAll(ast.expressions));
};
AstTransformer.prototype.visitLiteralMap = function (ast, context) {
return new LiteralMap(ast.span, ast.keys, this.visitAll(ast.values));
};
AstTransformer.prototype.visitBinary = function (ast, context) {
return new Binary(ast.span, ast.operation, ast.left.visit(this), ast.right.visit(this));
};
AstTransformer.prototype.visitPrefixNot = function (ast, context) {
return new PrefixNot(ast.span, ast.expression.visit(this));
};
AstTransformer.prototype.visitConditional = function (ast, context) {
return new Conditional(ast.span, ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));
};
AstTransformer.prototype.visitPipe = function (ast, context) {
return new BindingPipe(ast.span, ast.exp.visit(this), ast.name, this.visitAll(ast.args));
};
AstTransformer.prototype.visitKeyedRead = function (ast, context) {
return new KeyedRead(ast.span, ast.obj.visit(this), ast.key.visit(this));
};
AstTransformer.prototype.visitKeyedWrite = function (ast, context) {
return new KeyedWrite(ast.span, ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));
};
AstTransformer.prototype.visitAll = function (asts) {
var res = new Array(asts.length);
for (var i = 0; i < asts.length; ++i) {
res[i] = asts[i].visit(this);
}
return res;
};
AstTransformer.prototype.visitChain = function (ast, context) {
return new Chain(ast.span, this.visitAll(ast.expressions));
};
AstTransformer.prototype.visitQuote = function (ast, context) {
return new Quote(ast.span, ast.prefix, ast.uninterpretedExpression, ast.location);
};
return AstTransformer;
}());
export { AstTransformer };
//# sourceMappingURL=ast.js.map