trader-server
Version:
OData server for testing strategies, simulating and real trading.
33 lines (28 loc) • 1.23 kB
text/typescript
import Utils from "./utils";
import Lexer from "./lexer";
import PrimitiveLiteral from "./primitiveLiteral";
import Expressions from "./expressions";
import Query from "./query";
import ResourcePath from "./resourcePath";
export namespace ODataUri {
export function odataUri(value: Utils.SourceArray, index: number, metadataContext?: any): Lexer.Token {
let resource = ResourcePath.resourcePath(value, index, metadataContext);
while (!resource && index < value.length) {
while (value[++index] !== 0x2f && index < value.length);
resource = ResourcePath.resourcePath(value, index, metadataContext);
}
if (!resource) return;
let start = index;
index = resource.next;
metadataContext = resource.metadata;
let query;
if (value[index] === 0x3f) {
query = Query.queryOptions(value, index + 1, metadataContext);
if (!query) return;
index = query.next;
delete resource.metadata;
}
return Lexer.tokenize(value, start, index, { resource, query }, Lexer.TokenType.ODataUri, <any>{ metadata: metadataContext });
}
}
export default ODataUri;