mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-19 11:01:15 +00:00
fix(editor): Ensure full tree on expression editor parse (#5027)
🐛 Ensure full tree on expression editor parse
This commit is contained in:
@@ -432,3 +432,5 @@ export enum STORES {
|
||||
WEBHOOKS = 'webhooks',
|
||||
HISTORY = 'history',
|
||||
}
|
||||
|
||||
export const EXPRESSION_EDITOR_PARSER_TIMEOUT = 15_000; // ms
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import mixins from 'vue-typed-mixins';
|
||||
import { mapStores } from 'pinia';
|
||||
import { syntaxTree } from '@codemirror/language';
|
||||
import { ensureSyntaxTree, syntaxTree } from '@codemirror/language';
|
||||
|
||||
import { workflowHelpers } from '@/mixins/workflowHelpers';
|
||||
import { useNDVStore } from '@/stores/ndv';
|
||||
import { EXPRESSION_EDITOR_PARSER_TIMEOUT } from '@/constants';
|
||||
|
||||
import type { PropType } from 'vue';
|
||||
import type { EditorView } from '@codemirror/view';
|
||||
@@ -60,9 +61,17 @@ export const expressionManager = mixins(workflowHelpers).extend({
|
||||
|
||||
const rawSegments: RawSegment[] = [];
|
||||
|
||||
syntaxTree(this.editor.state)
|
||||
.cursor()
|
||||
.iterate((node) => {
|
||||
const fullTree = ensureSyntaxTree(
|
||||
this.editor.state,
|
||||
this.editor.state.doc.length,
|
||||
EXPRESSION_EDITOR_PARSER_TIMEOUT,
|
||||
);
|
||||
|
||||
if (fullTree === null) {
|
||||
throw new Error(`Failed to parse expression: ${this.editor.state.doc.toString()}`);
|
||||
}
|
||||
|
||||
fullTree.cursor().iterate((node) => {
|
||||
if (!this.editor || node.type.name === 'Program') return;
|
||||
|
||||
rawSegments.push({
|
||||
|
||||
Reference in New Issue
Block a user