UNPKG

@paroicms/server

Version:
88 lines 3.43 kB
import { evalToken } from "liquidjs"; export function parseFunctionCallFromTokenizer(tokenizer) { tokenizer.skipBlank(); const handlerId = tokenizer.readIdentifier(); tokenizer.assert(handlerId?.content, "Expected handler name"); const handlerName = handlerId?.content ? handlerId.content : undefined; if (!handlerName) throw new Error("Expected handler name"); tokenizer.skipBlank(); if (tokenizer.peek() !== "(") { const pos = tokenizer.p; tokenizer.skipBlank(); if (!tokenizer.end()) { tokenizer.p = pos; tokenizer.assert(false, "Syntax error, expected '('"); } return { handlerName, positionalTokens: [], namedEntries: [] }; } tokenizer.advance(); const positionalTokens = []; const namedEntries = []; tokenizer.skipBlank(); if (tokenizer.peek() === ")") { tokenizer.advance(); return { handlerName, positionalTokens, namedEntries }; } let namedStarted = false; while (true) { tokenizer.skipBlank(); const ch = tokenizer.peek(); if (ch === ")") break; if (!namedStarted) { const begin = tokenizer.p; const value = tokenizer.readValue(); tokenizer.assert(value, "Expected parameter value"); tokenizer.skipBlank(); if (tokenizer.peek() === ":") { namedStarted = true; tokenizer.p = begin; } else { positionalTokens.push(value); tokenizer.skipBlank(); if (tokenizer.peek() === ",") { tokenizer.advance(); continue; } tokenizer.assert(tokenizer.peek() === ")", "Syntax error, expected ')'"); continue; } } tokenizer.skipBlank(); const keyId = tokenizer.readIdentifier(); tokenizer.assert(keyId?.content, "Expected parameter name before ':'"); const key = keyId?.content ? keyId.content : undefined; if (!key) throw new Error("Expected parameter name before ':'"); tokenizer.skipBlank(); tokenizer.assert(tokenizer.peek() === ":", "Expected ':' after parameter name"); tokenizer.advance(); tokenizer.skipBlank(); const namedValue = tokenizer.readValue(); tokenizer.assert(namedValue, "Expected value after ':' in named parameter"); namedEntries.push({ key, value: namedValue }); tokenizer.skipBlank(); if (tokenizer.peek() === ",") { tokenizer.advance(); continue; } tokenizer.assert(tokenizer.peek() === ")", "Syntax error, expected ')'"); } tokenizer.assert(tokenizer.peek() === ")", "Syntax error, expected ')'"); tokenizer.advance(); return { handlerName, positionalTokens, namedEntries }; } export function* evaluateFunctionCallArgs(ctx, positionalTokens, namedEntries) { const positionedParameters = []; for (const tok of positionalTokens) { positionedParameters.push(yield evalToken(tok, ctx)); } const namedParameters = {}; for (const { key, value } of namedEntries) { namedParameters[key] = yield evalToken(value, ctx); } return { positionedParameters, namedParameters }; } //# sourceMappingURL=liquid-function-call-args.js.map