core/plugins/syntax.registrar.plugin.ts
core/plugins/syntax.registrar.plugin.ts is a file in GovLab Docs. 28 lines of code and 11 definitions.
import type { Recognizer } from "#types/code.types";
import ts from "typescript";
const DEFINE = "define";
const SET_METHOD = "set";
const SET_SUFFIX = ".set";
const DEFAULT_SET_LABEL = "registry.set";
const isDefineName = function isDefineName(name: string): boolean {
return name.startsWith(DEFINE) && name.length > DEFINE.length;
};
const labelOf = function labelOf(node: ts.CallExpression): string | null {
const callee = node.expression;
if (ts.isPropertyAccessExpression(callee) && callee.name.text === SET_METHOD) {
return ts.isIdentifier(callee.expression) ? `${callee.expression.text}${SET_SUFFIX}` : DEFAULT_SET_LABEL;
}
return ts.isIdentifier(callee) && isDefineName(callee.text) ? callee.text : null;
};
export const recognizer: Recognizer = {
classify(node, context) {
const registered = ts.isCallExpression(node) ? labelOf(node) : null;
if (registered === null) {
return null;
}
const id = context.mkNodeId(node);
return { edges: [], nodes: [{ id, kind: "registry", label: registered, source: context.sourceOf(node) }] };
},
emits: { edges: [], nodes: ["registry"] },
name: "registry-define",
};