first commit

This commit is contained in:
2025-10-26 23:10:15 +08:00
commit 8f0345b7be
14961 changed files with 2356381 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
import type { IConnections, NodeConnectionType } from '../interfaces';
export declare function getChildNodes(connectionsBySourceNode: IConnections, nodeName: string, type?: NodeConnectionType | 'ALL' | 'ALL_NON_MAIN', depth?: number): string[];
//# sourceMappingURL=get-child-nodes.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-child-nodes.d.ts","sourceRoot":"","sources":["../../../src/common/get-child-nodes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEtE,wBAAgB,aAAa,CAC5B,uBAAuB,EAAE,YAAY,EACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,kBAAkB,GAAG,KAAK,GAAG,cAAyC,EAC5E,KAAK,SAAK,GACR,MAAM,EAAE,CAEV"}

View File

@@ -0,0 +1,19 @@
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./get-connected-nodes", "../interfaces"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getChildNodes = getChildNodes;
const get_connected_nodes_1 = require("./get-connected-nodes");
const interfaces_1 = require("../interfaces");
function getChildNodes(connectionsBySourceNode, nodeName, type = interfaces_1.NodeConnectionTypes.Main, depth = -1) {
return (0, get_connected_nodes_1.getConnectedNodes)(connectionsBySourceNode, nodeName, type, depth);
}
});
//# sourceMappingURL=get-child-nodes.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-child-nodes.js","sourceRoot":"","sources":["../../../src/common/get-child-nodes.ts"],"names":[],"mappings":";;;;;;;;;;;IAIA,sCAOC;IAXD,+DAA0D;IAC1D,8CAAoD;IAGpD,SAAgB,aAAa,CAC5B,uBAAqC,EACrC,QAAgB,EAChB,OAAoD,gCAAmB,CAAC,IAAI,EAC5E,KAAK,GAAG,CAAC,CAAC;QAEV,OAAO,IAAA,uCAAiB,EAAC,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC"}

View File

@@ -0,0 +1,10 @@
import type { IConnections, NodeConnectionType } from '../interfaces';
/**
* Gets all the nodes which are connected nodes starting from
* the given one
*
* @param {NodeConnectionType} [type='main']
* @param {*} [depth=-1]
*/
export declare function getConnectedNodes(connections: IConnections, nodeName: string, connectionType?: NodeConnectionType | 'ALL' | 'ALL_NON_MAIN', depth?: number, checkedNodesIncoming?: string[]): string[];
//# sourceMappingURL=get-connected-nodes.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-connected-nodes.d.ts","sourceRoot":"","sources":["../../../src/common/get-connected-nodes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEtE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAChC,WAAW,EAAE,YAAY,EACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,GAAE,kBAAkB,GAAG,KAAK,GAAG,cAAyC,EACtF,KAAK,SAAK,EACV,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAC7B,MAAM,EAAE,CAiFV"}

View File

@@ -0,0 +1,84 @@
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "../interfaces"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getConnectedNodes = getConnectedNodes;
const interfaces_1 = require("../interfaces");
/**
* Gets all the nodes which are connected nodes starting from
* the given one
*
* @param {NodeConnectionType} [type='main']
* @param {*} [depth=-1]
*/
function getConnectedNodes(connections, nodeName, connectionType = interfaces_1.NodeConnectionTypes.Main, depth = -1, checkedNodesIncoming) {
const newDepth = depth === -1 ? depth : depth - 1;
if (depth === 0) {
// Reached max depth
return [];
}
if (!connections.hasOwnProperty(nodeName)) {
// Node does not have incoming connections
return [];
}
let types;
if (connectionType === 'ALL') {
types = Object.keys(connections[nodeName]);
}
else if (connectionType === 'ALL_NON_MAIN') {
types = Object.keys(connections[nodeName]).filter((type) => type !== 'main');
}
else {
types = [connectionType];
}
let addNodes;
let nodeIndex;
let i;
let parentNodeName;
const returnNodes = [];
types.forEach((type) => {
if (!connections[nodeName].hasOwnProperty(type)) {
// Node does not have incoming connections of given type
return;
}
const checkedNodes = checkedNodesIncoming ? [...checkedNodesIncoming] : [];
if (checkedNodes.includes(nodeName)) {
// Node got checked already before
return;
}
checkedNodes.push(nodeName);
connections[nodeName][type].forEach((connectionsByIndex) => {
connectionsByIndex?.forEach((connection) => {
if (checkedNodes.includes(connection.node)) {
// Node got checked already before
return;
}
returnNodes.unshift(connection.node);
addNodes = getConnectedNodes(connections, connection.node, connectionType, newDepth, checkedNodes);
for (i = addNodes.length; i--; i > 0) {
// Because nodes can have multiple parents it is possible that
// parts of the tree is parent of both and to not add nodes
// twice check first if they already got added before.
parentNodeName = addNodes[i];
nodeIndex = returnNodes.indexOf(parentNodeName);
if (nodeIndex !== -1) {
// Node got found before so remove it from current location
// that node-order stays correct
returnNodes.splice(nodeIndex, 1);
}
returnNodes.unshift(parentNodeName);
}
});
});
});
return returnNodes;
}
});
//# sourceMappingURL=get-connected-nodes.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-connected-nodes.js","sourceRoot":"","sources":["../../../src/common/get-connected-nodes.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,9 @@
import type { INode, INodes } from '../interfaces';
/**
* Returns the node with the given name if it exists else null
*
* @param {INodes} nodes Nodes to search in
* @param {string} name Name of the node to return
*/
export declare function getNodeByName(nodes: INodes | INode[], name: string): INode | null;
//# sourceMappingURL=get-node-by-name.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-node-by-name.d.ts","sourceRoot":"","sources":["../../../src/common/get-node-by-name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,gBAUlE"}

