diff --git a/cypress/e2e/11-inline-expression-editor.cy.ts b/cypress/e2e/11-inline-expression-editor.cy.ts index 655c87f114..cbc4736e2b 100644 --- a/cypress/e2e/11-inline-expression-editor.cy.ts +++ b/cypress/e2e/11-inline-expression-editor.cy.ts @@ -36,12 +36,16 @@ describe('Inline expression editor', () => { it('should resolve object resolvables', () => { WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); - WorkflowPage.getters.inlineExpressionEditorInput().type('{{} a: 1'); - WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^\[Object: \{"a":1\}\]$/); + WorkflowPage.getters + .inlineExpressionEditorInput() + .type('{ a: 1 }', { parseSpecialCharSequences: false }); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^\[Object: \{"a": 1\}\]$/); WorkflowPage.getters.inlineExpressionEditorInput().clear(); WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); - WorkflowPage.getters.inlineExpressionEditorInput().type('{{} a: 1 }.a{del}{del}'); + WorkflowPage.getters + .inlineExpressionEditorInput() + .type('{ a: 1 }.a', { parseSpecialCharSequences: false }); WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^1$/); }); diff --git a/cypress/e2e/9-expression-editor-modal.cy.ts b/cypress/e2e/9-expression-editor-modal.cy.ts index 19bf0dd3ab..1a8909872d 100644 --- a/cypress/e2e/9-expression-editor-modal.cy.ts +++ b/cypress/e2e/9-expression-editor-modal.cy.ts @@ -17,49 +17,45 @@ describe('Expression editor modal', () => { }); it('should resolve primitive resolvables', () => { - WorkflowPage.getters.expressionModalInput().type('{{'); - WorkflowPage.getters.expressionModalInput().type('1 + 2'); + WorkflowPage.getters.expressionModalInput().type('{{ 1 + 2'); WorkflowPage.getters.expressionModalOutput().contains(/^3$/); WorkflowPage.getters.expressionModalInput().clear(); - WorkflowPage.getters.expressionModalInput().type('{{'); - WorkflowPage.getters.expressionModalInput().type('"ab" + "cd"'); + WorkflowPage.getters.expressionModalInput().type('{{ "ab" + "cd"'); WorkflowPage.getters.expressionModalOutput().contains(/^abcd$/); WorkflowPage.getters.expressionModalInput().clear(); - WorkflowPage.getters.expressionModalInput().type('{{'); - WorkflowPage.getters.expressionModalInput().type('true && false'); + WorkflowPage.getters.expressionModalInput().type('{{ true && false'); WorkflowPage.getters.expressionModalOutput().contains(/^false$/); }); it('should resolve object resolvables', () => { - WorkflowPage.getters.expressionModalInput().type('{{'); - WorkflowPage.getters.expressionModalInput().type('{{} a: 1'); - WorkflowPage.getters.expressionModalOutput().contains(/^\[Object: \{"a":1\}\]$/); + WorkflowPage.getters + .expressionModalInput() + .type('{{ { a : 1 }', { parseSpecialCharSequences: false }); + WorkflowPage.getters.expressionModalOutput().contains(/^\[Object: \{"a": 1\}\]$/); WorkflowPage.getters.expressionModalInput().clear(); - WorkflowPage.getters.expressionModalInput().type('{{'); - WorkflowPage.getters.expressionModalInput().type('{{} a: 1 }.a{del}{del}'); + WorkflowPage.getters + .expressionModalInput() + .type('{{ { a : 1 }.a', { parseSpecialCharSequences: false }); WorkflowPage.getters.expressionModalOutput().contains(/^1$/); }); it('should resolve array resolvables', () => { - WorkflowPage.getters.expressionModalInput().type('{{'); - WorkflowPage.getters.expressionModalInput().type('[1, 2, 3]'); + WorkflowPage.getters.expressionModalInput().type('{{ [1, 2, 3]'); WorkflowPage.getters.expressionModalOutput().contains(/^\[Array: \[1,2,3\]\]$/); WorkflowPage.getters.expressionModalInput().clear(); - WorkflowPage.getters.expressionModalInput().type('{{'); - WorkflowPage.getters.expressionModalInput().type('[1, 2, 3][0]'); + WorkflowPage.getters.expressionModalInput().type('{{ [1, 2, 3][0]'); WorkflowPage.getters.expressionModalOutput().contains(/^1$/); }); it('should resolve $parameter[]', () => { - WorkflowPage.getters.expressionModalInput().type('{{'); - WorkflowPage.getters.expressionModalInput().type('$parameter["operation"]'); + WorkflowPage.getters.expressionModalInput().type('{{ $parameter["operation"]'); WorkflowPage.getters.expressionModalOutput().contains(/^get$/); }); }); diff --git a/packages/cli/BREAKING-CHANGES.md b/packages/cli/BREAKING-CHANGES.md index d762f824da..624ddacb42 100644 --- a/packages/cli/BREAKING-CHANGES.md +++ b/packages/cli/BREAKING-CHANGES.md @@ -2,6 +2,16 @@ This list shows all the versions which include breaking changes and how to upgrade. +## 0.214.0 + +### What changed? + +Invalid Luxon datetimes no longer resolve to `null`. Now they throw the error `invalid DateTime`. + +### When is action necessary? + +If you are relying on the above behavior, review your workflow to ensure you handle invalid Luxon datetimes. + ## 0.202.0 ### What changed? diff --git a/packages/editor-ui/package.json b/packages/editor-ui/package.json index 2a0d066bf3..0caf329d6c 100644 --- a/packages/editor-ui/package.json +++ b/packages/editor-ui/package.json @@ -46,7 +46,7 @@ "@jsplumb/util": "^5.13.2", "axios": "^0.21.1", "codemirror-lang-html-n8n": "^1.0.0", - "codemirror-lang-n8n-expression": "^0.1.0", + "codemirror-lang-n8n-expression": "^0.2.0", "dateformat": "^3.0.3", "esprima-next": "5.8.4", "fast-json-stable-stringify": "^2.1.0", diff --git a/packages/editor-ui/src/components/ExpressionEdit.vue b/packages/editor-ui/src/components/ExpressionEdit.vue index 2baf3f9900..32daae6fda 100644 --- a/packages/editor-ui/src/components/ExpressionEdit.vue +++ b/packages/editor-ui/src/components/ExpressionEdit.vue @@ -46,6 +46,7 @@ -
+