UNPKG

trader-server

Version:

OData server for testing strategies, simulating and real trading.

390 lines 16.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var utils_1 = require("./utils"); var lexer_1 = require("./lexer"); var primitiveLiteral_1 = require("./primitiveLiteral"); var nameOrIdentifier_1 = require("./nameOrIdentifier"); var expressions_1 = require("./expressions"); var ArrayOrObject; (function (ArrayOrObject) { function complexColInUri(value, index) { var begin = lexer_1.default.beginArray(value, index); if (begin === index) return; var start = index; index = begin; var items = []; var token = ArrayOrObject.complexInUri(value, index); if (token) { while (token) { items.push(token); index = token.next; var end = lexer_1.default.endArray(value, index); if (end > index) { index = end; break; } else { var separator = lexer_1.default.valueSeparator(value, index); if (separator === index) return; index = separator; token = ArrayOrObject.complexInUri(value, index); if (!token) return; } } } else { var end = lexer_1.default.endArray(value, index); if (end === index) return; index = end; } return lexer_1.default.tokenize(value, start, index, { items: items }, lexer_1.default.TokenType.Array); } ArrayOrObject.complexColInUri = complexColInUri; function complexInUri(value, index) { var begin = lexer_1.default.beginObject(value, index); if (begin === index) return; var start = index; index = begin; var items = []; var token = ArrayOrObject.annotationInUri(value, index) || ArrayOrObject.primitivePropertyInUri(value, index) || ArrayOrObject.complexPropertyInUri(value, index) || ArrayOrObject.collectionPropertyInUri(value, index) || ArrayOrObject.navigationPropertyInUri(value, index); if (token) { while (token) { items.push(token); index = token.next; var end = lexer_1.default.endObject(value, index); if (end > index) { index = end; break; } else { var separator = lexer_1.default.valueSeparator(value, index); if (separator === index) return; index = separator; token = ArrayOrObject.annotationInUri(value, index) || ArrayOrObject.primitivePropertyInUri(value, index) || ArrayOrObject.complexPropertyInUri(value, index) || ArrayOrObject.collectionPropertyInUri(value, index) || ArrayOrObject.navigationPropertyInUri(value, index); if (!token) return; } } } else { var end = lexer_1.default.endObject(value, index); if (end === index) return; index = end; } return lexer_1.default.tokenize(value, start, index, { items: items }, lexer_1.default.TokenType.Object); } ArrayOrObject.complexInUri = complexInUri; function collectionPropertyInUri(value, index) { var mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; var start = index; index = mark; var prop = nameOrIdentifier_1.default.primitiveColProperty(value, index) || nameOrIdentifier_1.default.complexColProperty(value, index); if (!prop) return; index = prop.next; mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; index = mark; var separator = lexer_1.default.nameSeparator(value, index); if (separator === index) return; index = separator; var propValue = prop.type === lexer_1.default.TokenType.PrimitiveCollectionProperty ? ArrayOrObject.primitiveColInUri(value, index) : ArrayOrObject.complexColInUri(value, index); if (!propValue) return; index = propValue.next; return lexer_1.default.tokenize(value, start, index, { key: prop, value: propValue }, lexer_1.default.TokenType.Property); } ArrayOrObject.collectionPropertyInUri = collectionPropertyInUri; function primitiveColInUri(value, index) { var begin = lexer_1.default.beginArray(value, index); if (begin === index) return; var start = index; index = begin; var items = []; var token = ArrayOrObject.primitiveLiteralInJSON(value, index); if (token) { while (token) { items.push(token); index = token.next; var end = lexer_1.default.endArray(value, index); if (end > index) { index = end; break; } else { var separator = lexer_1.default.valueSeparator(value, index); if (separator === index) return; index = separator; token = ArrayOrObject.primitiveLiteralInJSON(value, index); if (!token) return; } } } else { var end = lexer_1.default.endArray(value, index); if (end === index) return; index = end; } return lexer_1.default.tokenize(value, start, index, { items: items }, lexer_1.default.TokenType.Array); } ArrayOrObject.primitiveColInUri = primitiveColInUri; function complexPropertyInUri(value, index) { var mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; var start = index; index = mark; var prop = nameOrIdentifier_1.default.complexProperty(value, index); if (!prop) return; index = prop.next; mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; index = mark; var separator = lexer_1.default.nameSeparator(value, index); if (separator === index) return; index = separator; var propValue = ArrayOrObject.complexInUri(value, index); if (!propValue) return; index = propValue.next; return lexer_1.default.tokenize(value, start, index, { key: prop, value: propValue }, lexer_1.default.TokenType.Property); } ArrayOrObject.complexPropertyInUri = complexPropertyInUri; function annotationInUri(value, index) { var mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; var start = index; index = mark; var at = lexer_1.default.AT(value, index); if (!at) return; index = at; var namespaceNext = nameOrIdentifier_1.default.namespace(value, index); if (namespaceNext === index) return; var namespaceStart = index; index = namespaceNext; if (value[index] !== 0x2e) return; index++; var term = nameOrIdentifier_1.default.termName(value, index); if (!term) return; index = term.next; mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; index = mark; var separator = lexer_1.default.nameSeparator(value, index); if (separator === index) return; index = separator; var token = ArrayOrObject.complexInUri(value, index) || ArrayOrObject.complexColInUri(value, index) || ArrayOrObject.primitiveLiteralInJSON(value, index) || ArrayOrObject.primitiveColInUri(value, index); if (!token) return; index = token.next; return lexer_1.default.tokenize(value, start, index, { key: "@" + utils_1.default.stringify(value, namespaceStart, namespaceNext) + "." + term.raw, value: token }, lexer_1.default.TokenType.Annotation); } ArrayOrObject.annotationInUri = annotationInUri; function keyValuePairInUri(value, index, keyFn, valueFn) { var mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; var start = index; index = mark; var prop = keyFn(value, index); if (!prop) return; index = prop.next; mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; index = mark; var separator = lexer_1.default.nameSeparator(value, index); if (separator === index) return; index = separator; var propValue = valueFn(value, index); if (!propValue) return; index = propValue.next; return lexer_1.default.tokenize(value, start, index, { key: prop, value: propValue }, lexer_1.default.TokenType.Property); } ArrayOrObject.keyValuePairInUri = keyValuePairInUri; function primitivePropertyInUri(value, index) { return ArrayOrObject.keyValuePairInUri(value, index, nameOrIdentifier_1.default.primitiveProperty, primitiveLiteralInJSON); } ArrayOrObject.primitivePropertyInUri = primitivePropertyInUri; function navigationPropertyInUri(value, index) { return ArrayOrObject.singleNavPropInJSON(value, index) || ArrayOrObject.collectionNavPropInJSON(value, index); } ArrayOrObject.navigationPropertyInUri = navigationPropertyInUri; function singleNavPropInJSON(value, index) { return ArrayOrObject.keyValuePairInUri(value, index, nameOrIdentifier_1.default.entityNavigationProperty, expressions_1.default.rootExpr); } ArrayOrObject.singleNavPropInJSON = singleNavPropInJSON; function collectionNavPropInJSON(value, index) { return ArrayOrObject.keyValuePairInUri(value, index, nameOrIdentifier_1.default.entityColNavigationProperty, rootExprCol); } ArrayOrObject.collectionNavPropInJSON = collectionNavPropInJSON; function rootExprCol(value, index) { var begin = lexer_1.default.beginArray(value, index); if (begin === index) return; var start = index; index = begin; var items = []; var token = expressions_1.default.rootExpr(value, index); if (token) { while (token) { items.push(token); index = token.next; var end = lexer_1.default.endArray(value, index); if (end > index) { index = end; break; } else { var separator = lexer_1.default.valueSeparator(value, index); if (separator === index) return; index = separator; token = expressions_1.default.rootExpr(value, index); if (!token) return; } } } else { var end = lexer_1.default.endArray(value, index); if (end === index) return; index = end; } return lexer_1.default.tokenize(value, start, index, { items: items }, lexer_1.default.TokenType.Array); } ArrayOrObject.rootExprCol = rootExprCol; function primitiveLiteralInJSON(value, index) { return ArrayOrObject.stringInJSON(value, index) || ArrayOrObject.numberInJSON(value, index) || ArrayOrObject.booleanInJSON(value, index) || ArrayOrObject.nullInJSON(value, index); } ArrayOrObject.primitiveLiteralInJSON = primitiveLiteralInJSON; function stringInJSON(value, index) { var mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; var start = index; index = mark; var char = ArrayOrObject.charInJSON(value, index); while (char > index) { index = char; char = ArrayOrObject.charInJSON(value, index); } mark = lexer_1.default.quotationMark(value, index); if (mark === index) return; index = mark; return lexer_1.default.tokenize(value, start, index, "string", lexer_1.default.TokenType.Literal); } ArrayOrObject.stringInJSON = stringInJSON; function charInJSON(value, index) { var escape = lexer_1.default.escape(value, index); if (escape > index) { if (utils_1.default.equals(value, escape, "%2F")) return escape + 3; if (utils_1.default.equals(value, escape, "/") || utils_1.default.equals(value, escape, "b") || utils_1.default.equals(value, escape, "f") || utils_1.default.equals(value, escape, "n") || utils_1.default.equals(value, escape, "r") || utils_1.default.equals(value, escape, "t")) return escape + 1; if (utils_1.default.equals(value, escape, "u") && utils_1.default.required(value, escape + 1, lexer_1.default.HEXDIG, 4, 4)) return escape + 5; var escapeNext = lexer_1.default.escape(value, escape); if (escapeNext > escape) return escapeNext; var mark = lexer_1.default.quotationMark(value, escape); if (mark > escape) return mark; } else { var mark = lexer_1.default.quotationMark(value, index); if (mark === index) return index + 1; } } ArrayOrObject.charInJSON = charInJSON; function numberInJSON(value, index) { var token = primitiveLiteral_1.default.doubleValue(value, index) || primitiveLiteral_1.default.int64Value(value, index); if (token) { token.value = "number"; return token; } } ArrayOrObject.numberInJSON = numberInJSON; function booleanInJSON(value, index) { if (utils_1.default.equals(value, index, "true")) return lexer_1.default.tokenize(value, index, index + 4, "boolean", lexer_1.default.TokenType.Literal); if (utils_1.default.equals(value, index, "false")) return lexer_1.default.tokenize(value, index, index + 5, "boolean", lexer_1.default.TokenType.Literal); } ArrayOrObject.booleanInJSON = booleanInJSON; function nullInJSON(value, index) { if (utils_1.default.equals(value, index, "null")) return lexer_1.default.tokenize(value, index, index + 4, "null", lexer_1.default.TokenType.Literal); } ArrayOrObject.nullInJSON = nullInJSON; function arrayOrObject(value, index) { var token = ArrayOrObject.complexColInUri(value, index) || ArrayOrObject.complexInUri(value, index) || ArrayOrObject.rootExprCol(value, index) || ArrayOrObject.primitiveColInUri(value, index); if (token) return lexer_1.default.tokenize(value, index, token.next, token, lexer_1.default.TokenType.ArrayOrObject); } ArrayOrObject.arrayOrObject = arrayOrObject; })(ArrayOrObject = exports.ArrayOrObject || (exports.ArrayOrObject = {})); exports.default = ArrayOrObject; //# sourceMappingURL=json.js.map