View File

@@ -0,0 +1,29 @@
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNodeByName = getNodeByName;
/**
* Returns the node with the given name if it exists else null
*
* @param {INodes} nodes Nodes to search in
* @param {string} name Name of the node to return
*/
function getNodeByName(nodes, name) {
if (Array.isArray(nodes)) {
return nodes.find((node) => node.name === name) || null;
}
if (nodes.hasOwnProperty(name)) {
return nodes[name];
}
return null;
}
});
//# sourceMappingURL=get-node-by-name.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-node-by-name.js","sourceRoot":"","sources":["../../../src/common/get-node-by-name.ts"],"names":[],"mappings":";;;;;;;;;;;IAQA,sCAUC;IAhBD;;;;;OAKG;IACH,SAAgB,aAAa,CAAC,KAAuB,EAAE,IAAY;QAClE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;QACzD,CAAC;QAED,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC"}

View File

@@ -0,0 +1,9 @@
import type { IConnections, NodeConnectionType } from '../interfaces';
/**
* Returns all the nodes before the given one
*
* @param {NodeConnectionType} [type='main']
* @param {*} [depth=-1]
*/
export declare function getParentNodes(connectionsByDestinationNode: IConnections, nodeName: string, type?: NodeConnectionType | 'ALL' | 'ALL_NON_MAIN', depth?: number): string[];
//# sourceMappingURL=get-parent-nodes.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-parent-nodes.d.ts","sourceRoot":"","sources":["../../../src/common/get-parent-nodes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEtE;;;;;GAKG;AACH,wBAAgB,cAAc,CAC7B,4BAA4B,EAAE,YAAY,EAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,kBAAkB,GAAG,KAAK,GAAG,cAAyC,EAC5E,KAAK,SAAK,GACR,MAAM,EAAE,CAEV"}

View File

@@ -0,0 +1,25 @@
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./get-connected-nodes", "../interfaces"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getParentNodes = getParentNodes;
const get_connected_nodes_1 = require("./get-connected-nodes");
const interfaces_1 = require("../interfaces");
/**
* Returns all the nodes before the given one
*
* @param {NodeConnectionType} [type='main']
* @param {*} [depth=-1]
*/
function getParentNodes(connectionsByDestinationNode, nodeName, type = interfaces_1.NodeConnectionTypes.Main, depth = -1) {
return (0, get_connected_nodes_1.getConnectedNodes)(connectionsByDestinationNode, nodeName, type, depth);
}
});
//# sourceMappingURL=get-parent-nodes.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-parent-nodes.js","sourceRoot":"","sources":["../../../src/common/get-parent-nodes.ts"],"names":[],"mappings":";;;;;;;;;;;IAUA,wCAOC;IAjBD,+DAA0D;IAC1D,8CAAoD;IAGpD;;;;;OAKG;IACH,SAAgB,cAAc,CAC7B,4BAA0C,EAC1C,QAAgB,EAChB,OAAoD,gCAAmB,CAAC,IAAI,EAC5E,KAAK,GAAG,CAAC,CAAC;QAEV,OAAO,IAAA,uCAAiB,EAAC,4BAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/E,CAAC"}

