mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
* 👕 Move `consistent-type-imports` to top level * 👕 Apply lintfixes * 👕 Apply more lintfixes * 👕 More lintfixes * 👕 More lintfixes
43 lines
1,018 B
TypeScript
43 lines
1,018 B
TypeScript
import type * as esprima from 'esprima-next';
|
|
import type { Completion } from '@codemirror/autocomplete';
|
|
import type { Node } from 'estree';
|
|
import type { RangeNode } from './types';
|
|
|
|
export function walk<T extends RangeNode>(
|
|
node: Node | esprima.Program,
|
|
test: (node: Node) => boolean,
|
|
found: Node[] = [],
|
|
) {
|
|
// @ts-ignore
|
|
if (test(node)) found.push(node);
|
|
|
|
for (const key in node) {
|
|
if (!(key in node)) continue;
|
|
|
|
// @ts-ignore
|
|
const child = node[key];
|
|
|
|
if (child === null || typeof child !== 'object') continue;
|
|
|
|
if (Array.isArray(child)) {
|
|
child.forEach((node) => walk(node, test, found));
|
|
} else {
|
|
walk(child, test, found);
|
|
}
|
|
}
|
|
|
|
return found as T[];
|
|
}
|
|
|
|
export const escape = (str: string) =>
|
|
str
|
|
.replace('$', '\\$')
|
|
.replace('(', '\\(')
|
|
.replace(')', '\\)')
|
|
.replace('[', '\\[')
|
|
.replace(']', '\\]');
|
|
|
|
export const toVariableOption = (label: string) => ({ label, type: 'variable' });
|
|
|
|
export const addVarType = (option: Completion) => ({ ...option, type: 'variable' });
|