MCPcopy Create free account
hub / github.com/observablehq/framework / findParams

Function findParams

src/javascript/params.ts:20–52  ·  view source on GitHub ↗
(body: Node, params: Params, input: string)

Source from the content-addressed store, hash-verified

18}
19
20export function findParams(body: Node, params: Params, input: string): [name: string, node: ParamReference][] {
21 const matches: [string, ParamReference][] = [];
22 const references = findReferences(body, {filterReference: ({name}) => name === "observable"});
23
24 simple(body, {
25 MemberExpression(node) {
26 if (isParamReference(node)) {
27 const name = getParamName(node);
28 if (!(name in params)) throw syntaxError(`undefined parameter: ${name}`, node, input);
29 matches.push([name, node]);
30 }
31 }
32 });
33
34 function isParamReference(node: MemberExpression): node is ParamReference {
35 if (
36 node.object.type !== "MemberExpression" ||
37 node.object.object.type !== "Identifier" ||
38 node.object.object.name !== "observable" ||
39 node.object.property.type !== "Identifier" ||
40 node.object.property.name !== "params" ||
41 !references.includes(node.object.object)
42 ) {
43 return false;
44 }
45 if (node.property.type !== "Identifier" && node.property.type !== "Literal") {
46 throw syntaxError("invalid param reference", node, input);
47 }
48 return true;
49 }
50
51 return matches;
52}

Callers 2

rewriteParamsFunction · 0.85
checkParamsFunction · 0.85

Calls 1

findReferencesFunction · 0.85

Tested by

no test coverage detected