6
node_modules/n8n-workflow/dist/cjs/common/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,6 @@
export * from './get-child-nodes';
export * from './get-connected-nodes';
export * from './get-node-by-name';
export * from './get-parent-nodes';
export * from './map-connections-by-destination';
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC"}

32
node_modules/n8n-workflow/dist/cjs/common/index.js generated vendored Normal file
View File

@@ -0,0 +1,32 @@
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./get-child-nodes", "./get-connected-nodes", "./get-node-by-name", "./get-parent-nodes", "./map-connections-by-destination"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./get-child-nodes"), exports);
__exportStar(require("./get-connected-nodes"), exports);
__exportStar(require("./get-node-by-name"), exports);
__exportStar(require("./get-parent-nodes"), exports);
__exportStar(require("./map-connections-by-destination"), exports);
});
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;IAAA,oDAAkC;IAClC,wDAAsC;IACtC,qDAAmC;IACnC,qDAAmC;IACnC,mEAAiD"}

View File

@@ -0,0 +1,3 @@
import type { IConnections } from '../interfaces';
export declare function mapConnectionsByDestination(connections: IConnections): IConnections;
//# sourceMappingURL=map-connections-by-destination.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"map-connections-by-destination.d.ts","sourceRoot":"","sources":["../../../src/common/map-connections-by-destination.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAsB,MAAM,eAAe,CAAC;AAEtE,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,YAAY,gBA4CpE"}

View File

@@ -0,0 +1,53 @@
/* eslint-disable @typescript-eslint/no-for-in-array */
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.mapConnectionsByDestination = mapConnectionsByDestination;
function mapConnectionsByDestination(connections) {
const returnConnection = {};
let connectionInfo;
let maxIndex;
for (const sourceNode in connections) {
if (!connections.hasOwnProperty(sourceNode)) {
continue;
}
for (const type of Object.keys(connections[sourceNode])) {
if (!connections[sourceNode].hasOwnProperty(type)) {
continue;
}
for (const inputIndex in connections[sourceNode][type]) {
if (!connections[sourceNode][type].hasOwnProperty(inputIndex)) {
continue;
}
for (connectionInfo of connections[sourceNode][type][inputIndex] ?? []) {
if (!returnConnection.hasOwnProperty(connectionInfo.node)) {
returnConnection[connectionInfo.node] = {};
}
if (!returnConnection[connectionInfo.node].hasOwnProperty(connectionInfo.type)) {
returnConnection[connectionInfo.node][connectionInfo.type] = [];
}
maxIndex = returnConnection[connectionInfo.node][connectionInfo.type].length - 1;
for (let j = maxIndex; j < connectionInfo.index; j++) {
returnConnection[connectionInfo.node][connectionInfo.type].push([]);
}
returnConnection[connectionInfo.node][connectionInfo.type][connectionInfo.index]?.push({
node: sourceNode,
type,
index: parseInt(inputIndex, 10),
});
}
}
}
}
return returnConnection;
}
});
//# sourceMappingURL=map-connections-by-destination.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"map-connections-by-destination.js","sourceRoot":"","sources":["../../../src/common/map-connections-by-destination.ts"],"names":[],"mappings":"AAAA,uDAAuD;;;;;;;;;;;;IAIvD,kEA4CC;IA5CD,SAAgB,2BAA2B,CAAC,WAAyB;QACpE,MAAM,gBAAgB,GAAiB,EAAE,CAAC;QAE1C,IAAI,cAAc,CAAC;QACnB,IAAI,QAAgB,CAAC;QACrB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7C,SAAS;YACV,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAyB,EAAE,CAAC;gBACjF,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnD,SAAS;gBACV,CAAC;gBAED,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC/D,SAAS;oBACV,CAAC;oBAED,KAAK,cAAc,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;wBACxE,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC3D,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC5C,CAAC;wBACD,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;4BAChF,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;wBACjE,CAAC;wBAED,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;wBACjF,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;4BACtD,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACrE,CAAC;wBAED,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;4BACtF,IAAI,EAAE,UAAU;4BAChB,IAAI;4BACJ,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;yBAC/B,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,gBAAgB,CAAC;IACzB,CAAC"}