@n8n/workflow-sdk 0.2.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/LICENSE.md +88 -0
- package/README.md +30 -0
- package/dist/ast-interpreter/errors.d.ts +19 -0
- package/dist/ast-interpreter/errors.js +64 -0
- package/dist/ast-interpreter/errors.js.map +1 -0
- package/dist/ast-interpreter/index.d.ts +5 -0
- package/dist/ast-interpreter/index.js +18 -0
- package/dist/ast-interpreter/index.js.map +1 -0
- package/dist/ast-interpreter/interpreter.d.ts +2 -0
- package/dist/ast-interpreter/interpreter.js +471 -0
- package/dist/ast-interpreter/interpreter.js.map +1 -0
- package/dist/ast-interpreter/parser.d.ts +2 -0
- package/dist/ast-interpreter/parser.js +61 -0
- package/dist/ast-interpreter/parser.js.map +1 -0
- package/dist/ast-interpreter/validators.d.ts +13 -0
- package/dist/ast-interpreter/validators.js +243 -0
- package/dist/ast-interpreter/validators.js.map +1 -0
- package/dist/build.tsbuildinfo +1 -0
- package/dist/cli/code-to-json.d.ts +1 -0
- package/dist/cli/code-to-json.js +51 -0
- package/dist/cli/code-to-json.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +25 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/json-to-code.d.ts +1 -0
- package/dist/cli/json-to-code.js +60 -0
- package/dist/cli/json-to-code.js.map +1 -0
- package/dist/cli/utils.d.ts +1 -0
- package/dist/cli/utils.js +16 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/codegen/code-generator.d.ts +14 -0
- package/dist/codegen/code-generator.js +807 -0
- package/dist/codegen/code-generator.js.map +1 -0
- package/dist/codegen/composite-builder.d.ts +3 -0
- package/dist/codegen/composite-builder.js +718 -0
- package/dist/codegen/composite-builder.js.map +1 -0
- package/dist/codegen/composite-handlers/build-utils.d.ts +24 -0
- package/dist/codegen/composite-handlers/build-utils.js +79 -0
- package/dist/codegen/composite-handlers/build-utils.js.map +1 -0
- package/dist/codegen/composite-handlers/error-handler.d.ts +6 -0
- package/dist/codegen/composite-handlers/error-handler.js +51 -0
- package/dist/codegen/composite-handlers/error-handler.js.map +1 -0
- package/dist/codegen/composite-handlers/if-else-handler.d.ts +5 -0
- package/dist/codegen/composite-handlers/if-else-handler.js +57 -0
- package/dist/codegen/composite-handlers/if-else-handler.js.map +1 -0
- package/dist/codegen/composite-handlers/index.d.ts +1 -0
- package/dist/codegen/composite-handlers/index.js +17 -0
- package/dist/codegen/composite-handlers/index.js.map +1 -0
- package/dist/codegen/composite-handlers/merge-handler.d.ts +5 -0
- package/dist/codegen/composite-handlers/merge-handler.js +25 -0
- package/dist/codegen/composite-handlers/merge-handler.js.map +1 -0
- package/dist/codegen/composite-handlers/sib-handler.d.ts +5 -0
- package/dist/codegen/composite-handlers/sib-handler.js +57 -0
- package/dist/codegen/composite-handlers/sib-handler.js.map +1 -0
- package/dist/codegen/composite-handlers/switch-case-handler.d.ts +5 -0
- package/dist/codegen/composite-handlers/switch-case-handler.js +80 -0
- package/dist/codegen/composite-handlers/switch-case-handler.js.map +1 -0
- package/dist/codegen/composite-tree.d.ts +81 -0
- package/dist/codegen/composite-tree.js +3 -0
- package/dist/codegen/composite-tree.js.map +1 -0
- package/dist/codegen/config-builder.d.ts +7 -0
- package/dist/codegen/config-builder.js +22 -0
- package/dist/codegen/config-builder.js.map +1 -0
- package/dist/codegen/constants.d.ts +5 -0
- package/dist/codegen/constants.js +30 -0
- package/dist/codegen/constants.js.map +1 -0
- package/dist/codegen/deferred-connections.d.ts +20 -0
- package/dist/codegen/deferred-connections.js +46 -0
- package/dist/codegen/deferred-connections.js.map +1 -0
- package/dist/codegen/execution-schema-jsdoc.d.ts +3 -0
- package/dist/codegen/execution-schema-jsdoc.js +109 -0
- package/dist/codegen/execution-schema-jsdoc.js.map +1 -0
- package/dist/codegen/execution-status.d.ts +9 -0
- package/dist/codegen/execution-status.js +42 -0
- package/dist/codegen/execution-status.js.map +1 -0
- package/dist/codegen/expression-annotator.d.ts +2 -0
- package/dist/codegen/expression-annotator.js +38 -0
- package/dist/codegen/expression-annotator.js.map +1 -0
- package/dist/codegen/graph-annotator.d.ts +2 -0
- package/dist/codegen/graph-annotator.js +107 -0
- package/dist/codegen/graph-annotator.js.map +1 -0
- package/dist/codegen/index.d.ts +20 -0
- package/dist/codegen/index.js +60 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/merge-pattern.d.ts +12 -0
- package/dist/codegen/merge-pattern.js +119 -0
- package/dist/codegen/merge-pattern.js.map +1 -0
- package/dist/codegen/node-type-utils.d.ts +4 -0
- package/dist/codegen/node-type-utils.js +38 -0
- package/dist/codegen/node-type-utils.js.map +1 -0
- package/dist/codegen/output-utils.d.ts +9 -0
- package/dist/codegen/output-utils.js +68 -0
- package/dist/codegen/output-utils.js.map +1 -0
- package/dist/codegen/parse-workflow-code.d.ts +3 -0
- package/dist/codegen/parse-workflow-code.js +438 -0
- package/dist/codegen/parse-workflow-code.js.map +1 -0
- package/dist/codegen/semantic-graph.d.ts +3 -0
- package/dist/codegen/semantic-graph.js +216 -0
- package/dist/codegen/semantic-graph.js.map +1 -0
- package/dist/codegen/semantic-registry.d.ts +18 -0
- package/dist/codegen/semantic-registry.js +102 -0
- package/dist/codegen/semantic-registry.js.map +1 -0
- package/dist/codegen/sib-merge-handler.d.ts +20 -0
- package/dist/codegen/sib-merge-handler.js +92 -0
- package/dist/codegen/sib-merge-handler.js.map +1 -0
- package/dist/codegen/string-utils.d.ts +6 -0
- package/dist/codegen/string-utils.js +38 -0
- package/dist/codegen/string-utils.js.map +1 -0
- package/dist/codegen/subnode-generator.d.ts +17 -0
- package/dist/codegen/subnode-generator.js +219 -0
- package/dist/codegen/subnode-generator.js.map +1 -0
- package/dist/codegen/types.d.ts +40 -0
- package/dist/codegen/types.js +16 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/codegen/variable-names.d.ts +8 -0
- package/dist/codegen/variable-names.js +121 -0
- package/dist/codegen/variable-names.js.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +14 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/node-types.d.ts +19 -0
- package/dist/constants/node-types.js +46 -0
- package/dist/constants/node-types.js.map +1 -0
- package/dist/expression/index.d.ts +6 -0
- package/dist/expression/index.js +181 -0
- package/dist/expression/index.js.map +1 -0
- package/dist/expression.d.ts +1 -0
- package/dist/expression.js +10 -0
- package/dist/expression.js.map +1 -0
- package/dist/generate-types/generate-node-defs-cli.d.ts +7 -0
- package/dist/generate-types/generate-node-defs-cli.js +99 -0
- package/dist/generate-types/generate-node-defs-cli.js.map +1 -0
- package/dist/generate-types/generate-types.d.ts +163 -0
- package/dist/generate-types/generate-types.js +2569 -0
- package/dist/generate-types/generate-types.js.map +1 -0
- package/dist/generate-types/generate-zod-schemas.d.ts +41 -0
- package/dist/generate-types/generate-zod-schemas.js +1129 -0
- package/dist/generate-types/generate-zod-schemas.js.map +1 -0
- package/dist/generate-types/index.d.ts +3 -0
- package/dist/generate-types/index.js +62 -0
- package/dist/generate-types/index.js.map +1 -0
- package/dist/generate-types/zod-helpers.d.ts +189 -0
- package/dist/generate-types/zod-helpers.js +76 -0
- package/dist/generate-types/zod-helpers.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/dist/types/aliases.d.ts +5 -0
- package/dist/types/aliases.js +3 -0
- package/dist/types/aliases.js.map +1 -0
- package/dist/types/base.d.ts +395 -0
- package/dist/types/base.js +22 -0
- package/dist/types/base.js.map +1 -0
- package/dist/utils/code-helpers.d.ts +7 -0
- package/dist/utils/code-helpers.js +47 -0
- package/dist/utils/code-helpers.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/safe-access.d.ts +3 -0
- package/dist/utils/safe-access.js +21 -0
- package/dist/utils/safe-access.js.map +1 -0
- package/dist/utils/trigger-detection.d.ts +1 -0
- package/dist/utils/trigger-detection.js +17 -0
- package/dist/utils/trigger-detection.js.map +1 -0
- package/dist/validation/display-options.d.ts +18 -0
- package/dist/validation/display-options.js +194 -0
- package/dist/validation/display-options.js.map +1 -0
- package/dist/validation/index.d.ts +34 -0
- package/dist/validation/index.js +428 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/input-resolver.d.ts +2 -0
- package/dist/validation/input-resolver.js +23 -0
- package/dist/validation/input-resolver.js.map +1 -0
- package/dist/validation/resolve-schema.d.ts +14 -0
- package/dist/validation/resolve-schema.js +105 -0
- package/dist/validation/resolve-schema.js.map +1 -0
- package/dist/validation/schema-helpers.d.ts +164 -0
- package/dist/validation/schema-helpers.js +51 -0
- package/dist/validation/schema-helpers.js.map +1 -0
- package/dist/validation/schema-validator.d.ts +22 -0
- package/dist/validation/schema-validator.js +402 -0
- package/dist/validation/schema-validator.js.map +1 -0
- package/dist/validation/test-schema-setup.d.ts +2 -0
- package/dist/validation/test-schema-setup.js +108 -0
- package/dist/validation/test-schema-setup.js.map +1 -0
- package/dist/validation.d.ts +1 -0
- package/dist/validation.js +9 -0
- package/dist/validation.js.map +1 -0
- package/dist/workflow-builder/connection-utils.d.ts +4 -0
- package/dist/workflow-builder/connection-utils.js +42 -0
- package/dist/workflow-builder/connection-utils.js.map +1 -0
- package/dist/workflow-builder/constants.d.ts +3 -0
- package/dist/workflow-builder/constants.js +7 -0
- package/dist/workflow-builder/constants.js.map +1 -0
- package/dist/workflow-builder/control-flow-builders/if-else.d.ts +2 -0
- package/dist/workflow-builder/control-flow-builders/if-else.js +3 -0
- package/dist/workflow-builder/control-flow-builders/if-else.js.map +1 -0
- package/dist/workflow-builder/control-flow-builders/next-batch.d.ts +2 -0
- package/dist/workflow-builder/control-flow-builders/next-batch.js +7 -0
- package/dist/workflow-builder/control-flow-builders/next-batch.js.map +1 -0
- package/dist/workflow-builder/control-flow-builders/split-in-batches.d.ts +27 -0
- package/dist/workflow-builder/control-flow-builders/split-in-batches.js +268 -0
- package/dist/workflow-builder/control-flow-builders/split-in-batches.js.map +1 -0
- package/dist/workflow-builder/control-flow-builders/switch-case.d.ts +2 -0
- package/dist/workflow-builder/control-flow-builders/switch-case.js +3 -0
- package/dist/workflow-builder/control-flow-builders/switch-case.js.map +1 -0
- package/dist/workflow-builder/layout-utils.d.ts +2 -0
- package/dist/workflow-builder/layout-utils.js +54 -0
- package/dist/workflow-builder/layout-utils.js.map +1 -0
- package/dist/workflow-builder/node-builders/index.d.ts +2 -0
- package/dist/workflow-builder/node-builders/index.js +29 -0
- package/dist/workflow-builder/node-builders/index.js.map +1 -0
- package/dist/workflow-builder/node-builders/node-builder.d.ts +26 -0
- package/dist/workflow-builder/node-builders/node-builder.js +596 -0
- package/dist/workflow-builder/node-builders/node-builder.js.map +1 -0
- package/dist/workflow-builder/node-builders/subnode-builders.d.ts +25 -0
- package/dist/workflow-builder/node-builders/subnode-builders.js +110 -0
- package/dist/workflow-builder/node-builders/subnode-builders.js.map +1 -0
- package/dist/workflow-builder/pin-data-utils.d.ts +5 -0
- package/dist/workflow-builder/pin-data-utils.js +54 -0
- package/dist/workflow-builder/pin-data-utils.js.map +1 -0
- package/dist/workflow-builder/plugins/composite-handlers/branch-handler-utils.d.ts +9 -0
- package/dist/workflow-builder/plugins/composite-handlers/branch-handler-utils.js +162 -0
- package/dist/workflow-builder/plugins/composite-handlers/branch-handler-utils.js.map +1 -0
- package/dist/workflow-builder/plugins/composite-handlers/if-else-handler.d.ts +5 -0
- package/dist/workflow-builder/plugins/composite-handlers/if-else-handler.js +83 -0
- package/dist/workflow-builder/plugins/composite-handlers/if-else-handler.js.map +1 -0
- package/dist/workflow-builder/plugins/composite-handlers/index.d.ts +3 -0
- package/dist/workflow-builder/plugins/composite-handlers/index.js +10 -0
- package/dist/workflow-builder/plugins/composite-handlers/index.js.map +1 -0
- package/dist/workflow-builder/plugins/composite-handlers/split-in-batches-handler.d.ts +15 -0
- package/dist/workflow-builder/plugins/composite-handlers/split-in-batches-handler.js +216 -0
- package/dist/workflow-builder/plugins/composite-handlers/split-in-batches-handler.js.map +1 -0
- package/dist/workflow-builder/plugins/composite-handlers/switch-case-handler.d.ts +5 -0
- package/dist/workflow-builder/plugins/composite-handlers/switch-case-handler.js +91 -0
- package/dist/workflow-builder/plugins/composite-handlers/switch-case-handler.js.map +1 -0
- package/dist/workflow-builder/plugins/defaults.d.ts +2 -0
- package/dist/workflow-builder/plugins/defaults.js +53 -0
- package/dist/workflow-builder/plugins/defaults.js.map +1 -0
- package/dist/workflow-builder/plugins/index.d.ts +3 -0
- package/dist/workflow-builder/plugins/index.js +9 -0
- package/dist/workflow-builder/plugins/index.js.map +1 -0
- package/dist/workflow-builder/plugins/registry.d.ts +22 -0
- package/dist/workflow-builder/plugins/registry.js +98 -0
- package/dist/workflow-builder/plugins/registry.js.map +1 -0
- package/dist/workflow-builder/plugins/serializers/index.d.ts +1 -0
- package/dist/workflow-builder/plugins/serializers/index.js +6 -0
- package/dist/workflow-builder/plugins/serializers/index.js.map +1 -0
- package/dist/workflow-builder/plugins/serializers/json-serializer.d.ts +3 -0
- package/dist/workflow-builder/plugins/serializers/json-serializer.js +140 -0
- package/dist/workflow-builder/plugins/serializers/json-serializer.js.map +1 -0
- package/dist/workflow-builder/plugins/types.d.ts +76 -0
- package/dist/workflow-builder/plugins/types.js +29 -0
- package/dist/workflow-builder/plugins/types.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/agent-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/agent-validator.js +45 -0
- package/dist/workflow-builder/plugins/validators/agent-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/chain-llm-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/chain-llm-validator.js +39 -0
- package/dist/workflow-builder/plugins/validators/chain-llm-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/date-method-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/date-method-validator.js +28 -0
- package/dist/workflow-builder/plugins/validators/date-method-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/disconnected-node-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/disconnected-node-validator.js +142 -0
- package/dist/workflow-builder/plugins/validators/disconnected-node-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/expression-path-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/expression-path-validator.js +155 -0
- package/dist/workflow-builder/plugins/validators/expression-path-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/expression-prefix-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/expression-prefix-validator.js +32 -0
- package/dist/workflow-builder/plugins/validators/expression-prefix-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/from-ai-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/from-ai-validator.js +30 -0
- package/dist/workflow-builder/plugins/validators/from-ai-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/http-request-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/http-request-validator.js +55 -0
- package/dist/workflow-builder/plugins/validators/http-request-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/index.d.ts +15 -0
- package/dist/workflow-builder/plugins/validators/index.js +34 -0
- package/dist/workflow-builder/plugins/validators/index.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/max-nodes-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/max-nodes-validator.js +40 -0
- package/dist/workflow-builder/plugins/validators/max-nodes-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/merge-node-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/merge-node-validator.js +54 -0
- package/dist/workflow-builder/plugins/validators/merge-node-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/missing-trigger-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/missing-trigger-validator.js +27 -0
- package/dist/workflow-builder/plugins/validators/missing-trigger-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/no-nodes-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/no-nodes-validator.js +23 -0
- package/dist/workflow-builder/plugins/validators/no-nodes-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/set-node-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/set-node-validator.js +41 -0
- package/dist/workflow-builder/plugins/validators/set-node-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/subnode-connection-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/subnode-connection-validator.js +64 -0
- package/dist/workflow-builder/plugins/validators/subnode-connection-validator.js.map +1 -0
- package/dist/workflow-builder/plugins/validators/tool-node-validator.d.ts +2 -0
- package/dist/workflow-builder/plugins/validators/tool-node-validator.js +37 -0
- package/dist/workflow-builder/plugins/validators/tool-node-validator.js.map +1 -0
- package/dist/workflow-builder/string-utils.d.ts +9 -0
- package/dist/workflow-builder/string-utils.js +237 -0
- package/dist/workflow-builder/string-utils.js.map +1 -0
- package/dist/workflow-builder/subnode-utils.d.ts +2 -0
- package/dist/workflow-builder/subnode-utils.js +180 -0
- package/dist/workflow-builder/subnode-utils.js.map +1 -0
- package/dist/workflow-builder/type-guards.d.ts +15 -0
- package/dist/workflow-builder/type-guards.js +48 -0
- package/dist/workflow-builder/type-guards.js.map +1 -0
- package/dist/workflow-builder/validation-helpers.d.ts +27 -0
- package/dist/workflow-builder/validation-helpers.js +195 -0
- package/dist/workflow-builder/validation-helpers.js.map +1 -0
- package/dist/workflow-builder/workflow-import.d.ts +15 -0
- package/dist/workflow-builder/workflow-import.js +102 -0
- package/dist/workflow-builder/workflow-import.js.map +1 -0
- package/dist/workflow-builder.d.ts +2 -0
- package/dist/workflow-builder.js +636 -0
- package/dist/workflow-builder.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsonSerializer = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const constants_1 = require("../../constants");
|
|
6
|
+
const layout_utils_1 = require("../../layout-utils");
|
|
7
|
+
const string_utils_1 = require("../../string-utils");
|
|
8
|
+
function serializeNode(mapKey, graphNode, nodePositions) {
|
|
9
|
+
const instance = graphNode.instance;
|
|
10
|
+
if (!instance?.name || !instance.type) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const config = instance.config ?? {};
|
|
14
|
+
const position = config.position ?? nodePositions.get(mapKey) ?? [constants_1.START_X, constants_1.DEFAULT_Y];
|
|
15
|
+
let nodeName;
|
|
16
|
+
if ('_originalName' in config) {
|
|
17
|
+
nodeName = config._originalName;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const isAutoRenamed = mapKey !== instance.name &&
|
|
21
|
+
mapKey.startsWith(instance.name + ' ') &&
|
|
22
|
+
/^\d+$/.test(mapKey.slice(instance.name.length + 1));
|
|
23
|
+
nodeName = isAutoRenamed ? mapKey : instance.name;
|
|
24
|
+
}
|
|
25
|
+
const isFromJson = '_originalName' in config;
|
|
26
|
+
let serializedParams;
|
|
27
|
+
if (config.parameters) {
|
|
28
|
+
const parsed = (0, n8n_workflow_1.deepCopy)(config.parameters);
|
|
29
|
+
if (isFromJson) {
|
|
30
|
+
serializedParams = parsed;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const normalized = (0, string_utils_1.normalizeResourceLocators)(parsed);
|
|
34
|
+
serializedParams = (0, string_utils_1.escapeNewlinesInExpressionStrings)(normalized);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const n8nNode = {
|
|
38
|
+
id: instance.id,
|
|
39
|
+
name: nodeName,
|
|
40
|
+
type: instance.type,
|
|
41
|
+
typeVersion: (0, string_utils_1.parseVersion)(instance.version),
|
|
42
|
+
position,
|
|
43
|
+
parameters: serializedParams,
|
|
44
|
+
};
|
|
45
|
+
if (config.credentials) {
|
|
46
|
+
n8nNode.credentials = (0, n8n_workflow_1.deepCopy)(config.credentials);
|
|
47
|
+
}
|
|
48
|
+
if (config.disabled) {
|
|
49
|
+
n8nNode.disabled = config.disabled;
|
|
50
|
+
}
|
|
51
|
+
if (config.notes) {
|
|
52
|
+
n8nNode.notes = config.notes;
|
|
53
|
+
}
|
|
54
|
+
if (config.notesInFlow) {
|
|
55
|
+
n8nNode.notesInFlow = config.notesInFlow;
|
|
56
|
+
}
|
|
57
|
+
if (config.executeOnce) {
|
|
58
|
+
n8nNode.executeOnce = config.executeOnce;
|
|
59
|
+
}
|
|
60
|
+
if (config.retryOnFail) {
|
|
61
|
+
n8nNode.retryOnFail = config.retryOnFail;
|
|
62
|
+
}
|
|
63
|
+
if (config.alwaysOutputData) {
|
|
64
|
+
n8nNode.alwaysOutputData = config.alwaysOutputData;
|
|
65
|
+
}
|
|
66
|
+
if (config.onError) {
|
|
67
|
+
n8nNode.onError = config.onError;
|
|
68
|
+
}
|
|
69
|
+
return n8nNode;
|
|
70
|
+
}
|
|
71
|
+
function serializeNodeConnections(graphNode, nodeName) {
|
|
72
|
+
let hasConnections = false;
|
|
73
|
+
for (const typeConns of graphNode.connections.values()) {
|
|
74
|
+
if (typeConns.size > 0) {
|
|
75
|
+
hasConnections = true;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (!hasConnections || nodeName === undefined) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const nodeConnections = {};
|
|
83
|
+
for (const [connType, outputMap] of graphNode.connections) {
|
|
84
|
+
if (outputMap.size === 0)
|
|
85
|
+
continue;
|
|
86
|
+
const maxOutput = Math.max(...outputMap.keys());
|
|
87
|
+
const outputArray = [];
|
|
88
|
+
for (let i = 0; i <= maxOutput; i++) {
|
|
89
|
+
const targets = outputMap.get(i) ?? [];
|
|
90
|
+
outputArray[i] = targets.map((target) => ({
|
|
91
|
+
node: target.node,
|
|
92
|
+
type: target.type,
|
|
93
|
+
index: target.index,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
nodeConnections[connType] = outputArray;
|
|
97
|
+
}
|
|
98
|
+
if (Object.keys(nodeConnections).length === 0) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
return nodeConnections;
|
|
102
|
+
}
|
|
103
|
+
exports.jsonSerializer = {
|
|
104
|
+
id: 'core:json',
|
|
105
|
+
name: 'JSON Serializer',
|
|
106
|
+
format: 'json',
|
|
107
|
+
serialize(ctx) {
|
|
108
|
+
const nodes = [];
|
|
109
|
+
const connections = {};
|
|
110
|
+
const nodePositions = (0, layout_utils_1.calculateNodePositions)(ctx.nodes);
|
|
111
|
+
for (const [mapKey, graphNode] of ctx.nodes) {
|
|
112
|
+
const serializedNode = serializeNode(mapKey, graphNode, nodePositions);
|
|
113
|
+
if (!serializedNode)
|
|
114
|
+
continue;
|
|
115
|
+
nodes.push(serializedNode);
|
|
116
|
+
const nodeName = serializedNode.name;
|
|
117
|
+
const nodeConns = serializeNodeConnections(graphNode, nodeName);
|
|
118
|
+
if (nodeConns && nodeName !== undefined) {
|
|
119
|
+
connections[nodeName] = nodeConns;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const json = {
|
|
123
|
+
id: ctx.workflowId,
|
|
124
|
+
name: ctx.workflowName,
|
|
125
|
+
nodes,
|
|
126
|
+
connections,
|
|
127
|
+
};
|
|
128
|
+
if (ctx.settings !== undefined) {
|
|
129
|
+
json.settings = ctx.settings;
|
|
130
|
+
}
|
|
131
|
+
if (ctx.pinData && Object.keys(ctx.pinData).length > 0) {
|
|
132
|
+
json.pinData = ctx.pinData;
|
|
133
|
+
}
|
|
134
|
+
if (ctx.meta) {
|
|
135
|
+
json.meta = ctx.meta;
|
|
136
|
+
}
|
|
137
|
+
return json;
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=json-serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-serializer.js","sourceRoot":"","sources":["../../../../src/workflow-builder/plugins/serializers/json-serializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { GraphNode, NodeInstance, IDataObject } from '../../types/base';
|
|
2
|
+
export declare function findMapKey(graphNode: GraphNode, ctx: PluginContext): string;
|
|
3
|
+
export declare function isAutoRenamed(mapKey: string, originalName: string): boolean;
|
|
4
|
+
export declare function formatNodeRef(displayName: string, originalName?: string, nodeType?: string): string;
|
|
5
|
+
export interface ValidationIssue {
|
|
6
|
+
readonly code: string;
|
|
7
|
+
readonly message: string;
|
|
8
|
+
readonly severity: 'error' | 'warning';
|
|
9
|
+
readonly violationLevel?: 'critical' | 'major' | 'minor';
|
|
10
|
+
readonly nodeName?: string;
|
|
11
|
+
readonly parameterPath?: string;
|
|
12
|
+
readonly originalName?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface NodeTypesProvider {
|
|
15
|
+
getByNameAndVersion(type: string, version?: number): {
|
|
16
|
+
description?: {
|
|
17
|
+
maxNodes?: number;
|
|
18
|
+
displayName?: string;
|
|
19
|
+
properties?: readonly unknown[];
|
|
20
|
+
};
|
|
21
|
+
} | undefined;
|
|
22
|
+
}
|
|
23
|
+
export interface ValidationOptions {
|
|
24
|
+
readonly allowDisconnectedNodes?: boolean;
|
|
25
|
+
readonly allowNoTrigger?: boolean;
|
|
26
|
+
readonly nodeTypesProvider?: NodeTypesProvider;
|
|
27
|
+
}
|
|
28
|
+
export interface PluginContext {
|
|
29
|
+
readonly nodes: ReadonlyMap<string, GraphNode>;
|
|
30
|
+
readonly workflowId: string;
|
|
31
|
+
readonly workflowName: string;
|
|
32
|
+
readonly settings: Record<string, unknown>;
|
|
33
|
+
readonly pinData?: Record<string, IDataObject[]>;
|
|
34
|
+
readonly validationOptions?: ValidationOptions;
|
|
35
|
+
}
|
|
36
|
+
export interface MutablePluginContext extends Omit<PluginContext, 'nodes'> {
|
|
37
|
+
nodes: Map<string, GraphNode>;
|
|
38
|
+
addNodeWithSubnodes(node: NodeInstance<string, string, unknown>): string | undefined;
|
|
39
|
+
addBranchToGraph(branch: unknown): string;
|
|
40
|
+
nameMapping?: Map<string, string>;
|
|
41
|
+
trackRename?(nodeId: string, actualKey: string): void;
|
|
42
|
+
}
|
|
43
|
+
export interface ValidatorPlugin {
|
|
44
|
+
readonly id: string;
|
|
45
|
+
readonly name: string;
|
|
46
|
+
readonly nodeTypes?: string[];
|
|
47
|
+
readonly priority?: number;
|
|
48
|
+
validateNode(node: NodeInstance<string, string, unknown>, graphNode: GraphNode, ctx: PluginContext): ValidationIssue[];
|
|
49
|
+
validateWorkflow?(ctx: PluginContext): ValidationIssue[];
|
|
50
|
+
}
|
|
51
|
+
export interface CompositeHandlerPlugin<TInput = unknown> {
|
|
52
|
+
readonly id: string;
|
|
53
|
+
readonly name: string;
|
|
54
|
+
readonly priority?: number;
|
|
55
|
+
canHandle(input: unknown): input is TInput;
|
|
56
|
+
addNodes(input: TInput, ctx: MutablePluginContext): string;
|
|
57
|
+
handleThen?(input: TInput, currentNode: string, currentOutput: number, ctx: MutablePluginContext): {
|
|
58
|
+
currentNode: string;
|
|
59
|
+
currentOutput: number;
|
|
60
|
+
};
|
|
61
|
+
getHeadNodeName?(input: TInput): string | {
|
|
62
|
+
name: string;
|
|
63
|
+
id: string;
|
|
64
|
+
};
|
|
65
|
+
collectPinData?(input: TInput, collector: (node: NodeInstance<string, string, unknown>) => void): void;
|
|
66
|
+
}
|
|
67
|
+
export interface SerializerContext extends PluginContext {
|
|
68
|
+
resolveTargetNodeName(target: unknown): string | undefined;
|
|
69
|
+
readonly meta?: Record<string, unknown>;
|
|
70
|
+
}
|
|
71
|
+
export interface SerializerPlugin<TOutput = unknown> {
|
|
72
|
+
readonly id: string;
|
|
73
|
+
readonly name: string;
|
|
74
|
+
readonly format: string;
|
|
75
|
+
serialize(ctx: SerializerContext): TOutput;
|
|
76
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findMapKey = findMapKey;
|
|
4
|
+
exports.isAutoRenamed = isAutoRenamed;
|
|
5
|
+
exports.formatNodeRef = formatNodeRef;
|
|
6
|
+
function findMapKey(graphNode, ctx) {
|
|
7
|
+
for (const [mapKey, node] of ctx.nodes) {
|
|
8
|
+
if (node === graphNode) {
|
|
9
|
+
return mapKey;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return graphNode.instance.name;
|
|
13
|
+
}
|
|
14
|
+
function isAutoRenamed(mapKey, originalName) {
|
|
15
|
+
if (mapKey === originalName)
|
|
16
|
+
return false;
|
|
17
|
+
if (!mapKey.startsWith(originalName + ' '))
|
|
18
|
+
return false;
|
|
19
|
+
const suffix = mapKey.slice(originalName.length + 1);
|
|
20
|
+
return /^\d+$/.test(suffix);
|
|
21
|
+
}
|
|
22
|
+
function formatNodeRef(displayName, originalName, nodeType) {
|
|
23
|
+
const typeSuffix = nodeType ? ` [${nodeType}]` : '';
|
|
24
|
+
if (originalName && originalName !== displayName) {
|
|
25
|
+
return `'${displayName}' (originally '${originalName}')${typeSuffix}`;
|
|
26
|
+
}
|
|
27
|
+
return `'${displayName}'${typeSuffix}`;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/workflow-builder/plugins/types.ts"],"names":[],"mappings":";;AAkBA,gCAOC;AAKD,sCAKC;AAKD,sCAUC;AAhCD,SAAgB,UAAU,CAAC,SAAoB,EAAE,GAAkB;IAClE,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;AAChC,CAAC;AAKD,SAAgB,aAAa,CAAC,MAAc,EAAE,YAAoB;IACjE,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAKD,SAAgB,aAAa,CAC5B,WAAmB,EACnB,YAAqB,EACrB,QAAiB;IAEjB,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,IAAI,YAAY,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QAClD,OAAO,IAAI,WAAW,kBAAkB,YAAY,KAAK,UAAU,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.agentValidator = void 0;
|
|
4
|
+
const validation_helpers_1 = require("../../validation-helpers");
|
|
5
|
+
exports.agentValidator = {
|
|
6
|
+
id: 'core:agent',
|
|
7
|
+
name: 'Agent Validator',
|
|
8
|
+
nodeTypes: ['@n8n/n8n-nodes-langchain.agent'],
|
|
9
|
+
priority: 50,
|
|
10
|
+
validateNode(node, _graphNode, _ctx) {
|
|
11
|
+
const issues = [];
|
|
12
|
+
const params = node.config?.parameters;
|
|
13
|
+
if (!params) {
|
|
14
|
+
return issues;
|
|
15
|
+
}
|
|
16
|
+
const promptType = params.promptType;
|
|
17
|
+
if (!promptType || promptType === 'auto' || promptType === 'guardrails') {
|
|
18
|
+
return issues;
|
|
19
|
+
}
|
|
20
|
+
const text = params.text;
|
|
21
|
+
const hasValidExpression = (0, validation_helpers_1.containsExpression)(text);
|
|
22
|
+
const hasMalformedExpression = (0, validation_helpers_1.containsMalformedExpression)(text);
|
|
23
|
+
if (!text || (!hasValidExpression && !hasMalformedExpression)) {
|
|
24
|
+
issues.push({
|
|
25
|
+
code: 'AGENT_STATIC_PROMPT',
|
|
26
|
+
message: `Is input data required for '${node.name}'? If so, add an expression to the prompt. When following a chat trigger node, use { promptType: 'auto', text: '={{ $json.chatInput }}' }. Or use { promptType: 'define', text: '={{ ... }}' } to add dynamic data like input data.`,
|
|
27
|
+
severity: 'warning',
|
|
28
|
+
nodeName: node.name,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const options = params.options;
|
|
32
|
+
const systemMessage = options?.systemMessage ?? params.systemMessage;
|
|
33
|
+
if (!systemMessage ||
|
|
34
|
+
(typeof systemMessage === 'string' && systemMessage.trim().length === 0)) {
|
|
35
|
+
issues.push({
|
|
36
|
+
code: 'AGENT_NO_SYSTEM_MESSAGE',
|
|
37
|
+
message: `'${node.name}' has no system message. System-level instructions should be in the system message field.`,
|
|
38
|
+
severity: 'warning',
|
|
39
|
+
nodeName: node.name,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return issues;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=agent-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-validator.js","sourceRoot":"","sources":["../../../../src/workflow-builder/plugins/validators/agent-validator.ts"],"names":[],"mappings":";;;AAOA,iEAA2F;AAU9E,QAAA,cAAc,GAAoB;IAC9C,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,iBAAiB;IACvB,SAAS,EAAE,CAAC,gCAAgC,CAAC;IAC7C,QAAQ,EAAE,EAAE;IAEZ,YAAY,CACX,IAA2C,EAC3C,UAAqB,EACrB,IAAmB;QAEnB,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,UAAiD,CAAC;QAE9E,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAgC,CAAC;QAG3D,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;YACzE,OAAO,MAAM,CAAC;QACf,CAAC;QAGD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,kBAAkB,GAAG,IAAA,uCAAkB,EAAC,IAAI,CAAC,CAAC;QACpD,MAAM,sBAAsB,GAAG,IAAA,gDAA2B,EAAC,IAAI,CAAC,CAAC;QAIjE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,kBAAkB,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,+BAA+B,IAAI,CAAC,IAAI,qOAAqO;gBACtR,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;QACJ,CAAC;QAGD,MAAM,OAAO,GAAG,MAAM,CAAC,OAA8C,CAAC;QACtE,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC;QACrE,IACC,CAAC,aAAa;YACd,CAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EACvE,CAAC;YACF,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,2FAA2F;gBACjH,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chainLlmValidator = void 0;
|
|
4
|
+
const string_utils_1 = require("../../string-utils");
|
|
5
|
+
const validation_helpers_1 = require("../../validation-helpers");
|
|
6
|
+
exports.chainLlmValidator = {
|
|
7
|
+
id: 'core:chain-llm',
|
|
8
|
+
name: 'Chain LLM Validator',
|
|
9
|
+
nodeTypes: ['@n8n/n8n-nodes-langchain.chainLlm'],
|
|
10
|
+
priority: 50,
|
|
11
|
+
validateNode(node, _graphNode, _ctx) {
|
|
12
|
+
const issues = [];
|
|
13
|
+
const version = (0, string_utils_1.parseVersion)(node.version);
|
|
14
|
+
if (version < 1.4) {
|
|
15
|
+
return issues;
|
|
16
|
+
}
|
|
17
|
+
const params = node.config?.parameters;
|
|
18
|
+
if (!params) {
|
|
19
|
+
return issues;
|
|
20
|
+
}
|
|
21
|
+
const promptType = params.promptType;
|
|
22
|
+
if (promptType !== 'define') {
|
|
23
|
+
return issues;
|
|
24
|
+
}
|
|
25
|
+
const text = params.text;
|
|
26
|
+
const hasValidExpression = (0, validation_helpers_1.containsExpression)(text);
|
|
27
|
+
const hasMalformedExpression = (0, validation_helpers_1.containsMalformedExpression)(text);
|
|
28
|
+
if (!text || (!hasValidExpression && !hasMalformedExpression)) {
|
|
29
|
+
issues.push({
|
|
30
|
+
code: 'AGENT_STATIC_PROMPT',
|
|
31
|
+
message: `'${node.name}' has no expression in its prompt. Parameter values must start with '=' to evaluate correctly as expressions. For example '={{ $json.input }}'.`,
|
|
32
|
+
severity: 'warning',
|
|
33
|
+
nodeName: node.name,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return issues;
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=chain-llm-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-llm-validator.js","sourceRoot":"","sources":["../../../../src/workflow-builder/plugins/validators/chain-llm-validator.ts"],"names":[],"mappings":";;;AAQA,qDAAkD;AAClD,iEAA2F;AAU9E,QAAA,iBAAiB,GAAoB;IACjD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,qBAAqB;IAC3B,SAAS,EAAE,CAAC,mCAAmC,CAAC;IAChD,QAAQ,EAAE,EAAE;IAEZ,YAAY,CACX,IAA2C,EAC3C,UAAqB,EACrB,IAAmB;QAEnB,MAAM,MAAM,GAAsB,EAAE,CAAC;QAGrC,MAAM,OAAO,GAAG,IAAA,2BAAY,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,UAAiD,CAAC;QAC9E,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAgC,CAAC;QAG3D,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC;QACf,CAAC;QAGD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,kBAAkB,GAAG,IAAA,uCAAkB,EAAC,IAAI,CAAC,CAAC;QACpD,MAAM,sBAAsB,GAAG,IAAA,gDAA2B,EAAC,IAAI,CAAC,CAAC;QAIjE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,kBAAkB,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,iJAAiJ;gBACvK,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dateMethodValidator = void 0;
|
|
4
|
+
const validation_helpers_1 = require("../../validation-helpers");
|
|
5
|
+
exports.dateMethodValidator = {
|
|
6
|
+
id: 'core:date-method',
|
|
7
|
+
name: 'Date Method Validator',
|
|
8
|
+
priority: 30,
|
|
9
|
+
validateNode(node, _graphNode, _ctx) {
|
|
10
|
+
const issues = [];
|
|
11
|
+
const params = node.config?.parameters;
|
|
12
|
+
if (!params) {
|
|
13
|
+
return issues;
|
|
14
|
+
}
|
|
15
|
+
const dateIssues = (0, validation_helpers_1.findInvalidDateMethods)(params);
|
|
16
|
+
for (const { path } of dateIssues) {
|
|
17
|
+
issues.push({
|
|
18
|
+
code: 'INVALID_DATE_METHOD',
|
|
19
|
+
message: `'${node.name}' parameter "${path}" uses .toISOString() which is a JS Date method. Use .toISO() for Luxon DateTime ($now, $today).`,
|
|
20
|
+
severity: 'warning',
|
|
21
|
+
nodeName: node.name,
|
|
22
|
+
parameterPath: path,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return issues;
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=date-method-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-method-validator.js","sourceRoot":"","sources":["../../../../src/workflow-builder/plugins/validators/date-method-validator.ts"],"names":[],"mappings":";;;AAOA,iEAAkE;AASrD,QAAA,mBAAmB,GAAoB;IACnD,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,uBAAuB;IAC7B,QAAQ,EAAE,EAAE;IAEZ,YAAY,CACX,IAA2C,EAC3C,UAAqB,EACrB,IAAmB;QAEnB,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,2CAAsB,EAAC,MAAM,CAAC,CAAC;QAElD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,gBAAgB,IAAI,kGAAkG;gBAC5I,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,aAAa,EAAE,IAAI;aACnB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.disconnectedNodeValidator = void 0;
|
|
4
|
+
const node_types_1 = require("../../../constants/node-types");
|
|
5
|
+
const base_1 = require("../../../types/base");
|
|
6
|
+
const trigger_detection_1 = require("../../../utils/trigger-detection");
|
|
7
|
+
const type_guards_1 = require("../../type-guards");
|
|
8
|
+
const types_1 = require("../types");
|
|
9
|
+
const AI_CONNECTION_TYPES = [
|
|
10
|
+
'ai_languageModel',
|
|
11
|
+
'ai_memory',
|
|
12
|
+
'ai_tool',
|
|
13
|
+
'ai_outputParser',
|
|
14
|
+
'ai_embedding',
|
|
15
|
+
'ai_vectorStore',
|
|
16
|
+
'ai_retriever',
|
|
17
|
+
'ai_document',
|
|
18
|
+
'ai_textSplitter',
|
|
19
|
+
'ai_reranker',
|
|
20
|
+
];
|
|
21
|
+
function isConnectedSubnode(graphNode) {
|
|
22
|
+
for (const [connType, outputMap] of graphNode.connections) {
|
|
23
|
+
if (AI_CONNECTION_TYPES.includes(connType)) {
|
|
24
|
+
for (const [_outputIndex, targets] of outputMap) {
|
|
25
|
+
if (targets.length > 0) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
function getTargetNodeName(target) {
|
|
34
|
+
if (target === null || target === undefined) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
if ((0, type_guards_1.isIfElseComposite)(target)) {
|
|
38
|
+
const ifElse = target;
|
|
39
|
+
return ifElse.ifNode.name;
|
|
40
|
+
}
|
|
41
|
+
if ((0, type_guards_1.isSwitchCaseComposite)(target)) {
|
|
42
|
+
const switchCase = target;
|
|
43
|
+
return switchCase.switchNode.name;
|
|
44
|
+
}
|
|
45
|
+
if ((0, type_guards_1.isSplitInBatchesBuilder)(target)) {
|
|
46
|
+
const sib = target;
|
|
47
|
+
return sib.sibNode.name;
|
|
48
|
+
}
|
|
49
|
+
if (typeof target === 'object' && 'name' in target) {
|
|
50
|
+
return target.name;
|
|
51
|
+
}
|
|
52
|
+
if (typeof target === 'string') {
|
|
53
|
+
return target;
|
|
54
|
+
}
|
|
55
|
+
if (typeof target === 'number' || typeof target === 'boolean') {
|
|
56
|
+
return String(target);
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
function findNodesWithIncomingConnections(ctx, registry) {
|
|
61
|
+
const nodesWithIncoming = new Set();
|
|
62
|
+
for (const [_name, graphNode] of ctx.nodes) {
|
|
63
|
+
const mainConns = graphNode.connections.get('main');
|
|
64
|
+
if (mainConns) {
|
|
65
|
+
for (const [_outputIndex, targets] of mainConns) {
|
|
66
|
+
for (const target of targets) {
|
|
67
|
+
if (typeof target === 'object' && 'node' in target) {
|
|
68
|
+
nodesWithIncoming.add(target.node);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (typeof graphNode.instance.getConnections === 'function') {
|
|
74
|
+
const connections = graphNode.instance.getConnections();
|
|
75
|
+
for (const conn of connections) {
|
|
76
|
+
if ((0, base_1.isNodeChain)(conn.target)) {
|
|
77
|
+
nodesWithIncoming.add(conn.target.head.name);
|
|
78
|
+
}
|
|
79
|
+
else if (registry) {
|
|
80
|
+
const compositeHeadName = registry.resolveCompositeHeadName(conn.target);
|
|
81
|
+
if (compositeHeadName !== undefined) {
|
|
82
|
+
nodesWithIncoming.add(compositeHeadName);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const nodeName = getTargetNodeName(conn.target);
|
|
86
|
+
if (nodeName !== undefined) {
|
|
87
|
+
nodesWithIncoming.add(nodeName);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const nodeName = getTargetNodeName(conn.target);
|
|
93
|
+
if (nodeName !== undefined) {
|
|
94
|
+
nodesWithIncoming.add(nodeName);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return nodesWithIncoming;
|
|
101
|
+
}
|
|
102
|
+
exports.disconnectedNodeValidator = {
|
|
103
|
+
id: 'core:disconnected-node',
|
|
104
|
+
name: 'Disconnected Node Validator',
|
|
105
|
+
priority: 10,
|
|
106
|
+
validateNode: () => [],
|
|
107
|
+
validateWorkflow(ctx) {
|
|
108
|
+
if (ctx.validationOptions?.allowDisconnectedNodes) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
const issues = [];
|
|
112
|
+
const nodesWithIncoming = findNodesWithIncomingConnections(ctx);
|
|
113
|
+
for (const [mapKey, graphNode] of ctx.nodes) {
|
|
114
|
+
const originalName = graphNode.instance.name;
|
|
115
|
+
if ((0, trigger_detection_1.isTriggerNodeType)(graphNode.instance.type)) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if ((0, node_types_1.isStickyNoteType)(graphNode.instance.type)) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (isConnectedSubnode(graphNode)) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (!nodesWithIncoming.has(mapKey)) {
|
|
125
|
+
const renamed = (0, types_1.isAutoRenamed)(mapKey, originalName);
|
|
126
|
+
const displayName = renamed ? mapKey : originalName;
|
|
127
|
+
const origForWarning = renamed ? originalName : undefined;
|
|
128
|
+
const nodeRef = (0, types_1.formatNodeRef)(displayName, origForWarning, graphNode.instance.type);
|
|
129
|
+
issues.push({
|
|
130
|
+
code: 'DISCONNECTED_NODE',
|
|
131
|
+
message: `${nodeRef} is not connected to any input. It will not receive data.`,
|
|
132
|
+
severity: 'warning',
|
|
133
|
+
violationLevel: 'major',
|
|
134
|
+
nodeName: displayName,
|
|
135
|
+
originalName: origForWarning,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return issues;
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=disconnected-node-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disconnected-node-validator.js","sourceRoot":"","sources":["../../../../src/workflow-builder/plugins/validators/disconnected-node-validator.ts"],"names":[],"mappings":"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"}
|