@n8n/node-engine-compatibility 0.5.1 → 0.6.0
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/build.tsbuildinfo +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/engine-step-data-loader.js +12 -7
- package/dist/engine-step-data-loader.js.map +1 -1
- package/dist/errors.d.ts +7 -1
- package/dist/errors.js +17 -5
- package/dist/errors.js.map +1 -1
- package/dist/guards.d.ts +2 -1
- package/dist/guards.js +9 -0
- package/dist/guards.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/v1-adapters.d.ts +1 -1
- package/dist/v1-adapters.js +55 -23
- package/dist/v1-adapters.js.map +1 -1
- package/dist/v1-step-executor.js +2 -2
- package/dist/v1-step-executor.js.map +1 -1
- package/dist/v1-workflow-converter.d.ts +2 -2
- package/dist/v1-workflow-converter.js +70 -18
- package/dist/v1-workflow-converter.js.map +1 -1
- package/package.json +10 -9
package/dist/constants.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare const MANUAL_TRIGGER_TYPE = "n8n-nodes-base.manualTrigger";
|
|
2
2
|
export declare const MERGE_TYPE = "n8n-nodes-base.merge";
|
|
3
3
|
export declare const SPLIT_IN_BATCHES_TYPE = "n8n-nodes-base.splitInBatches";
|
|
4
|
+
export declare const SPLIT_IN_BATCHES_TYPE_VERSION = 3;
|
|
5
|
+
export declare const DEFAULT_BATCH_SIZE = 1;
|
|
4
6
|
export declare const MAIN_CONNECTION_TYPE = "main";
|
package/dist/constants.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MAIN_CONNECTION_TYPE = exports.SPLIT_IN_BATCHES_TYPE = exports.MERGE_TYPE = exports.MANUAL_TRIGGER_TYPE = void 0;
|
|
3
|
+
exports.MAIN_CONNECTION_TYPE = exports.DEFAULT_BATCH_SIZE = exports.SPLIT_IN_BATCHES_TYPE_VERSION = exports.SPLIT_IN_BATCHES_TYPE = exports.MERGE_TYPE = exports.MANUAL_TRIGGER_TYPE = void 0;
|
|
4
4
|
exports.MANUAL_TRIGGER_TYPE = 'n8n-nodes-base.manualTrigger';
|
|
5
5
|
exports.MERGE_TYPE = 'n8n-nodes-base.merge';
|
|
6
6
|
exports.SPLIT_IN_BATCHES_TYPE = 'n8n-nodes-base.splitInBatches';
|
|
7
|
+
exports.SPLIT_IN_BATCHES_TYPE_VERSION = 3;
|
|
8
|
+
exports.DEFAULT_BATCH_SIZE = 1;
|
|
7
9
|
exports.MAIN_CONNECTION_TYPE = 'main';
|
|
8
10
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AACrD,QAAA,UAAU,GAAG,sBAAsB,CAAC;AACpC,QAAA,qBAAqB,GAAG,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AACrD,QAAA,UAAU,GAAG,sBAAsB,CAAC;AACpC,QAAA,qBAAqB,GAAG,+BAA+B,CAAC;AAGxD,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAGlC,QAAA,kBAAkB,GAAG,CAAC,CAAC;AACvB,QAAA,oBAAoB,GAAG,MAAM,CAAC"}
|
|
@@ -4,14 +4,19 @@ exports.createEngineStepDataLoader = createEngineStepDataLoader;
|
|
|
4
4
|
function createEngineStepDataLoader(executionStore, stepStore) {
|
|
5
5
|
return async (context) => {
|
|
6
6
|
const execution = await executionStore.loadExecution(context.executionId);
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
const steps = await stepStore.loadAllSteps(context.executionId);
|
|
8
|
+
const byNode = new Map();
|
|
9
|
+
for (const step of steps) {
|
|
10
|
+
if (step.status !== 'completed' || step.outputs === null)
|
|
11
|
+
continue;
|
|
12
|
+
let byIteration = byNode.get(step.nodeId);
|
|
13
|
+
if (byIteration === undefined) {
|
|
14
|
+
byIteration = {};
|
|
15
|
+
byNode.set(step.nodeId, byIteration);
|
|
16
|
+
}
|
|
17
|
+
byIteration[step.iteration] = step.outputs;
|
|
13
18
|
}
|
|
14
|
-
return { graph: execution.graph,
|
|
19
|
+
return { graph: execution.graph, outputsByNode: Object.fromEntries(byNode) };
|
|
15
20
|
};
|
|
16
21
|
}
|
|
17
22
|
//# sourceMappingURL=engine-step-data-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-step-data-loader.js","sourceRoot":"","sources":["../src/engine-step-data-loader.ts"],"names":[],"mappings":";;;AAcA,oCACC,cAA8B,EAC9B,SAAoB;IAEpB,OAAO,KAAK,EAAE,OAAO,EAAqB,EAAE;QAC3C,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"engine-step-data-loader.js","sourceRoot":"","sources":["../src/engine-step-data-loader.ts"],"names":[],"mappings":";;;AAcA,oCACC,cAA8B,EAC9B,SAAoB;IAEpB,OAAO,KAAK,EAAE,OAAO,EAAqB,EAAE;QAC3C,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqC,CAAC;QAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;gBAAE,SAAS;YACnE,IAAI,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC/B,WAAW,GAAG,EAAE,CAAC;gBACjB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACtC,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5C,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9E,CAAC,CAAC;AACH,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { UnexpectedError, UserError } from 'n8n-workflow';
|
|
2
2
|
export declare class UnsupportedWorkflowError extends UserError {
|
|
3
3
|
}
|
|
4
|
-
export declare class
|
|
4
|
+
export declare class AmbiguousTriggerError extends UserError {
|
|
5
|
+
constructor(nodeNames: string[]);
|
|
6
|
+
}
|
|
7
|
+
export declare class NotATriggerError extends UserError {
|
|
5
8
|
constructor(nodeName: string, nodeType: string);
|
|
6
9
|
}
|
|
10
|
+
export declare class UnknownTriggerError extends UserError {
|
|
11
|
+
constructor(nodeName: string);
|
|
12
|
+
}
|
|
7
13
|
export declare class UnsupportedConnectionTypeError extends UserError {
|
|
8
14
|
constructor(nodeName: string, connectionType: string);
|
|
9
15
|
}
|
package/dist/errors.js
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EngineRequestNotSupportedError = exports.VmExpressionEngineRequiredError = exports.UnsupportedNodeTypeError = exports.MalformedStepConfigError = exports.UnsupportedStepTypeError = exports.UnsupportedLoopEntryError = exports.UnsupportedCycleError = exports.UnsupportedConnectionTypeError = exports.
|
|
3
|
+
exports.EngineRequestNotSupportedError = exports.VmExpressionEngineRequiredError = exports.UnsupportedNodeTypeError = exports.MalformedStepConfigError = exports.UnsupportedStepTypeError = exports.UnsupportedLoopEntryError = exports.UnsupportedCycleError = exports.UnsupportedConnectionTypeError = exports.UnknownTriggerError = exports.NotATriggerError = exports.AmbiguousTriggerError = exports.UnsupportedWorkflowError = void 0;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
5
|
const quote = (names) => names.map((name) => `"${name}"`).join(', ');
|
|
6
6
|
class UnsupportedWorkflowError extends n8n_workflow_1.UserError {
|
|
7
7
|
}
|
|
8
8
|
exports.UnsupportedWorkflowError = UnsupportedWorkflowError;
|
|
9
|
-
class
|
|
9
|
+
class AmbiguousTriggerError extends n8n_workflow_1.UserError {
|
|
10
|
+
constructor(nodeNames) {
|
|
11
|
+
super(`This workflow has ${nodeNames.length} triggers (${quote(nodeNames)}), so the trigger that fired must be named.`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.AmbiguousTriggerError = AmbiguousTriggerError;
|
|
15
|
+
class NotATriggerError extends n8n_workflow_1.UserError {
|
|
10
16
|
constructor(nodeName, nodeType) {
|
|
11
|
-
super(`
|
|
17
|
+
super(`Node "${nodeName}" (${nodeType}) is not a trigger, so nothing can start from it.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.NotATriggerError = NotATriggerError;
|
|
21
|
+
class UnknownTriggerError extends n8n_workflow_1.UserError {
|
|
22
|
+
constructor(nodeName) {
|
|
23
|
+
super(`This workflow has no enabled node named "${nodeName}" to start from.`);
|
|
12
24
|
}
|
|
13
25
|
}
|
|
14
|
-
exports.
|
|
26
|
+
exports.UnknownTriggerError = UnknownTriggerError;
|
|
15
27
|
class UnsupportedConnectionTypeError extends n8n_workflow_1.UserError {
|
|
16
28
|
constructor(nodeName, connectionType) {
|
|
17
29
|
super(`Node "${nodeName}" has a "${connectionType}" connection, which is not supported yet. Only "main" connections are currently supported.`);
|
|
@@ -50,7 +62,7 @@ class UnsupportedNodeTypeError extends n8n_workflow_1.UserError {
|
|
|
50
62
|
exports.UnsupportedNodeTypeError = UnsupportedNodeTypeError;
|
|
51
63
|
class VmExpressionEngineRequiredError extends n8n_workflow_1.UnexpectedError {
|
|
52
64
|
constructor() {
|
|
53
|
-
super('V1StepExecutor requires
|
|
65
|
+
super('V1StepExecutor requires an isolated expression engine (vm or quickjs). Initialize it via `Expression.initExpressionEngine()` before executing steps.');
|
|
54
66
|
}
|
|
55
67
|
}
|
|
56
68
|
exports.VmExpressionEngineRequiredError = VmExpressionEngineRequiredError;
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,+CAA0D;AAE1D,MAAM,KAAK,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAM/E,8BAAsC,SAAQ,wBAAS;CAAG;;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,+CAA0D;AAE1D,MAAM,KAAK,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAM/E,8BAAsC,SAAQ,wBAAS;CAAG;;AAG1D,2BAAmC,SAAQ,wBAAS;IACnD,YAAY,SAAmB;QAC9B,KAAK,CACJ,qBAAqB,SAAS,CAAC,MAAM,cAAc,KAAK,CAAC,SAAS,CAAC,6CAA6C,CAChH,CAAC;IACH,CAAC;CACD;;AAED,sBAA8B,SAAQ,wBAAS;IAC9C,YAAY,QAAgB,EAAE,QAAgB;QAC7C,KAAK,CAAC,SAAS,QAAQ,MAAM,QAAQ,mDAAmD,CAAC,CAAC;IAC3F,CAAC;CACD;;AAED,yBAAiC,SAAQ,wBAAS;IACjD,YAAY,QAAgB;QAC3B,KAAK,CAAC,4CAA4C,QAAQ,kBAAkB,CAAC,CAAC;IAC/E,CAAC;CACD;;AAED,oCAA4C,SAAQ,wBAAS;IAC5D,YAAY,QAAgB,EAAE,cAAsB;QACnD,KAAK,CACJ,SAAS,QAAQ,YAAY,cAAc,4FAA4F,CACvI,CAAC;IACH,CAAC;CACD;;AAED,2BAAmC,SAAQ,wBAAS;IACnD,YAAY,SAAmB;QAC9B,KAAK,CACJ,uBAAuB,KAAK,CAAC,SAAS,CAAC,6EAA6E,CACpH,CAAC;IACH,CAAC;CACD;;AAED,+BAAuC,SAAQ,wBAAS;IACvD,YAAY,WAAqB,EAAE,UAAoB;QACtD,KAAK,CACJ,sBAAsB,KAAK,CAAC,WAAW,CAAC,sFAAsF,KAAK,CAAC,UAAU,CAAC,GAAG,CAClJ,CAAC;IACH,CAAC;CACD;;AAED,8BAAsC,SAAQ,wBAAS;IACtD,YAAY,QAAgB;QAC3B,KAAK,CAAC,qDAAqD,QAAQ,GAAG,CAAC,CAAC;IACzE,CAAC;CACD;;AAED,8BAAsC,SAAQ,wBAAS;IACtD,YAAY,QAAgB;QAC3B,KAAK,CAAC,SAAS,QAAQ,6CAA6C,CAAC,CAAC;IACvE,CAAC;CACD;;AAED,8BAAsC,SAAQ,wBAAS;IACtD,YAAY,QAAgB;QAC3B,KAAK,CAAC,cAAc,QAAQ,kDAAkD,CAAC,CAAC;IACjF,CAAC;CACD;;AAED,qCAA6C,SAAQ,8BAAe;IACnE;QACC,KAAK,CACJ,sJAAsJ,CACtJ,CAAC;IACH,CAAC;CACD;;AAED,oCAA4C,SAAQ,wBAAS;IAC5D,YAAY,QAAgB;QAC3B,KAAK,CACJ,cAAc,QAAQ,uEAAuE,CAC7F,CAAC;IACH,CAAC;CACD"}
|
package/dist/guards.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type { V1NodeStepConfig } from './types';
|
|
1
|
+
import type { TriggerStepConfig, V1NodeStepConfig } from './types';
|
|
2
2
|
export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
|
|
3
|
+
export declare function isTriggerStepConfig(config: unknown): config is TriggerStepConfig;
|
|
3
4
|
export declare function isV1NodeStepConfig(config: unknown): config is V1NodeStepConfig;
|
package/dist/guards.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isRecord = void 0;
|
|
4
|
+
exports.isTriggerStepConfig = isTriggerStepConfig;
|
|
4
5
|
exports.isV1NodeStepConfig = isV1NodeStepConfig;
|
|
5
6
|
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
6
7
|
exports.isRecord = isRecord;
|
|
8
|
+
function isTriggerStepConfig(config) {
|
|
9
|
+
if (!(0, exports.isRecord)(config))
|
|
10
|
+
return false;
|
|
11
|
+
return (typeof config.nodeType === 'string' &&
|
|
12
|
+
config.nodeType.length > 0 &&
|
|
13
|
+
typeof config.typeVersion === 'number' &&
|
|
14
|
+
(0, exports.isRecord)(config.parameters));
|
|
15
|
+
}
|
|
7
16
|
function isV1NodeStepConfig(config) {
|
|
8
17
|
if (!(0, exports.isRecord)(config))
|
|
9
18
|
return false;
|
package/dist/guards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":";;;;;AAEO,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAC5E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AADzD,QAAA,QAAQ,GAAR,QAAQ,CACiD;AAEtE,6BAAoC,MAAe;IAClD,IAAI,CAAC,IAAA,QAAA,QAAQ,EAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,CACN,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACnC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC1B,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;QACtC,IAAA,QAAA,QAAQ,EAAC,MAAM,CAAC,UAAU,CAAC,CAC3B,CAAC;AACH,CAAC;AAED,4BAAmC,MAAe;IACjD,IAAI,CAAC,IAAA,QAAA,QAAQ,EAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,CACN,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACnC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC1B,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;QACtC,IAAA,QAAA,QAAQ,EAAC,MAAM,CAAC,UAAU,CAAC;QAC3B,OAAO,MAAM,CAAC,cAAc,KAAK,SAAS,CAC1C,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { V1WorkflowConverter } from './v1-workflow-converter';
|
|
2
2
|
export { V1StepExecutor } from './v1-step-executor';
|
|
3
3
|
export { createEngineStepDataLoader } from './engine-step-data-loader';
|
|
4
|
-
export { toStepOutputs } from './io';
|
|
5
|
-
export {
|
|
4
|
+
export { fromStepInputs, toStepOutputs } from './io';
|
|
5
|
+
export { AmbiguousTriggerError, NotATriggerError, UnknownTriggerError, UnsupportedWorkflowError, } from './errors';
|
|
6
6
|
export type { StepData, StepDataLoader, V1StepExecutorDeps } from './types';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UnsupportedWorkflowError = exports.
|
|
3
|
+
exports.UnsupportedWorkflowError = exports.UnknownTriggerError = exports.NotATriggerError = exports.AmbiguousTriggerError = exports.toStepOutputs = exports.fromStepInputs = exports.createEngineStepDataLoader = exports.V1StepExecutor = exports.V1WorkflowConverter = void 0;
|
|
4
4
|
var v1_workflow_converter_1 = require("./v1-workflow-converter");
|
|
5
5
|
Object.defineProperty(exports, "V1WorkflowConverter", { enumerable: true, get: function () { return v1_workflow_converter_1.V1WorkflowConverter; } });
|
|
6
6
|
var v1_step_executor_1 = require("./v1-step-executor");
|
|
@@ -8,8 +8,11 @@ Object.defineProperty(exports, "V1StepExecutor", { enumerable: true, get: functi
|
|
|
8
8
|
var engine_step_data_loader_1 = require("./engine-step-data-loader");
|
|
9
9
|
Object.defineProperty(exports, "createEngineStepDataLoader", { enumerable: true, get: function () { return engine_step_data_loader_1.createEngineStepDataLoader; } });
|
|
10
10
|
var io_1 = require("./io");
|
|
11
|
+
Object.defineProperty(exports, "fromStepInputs", { enumerable: true, get: function () { return io_1.fromStepInputs; } });
|
|
11
12
|
Object.defineProperty(exports, "toStepOutputs", { enumerable: true, get: function () { return io_1.toStepOutputs; } });
|
|
12
13
|
var errors_1 = require("./errors");
|
|
13
|
-
Object.defineProperty(exports, "
|
|
14
|
+
Object.defineProperty(exports, "AmbiguousTriggerError", { enumerable: true, get: function () { return errors_1.AmbiguousTriggerError; } });
|
|
15
|
+
Object.defineProperty(exports, "NotATriggerError", { enumerable: true, get: function () { return errors_1.NotATriggerError; } });
|
|
16
|
+
Object.defineProperty(exports, "UnknownTriggerError", { enumerable: true, get: function () { return errors_1.UnknownTriggerError; } });
|
|
14
17
|
Object.defineProperty(exports, "UnsupportedWorkflowError", { enumerable: true, get: function () { return errors_1.UnsupportedWorkflowError; } });
|
|
15
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,uDAAoD;AAA3C,kHAAA,cAAc,OAAA;AACvB,qEAAuE;AAA9D,qIAAA,0BAA0B,OAAA;AACnC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,uDAAoD;AAA3C,kHAAA,cAAc,OAAA;AACvB,qEAAuE;AAA9D,qIAAA,0BAA0B,OAAA;AACnC,2BAAqD;AAA5C,oGAAA,cAAc,OAAA;AAAE,mGAAA,aAAa,OAAA;AACtC,mCAKkB;AAJjB,+GAAA,qBAAqB,OAAA;AACrB,0GAAA,gBAAgB,OAAA;AAChB,6GAAA,mBAAmB,OAAA;AACnB,kHAAA,wBAAwB,OAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { StepExecutionContext, StepSlots, WorkflowGraph } from '@n8n/engine';
|
|
2
2
|
import type { ExecuteContext } from 'n8n-core';
|
|
3
3
|
import type { INode, INodeExecutionData, INodeParameters, INodeType, INodeTypes, IRunData, ISourceData, IWorkflowBase, IWorkflowExecuteAdditionalData, Workflow } from 'n8n-workflow';
|
|
4
|
+
export interface TriggerStepConfig {
|
|
5
|
+
nodeType: string;
|
|
6
|
+
typeVersion: number;
|
|
7
|
+
parameters: INodeParameters;
|
|
8
|
+
}
|
|
4
9
|
export interface V1NodeStepConfig {
|
|
5
10
|
nodeType: string;
|
|
6
11
|
typeVersion: number;
|
|
@@ -12,7 +17,7 @@ export interface V1Execution extends Pick<IWorkflowBase, 'nodes' | 'connections'
|
|
|
12
17
|
}
|
|
13
18
|
export interface StepData {
|
|
14
19
|
graph: WorkflowGraph;
|
|
15
|
-
|
|
20
|
+
outputsByNode: Record<string, Record<number, StepSlots>>;
|
|
16
21
|
}
|
|
17
22
|
export type StepDataLoader = (context: StepExecutionContext) => Promise<StepData>;
|
|
18
23
|
export interface V1StepExecutorDeps {
|
package/dist/v1-adapters.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { ExecuteContext } from 'n8n-core';
|
|
|
3
3
|
import type { INode, INodeTypes, ISourceData } from 'n8n-workflow';
|
|
4
4
|
import { Workflow } from 'n8n-workflow';
|
|
5
5
|
import type { CreateExecuteContextParams, V1Execution, V1NodeStepConfig } from './types';
|
|
6
|
-
export declare function toV1Execution(graph: WorkflowGraph,
|
|
6
|
+
export declare function toV1Execution(graph: WorkflowGraph, outputsByNode: Record<string, Record<number, StepSlots>>, activeNodeId: string, activeIteration: number): V1Execution;
|
|
7
7
|
export declare function toV1Sources(graph: WorkflowGraph): Map<string, Array<ISourceData | null>>;
|
|
8
8
|
export declare function toV1Workflow(workflowId: string, node: INode, execution: V1Execution, nodeTypes: INodeTypes): Workflow;
|
|
9
9
|
export declare function toV1Node(graphNode: GraphNode, config: V1NodeStepConfig): INode;
|
package/dist/v1-adapters.js
CHANGED
|
@@ -5,31 +5,26 @@ exports.toV1Sources = toV1Sources;
|
|
|
5
5
|
exports.toV1Workflow = toV1Workflow;
|
|
6
6
|
exports.toV1Node = toV1Node;
|
|
7
7
|
exports.toV1ExecuteContext = toV1ExecuteContext;
|
|
8
|
+
const engine_1 = require("@n8n/engine");
|
|
8
9
|
const n8n_core_1 = require("n8n-core");
|
|
9
10
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
10
11
|
const constants_1 = require("./constants");
|
|
11
12
|
const guards_1 = require("./guards");
|
|
12
13
|
const io_1 = require("./io");
|
|
13
|
-
function toV1Execution(graph,
|
|
14
|
+
function toV1Execution(graph, outputsByNode, activeNodeId, activeIteration) {
|
|
14
15
|
return {
|
|
15
16
|
nodes: toV1Nodes(graph),
|
|
16
17
|
connections: toV1Connections(graph),
|
|
17
|
-
runData: toV1RunData(graph,
|
|
18
|
+
runData: toV1RunData(graph, outputsByNode, activeNodeId, activeIteration),
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
21
|
function toV1Nodes(graph) {
|
|
21
22
|
return graph.nodes.flatMap((graphNode) => {
|
|
22
23
|
if (graphNode.type === 'trigger') {
|
|
23
|
-
return [
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
type: constants_1.MANUAL_TRIGGER_TYPE,
|
|
28
|
-
typeVersion: 1,
|
|
29
|
-
position: [0, 0],
|
|
30
|
-
parameters: {},
|
|
31
|
-
},
|
|
32
|
-
];
|
|
24
|
+
return [toV1TriggerNode(graphNode)];
|
|
25
|
+
}
|
|
26
|
+
if (graphNode.type === 'batch') {
|
|
27
|
+
return [toV1BatchNode(graphNode)];
|
|
33
28
|
}
|
|
34
29
|
if (!(0, guards_1.isV1NodeStepConfig)(graphNode.config))
|
|
35
30
|
return [];
|
|
@@ -56,23 +51,38 @@ function toV1Connections(graph) {
|
|
|
56
51
|
}
|
|
57
52
|
return connections;
|
|
58
53
|
}
|
|
59
|
-
function toV1RunData(graph,
|
|
54
|
+
function toV1RunData(graph, outputsByNode, activeNodeId, activeIteration) {
|
|
60
55
|
const namesById = new Map(graph.nodes.map((node) => [node.id, node.name]));
|
|
61
56
|
const sourcesByNodeId = toV1Sources(graph);
|
|
57
|
+
const activeLoop = (0, engine_1.deriveLoops)(graph).find((loop) => loop.memberIds.has(activeNodeId));
|
|
62
58
|
const runData = {};
|
|
63
|
-
for (const [completedNodeId,
|
|
59
|
+
for (const [completedNodeId, outputsByIteration] of Object.entries(outputsByNode)) {
|
|
64
60
|
const nodeName = namesById.get(completedNodeId);
|
|
65
61
|
if (nodeName === undefined)
|
|
66
62
|
continue;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
const iterations = Object.keys(outputsByIteration).map(Number);
|
|
64
|
+
if (iterations.length === 0)
|
|
65
|
+
continue;
|
|
66
|
+
let lastShown;
|
|
67
|
+
if (!activeLoop) {
|
|
68
|
+
lastShown = Math.max(...iterations);
|
|
69
|
+
}
|
|
70
|
+
else if (activeLoop.memberIds.has(completedNodeId)) {
|
|
71
|
+
lastShown = activeIteration;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
lastShown = 0;
|
|
75
|
+
}
|
|
76
|
+
const source = sourcesByNodeId.get(completedNodeId) ?? [];
|
|
77
|
+
runData[nodeName] = Array.from({ length: lastShown + 1 }, (_, iteration) => ({
|
|
78
|
+
startTime: 0,
|
|
79
|
+
executionTime: 0,
|
|
80
|
+
executionIndex: iteration,
|
|
81
|
+
source,
|
|
82
|
+
data: {
|
|
83
|
+
[constants_1.MAIN_CONNECTION_TYPE]: (0, io_1.fromStepInputs)(outputsByIteration[iteration] ?? [[]]),
|
|
74
84
|
},
|
|
75
|
-
|
|
85
|
+
}));
|
|
76
86
|
}
|
|
77
87
|
return runData;
|
|
78
88
|
}
|
|
@@ -104,6 +114,28 @@ function toV1Workflow(workflowId, node, execution, nodeTypes) {
|
|
|
104
114
|
nodeTypes: tolerantNodeTypes(nodeTypes),
|
|
105
115
|
});
|
|
106
116
|
}
|
|
117
|
+
function toV1TriggerNode(graphNode) {
|
|
118
|
+
const config = (0, guards_1.isTriggerStepConfig)(graphNode.config) ? graphNode.config : undefined;
|
|
119
|
+
return {
|
|
120
|
+
id: graphNode.id,
|
|
121
|
+
name: graphNode.name,
|
|
122
|
+
type: config?.nodeType ?? constants_1.MANUAL_TRIGGER_TYPE,
|
|
123
|
+
typeVersion: config?.typeVersion ?? 1,
|
|
124
|
+
position: [0, 0],
|
|
125
|
+
parameters: config?.parameters ?? {},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function toV1BatchNode(graphNode) {
|
|
129
|
+
const batchSize = (0, engine_1.isBatchStepConfig)(graphNode.config) ? graphNode.config.batchSize : undefined;
|
|
130
|
+
return {
|
|
131
|
+
id: graphNode.id,
|
|
132
|
+
name: graphNode.name,
|
|
133
|
+
type: constants_1.SPLIT_IN_BATCHES_TYPE,
|
|
134
|
+
typeVersion: constants_1.SPLIT_IN_BATCHES_TYPE_VERSION,
|
|
135
|
+
position: [0, 0],
|
|
136
|
+
parameters: batchSize === undefined ? {} : { batchSize },
|
|
137
|
+
};
|
|
138
|
+
}
|
|
107
139
|
function toV1Node(graphNode, config) {
|
|
108
140
|
return {
|
|
109
141
|
id: graphNode.id,
|
|
@@ -154,6 +186,6 @@ function toV1ExecuteContext({ node, workflow, execution, source, additionalData,
|
|
|
154
186
|
source: source.length > 0 ? { main: source } : null,
|
|
155
187
|
};
|
|
156
188
|
const mode = stepContext.mode === 'production' ? 'trigger' : 'manual';
|
|
157
|
-
return new n8n_core_1.ExecuteContext(workflow, node, additionalData, mode, runExecutionData,
|
|
189
|
+
return new n8n_core_1.ExecuteContext(workflow, node, additionalData, mode, runExecutionData, stepContext.iteration, connectionInputData, inputData, executeData, []);
|
|
158
190
|
}
|
|
159
191
|
//# sourceMappingURL=v1-adapters.js.map
|
package/dist/v1-adapters.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v1-adapters.js","sourceRoot":"","sources":["../src/v1-adapters.ts"],"names":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"v1-adapters.js","sourceRoot":"","sources":["../src/v1-adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/v1-step-executor.js
CHANGED
|
@@ -18,7 +18,7 @@ class V1StepExecutor {
|
|
|
18
18
|
const nodeType = this.resolveNodeType(stepConfig);
|
|
19
19
|
const stepData = await this.deps.loadStepData(request.context);
|
|
20
20
|
const node = (0, v1_adapters_1.toV1Node)(request.node, stepConfig);
|
|
21
|
-
const execution = (0, v1_adapters_1.toV1Execution)(stepData.graph, stepData.
|
|
21
|
+
const execution = (0, v1_adapters_1.toV1Execution)(stepData.graph, stepData.outputsByNode, request.node.id, request.context.iteration);
|
|
22
22
|
const workflow = (0, v1_adapters_1.toV1Workflow)(request.context.workflowId, node, execution, this.deps.nodeTypes);
|
|
23
23
|
const additionalData = await this.deps.additionalDataFactory(request.context.executionId);
|
|
24
24
|
const context = (0, v1_adapters_1.toV1ExecuteContext)({
|
|
@@ -36,7 +36,7 @@ class V1StepExecutor {
|
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
validateExpressionEngine() {
|
|
39
|
-
if (n8n_workflow_1.Expression.getActiveImplementation()
|
|
39
|
+
if (n8n_workflow_1.Expression.getActiveImplementation() === 'legacy') {
|
|
40
40
|
throw new errors_1.VmExpressionEngineRequiredError();
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v1-step-executor.js","sourceRoot":"","sources":["../src/v1-step-executor.ts"],"names":[],"mappings":";;;AAMA,uCAAqD;AAErD,+CAAgF;AAEhF,qCAMkB;AAClB,qCAA8C;AAC9C,6BAAqD;AAQrD,+CAMuB;AASvB;IAC8B,IAAI;IAAjC,YAA6B,IAAwB;oBAAxB,IAAI;IAAuB,CAAC;IAEzD,KAAK,CAAC,OAAO,CAAC,OAA6B;QAC1C,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,IAAI,GAAG,IAAA,sBAAQ,EAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,IAAA,2BAAa,
|
|
1
|
+
{"version":3,"file":"v1-step-executor.js","sourceRoot":"","sources":["../src/v1-step-executor.ts"],"names":[],"mappings":";;;AAMA,uCAAqD;AAErD,+CAAgF;AAEhF,qCAMkB;AAClB,qCAA8C;AAC9C,6BAAqD;AAQrD,+CAMuB;AASvB;IAC8B,IAAI;IAAjC,YAA6B,IAAwB;oBAAxB,IAAI;IAAuB,CAAC;IAEzD,KAAK,CAAC,OAAO,CAAC,OAA6B;QAC1C,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,IAAI,GAAG,IAAA,sBAAQ,EAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,IAAA,2BAAa,EAC9B,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,aAAa,EACtB,OAAO,CAAC,IAAI,CAAC,EAAE,EACf,OAAO,CAAC,OAAO,CAAC,SAAS,CACzB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAA,0BAAY,EAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhG,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE1F,MAAM,OAAO,GAAG,IAAA,gCAAkB,EAAC;YAClC,IAAI;YACJ,QAAQ;YACR,SAAS;YACT,MAAM,EAAE,IAAA,yBAAW,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;YACtD,cAAc;YACd,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,iBAAiB,EAAE,IAAA,mBAAc,EAAC,OAAO,CAAC,MAAM,CAAC;SACjD,CAAC,CAAC;QAEH,OAAO,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;YACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,IAAA,kBAAa,EAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,wBAAwB;QAG/B,IAAI,yBAAU,CAAC,uBAAuB,EAAE,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,wCAA+B,EAAE,CAAC;QAC7C,CAAC;IACF,CAAC;IAEO,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAa;QAC3D,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,iCAAwB,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,IAAA,2BAAkB,EAAC,MAAM,CAAC;YAAE,MAAM,IAAI,iCAAwB,CAAC,IAAI,CAAC,CAAC;QAE1E,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,eAAe,CAAC,EACvB,QAAQ,EAAE,QAAQ,EAClB,WAAW,GACO;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEhF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,CAAC,WAAW,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,IAAI,oCAAyB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU;YAAE,MAAM,IAAI,iCAAwB,CAAC,QAAQ,CAAC,CAAC;QAEzF,OAAO,QAA8B,CAAC;IACvC,CAAC;IASO,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAiB;QACzD,IAAI,MAAqB,CAAC;QAC1B,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,IAAA,kCAAmB,EAAC,QAAQ,CAAC;gBAC1C,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;gBACjC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QACnC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5F,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CACjC,CAAC,WAAW,EAAwC,EAAE,CAAC,WAAW,CAAC,MAAM,KAAK,UAAU,CACxF,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACd,MAAM,QAAQ,CAAC,MAAM,YAAY,KAAK;wBACrC,CAAC,CAAC,QAAQ,CAAC,MAAM;wBACjB,CAAC,CAAC,IAAI,8BAAe,CAAC,gCAAgC,EAAE;4BACtD,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;yBAC3C,CAAC,CAAC;gBACN,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAAE,MAAM,MAAM,CAAC,KAAK,CAAC;YAClD,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAEnE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,KAA+B,CAAC;QAE/E,MAAM,IAAI,uCAA8B,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;CACD"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { WorkflowGraph } from '@n8n/engine';
|
|
2
2
|
import type { IWorkflowBase } from 'n8n-workflow';
|
|
3
3
|
export declare class V1WorkflowConverter {
|
|
4
|
-
convert(workflow: IWorkflowBase): WorkflowGraph;
|
|
4
|
+
convert(workflow: IWorkflowBase, firedTriggerName?: string): WorkflowGraph;
|
|
5
|
+
private resolveFiredTrigger;
|
|
5
6
|
private toGraphNode;
|
|
6
7
|
private assertSupportedMergeMode;
|
|
7
|
-
private isTriggerNode;
|
|
8
8
|
private toEdges;
|
|
9
9
|
private toEdgesForSource;
|
|
10
10
|
private validateSupportedConnectionType;
|
|
@@ -1,42 +1,66 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.V1WorkflowConverter = void 0;
|
|
4
|
+
const engine_1 = require("@n8n/engine");
|
|
5
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
4
6
|
const constants_1 = require("./constants");
|
|
5
7
|
const errors_1 = require("./errors");
|
|
6
|
-
const
|
|
8
|
+
const guards_1 = require("./guards");
|
|
7
9
|
class V1WorkflowConverter {
|
|
8
|
-
convert(workflow) {
|
|
9
|
-
const
|
|
10
|
-
const
|
|
10
|
+
convert(workflow, firedTriggerName) {
|
|
11
|
+
const trigger = this.resolveFiredTrigger(workflow, firedTriggerName);
|
|
12
|
+
const rooted = trigger === undefined ? workflow : rootAt(workflow, trigger);
|
|
13
|
+
const liveNodes = rooted.nodes.filter((node) => node.disabled !== true);
|
|
14
|
+
const disabledNodeIds = rooted.nodes
|
|
11
15
|
.filter((node) => node.disabled === true)
|
|
12
16
|
.map((node) => node.id);
|
|
13
|
-
const nodes = liveNodes.map((node) => this.toGraphNode(node));
|
|
14
|
-
let edges = this.toEdges(
|
|
17
|
+
const nodes = liveNodes.map((node) => this.toGraphNode(node, trigger?.id));
|
|
18
|
+
let edges = this.toEdges(rooted);
|
|
15
19
|
edges = this.spliceOutDisabledNodes(edges, disabledNodeIds);
|
|
16
20
|
edges = this.dedupeEdges(edges);
|
|
17
21
|
this.markBackEdges(nodes, edges);
|
|
18
22
|
return { nodes, edges };
|
|
19
23
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
resolveFiredTrigger(workflow, firedTriggerName) {
|
|
25
|
+
const liveNodes = workflow.nodes.filter((node) => node.disabled !== true);
|
|
26
|
+
if (firedTriggerName !== undefined) {
|
|
27
|
+
const fired = liveNodes.find((node) => node.name === firedTriggerName);
|
|
28
|
+
if (fired === undefined)
|
|
29
|
+
throw new errors_1.UnknownTriggerError(firedTriggerName);
|
|
30
|
+
if (!(0, n8n_workflow_1.isTriggerNodeType)(fired.type))
|
|
31
|
+
throw new errors_1.NotATriggerError(fired.name, fired.type);
|
|
32
|
+
return fired;
|
|
23
33
|
}
|
|
24
|
-
|
|
25
|
-
|
|
34
|
+
const triggers = liveNodes.filter((node) => (0, n8n_workflow_1.isTriggerNodeType)(node.type));
|
|
35
|
+
if (triggers.length > 1) {
|
|
36
|
+
throw new errors_1.AmbiguousTriggerError(triggers.map((node) => node.name));
|
|
37
|
+
}
|
|
38
|
+
return triggers[0];
|
|
39
|
+
}
|
|
40
|
+
toGraphNode(node, firedTriggerId) {
|
|
41
|
+
if (node.id === firedTriggerId) {
|
|
42
|
+
const config = {
|
|
43
|
+
nodeType: node.type,
|
|
44
|
+
typeVersion: node.typeVersion,
|
|
45
|
+
parameters: node.parameters,
|
|
46
|
+
};
|
|
47
|
+
return { id: node.id, name: node.name, type: 'trigger', config };
|
|
26
48
|
}
|
|
27
49
|
if (node.onError === 'continueErrorOutput') {
|
|
28
50
|
throw new errors_1.UnsupportedWorkflowError(`Node "${node.name}" uses onError=continueErrorOutput, which is not supported yet.`);
|
|
29
51
|
}
|
|
30
52
|
if (node.type === constants_1.MERGE_TYPE)
|
|
31
53
|
this.assertSupportedMergeMode(node);
|
|
54
|
+
if (node.type === constants_1.SPLIT_IN_BATCHES_TYPE) {
|
|
55
|
+
return { id: node.id, name: node.name, type: 'batch', config: toBatchConfig(node) };
|
|
56
|
+
}
|
|
32
57
|
const config = {
|
|
33
58
|
nodeType: node.type,
|
|
34
59
|
typeVersion: node.typeVersion,
|
|
35
60
|
parameters: node.parameters,
|
|
36
61
|
continueOnFail: node.continueOnFail === true || node.onError === 'continueRegularOutput',
|
|
37
62
|
};
|
|
38
|
-
|
|
39
|
-
return { id: node.id, name: node.name, type, config };
|
|
63
|
+
return { id: node.id, name: node.name, type: 'v1-node', config };
|
|
40
64
|
}
|
|
41
65
|
assertSupportedMergeMode(node) {
|
|
42
66
|
const mode = node.parameters.mode;
|
|
@@ -47,11 +71,6 @@ class V1WorkflowConverter {
|
|
|
47
71
|
throw new errors_1.UnsupportedWorkflowError(`Node "${node.name}" sets its Merge mode with an expression, which cannot be checked at conversion time. Use a literal mode.`);
|
|
48
72
|
}
|
|
49
73
|
}
|
|
50
|
-
isTriggerNode(node) {
|
|
51
|
-
return (node.type === constants_1.MANUAL_TRIGGER_TYPE ||
|
|
52
|
-
KNOWN_TRIGGER_TYPES.has(node.type) ||
|
|
53
|
-
node.type.toLowerCase().endsWith('trigger'));
|
|
54
|
-
}
|
|
55
74
|
toEdges(workflow) {
|
|
56
75
|
const idsByName = new Map(workflow.nodes.map((node) => [node.name, node.id]));
|
|
57
76
|
return Object.entries(workflow.connections).flatMap(([sourceName, connectionsByType]) => this.toEdgesForSource(sourceName, connectionsByType, idsByName));
|
|
@@ -190,4 +209,37 @@ class V1WorkflowConverter {
|
|
|
190
209
|
}
|
|
191
210
|
}
|
|
192
211
|
exports.V1WorkflowConverter = V1WorkflowConverter;
|
|
212
|
+
function rootAt(workflow, trigger) {
|
|
213
|
+
const reachable = new Set([
|
|
214
|
+
trigger.name,
|
|
215
|
+
...(0, n8n_workflow_1.getChildNodes)(workflow.connections, trigger.name, constants_1.MAIN_CONNECTION_TYPE, -1),
|
|
216
|
+
]);
|
|
217
|
+
return {
|
|
218
|
+
...workflow,
|
|
219
|
+
nodes: workflow.nodes.filter((node) => reachable.has(node.name)),
|
|
220
|
+
connections: Object.fromEntries(Object.entries(workflow.connections).filter(([sourceName]) => reachable.has(sourceName))),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function toBatchConfig(node) {
|
|
224
|
+
if (node.typeVersion !== constants_1.SPLIT_IN_BATCHES_TYPE_VERSION) {
|
|
225
|
+
throw new errors_1.UnsupportedWorkflowError(`Node "${node.name}" is a Split In Batches of version ${node.typeVersion}, and only version ${constants_1.SPLIT_IN_BATCHES_TYPE_VERSION} is supported.`);
|
|
226
|
+
}
|
|
227
|
+
const options = node.parameters?.options;
|
|
228
|
+
if (typeof options === 'string') {
|
|
229
|
+
throw new errors_1.UnsupportedWorkflowError(`Node "${node.name}" sets its options from an expression, which is not supported yet.`);
|
|
230
|
+
}
|
|
231
|
+
const reset = (0, guards_1.isRecord)(options) ? options.reset : undefined;
|
|
232
|
+
if (reset !== undefined && reset !== false) {
|
|
233
|
+
throw new errors_1.UnsupportedWorkflowError(`Node "${node.name}" uses the reset option, which is not supported yet.`);
|
|
234
|
+
}
|
|
235
|
+
const batchSize = node.parameters?.batchSize ?? constants_1.DEFAULT_BATCH_SIZE;
|
|
236
|
+
if (typeof batchSize === 'string') {
|
|
237
|
+
throw new errors_1.UnsupportedWorkflowError(`Node "${node.name}" sets its batch size from an expression, which is not supported yet.`);
|
|
238
|
+
}
|
|
239
|
+
const config = { batchSize };
|
|
240
|
+
if (!(0, engine_1.isBatchStepConfig)(config)) {
|
|
241
|
+
throw new errors_1.UnsupportedWorkflowError(`Node "${node.name}" has a batch size of ${String(batchSize)}, and it must be a whole number of at least 1.`);
|
|
242
|
+
}
|
|
243
|
+
return config;
|
|
244
|
+
}
|
|
193
245
|
//# sourceMappingURL=v1-workflow-converter.js.map
|