n8n-workflow 2.31.3 → 2.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/augment-object.js +136 -146
- package/dist/cjs/augment-object.js.map +1 -1
- package/dist/cjs/build.tsbuildinfo +1 -1
- package/dist/cjs/common/find-ai-root-node-names.js +36 -46
- package/dist/cjs/common/find-ai-root-node-names.js.map +1 -1
- package/dist/cjs/common/get-child-nodes.js +8 -18
- package/dist/cjs/common/get-child-nodes.js.map +1 -1
- package/dist/cjs/common/get-connected-nodes.js +84 -94
- package/dist/cjs/common/get-connected-nodes.js.map +1 -1
- package/dist/cjs/common/get-node-by-name.js +16 -26
- package/dist/cjs/common/get-node-by-name.js.map +1 -1
- package/dist/cjs/common/get-parent-nodes.js +14 -24
- package/dist/cjs/common/get-parent-nodes.js.map +1 -1
- package/dist/cjs/common/index.js +9 -19
- package/dist/cjs/common/index.js.map +1 -1
- package/dist/cjs/common/map-connections-by-destination.js +31 -41
- package/dist/cjs/common/map-connections-by-destination.js.map +1 -1
- package/dist/cjs/common/resolve-variables.d.ts +8 -0
- package/dist/cjs/common/resolve-variables.d.ts.map +1 -1
- package/dist/cjs/common/resolve-variables.js +46 -33
- package/dist/cjs/common/resolve-variables.js.map +1 -1
- package/dist/cjs/connections-diff.js +58 -68
- package/dist/cjs/connections-diff.js.map +1 -1
- package/dist/cjs/constants.d.ts +3 -3
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/constants.js +157 -166
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/credential-domain-restrictions.js +153 -163
- package/dist/cjs/credential-domain-restrictions.js.map +1 -1
- package/dist/cjs/cron.d.ts.map +1 -1
- package/dist/cjs/cron.js +25 -35
- package/dist/cjs/cron.js.map +1 -1
- package/dist/cjs/data-table.types.js +10 -20
- package/dist/cjs/data-table.types.js.map +1 -1
- package/dist/cjs/dynamic-credentials-helpers.js +93 -103
- package/dist/cjs/dynamic-credentials-helpers.js.map +1 -1
- package/dist/cjs/errors/abstract/execution-base.error.d.ts.map +1 -1
- package/dist/cjs/errors/abstract/execution-base.error.js +41 -51
- package/dist/cjs/errors/abstract/execution-base.error.js.map +1 -1
- package/dist/cjs/errors/abstract/node.error.d.ts.map +1 -1
- package/dist/cjs/errors/abstract/node.error.js +142 -152
- package/dist/cjs/errors/abstract/node.error.js.map +1 -1
- package/dist/cjs/errors/base/base.error.d.ts.map +1 -1
- package/dist/cjs/errors/base/base.error.js +35 -45
- package/dist/cjs/errors/base/base.error.js.map +1 -1
- package/dist/cjs/errors/base/operational.error.d.ts.map +1 -1
- package/dist/cjs/errors/base/operational.error.js +17 -27
- package/dist/cjs/errors/base/operational.error.js.map +1 -1
- package/dist/cjs/errors/base/unexpected.error.d.ts.map +1 -1
- package/dist/cjs/errors/base/unexpected.error.js +17 -27
- package/dist/cjs/errors/base/unexpected.error.js.map +1 -1
- package/dist/cjs/errors/base/user.error.d.ts.map +1 -1
- package/dist/cjs/errors/base/user.error.js +17 -27
- package/dist/cjs/errors/base/user.error.js.map +1 -1
- package/dist/cjs/errors/cli-subworkflow-operation.error.js +7 -17
- package/dist/cjs/errors/cli-subworkflow-operation.error.js.map +1 -1
- package/dist/cjs/errors/db-connection-timeout-error.d.ts.map +1 -1
- package/dist/cjs/errors/db-connection-timeout-error.js +11 -21
- package/dist/cjs/errors/db-connection-timeout-error.js.map +1 -1
- package/dist/cjs/errors/execution-cancelled.error.d.ts.map +1 -1
- package/dist/cjs/errors/execution-cancelled.error.js +33 -43
- package/dist/cjs/errors/execution-cancelled.error.js.map +1 -1
- package/dist/cjs/errors/expression-class-extension.error.d.ts.map +1 -1
- package/dist/cjs/errors/expression-class-extension.error.js +9 -19
- package/dist/cjs/errors/expression-class-extension.error.js.map +1 -1
- package/dist/cjs/errors/expression-computed-destructuring.error.d.ts.map +1 -1
- package/dist/cjs/errors/expression-computed-destructuring.error.js +9 -19
- package/dist/cjs/errors/expression-computed-destructuring.error.js.map +1 -1
- package/dist/cjs/errors/expression-destructuring.error.d.ts.map +1 -1
- package/dist/cjs/errors/expression-destructuring.error.js +9 -19
- package/dist/cjs/errors/expression-destructuring.error.js.map +1 -1
- package/dist/cjs/errors/expression-extension.error.js +7 -17
- package/dist/cjs/errors/expression-extension.error.js.map +1 -1
- package/dist/cjs/errors/expression-reserved-variable.error.d.ts.map +1 -1
- package/dist/cjs/errors/expression-reserved-variable.error.js +9 -19
- package/dist/cjs/errors/expression-reserved-variable.error.js.map +1 -1
- package/dist/cjs/errors/expression-with-statement.error.d.ts.map +1 -1
- package/dist/cjs/errors/expression-with-statement.error.js +9 -19
- package/dist/cjs/errors/expression-with-statement.error.js.map +1 -1
- package/dist/cjs/errors/expression.error.d.ts.map +1 -1
- package/dist/cjs/errors/expression.error.js +33 -43
- package/dist/cjs/errors/expression.error.js.map +1 -1
- package/dist/cjs/errors/index.js +62 -72
- package/dist/cjs/errors/index.js.map +1 -1
- package/dist/cjs/errors/node-api.error.d.ts.map +1 -1
- package/dist/cjs/errors/node-api.error.js +227 -237
- package/dist/cjs/errors/node-api.error.js.map +1 -1
- package/dist/cjs/errors/node-operation.error.d.ts.map +1 -1
- package/dist/cjs/errors/node-operation.error.js +43 -53
- package/dist/cjs/errors/node-operation.error.js.map +1 -1
- package/dist/cjs/errors/node-ssl.error.d.ts.map +1 -1
- package/dist/cjs/errors/node-ssl.error.js +9 -19
- package/dist/cjs/errors/node-ssl.error.js.map +1 -1
- package/dist/cjs/errors/subworkflow-operation.error.d.ts.map +1 -1
- package/dist/cjs/errors/subworkflow-operation.error.js +18 -28
- package/dist/cjs/errors/subworkflow-operation.error.js.map +1 -1
- package/dist/cjs/errors/trigger-close.error.d.ts.map +1 -1
- package/dist/cjs/errors/trigger-close.error.js +11 -21
- package/dist/cjs/errors/trigger-close.error.js.map +1 -1
- package/dist/cjs/errors/webhook-taken.error.d.ts.map +1 -1
- package/dist/cjs/errors/webhook-taken.error.js +9 -19
- package/dist/cjs/errors/webhook-taken.error.js.map +1 -1
- package/dist/cjs/errors/workflow-activation.error.d.ts.map +1 -1
- package/dist/cjs/errors/workflow-activation.error.js +54 -64
- package/dist/cjs/errors/workflow-activation.error.js.map +1 -1
- package/dist/cjs/errors/workflow-configuration.error.js +10 -20
- package/dist/cjs/errors/workflow-configuration.error.js.map +1 -1
- package/dist/cjs/errors/workflow-deactivation.error.js +7 -17
- package/dist/cjs/errors/workflow-deactivation.error.js.map +1 -1
- package/dist/cjs/errors/workflow-operation.error.d.ts.map +1 -1
- package/dist/cjs/errors/workflow-operation.error.js +20 -30
- package/dist/cjs/errors/workflow-operation.error.js.map +1 -1
- package/dist/cjs/evaluation-helpers.js +16 -26
- package/dist/cjs/evaluation-helpers.js.map +1 -1
- package/dist/cjs/execution-context-establishment-hooks.d.ts.map +1 -1
- package/dist/cjs/execution-context-establishment-hooks.js +43 -53
- package/dist/cjs/execution-context-establishment-hooks.js.map +1 -1
- package/dist/cjs/execution-context.d.ts +14 -14
- package/dist/cjs/execution-context.d.ts.map +1 -1
- package/dist/cjs/execution-context.js +203 -213
- package/dist/cjs/execution-context.js.map +1 -1
- package/dist/cjs/execution-status.d.ts +2 -2
- package/dist/cjs/execution-status.d.ts.map +1 -1
- package/dist/cjs/execution-status.js +27 -37
- package/dist/cjs/execution-status.js.map +1 -1
- package/dist/cjs/expression-evaluator-proxy.d.ts.map +1 -1
- package/dist/cjs/expression-evaluator-proxy.js +18 -28
- package/dist/cjs/expression-evaluator-proxy.js.map +1 -1
- package/dist/cjs/expression-sandboxing.d.ts.map +1 -1
- package/dist/cjs/expression-sandboxing.js +447 -457
- package/dist/cjs/expression-sandboxing.js.map +1 -1
- package/dist/cjs/expression.d.ts.map +1 -1
- package/dist/cjs/expression.js +535 -546
- package/dist/cjs/expression.js.map +1 -1
- package/dist/cjs/expressions/expression-helpers.d.ts.map +1 -1
- package/dist/cjs/expressions/expression-helpers.js +13 -23
- package/dist/cjs/expressions/expression-helpers.js.map +1 -1
- package/dist/cjs/extensions/array-extensions.js +591 -601
- package/dist/cjs/extensions/array-extensions.js.map +1 -1
- package/dist/cjs/extensions/boolean-extensions.d.ts +1 -1
- package/dist/cjs/extensions/boolean-extensions.js +38 -48
- package/dist/cjs/extensions/boolean-extensions.js.map +1 -1
- package/dist/cjs/extensions/date-extensions.js +507 -517
- package/dist/cjs/extensions/date-extensions.js.map +1 -1
- package/dist/cjs/extensions/expression-extension.d.ts.map +1 -1
- package/dist/cjs/extensions/expression-extension.js +455 -465
- package/dist/cjs/extensions/expression-extension.js.map +1 -1
- package/dist/cjs/extensions/expression-parser.d.ts.map +1 -1
- package/dist/cjs/extensions/expression-parser.js +82 -92
- package/dist/cjs/extensions/expression-parser.js.map +1 -1
- package/dist/cjs/extensions/extended-functions.d.ts +10 -18
- package/dist/cjs/extensions/extended-functions.d.ts.map +1 -1
- package/dist/cjs/extensions/extended-functions.js +80 -90
- package/dist/cjs/extensions/extended-functions.js.map +1 -1
- package/dist/cjs/extensions/extensions.js +2 -12
- package/dist/cjs/extensions/index.js +10 -20
- package/dist/cjs/extensions/index.js.map +1 -1
- package/dist/cjs/extensions/number-extensions.js +226 -236
- package/dist/cjs/extensions/number-extensions.js.map +1 -1
- package/dist/cjs/extensions/object-extensions.js +274 -284
- package/dist/cjs/extensions/object-extensions.js.map +1 -1
- package/dist/cjs/extensions/string-extensions.d.ts +1 -1
- package/dist/cjs/extensions/string-extensions.d.ts.map +1 -1
- package/dist/cjs/extensions/string-extensions.js +769 -779
- package/dist/cjs/extensions/string-extensions.js.map +1 -1
- package/dist/cjs/extensions/utils.d.ts.map +1 -1
- package/dist/cjs/extensions/utils.js +35 -45
- package/dist/cjs/extensions/utils.js.map +1 -1
- package/dist/cjs/from-ai-parse-utils.js +393 -403
- package/dist/cjs/from-ai-parse-utils.js.map +1 -1
- package/dist/cjs/global-state.js +12 -22
- package/dist/cjs/global-state.js.map +1 -1
- package/dist/cjs/graph/graph-utils.js +166 -176
- package/dist/cjs/graph/graph-utils.js.map +1 -1
- package/dist/cjs/highlighted-data.js +13 -23
- package/dist/cjs/highlighted-data.js.map +1 -1
- package/dist/cjs/index.js +105 -115
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces.d.ts +112 -22
- package/dist/cjs/interfaces.d.ts.map +1 -1
- package/dist/cjs/interfaces.js +62 -72
- package/dist/cjs/interfaces.js.map +1 -1
- package/dist/cjs/jmespath-query.js +26 -36
- package/dist/cjs/jmespath-query.js.map +1 -1
- package/dist/cjs/logger-proxy.d.ts.map +1 -1
- package/dist/cjs/logger-proxy.js +15 -25
- package/dist/cjs/logger-proxy.js.map +1 -1
- package/dist/cjs/mcp-helpers.js +10 -20
- package/dist/cjs/mcp-helpers.js.map +1 -1
- package/dist/cjs/message-event-bus.d.ts +184 -165
- package/dist/cjs/message-event-bus.d.ts.map +1 -1
- package/dist/cjs/message-event-bus.js +207 -217
- package/dist/cjs/message-event-bus.js.map +1 -1
- package/dist/cjs/metadata-utils.js +35 -45
- package/dist/cjs/metadata-utils.js.map +1 -1
- package/dist/cjs/native-methods/array.methods.js +527 -537
- package/dist/cjs/native-methods/array.methods.js.map +1 -1
- package/dist/cjs/native-methods/boolean.methods.js +18 -28
- package/dist/cjs/native-methods/boolean.methods.js.map +1 -1
- package/dist/cjs/native-methods/index.js +16 -26
- package/dist/cjs/native-methods/index.js.map +1 -1
- package/dist/cjs/native-methods/number.methods.js +79 -89
- package/dist/cjs/native-methods/number.methods.js.map +1 -1
- package/dist/cjs/native-methods/object.methods.js +7 -17
- package/dist/cjs/native-methods/object.methods.js.map +1 -1
- package/dist/cjs/native-methods/string.methods.js +474 -484
- package/dist/cjs/native-methods/string.methods.js.map +1 -1
- package/dist/cjs/node-grouping-validation.d.ts +6 -0
- package/dist/cjs/node-grouping-validation.d.ts.map +1 -1
- package/dist/cjs/node-grouping-validation.js +165 -144
- package/dist/cjs/node-grouping-validation.js.map +1 -1
- package/dist/cjs/node-helpers.d.ts.map +1 -1
- package/dist/cjs/node-helpers.js +1486 -1493
- package/dist/cjs/node-helpers.js.map +1 -1
- package/dist/cjs/node-parameters/filter-parameter.d.ts.map +1 -1
- package/dist/cjs/node-parameters/filter-parameter.js +315 -325
- package/dist/cjs/node-parameters/filter-parameter.js.map +1 -1
- package/dist/cjs/node-parameters/node-parameter-value-type-guard.js +105 -115
- package/dist/cjs/node-parameters/node-parameter-value-type-guard.js.map +1 -1
- package/dist/cjs/node-parameters/parameter-type-validation.js +120 -130
- package/dist/cjs/node-parameters/parameter-type-validation.js.map +1 -1
- package/dist/cjs/node-parameters/path-utils.js +21 -31
- package/dist/cjs/node-parameters/path-utils.js.map +1 -1
- package/dist/cjs/node-parameters/rename-node-utils.js +22 -32
- package/dist/cjs/node-parameters/rename-node-utils.js.map +1 -1
- package/dist/cjs/node-reference-parser-utils.js +472 -482
- package/dist/cjs/node-reference-parser-utils.js.map +1 -1
- package/dist/cjs/node-validation.js +59 -69
- package/dist/cjs/node-validation.js.map +1 -1
- package/dist/cjs/observable-object.js +56 -66
- package/dist/cjs/observable-object.js.map +1 -1
- package/dist/cjs/redaction-channels.js +36 -46
- package/dist/cjs/redaction-channels.js.map +1 -1
- package/dist/cjs/run-execution-data/run-execution-data.js +15 -25
- package/dist/cjs/run-execution-data/run-execution-data.js.map +1 -1
- package/dist/cjs/run-execution-data/run-execution-data.v0.js +2 -12
- package/dist/cjs/run-execution-data/run-execution-data.v1.js +26 -36
- package/dist/cjs/run-execution-data/run-execution-data.v1.js.map +1 -1
- package/dist/cjs/run-execution-data-factory.js +113 -123
- package/dist/cjs/run-execution-data-factory.js.map +1 -1
- package/dist/cjs/schemas.d.ts +13 -13
- package/dist/cjs/schemas.d.ts.map +1 -1
- package/dist/cjs/schemas.js +351 -360
- package/dist/cjs/schemas.js.map +1 -1
- package/dist/cjs/sub-workflow-output.js +10 -20
- package/dist/cjs/sub-workflow-output.js.map +1 -1
- package/dist/cjs/telemetry-helpers.d.ts.map +1 -1
- package/dist/cjs/telemetry-helpers.js +716 -726
- package/dist/cjs/telemetry-helpers.js.map +1 -1
- package/dist/cjs/tool-helpers.js +18 -28
- package/dist/cjs/tool-helpers.js.map +1 -1
- package/dist/cjs/trigger-identity.js +41 -51
- package/dist/cjs/trigger-identity.js.map +1 -1
- package/dist/cjs/trimmed-task-data.js +21 -31
- package/dist/cjs/trimmed-task-data.js.map +1 -1
- package/dist/cjs/type-guards.d.ts +3 -3
- package/dist/cjs/type-guards.d.ts.map +1 -1
- package/dist/cjs/type-guards.js +74 -84
- package/dist/cjs/type-guards.js.map +1 -1
- package/dist/cjs/type-validation.d.ts.map +1 -1
- package/dist/cjs/type-validation.js +383 -393
- package/dist/cjs/type-validation.js.map +1 -1
- package/dist/cjs/utils.d.ts +2 -2
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +430 -440
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/versioned-node-type.d.ts.map +1 -1
- package/dist/cjs/versioned-node-type.js +20 -30
- package/dist/cjs/versioned-node-type.js.map +1 -1
- package/dist/cjs/workflow-checksum.js +67 -77
- package/dist/cjs/workflow-checksum.js.map +1 -1
- package/dist/cjs/workflow-data-proxy-env-provider.js +58 -68
- package/dist/cjs/workflow-data-proxy-env-provider.js.map +1 -1
- package/dist/cjs/workflow-data-proxy-helpers.js +8 -18
- package/dist/cjs/workflow-data-proxy-helpers.js.map +1 -1
- package/dist/cjs/workflow-data-proxy.d.ts.map +1 -1
- package/dist/cjs/workflow-data-proxy.js +1162 -1172
- package/dist/cjs/workflow-data-proxy.js.map +1 -1
- package/dist/cjs/workflow-diff.d.ts +2 -1
- package/dist/cjs/workflow-diff.d.ts.map +1 -1
- package/dist/cjs/workflow-diff.js +292 -300
- package/dist/cjs/workflow-diff.js.map +1 -1
- package/dist/cjs/workflow-environments-helper.js +23 -33
- package/dist/cjs/workflow-environments-helper.js.map +1 -1
- package/dist/cjs/workflow-expression.d.ts.map +1 -1
- package/dist/cjs/workflow-expression.js +97 -107
- package/dist/cjs/workflow-expression.js.map +1 -1
- package/dist/cjs/workflow-structure-validation.d.ts.map +1 -1
- package/dist/cjs/workflow-structure-validation.js +140 -150
- package/dist/cjs/workflow-structure-validation.js.map +1 -1
- package/dist/cjs/workflow-validation.js +40 -50
- package/dist/cjs/workflow-validation.js.map +1 -1
- package/dist/cjs/workflow.d.ts.map +1 -1
- package/dist/cjs/workflow.js +612 -622
- package/dist/cjs/workflow.js.map +1 -1
- package/dist/esm/common/get-child-nodes.js.map +1 -1
- package/dist/esm/common/get-connected-nodes.js.map +1 -1
- package/dist/esm/common/get-parent-nodes.js.map +1 -1
- package/dist/esm/common/resolve-variables.d.ts +8 -0
- package/dist/esm/common/resolve-variables.d.ts.map +1 -1
- package/dist/esm/common/resolve-variables.js +22 -0
- package/dist/esm/common/resolve-variables.js.map +1 -1
- package/dist/esm/constants.d.ts +3 -3
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/cron.d.ts.map +1 -1
- package/dist/esm/errors/abstract/execution-base.error.d.ts.map +1 -1
- package/dist/esm/errors/abstract/execution-base.error.js.map +1 -1
- package/dist/esm/errors/abstract/node.error.d.ts.map +1 -1
- package/dist/esm/errors/abstract/node.error.js.map +1 -1
- package/dist/esm/errors/base/base.error.d.ts.map +1 -1
- package/dist/esm/errors/base/base.error.js.map +1 -1
- package/dist/esm/errors/base/operational.error.d.ts.map +1 -1
- package/dist/esm/errors/base/operational.error.js.map +1 -1
- package/dist/esm/errors/base/unexpected.error.d.ts.map +1 -1
- package/dist/esm/errors/base/unexpected.error.js.map +1 -1
- package/dist/esm/errors/base/user.error.d.ts.map +1 -1
- package/dist/esm/errors/base/user.error.js.map +1 -1
- package/dist/esm/errors/db-connection-timeout-error.d.ts.map +1 -1
- package/dist/esm/errors/execution-cancelled.error.d.ts.map +1 -1
- package/dist/esm/errors/expression-class-extension.error.d.ts.map +1 -1
- package/dist/esm/errors/expression-computed-destructuring.error.d.ts.map +1 -1
- package/dist/esm/errors/expression-destructuring.error.d.ts.map +1 -1
- package/dist/esm/errors/expression-reserved-variable.error.d.ts.map +1 -1
- package/dist/esm/errors/expression-with-statement.error.d.ts.map +1 -1
- package/dist/esm/errors/expression.error.d.ts.map +1 -1
- package/dist/esm/errors/node-api.error.d.ts.map +1 -1
- package/dist/esm/errors/node-api.error.js.map +1 -1
- package/dist/esm/errors/node-operation.error.d.ts.map +1 -1
- package/dist/esm/errors/node-operation.error.js.map +1 -1
- package/dist/esm/errors/node-ssl.error.d.ts.map +1 -1
- package/dist/esm/errors/subworkflow-operation.error.d.ts.map +1 -1
- package/dist/esm/errors/trigger-close.error.d.ts.map +1 -1
- package/dist/esm/errors/trigger-close.error.js.map +1 -1
- package/dist/esm/errors/webhook-taken.error.d.ts.map +1 -1
- package/dist/esm/errors/workflow-activation.error.d.ts.map +1 -1
- package/dist/esm/errors/workflow-activation.error.js.map +1 -1
- package/dist/esm/errors/workflow-operation.error.d.ts.map +1 -1
- package/dist/esm/execution-context-establishment-hooks.d.ts.map +1 -1
- package/dist/esm/execution-context.d.ts +14 -14
- package/dist/esm/execution-context.d.ts.map +1 -1
- package/dist/esm/execution-status.d.ts +2 -2
- package/dist/esm/execution-status.d.ts.map +1 -1
- package/dist/esm/expression-evaluator-proxy.d.ts.map +1 -1
- package/dist/esm/expression-sandboxing.d.ts.map +1 -1
- package/dist/esm/expression-sandboxing.js.map +1 -1
- package/dist/esm/expression.d.ts.map +1 -1
- package/dist/esm/expression.js.map +1 -1
- package/dist/esm/expressions/expression-helpers.d.ts.map +1 -1
- package/dist/esm/extensions/boolean-extensions.d.ts +1 -1
- package/dist/esm/extensions/expression-extension.d.ts.map +1 -1
- package/dist/esm/extensions/expression-parser.d.ts.map +1 -1
- package/dist/esm/extensions/extended-functions.d.ts +10 -18
- package/dist/esm/extensions/extended-functions.d.ts.map +1 -1
- package/dist/esm/extensions/number-extensions.js.map +1 -1
- package/dist/esm/extensions/string-extensions.d.ts +1 -1
- package/dist/esm/extensions/string-extensions.d.ts.map +1 -1
- package/dist/esm/extensions/string-extensions.js.map +1 -1
- package/dist/esm/extensions/utils.d.ts.map +1 -1
- package/dist/esm/from-ai-parse-utils.js.map +1 -1
- package/dist/esm/interfaces.d.ts +112 -22
- package/dist/esm/interfaces.d.ts.map +1 -1
- package/dist/esm/interfaces.js.map +1 -1
- package/dist/esm/logger-proxy.d.ts.map +1 -1
- package/dist/esm/message-event-bus.d.ts +184 -165
- package/dist/esm/message-event-bus.d.ts.map +1 -1
- package/dist/esm/message-event-bus.js +2 -2
- package/dist/esm/message-event-bus.js.map +1 -1
- package/dist/esm/node-grouping-validation.d.ts +6 -0
- package/dist/esm/node-grouping-validation.d.ts.map +1 -1
- package/dist/esm/node-grouping-validation.js +34 -5
- package/dist/esm/node-grouping-validation.js.map +1 -1
- package/dist/esm/node-helpers.d.ts.map +1 -1
- package/dist/esm/node-helpers.js +3 -0
- package/dist/esm/node-helpers.js.map +1 -1
- package/dist/esm/node-parameters/filter-parameter.d.ts.map +1 -1
- package/dist/esm/node-parameters/filter-parameter.js.map +1 -1
- package/dist/esm/node-reference-parser-utils.js.map +1 -1
- package/dist/esm/run-execution-data-factory.js.map +1 -1
- package/dist/esm/schemas.d.ts +13 -13
- package/dist/esm/schemas.d.ts.map +1 -1
- package/dist/esm/schemas.js +1 -0
- package/dist/esm/schemas.js.map +1 -1
- package/dist/esm/telemetry-helpers.d.ts.map +1 -1
- package/dist/esm/telemetry-helpers.js.map +1 -1
- package/dist/esm/type-guards.d.ts +3 -3
- package/dist/esm/type-guards.d.ts.map +1 -1
- package/dist/esm/type-validation.d.ts.map +1 -1
- package/dist/esm/type-validation.js.map +1 -1
- package/dist/esm/typecheck.tsbuildinfo +1 -1
- package/dist/esm/utils.d.ts +2 -2
- package/dist/esm/utils.d.ts.map +1 -1
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/versioned-node-type.d.ts.map +1 -1
- package/dist/esm/workflow-data-proxy.d.ts.map +1 -1
- package/dist/esm/workflow-data-proxy.js.map +1 -1
- package/dist/esm/workflow-diff.d.ts +2 -1
- package/dist/esm/workflow-diff.d.ts.map +1 -1
- package/dist/esm/workflow-diff.js +3 -1
- package/dist/esm/workflow-diff.js.map +1 -1
- package/dist/esm/workflow-expression.d.ts.map +1 -1
- package/dist/esm/workflow-expression.js.map +1 -1
- package/dist/esm/workflow-structure-validation.d.ts.map +1 -1
- package/dist/esm/workflow-structure-validation.js.map +1 -1
- package/dist/esm/workflow.d.ts.map +1 -1
- package/dist/esm/workflow.js.map +1 -1
- package/package.json +9 -8
|
@@ -1,340 +1,332 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
2
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
3
4
|
};
|
|
4
|
-
(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return acc;
|
|
44
|
-
}, new Map());
|
|
45
|
-
const targetNodes = target.reduce((acc, node) => {
|
|
46
|
-
acc.set(node.id, node);
|
|
47
|
-
return acc;
|
|
48
|
-
}, new Map());
|
|
49
|
-
const diff = new Map();
|
|
50
|
-
for (const [id, node] of baseNodes.entries()) {
|
|
51
|
-
if (!targetNodes.has(id)) {
|
|
52
|
-
diff.set(id, { status: NodeDiffStatus.Deleted, node });
|
|
53
|
-
}
|
|
54
|
-
else if (!nodesEqual(baseNodes.get(id), targetNodes.get(id))) {
|
|
55
|
-
diff.set(id, { status: NodeDiffStatus.Modified, node });
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
diff.set(id, { status: NodeDiffStatus.Eq, node });
|
|
59
|
-
}
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SKIP_RULES = exports.RULES = exports.WorkflowChangeSet = exports.NodeDiffStatus = void 0;
|
|
7
|
+
exports.compareNodes = compareNodes;
|
|
8
|
+
exports.compareWorkflowsNodes = compareWorkflowsNodes;
|
|
9
|
+
exports.stringContainsParts = stringContainsParts;
|
|
10
|
+
exports.parametersAreSuperset = parametersAreSuperset;
|
|
11
|
+
exports.determineNodeSize = determineNodeSize;
|
|
12
|
+
exports.groupWorkflows = groupWorkflows;
|
|
13
|
+
exports.hasNonPositionalChanges = hasNonPositionalChanges;
|
|
14
|
+
exports.hasCredentialChanges = hasCredentialChanges;
|
|
15
|
+
const isEqual_1 = __importDefault(require("lodash/isEqual"));
|
|
16
|
+
const pick_1 = __importDefault(require("lodash/pick"));
|
|
17
|
+
const connections_diff_1 = require("./connections-diff");
|
|
18
|
+
var NodeDiffStatus;
|
|
19
|
+
(function (NodeDiffStatus) {
|
|
20
|
+
NodeDiffStatus["Eq"] = "equal";
|
|
21
|
+
NodeDiffStatus["Modified"] = "modified";
|
|
22
|
+
NodeDiffStatus["Added"] = "added";
|
|
23
|
+
NodeDiffStatus["Deleted"] = "deleted";
|
|
24
|
+
})(NodeDiffStatus || (exports.NodeDiffStatus = NodeDiffStatus = {}));
|
|
25
|
+
function compareNodes(base, target) {
|
|
26
|
+
const propsToCompare = ['name', 'type', 'typeVersion', 'webhookId', 'credentials', 'parameters'];
|
|
27
|
+
const baseNode = (0, pick_1.default)(base, propsToCompare);
|
|
28
|
+
const targetNode = (0, pick_1.default)(target, propsToCompare);
|
|
29
|
+
return (0, isEqual_1.default)(baseNode, targetNode);
|
|
30
|
+
}
|
|
31
|
+
function compareWorkflowsNodes(base, target, nodesEqual = compareNodes) {
|
|
32
|
+
const baseNodes = base.reduce((acc, node) => {
|
|
33
|
+
acc.set(node.id, node);
|
|
34
|
+
return acc;
|
|
35
|
+
}, new Map());
|
|
36
|
+
const targetNodes = target.reduce((acc, node) => {
|
|
37
|
+
acc.set(node.id, node);
|
|
38
|
+
return acc;
|
|
39
|
+
}, new Map());
|
|
40
|
+
const diff = new Map();
|
|
41
|
+
for (const [id, node] of baseNodes.entries()) {
|
|
42
|
+
if (!targetNodes.has(id)) {
|
|
43
|
+
diff.set(id, { status: NodeDiffStatus.Deleted, node });
|
|
60
44
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
diff.set(id, { status: NodeDiffStatus.Added, node });
|
|
64
|
-
}
|
|
45
|
+
else if (!nodesEqual(baseNodes.get(id), targetNodes.get(id))) {
|
|
46
|
+
diff.set(id, { status: NodeDiffStatus.Modified, node });
|
|
65
47
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
class WorkflowChangeSet {
|
|
69
|
-
nodes;
|
|
70
|
-
connections;
|
|
71
|
-
constructor(from, to) {
|
|
72
|
-
if (from === to) {
|
|
73
|
-
// avoid expensive deep comparison
|
|
74
|
-
this.nodes = new Map(from.nodes.map((node) => [node.id, { node, status: NodeDiffStatus.Eq }]));
|
|
75
|
-
this.connections = { added: {}, removed: {} };
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
this.nodes = compareWorkflowsNodes(from.nodes, to.nodes);
|
|
79
|
-
this.connections = (0, connections_diff_1.compareConnections)(from.connections, to.connections);
|
|
80
|
-
}
|
|
48
|
+
else {
|
|
49
|
+
diff.set(id, { status: NodeDiffStatus.Eq, node });
|
|
81
50
|
}
|
|
82
51
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
* e.g. s='abcde'
|
|
87
|
-
* substr:
|
|
88
|
-
* 'abde' -> true
|
|
89
|
-
* 'abcd' -> false
|
|
90
|
-
* 'abced' -> false
|
|
91
|
-
*/
|
|
92
|
-
function stringContainsParts(s, substr) {
|
|
93
|
-
if (substr.length > s.length)
|
|
94
|
-
return false;
|
|
95
|
-
const diffSize = s.length - substr.length;
|
|
96
|
-
let marker = 0;
|
|
97
|
-
for (let i = 0; i < s.length; ++i) {
|
|
98
|
-
if (substr[marker] === s[i])
|
|
99
|
-
marker++;
|
|
100
|
-
if (i - marker > diffSize)
|
|
101
|
-
return false;
|
|
52
|
+
for (const [id, node] of targetNodes.entries()) {
|
|
53
|
+
if (!baseNodes.has(id)) {
|
|
54
|
+
diff.set(id, { status: NodeDiffStatus.Added, node });
|
|
102
55
|
}
|
|
103
|
-
return marker >= substr.length;
|
|
104
56
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
57
|
+
return diff;
|
|
58
|
+
}
|
|
59
|
+
class WorkflowChangeSet {
|
|
60
|
+
nodes;
|
|
61
|
+
connections;
|
|
62
|
+
constructor(from, to) {
|
|
63
|
+
if (from === to) {
|
|
64
|
+
// avoid expensive deep comparison
|
|
65
|
+
this.nodes = new Map(from.nodes.map((node) => [node.id, { node, status: NodeDiffStatus.Eq }]));
|
|
66
|
+
this.connections = { added: {}, removed: {} };
|
|
114
67
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (prev.length !== next.length)
|
|
119
|
-
return false;
|
|
120
|
-
return prev.every((v, i) => parametersAreSuperset(v, next[i]));
|
|
68
|
+
else {
|
|
69
|
+
this.nodes = compareWorkflowsNodes(from.nodes, to.nodes);
|
|
70
|
+
this.connections = (0, connections_diff_1.compareConnections)(from.connections, to.connections);
|
|
121
71
|
}
|
|
122
|
-
const params = Object.keys(prev);
|
|
123
|
-
if (params.length !== Object.keys(next).length)
|
|
124
|
-
return false;
|
|
125
|
-
// abort if keys differ
|
|
126
|
-
if (params.some((x) => !Object.prototype.hasOwnProperty.call(next, x)))
|
|
127
|
-
return false;
|
|
128
|
-
return params.every((key) => parametersAreSuperset(prev[key], next[key]));
|
|
129
72
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
73
|
+
}
|
|
74
|
+
exports.WorkflowChangeSet = WorkflowChangeSet;
|
|
75
|
+
/**
|
|
76
|
+
* Returns true if `s` contains all characters of `substr` in order
|
|
77
|
+
* e.g. s='abcde'
|
|
78
|
+
* substr:
|
|
79
|
+
* 'abde' -> true
|
|
80
|
+
* 'abcd' -> false
|
|
81
|
+
* 'abced' -> false
|
|
82
|
+
*/
|
|
83
|
+
function stringContainsParts(s, substr) {
|
|
84
|
+
if (substr.length > s.length)
|
|
85
|
+
return false;
|
|
86
|
+
const diffSize = s.length - substr.length;
|
|
87
|
+
let marker = 0;
|
|
88
|
+
for (let i = 0; i < s.length; ++i) {
|
|
89
|
+
if (substr[marker] === s[i])
|
|
90
|
+
marker++;
|
|
91
|
+
if (i - marker > diffSize)
|
|
143
92
|
return false;
|
|
144
|
-
return parametersAreSuperset(prevParams, nextParams);
|
|
145
93
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
const nextNodeIds = new Set(nextGroup.nodeIds);
|
|
158
|
-
if (!prevGroup.nodeIds.every((id) => nextNodeIds.has(id))) {
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
94
|
+
return marker >= substr.length;
|
|
95
|
+
}
|
|
96
|
+
function parametersAreSuperset(prev, next) {
|
|
97
|
+
if (typeof prev !== typeof next)
|
|
98
|
+
return false;
|
|
99
|
+
if (typeof prev !== 'object' || !prev || !next) {
|
|
100
|
+
if (typeof prev === 'string') {
|
|
101
|
+
// We assert above that these are the same type
|
|
102
|
+
return stringContainsParts(next, prev);
|
|
161
103
|
}
|
|
162
|
-
return
|
|
104
|
+
return prev === next;
|
|
163
105
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (d.status === NodeDiffStatus.Deleted)
|
|
167
|
-
return false;
|
|
168
|
-
if (d.status === NodeDiffStatus.Added)
|
|
169
|
-
continue;
|
|
170
|
-
const nextNode = next.nodes.find((x) => x.id === d.node.id);
|
|
171
|
-
if (!nextNode)
|
|
172
|
-
throw new Error('invariant broken - no next node');
|
|
173
|
-
if (d.status === NodeDiffStatus.Modified && !nodeIsSuperset(d.node, nextNode))
|
|
174
|
-
return false;
|
|
175
|
-
}
|
|
176
|
-
if (Object.keys(diff.connections.removed).length > 0)
|
|
106
|
+
if (Array.isArray(prev)) {
|
|
107
|
+
if (!Array.isArray(next))
|
|
177
108
|
return false;
|
|
178
|
-
if (
|
|
109
|
+
if (prev.length !== next.length)
|
|
179
110
|
return false;
|
|
180
|
-
return
|
|
111
|
+
return prev.every((v, i) => parametersAreSuperset(v, next[i]));
|
|
181
112
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
113
|
+
const params = Object.keys(prev);
|
|
114
|
+
if (params.length !== Object.keys(next).length)
|
|
115
|
+
return false;
|
|
116
|
+
// abort if keys differ
|
|
117
|
+
if (params.some((x) => !Object.prototype.hasOwnProperty.call(next, x)))
|
|
118
|
+
return false;
|
|
119
|
+
return params.every((key) => parametersAreSuperset(prev[key], next[key]));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Determines whether the second node is a "superset" of the first one, i.e. whether no data
|
|
123
|
+
* is lost if we were to replace `prev` with `next`.
|
|
124
|
+
*
|
|
125
|
+
* Specifically this is the case if
|
|
126
|
+
* - Both nodes have the exact same keys
|
|
127
|
+
* - All values are either strings where `next.x` contains `prev.x`, or hold the exact same value
|
|
128
|
+
*/
|
|
129
|
+
function nodeIsSuperset(prevNode, nextNode) {
|
|
130
|
+
const { parameters: prevParams, ...prev } = prevNode;
|
|
131
|
+
const { parameters: nextParams, ...next } = nextNode;
|
|
132
|
+
// abort if the nodes don't match besides parameters
|
|
133
|
+
if (!compareNodes({ ...prev, parameters: {} }, { ...next, parameters: {} }))
|
|
134
|
+
return false;
|
|
135
|
+
return parametersAreSuperset(prevParams, nextParams);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Group changes are additive if they only add groups or group members,
|
|
139
|
+
* i.e. no existing group, group name or group member may be removed.
|
|
140
|
+
*/
|
|
141
|
+
function nodeGroupChangesAreAdditive(prev, next) {
|
|
142
|
+
const nextGroupsById = new Map((next.nodeGroups ?? []).map((group) => [group.id, group]));
|
|
143
|
+
for (const prevGroup of prev.nodeGroups ?? []) {
|
|
144
|
+
const nextGroup = nextGroupsById.get(prevGroup.id);
|
|
145
|
+
if (!nextGroup ||
|
|
146
|
+
nextGroup.name !== prevGroup.name ||
|
|
147
|
+
nextGroup.description !== prevGroup.description) {
|
|
211
148
|
return false;
|
|
212
|
-
}
|
|
149
|
+
}
|
|
150
|
+
const nextNodeIds = new Set(nextGroup.nodeIds);
|
|
151
|
+
if (!prevGroup.nodeIds.every((id) => nextNodeIds.has(id))) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
213
154
|
}
|
|
214
|
-
|
|
215
|
-
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
function mergeAdditiveChanges(prev, next, diff) {
|
|
158
|
+
for (const d of diff.nodes.values()) {
|
|
159
|
+
if (d.status === NodeDiffStatus.Deleted)
|
|
160
|
+
return false;
|
|
161
|
+
if (d.status === NodeDiffStatus.Added)
|
|
162
|
+
continue;
|
|
163
|
+
const nextNode = next.nodes.find((x) => x.id === d.node.id);
|
|
164
|
+
if (!nextNode)
|
|
165
|
+
throw new Error('invariant broken - no next node');
|
|
166
|
+
if (d.status === NodeDiffStatus.Modified && !nodeIsSuperset(d.node, nextNode))
|
|
167
|
+
return false;
|
|
216
168
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
169
|
+
if (Object.keys(diff.connections.removed).length > 0)
|
|
170
|
+
return false;
|
|
171
|
+
if (!nodeGroupChangesAreAdditive(prev, next))
|
|
172
|
+
return false;
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
// We want to avoid merging versions from different editing "sessions"
|
|
176
|
+
//
|
|
177
|
+
const makeSkipTimeDifference = (timeDiffMs) => {
|
|
178
|
+
return (prev, next) => {
|
|
179
|
+
const timeDifference = next.createdAt.getTime() - prev.createdAt.getTime();
|
|
180
|
+
return Math.abs(timeDifference) > timeDiffMs;
|
|
220
181
|
};
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
182
|
+
};
|
|
183
|
+
const makeMergeShortTimeSpan = (timeDiffMs) => {
|
|
184
|
+
return (prev, next) => {
|
|
185
|
+
const timeDifference = next.createdAt.getTime() - prev.createdAt.getTime();
|
|
186
|
+
return Math.abs(timeDifference) < timeDiffMs;
|
|
224
187
|
};
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
else if (Array.isArray(parameters)) {
|
|
237
|
-
return parameters.reduce((acc, v) => acc + determineNodeSize(v), 1);
|
|
188
|
+
};
|
|
189
|
+
// Takes a mapping from minimumSize to the minimum time between versions and
|
|
190
|
+
// applies the largest one applicable to the given workflow
|
|
191
|
+
function makeMergeDependingOnSizeRule(mapping) {
|
|
192
|
+
const pairs = [...mapping.entries()]
|
|
193
|
+
.sort((a, b) => b[0] - a[0])
|
|
194
|
+
.map(([count, time]) => [count, makeMergeShortTimeSpan(time)]);
|
|
195
|
+
return (prev, next, _wcs, metaData) => {
|
|
196
|
+
if (metaData.workflowSizeScore === undefined) {
|
|
197
|
+
console.warn('Called mergeDependingOnSizeRule rule without providing required metaData');
|
|
198
|
+
return false;
|
|
238
199
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
200
|
+
for (const [count, time] of pairs) {
|
|
201
|
+
if (metaData.workflowSizeScore > count)
|
|
202
|
+
return time(prev, next);
|
|
242
203
|
}
|
|
204
|
+
return false;
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
function skipDifferentUsers(prev, next) {
|
|
208
|
+
return next.authors !== prev.authors;
|
|
209
|
+
}
|
|
210
|
+
exports.RULES = {
|
|
211
|
+
mergeAdditiveChanges,
|
|
212
|
+
makeMergeDependingOnSizeRule,
|
|
213
|
+
};
|
|
214
|
+
exports.SKIP_RULES = {
|
|
215
|
+
makeSkipTimeDifference,
|
|
216
|
+
skipDifferentUsers,
|
|
217
|
+
};
|
|
218
|
+
// Rough estimation of a node's size in abstract "character" count
|
|
219
|
+
// Does not care about key names which do technically factor in when stringified
|
|
220
|
+
function determineNodeSize(parameters) {
|
|
221
|
+
if (!parameters)
|
|
222
|
+
return 1;
|
|
223
|
+
if (typeof parameters === 'string') {
|
|
224
|
+
return parameters.length;
|
|
243
225
|
}
|
|
244
|
-
|
|
245
|
-
return
|
|
226
|
+
else if (typeof parameters !== 'object' || parameters instanceof Date) {
|
|
227
|
+
return 1;
|
|
246
228
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
229
|
+
else if (Array.isArray(parameters)) {
|
|
230
|
+
return parameters.reduce((acc, v) => acc + determineNodeSize(v), 1);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// Record case
|
|
234
|
+
return Object.values(parameters).reduce((acc, v) => acc + determineNodeSize(v), 1);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function determineNodeParametersSize(workflow) {
|
|
238
|
+
return workflow.nodes.reduce((acc, x) => acc + determineNodeSize(x.parameters), 0);
|
|
239
|
+
}
|
|
240
|
+
function groupWorkflows(workflows, rules, skipRules = [], metaDataFields) {
|
|
241
|
+
if (workflows.length === 0)
|
|
242
|
+
return { removed: [], remaining: [] };
|
|
243
|
+
if (workflows.length === 1) {
|
|
244
|
+
return {
|
|
245
|
+
removed: [],
|
|
246
|
+
remaining: workflows,
|
|
265
247
|
};
|
|
266
|
-
diffLoop: for (let i = n - 1; i > 0; --i) {
|
|
267
|
-
const wcs = new WorkflowChangeSet(remaining[i - 1], remaining[i]);
|
|
268
|
-
for (const shouldSkip of skipRules) {
|
|
269
|
-
if (shouldSkip(remaining[i - 1], remaining[i], wcs, metaData))
|
|
270
|
-
continue diffLoop;
|
|
271
|
-
}
|
|
272
|
-
for (const rule of rules) {
|
|
273
|
-
const shouldMerge = rule(remaining[i - 1], remaining[i], wcs, metaData);
|
|
274
|
-
if (shouldMerge) {
|
|
275
|
-
const left = remaining.splice(i - 1, 1)[0];
|
|
276
|
-
removed.push(left);
|
|
277
|
-
break;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
return { removed, remaining };
|
|
282
248
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
249
|
+
const remaining = [...workflows];
|
|
250
|
+
const removed = [];
|
|
251
|
+
const n = remaining.length;
|
|
252
|
+
const metaData = {
|
|
253
|
+
// check latest and an "average" workflow to get a somewhat accurate representation
|
|
254
|
+
// without counting through the entire history
|
|
255
|
+
workflowSizeScore: metaDataFields?.workflowSizeScore
|
|
256
|
+
? Math.max(determineNodeParametersSize(workflows[Math.floor(workflows.length / 2)]), determineNodeParametersSize(workflows[workflows.length - 1]))
|
|
257
|
+
: undefined,
|
|
258
|
+
};
|
|
259
|
+
diffLoop: for (let i = n - 1; i > 0; --i) {
|
|
260
|
+
const wcs = new WorkflowChangeSet(remaining[i - 1], remaining[i]);
|
|
261
|
+
for (const shouldSkip of skipRules) {
|
|
262
|
+
if (shouldSkip(remaining[i - 1], remaining[i], wcs, metaData))
|
|
263
|
+
continue diffLoop;
|
|
264
|
+
}
|
|
265
|
+
for (const rule of rules) {
|
|
266
|
+
const shouldMerge = rule(remaining[i - 1], remaining[i], wcs, metaData);
|
|
267
|
+
if (shouldMerge) {
|
|
268
|
+
const left = remaining.splice(i - 1, 1)[0];
|
|
269
|
+
removed.push(left);
|
|
270
|
+
break;
|
|
294
271
|
}
|
|
295
272
|
}
|
|
296
|
-
|
|
297
|
-
|
|
273
|
+
}
|
|
274
|
+
return { removed, remaining };
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Checks if workflows have non-positional differences (changes to nodes or connections,
|
|
278
|
+
* excluding position changes).
|
|
279
|
+
* Returns true if there are meaningful changes, false if only positions changed.
|
|
280
|
+
*/
|
|
281
|
+
function hasNonPositionalChanges(oldNodes, newNodes, oldConnections, newConnections) {
|
|
282
|
+
// Check for node changes (compareNodes already excludes position)
|
|
283
|
+
const nodesDiff = compareWorkflowsNodes(oldNodes, newNodes);
|
|
284
|
+
for (const diff of nodesDiff.values()) {
|
|
285
|
+
if (diff.status !== NodeDiffStatus.Eq) {
|
|
298
286
|
return true;
|
|
299
287
|
}
|
|
300
|
-
return false;
|
|
301
288
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
289
|
+
// Check for connection changes (connections don't have position data)
|
|
290
|
+
if (!(0, isEqual_1.default)(oldConnections, newConnections)) {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Checks if any credential IDs changed between old and new workflow nodes.
|
|
297
|
+
* Compares node by node - returns true if for any node:
|
|
298
|
+
* - A credential was added (new credential type not in old node)
|
|
299
|
+
* - A credential was removed (old credential type not in new node)
|
|
300
|
+
* - A credential was changed (same credential type but different credential ID)
|
|
301
|
+
*/
|
|
302
|
+
function hasCredentialChanges(oldNodes, newNodes) {
|
|
303
|
+
const newNodesMap = new Map(newNodes.map((node) => [node.id, node]));
|
|
304
|
+
for (const oldNode of oldNodes) {
|
|
305
|
+
const newNode = newNodesMap.get(oldNode.id);
|
|
306
|
+
// Skip nodes that were deleted - deletion is not a credential change
|
|
307
|
+
if (!newNode)
|
|
308
|
+
continue;
|
|
309
|
+
const oldCreds = oldNode.credentials ?? {};
|
|
310
|
+
const newCreds = newNode.credentials ?? {};
|
|
311
|
+
const oldCredTypes = Object.keys(oldCreds);
|
|
312
|
+
const newCredTypes = Object.keys(newCreds);
|
|
313
|
+
// Check for removed credentials (in old but not in new)
|
|
314
|
+
for (const credType of oldCredTypes) {
|
|
315
|
+
if (!(credType in newCreds)) {
|
|
316
|
+
return true; // Credential removed
|
|
329
317
|
}
|
|
330
|
-
// Check for
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
318
|
+
// Check for changed credentials (same type but different ID)
|
|
319
|
+
if (oldCreds[credType]?.id !== newCreds[credType]?.id) {
|
|
320
|
+
return true; // Credential changed
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// Check for added credentials (in new but not in old)
|
|
324
|
+
for (const credType of newCredTypes) {
|
|
325
|
+
if (!(credType in oldCreds)) {
|
|
326
|
+
return true; // Credential added
|
|
335
327
|
}
|
|
336
328
|
}
|
|
337
|
-
return false;
|
|
338
329
|
}
|
|
339
|
-
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
340
332
|
//# sourceMappingURL=workflow-diff.js.map
|