@n8n/workflow-sdk 0.31.1 → 0.32.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/codegen/code-generator.d.ts +1 -0
- package/dist/codegen/code-generator.js +10 -9
- package/dist/codegen/code-generator.js.map +1 -1
- package/dist/codegen/index.d.ts +2 -1
- package/dist/codegen/index.js +5 -2
- package/dist/codegen/index.js.map +1 -1
- package/dist/codegen/locate-node-declarations.d.ts +6 -0
- package/dist/codegen/locate-node-declarations.js +65 -0
- package/dist/codegen/locate-node-declarations.js.map +1 -0
- package/dist/codegen/string-utils.d.ts +4 -0
- package/dist/codegen/string-utils.js +75 -0
- package/dist/codegen/string-utils.js.map +1 -1
- package/dist/codegen/subnode-generator.d.ts +1 -0
- package/dist/codegen/subnode-generator.js +30 -13
- package/dist/codegen/subnode-generator.js.map +1 -1
- package/dist/generate-types/generate-node-defs-cli.d.ts +1 -1
- package/dist/generate-types/generate-node-defs-cli.js +8 -3
- package/dist/generate-types/generate-node-defs-cli.js.map +1 -1
- package/dist/generate-types/generate-types.d.ts +5 -0
- package/dist/generate-types/generate-types.js +129 -36
- package/dist/generate-types/generate-types.js.map +1 -1
- package/dist/generate-types/schema-coverage-cli.d.ts +1 -0
- package/dist/generate-types/schema-coverage-cli.js +58 -0
- package/dist/generate-types/schema-coverage-cli.js.map +1 -0
- package/dist/generate-types/schema-coverage.d.ts +27 -0
- package/dist/generate-types/schema-coverage.js +101 -0
- package/dist/generate-types/schema-coverage.js.map +1 -0
- package/dist/generate-types/schema-harvest-cli.d.ts +1 -0
- package/dist/generate-types/schema-harvest-cli.js +65 -0
- package/dist/generate-types/schema-harvest-cli.js.map +1 -0
- package/dist/generate-types/schema-harvest.d.ts +26 -0
- package/dist/generate-types/schema-harvest.js +303 -0
- package/dist/generate-types/schema-harvest.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/mock-data/ai-root-shapes.d.ts +1 -0
- package/dist/mock-data/ai-root-shapes.js +19 -0
- package/dist/mock-data/ai-root-shapes.js.map +1 -1
- package/dist/mock-data/index.d.ts +2 -1
- package/dist/mock-data/index.js +4 -1
- package/dist/mock-data/index.js.map +1 -1
- package/dist/mock-data/placeholder.d.ts +5 -0
- package/dist/mock-data/placeholder.js +187 -0
- package/dist/mock-data/placeholder.js.map +1 -0
- package/dist/node-deprecation.d.ts +2 -0
- package/dist/node-deprecation.js +11 -0
- package/dist/node-deprecation.js.map +1 -0
- package/dist/validation/validate-workflow-builder.js +5 -4
- package/dist/validation/validate-workflow-builder.js.map +1 -1
- package/dist/validation/validate-workflow.d.ts +1 -1
- package/dist/validation/validate-workflow.js +19 -0
- package/dist/validation/validate-workflow.js.map +1 -1
- package/package.json +11 -9
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type NodeTypeDescription } from './generate-types';
|
|
2
|
+
export interface UncoveredCombo {
|
|
3
|
+
resource: string;
|
|
4
|
+
operation: string;
|
|
5
|
+
}
|
|
6
|
+
export interface NodeSchemaCoverage {
|
|
7
|
+
nodeName: string;
|
|
8
|
+
latestVersion: number;
|
|
9
|
+
latestTotalCombos: number;
|
|
10
|
+
latestCoveredCombos: number;
|
|
11
|
+
allTotalCombos: number;
|
|
12
|
+
allCoveredCombos: number;
|
|
13
|
+
uncovered: UncoveredCombo[];
|
|
14
|
+
}
|
|
15
|
+
interface CoverageTotals {
|
|
16
|
+
totalCombos: number;
|
|
17
|
+
coveredCombos: number;
|
|
18
|
+
coveragePercent: number;
|
|
19
|
+
}
|
|
20
|
+
export interface SchemaCoverageReport {
|
|
21
|
+
latest: CoverageTotals;
|
|
22
|
+
allVersions: CoverageTotals;
|
|
23
|
+
nodes: NodeSchemaCoverage[];
|
|
24
|
+
}
|
|
25
|
+
export declare function computeSchemaCoverage(nodes: NodeTypeDescription[]): SchemaCoverageReport;
|
|
26
|
+
export declare function formatCoverageMarkdown(report: SchemaCoverageReport): string;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeSchemaCoverage = computeSchemaCoverage;
|
|
4
|
+
exports.formatCoverageMarkdown = formatCoverageMarkdown;
|
|
5
|
+
const generate_types_1 = require("./generate-types");
|
|
6
|
+
function resourceOperationCombos(node) {
|
|
7
|
+
const combos = [];
|
|
8
|
+
for (const combo of (0, generate_types_1.extractDiscriminatorCombinations)(node)) {
|
|
9
|
+
if (combo.resource !== undefined &&
|
|
10
|
+
combo.operation !== undefined &&
|
|
11
|
+
!(0, generate_types_1.isCustomApiCall)(combo.operation)) {
|
|
12
|
+
combos.push({ resource: combo.resource, operation: combo.operation });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return combos;
|
|
16
|
+
}
|
|
17
|
+
function isLegacyDescription(node, versions) {
|
|
18
|
+
return node.defaultVersion !== undefined && !versions.includes(node.defaultVersion);
|
|
19
|
+
}
|
|
20
|
+
function computeSchemaCoverage(nodes) {
|
|
21
|
+
const nodeReports = [];
|
|
22
|
+
for (const node of nodes) {
|
|
23
|
+
const combos = resourceOperationCombos(node);
|
|
24
|
+
if (combos.length === 0)
|
|
25
|
+
continue;
|
|
26
|
+
const versions = Array.isArray(node.version) ? node.version : [node.version];
|
|
27
|
+
if (isLegacyDescription(node, versions))
|
|
28
|
+
continue;
|
|
29
|
+
const latestVersion = Math.max(...versions);
|
|
30
|
+
const uncovered = [];
|
|
31
|
+
let latestCoveredCombos = 0;
|
|
32
|
+
let allCoveredCombos = 0;
|
|
33
|
+
for (const version of versions) {
|
|
34
|
+
const schemas = (0, generate_types_1.discoverSchemasForNode)(node.name, version, node.schemaPath);
|
|
35
|
+
for (const combo of combos) {
|
|
36
|
+
if ((0, generate_types_1.findSchemaForOperation)(schemas, combo.resource, combo.operation)) {
|
|
37
|
+
allCoveredCombos++;
|
|
38
|
+
if (version === latestVersion)
|
|
39
|
+
latestCoveredCombos++;
|
|
40
|
+
}
|
|
41
|
+
else if (version === latestVersion) {
|
|
42
|
+
uncovered.push(combo);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
nodeReports.push({
|
|
47
|
+
nodeName: node.name,
|
|
48
|
+
latestVersion,
|
|
49
|
+
latestTotalCombos: combos.length,
|
|
50
|
+
latestCoveredCombos,
|
|
51
|
+
allTotalCombos: combos.length * versions.length,
|
|
52
|
+
allCoveredCombos,
|
|
53
|
+
uncovered,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
latest: sumTotals(nodeReports, (n) => [n.latestTotalCombos, n.latestCoveredCombos]),
|
|
58
|
+
allVersions: sumTotals(nodeReports, (n) => [n.allTotalCombos, n.allCoveredCombos]),
|
|
59
|
+
nodes: nodeReports.sort((a, b) => b.uncovered.length - a.uncovered.length),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function sumTotals(nodes, pick) {
|
|
63
|
+
let totalCombos = 0;
|
|
64
|
+
let coveredCombos = 0;
|
|
65
|
+
for (const node of nodes) {
|
|
66
|
+
const [total, covered] = pick(node);
|
|
67
|
+
totalCombos += total;
|
|
68
|
+
coveredCombos += covered;
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
totalCombos,
|
|
72
|
+
coveredCombos,
|
|
73
|
+
coveragePercent: totalCombos === 0 ? 0 : roundToOneDecimal((coveredCombos / totalCombos) * 100),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function roundToOneDecimal(value) {
|
|
77
|
+
return Math.round(value * 10) / 10;
|
|
78
|
+
}
|
|
79
|
+
function formatCoverageMarkdown(report) {
|
|
80
|
+
const lines = [
|
|
81
|
+
'# Output schema coverage',
|
|
82
|
+
'',
|
|
83
|
+
`Covered (latest node version): ${report.latest.coveragePercent}% (${report.latest.coveredCombos}/${report.latest.totalCombos})`,
|
|
84
|
+
`Covered (all node versions): ${report.allVersions.coveragePercent}% (${report.allVersions.coveredCombos}/${report.allVersions.totalCombos})`,
|
|
85
|
+
'',
|
|
86
|
+
'| Node | Latest version | Covered / Total | % | Top uncovered combos |',
|
|
87
|
+
'| --- | --- | --- | --- | --- |',
|
|
88
|
+
];
|
|
89
|
+
for (const node of report.nodes) {
|
|
90
|
+
if (node.latestTotalCombos === 0)
|
|
91
|
+
continue;
|
|
92
|
+
const percent = roundToOneDecimal((node.latestCoveredCombos / node.latestTotalCombos) * 100);
|
|
93
|
+
const topUncovered = node.uncovered
|
|
94
|
+
.slice(0, 5)
|
|
95
|
+
.map((combo) => `${combo.resource}/${combo.operation}`)
|
|
96
|
+
.join(', ');
|
|
97
|
+
lines.push(`| ${node.nodeName} | ${node.latestVersion} | ${node.latestCoveredCombos}/${node.latestTotalCombos} | ${percent}% | ${topUncovered} |`);
|
|
98
|
+
}
|
|
99
|
+
return lines.join('\n');
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=schema-coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-coverage.js","sourceRoot":"","sources":["../../src/generate-types/schema-coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const path = __importStar(require("path"));
|
|
37
|
+
const schema_harvest_1 = require("./schema-harvest");
|
|
38
|
+
const NODES_BASE_NODES_DIR = path.resolve(__dirname, '../../../../nodes-base/nodes');
|
|
39
|
+
function main() {
|
|
40
|
+
const dryRun = process.argv.includes('--dry-run');
|
|
41
|
+
const result = (0, schema_harvest_1.harvestOutputSchemas)({ nodesRootDir: NODES_BASE_NODES_DIR, dryRun });
|
|
42
|
+
console.log(`${dryRun ? 'Would write' : 'Wrote'} ${result.written.length} schema file(s) from ${result.written.length + result.skippedExisting.length + result.unmapped.length} fixture(s) scanned.`);
|
|
43
|
+
console.log(`Skipped (already covered): ${result.skippedExisting.length}`);
|
|
44
|
+
console.log(`Unmapped (could not derive a schema): ${result.unmapped.length}`);
|
|
45
|
+
if (result.written.length > 0) {
|
|
46
|
+
console.log('\nWritten:');
|
|
47
|
+
for (const entry of result.written) {
|
|
48
|
+
console.log(` ${path.relative(NODES_BASE_NODES_DIR, entry.filePath)}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (result.unmapped.length > 0) {
|
|
52
|
+
const byReason = new Map();
|
|
53
|
+
for (const entry of result.unmapped) {
|
|
54
|
+
byReason.set(entry.reason, (byReason.get(entry.reason) ?? 0) + 1);
|
|
55
|
+
}
|
|
56
|
+
console.log('\nUnmapped reasons:');
|
|
57
|
+
for (const [reason, count] of byReason) {
|
|
58
|
+
console.log(` ${reason}: ${count}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (require.main === module) {
|
|
63
|
+
main();
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=schema-harvest-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-harvest-cli.js","sourceRoot":"","sources":["../../src/generate-types/schema-harvest-cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAY,IAAI,iCAAa;AAE7B,qDAAwD;AAExD,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;AAErF,SAAS,IAAI;IACZ,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAA,qCAAoB,EAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,CAAC;IAEpF,OAAO,CAAC,GAAG,CACV,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,wBAAwB,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,sBAAsB,CACxL,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,yCAAyC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/E,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACF,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;AACF,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC7B,IAAI,EAAE,CAAC;AACR,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface HarvestedSchema {
|
|
2
|
+
fixturePath: string;
|
|
3
|
+
filePath: string;
|
|
4
|
+
nodeName: string;
|
|
5
|
+
version: number;
|
|
6
|
+
resource: string;
|
|
7
|
+
operation: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SkippedExisting {
|
|
10
|
+
fixturePath: string;
|
|
11
|
+
filePath: string;
|
|
12
|
+
}
|
|
13
|
+
export interface UnmappedFixture {
|
|
14
|
+
fixturePath: string;
|
|
15
|
+
reason: 'no-node-path-segment' | 'unexpected-path-shape' | 'parse-error' | 'no-unique-target-node' | 'no-operation-determined' | 'no-output-sample' | 'superseded-major' | 'user-shaped-output';
|
|
16
|
+
}
|
|
17
|
+
export interface HarvestResult {
|
|
18
|
+
written: HarvestedSchema[];
|
|
19
|
+
skippedExisting: SkippedExisting[];
|
|
20
|
+
unmapped: UnmappedFixture[];
|
|
21
|
+
}
|
|
22
|
+
export interface HarvestOptions {
|
|
23
|
+
nodesRootDir: string;
|
|
24
|
+
dryRun?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function harvestOutputSchemas(options: HarvestOptions): HarvestResult;
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.harvestOutputSchemas = harvestOutputSchemas;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const generate_types_1 = require("./generate-types");
|
|
40
|
+
const json_schema_from_data_1 = require("./json-schema-from-data");
|
|
41
|
+
const VERSION_SEGMENT = /^v[\d.]+$/;
|
|
42
|
+
function maxSchemaMajor(schemaDir) {
|
|
43
|
+
let entries;
|
|
44
|
+
try {
|
|
45
|
+
entries = fs.readdirSync(schemaDir, { withFileTypes: true });
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
let max = 0;
|
|
51
|
+
for (const entry of entries) {
|
|
52
|
+
if (!entry.isDirectory() || !VERSION_SEGMENT.test(entry.name))
|
|
53
|
+
continue;
|
|
54
|
+
const major = Number(entry.name.slice(1).split('.')[0]);
|
|
55
|
+
if (major > max)
|
|
56
|
+
max = major;
|
|
57
|
+
}
|
|
58
|
+
return max;
|
|
59
|
+
}
|
|
60
|
+
function findWorkflowFixtures(dir, results) {
|
|
61
|
+
let entries;
|
|
62
|
+
try {
|
|
63
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
for (const entry of entries) {
|
|
69
|
+
const entryPath = path.join(dir, entry.name);
|
|
70
|
+
if (entry.isDirectory()) {
|
|
71
|
+
findWorkflowFixtures(entryPath, results);
|
|
72
|
+
}
|
|
73
|
+
else if (entry.name.endsWith('.workflow.json')) {
|
|
74
|
+
results.push(entryPath);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function parseFixturePath(nodesRootDir, fixturePath) {
|
|
79
|
+
const relative = path.relative(nodesRootDir, fixturePath);
|
|
80
|
+
const parts = relative.split(path.sep);
|
|
81
|
+
const testIndex = parts.indexOf('test');
|
|
82
|
+
if (testIndex === -1)
|
|
83
|
+
return undefined;
|
|
84
|
+
const nodeFolderSegments = parts.slice(0, testIndex);
|
|
85
|
+
const afterTest = parts.slice(testIndex + 1);
|
|
86
|
+
const nodeIndex = afterTest.indexOf('node');
|
|
87
|
+
if (nodeIndex === -1)
|
|
88
|
+
return undefined;
|
|
89
|
+
let rest = afterTest.slice(nodeIndex + 1);
|
|
90
|
+
if (rest.length > 0 && VERSION_SEGMENT.test(rest[0])) {
|
|
91
|
+
rest = rest.slice(1);
|
|
92
|
+
}
|
|
93
|
+
if (rest.length !== 1 && rest.length !== 2)
|
|
94
|
+
return undefined;
|
|
95
|
+
const filename = rest[rest.length - 1];
|
|
96
|
+
const pathOperation = filename.split('.')[0];
|
|
97
|
+
const pathResource = rest.length === 2 ? rest[0] : undefined;
|
|
98
|
+
return { nodeFolderSegments, pathResource, pathOperation };
|
|
99
|
+
}
|
|
100
|
+
function findTargetNode(nodes, nodeFolderSegments) {
|
|
101
|
+
const folderKey = nodeFolderSegments.join('').toLowerCase();
|
|
102
|
+
const candidates = nodes.filter((node) => node.type.split('.').pop()?.toLowerCase() === folderKey);
|
|
103
|
+
return candidates.length === 1 ? candidates[0] : undefined;
|
|
104
|
+
}
|
|
105
|
+
function findOutputSample(fixture, targetNode) {
|
|
106
|
+
const directPin = fixture.pinData?.[targetNode.name];
|
|
107
|
+
if (directPin && directPin.length > 0)
|
|
108
|
+
return directPin[0].json;
|
|
109
|
+
const connections = fixture.connections?.[targetNode.name]?.main?.[0] ?? [];
|
|
110
|
+
for (const connection of connections) {
|
|
111
|
+
const downstream = fixture.nodes?.find((node) => node.name === connection.node);
|
|
112
|
+
if (downstream?.type !== 'n8n-nodes-base.noOp')
|
|
113
|
+
continue;
|
|
114
|
+
const downstreamPin = fixture.pinData?.[downstream.name];
|
|
115
|
+
if (downstreamPin && downstreamPin.length > 0)
|
|
116
|
+
return downstreamPin[0].json;
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
function isStringParam(value) {
|
|
121
|
+
return typeof value === 'string';
|
|
122
|
+
}
|
|
123
|
+
function stringifySorted(value) {
|
|
124
|
+
return JSON.stringify(value, sortKeysReplacer, 4) + '\n';
|
|
125
|
+
}
|
|
126
|
+
function sortKeysReplacer(_key, value) {
|
|
127
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
128
|
+
return value;
|
|
129
|
+
const sorted = {};
|
|
130
|
+
for (const key of Object.keys(value).sort()) {
|
|
131
|
+
sorted[key] = value[key];
|
|
132
|
+
}
|
|
133
|
+
return sorted;
|
|
134
|
+
}
|
|
135
|
+
const USER_SHAPED_OPERATIONS = new Set([
|
|
136
|
+
'n8n-nodes-base.microsoftExcel:table:append',
|
|
137
|
+
'n8n-nodes-base.microsoftExcel:table:getRows',
|
|
138
|
+
'n8n-nodes-base.microsoftExcel:table:lookup',
|
|
139
|
+
'n8n-nodes-base.microsoftExcel:worksheet:append',
|
|
140
|
+
'n8n-nodes-base.microsoftExcel:worksheet:readRows',
|
|
141
|
+
'n8n-nodes-base.microsoftExcel:worksheet:update',
|
|
142
|
+
'n8n-nodes-base.microsoftExcel:worksheet:upsert',
|
|
143
|
+
]);
|
|
144
|
+
const OPAQUE_OUTPUT_PROPERTIES = new Set(['custom_fields']);
|
|
145
|
+
const OPAQUE_KEY = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|[0-9a-f]{32,})$/i;
|
|
146
|
+
function relaxInferredSchema(schema) {
|
|
147
|
+
if (schema.type === 'null')
|
|
148
|
+
return {};
|
|
149
|
+
if (schema.type === 'array') {
|
|
150
|
+
return { type: 'array', items: schema.items ? relaxInferredSchema(schema.items) : {} };
|
|
151
|
+
}
|
|
152
|
+
if (schema.type === 'object' && schema.properties) {
|
|
153
|
+
const named = {};
|
|
154
|
+
const keyedByRecordId = [];
|
|
155
|
+
for (const [key, value] of Object.entries(schema.properties)) {
|
|
156
|
+
const relaxed = OPAQUE_OUTPUT_PROPERTIES.has(key) && value.type === 'object'
|
|
157
|
+
? { type: 'object' }
|
|
158
|
+
: relaxInferredSchema(value);
|
|
159
|
+
if (OPAQUE_KEY.test(key))
|
|
160
|
+
keyedByRecordId.push(relaxed);
|
|
161
|
+
else
|
|
162
|
+
named[key] = relaxed;
|
|
163
|
+
}
|
|
164
|
+
if (keyedByRecordId.length > 0 && Object.keys(named).length === 0) {
|
|
165
|
+
return { type: 'object', additionalProperties: keyedByRecordId.reduce(mergeSchemas) };
|
|
166
|
+
}
|
|
167
|
+
return { type: 'object', properties: named };
|
|
168
|
+
}
|
|
169
|
+
return schema;
|
|
170
|
+
}
|
|
171
|
+
function unionTypes(a, b) {
|
|
172
|
+
const types = [...new Set([a ?? [], b ?? []].flat())].sort();
|
|
173
|
+
return types.length === 1 ? types[0] : types;
|
|
174
|
+
}
|
|
175
|
+
function isSchemaValue(value) {
|
|
176
|
+
return typeof value === 'object';
|
|
177
|
+
}
|
|
178
|
+
function mergeSchemas(a, b) {
|
|
179
|
+
if (a.type === undefined)
|
|
180
|
+
return b;
|
|
181
|
+
if (b.type === undefined)
|
|
182
|
+
return a;
|
|
183
|
+
if (a.type === 'object' && b.type === 'object') {
|
|
184
|
+
return mergeObjectSchemas(a, b);
|
|
185
|
+
}
|
|
186
|
+
if (a.type === 'array' && b.type === 'array') {
|
|
187
|
+
return { type: 'array', items: mergeSchemas(a.items ?? {}, b.items ?? {}) };
|
|
188
|
+
}
|
|
189
|
+
return a.type === b.type ? a : { type: unionTypes(a.type, b.type) };
|
|
190
|
+
}
|
|
191
|
+
function mergeObjectSchemas(a, b) {
|
|
192
|
+
const properties = { ...a.properties };
|
|
193
|
+
for (const [key, value] of Object.entries(b.properties ?? {})) {
|
|
194
|
+
const existing = properties[key];
|
|
195
|
+
properties[key] = existing ? mergeSchemas(existing, value) : value;
|
|
196
|
+
}
|
|
197
|
+
const maps = [a.additionalProperties, b.additionalProperties].filter(isSchemaValue);
|
|
198
|
+
if (maps.length === 0)
|
|
199
|
+
return { type: 'object', properties };
|
|
200
|
+
const additionalProperties = maps.reduce(mergeSchemas);
|
|
201
|
+
return Object.keys(properties).length === 0
|
|
202
|
+
? { type: 'object', additionalProperties }
|
|
203
|
+
: { type: 'object', properties, additionalProperties };
|
|
204
|
+
}
|
|
205
|
+
function isCoveredBySameMajor(schemaDir, major, relativeFile) {
|
|
206
|
+
let entries;
|
|
207
|
+
try {
|
|
208
|
+
entries = fs.readdirSync(schemaDir, { withFileTypes: true });
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
return entries.some((entry) => entry.isDirectory() &&
|
|
214
|
+
VERSION_SEGMENT.test(entry.name) &&
|
|
215
|
+
Number(entry.name.slice(1).split('.')[0]) === major &&
|
|
216
|
+
fs.existsSync(path.join(schemaDir, entry.name, relativeFile)));
|
|
217
|
+
}
|
|
218
|
+
function harvestOutputSchemas(options) {
|
|
219
|
+
const { nodesRootDir, dryRun = false } = options;
|
|
220
|
+
const fixturePaths = [];
|
|
221
|
+
findWorkflowFixtures(nodesRootDir, fixturePaths);
|
|
222
|
+
fixturePaths.sort();
|
|
223
|
+
const result = { written: [], skippedExisting: [], unmapped: [] };
|
|
224
|
+
const claims = new Map();
|
|
225
|
+
for (const fixturePath of fixturePaths) {
|
|
226
|
+
const parsed = parseFixturePath(nodesRootDir, fixturePath);
|
|
227
|
+
if (!parsed) {
|
|
228
|
+
result.unmapped.push({ fixturePath, reason: 'no-node-path-segment' });
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const { nodeFolderSegments, pathResource, pathOperation } = parsed;
|
|
232
|
+
let fixture;
|
|
233
|
+
try {
|
|
234
|
+
fixture = JSON.parse(fs.readFileSync(fixturePath, 'utf-8'));
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
result.unmapped.push({ fixturePath, reason: 'parse-error' });
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
const targetNode = findTargetNode(fixture.nodes ?? [], nodeFolderSegments);
|
|
241
|
+
if (!targetNode) {
|
|
242
|
+
result.unmapped.push({ fixturePath, reason: 'no-unique-target-node' });
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
const params = targetNode.parameters ?? {};
|
|
246
|
+
const operation = isStringParam(params.operation)
|
|
247
|
+
? params.operation
|
|
248
|
+
: pathResource !== undefined
|
|
249
|
+
? pathOperation
|
|
250
|
+
: undefined;
|
|
251
|
+
if (operation === undefined) {
|
|
252
|
+
result.unmapped.push({ fixturePath, reason: 'no-operation-determined' });
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const resource = isStringParam(params.resource) ? params.resource : (pathResource ?? '');
|
|
256
|
+
if (USER_SHAPED_OPERATIONS.has(`${targetNode.type}:${resource}:${operation}`)) {
|
|
257
|
+
result.unmapped.push({ fixturePath, reason: 'user-shaped-output' });
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
const sample = findOutputSample(fixture, targetNode);
|
|
261
|
+
if (sample === undefined) {
|
|
262
|
+
result.unmapped.push({ fixturePath, reason: 'no-output-sample' });
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const inferredSchema = relaxInferredSchema((0, json_schema_from_data_1.generateJsonSchemaFromData)(sample));
|
|
266
|
+
const targetVersion = targetNode.typeVersion ?? 1;
|
|
267
|
+
const versionDir = `v${(0, generate_types_1.padVersion)(targetVersion)}`;
|
|
268
|
+
const schemaDir = path.join(nodesRootDir, ...nodeFolderSegments, '__schema__');
|
|
269
|
+
if (Math.floor(targetVersion) < maxSchemaMajor(schemaDir)) {
|
|
270
|
+
result.unmapped.push({ fixturePath, reason: 'superseded-major' });
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
const relativeFile = resource ? path.join(resource, `${operation}.json`) : `${operation}.json`;
|
|
274
|
+
const filePath = path.join(schemaDir, versionDir, relativeFile);
|
|
275
|
+
const claim = claims.get(filePath);
|
|
276
|
+
if (claim) {
|
|
277
|
+
claims.set(filePath, mergeSchemas(claim, inferredSchema));
|
|
278
|
+
result.skippedExisting.push({ fixturePath, filePath });
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
if (isCoveredBySameMajor(schemaDir, Math.floor(targetVersion), relativeFile)) {
|
|
282
|
+
result.skippedExisting.push({ fixturePath, filePath });
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
claims.set(filePath, inferredSchema);
|
|
286
|
+
result.written.push({
|
|
287
|
+
fixturePath,
|
|
288
|
+
filePath,
|
|
289
|
+
nodeName: targetNode.type,
|
|
290
|
+
version: targetNode.typeVersion ?? 1,
|
|
291
|
+
resource,
|
|
292
|
+
operation,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
if (!dryRun) {
|
|
296
|
+
for (const [filePath, schema] of claims) {
|
|
297
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
298
|
+
fs.writeFileSync(filePath, stringifySorted(schema));
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return result;
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=schema-harvest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-harvest.js","sourceRoot":"","sources":["../../src/generate-types/schema-harvest.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,8 +19,9 @@ export { lintPythonCode } from './lint/code-node/python';
|
|
|
19
19
|
export type { SourceLintIssue } from './lint/types';
|
|
20
20
|
export type { CodeExecutionMode } from './lint/code-node/extract-snippets';
|
|
21
21
|
export { generateWorkflowCode } from './codegen/index';
|
|
22
|
-
export { emitInstanceAi, SDK_IMPORTABLE_FUNCTIONS, type EmitInstanceAiOptions, } from './codegen/index';
|
|
22
|
+
export { emitInstanceAi, buildImports, SDK_IMPORTABLE_FUNCTIONS, type EmitInstanceAiOptions, } from './codegen/index';
|
|
23
23
|
export { parseWorkflowCode, parseWorkflowCodeToBuilder } from './codegen/parse-workflow-code';
|
|
24
|
+
export { locateNodeDeclarations, type NodeDeclarationLocation, } from './codegen/locate-node-declarations';
|
|
24
25
|
export * from './generate-types';
|
|
25
26
|
export * from './mock-data';
|
|
26
27
|
export { PluginRegistry, pluginRegistry, registerDefaultPlugins, type ValidationIssue, type PluginContext, type MutablePluginContext, type ValidatorPlugin, type CompositeHandlerPlugin, type SerializerPlugin, } from './workflow-builder/plugins';
|
package/dist/index.js
CHANGED
|
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
18
|
-
exports.NODE_Y_SPACING = exports.NODE_X_SPACING = exports.DEFAULT_NODE_SIZE = exports.GRID_SIZE = exports.isDataTableType = exports.isWebhookType = exports.isHttpRequestType = exports.isSplitInBatchesType = exports.isStickyNoteType = exports.isMergeNodeType = exports.isSwitchNodeType = exports.isIfNodeType = exports.NODE_TYPES = exports.matchesDisplayOptions = exports.normalizePinData = exports.inferSchemasFromRunData = exports.discoverOutputSchemaForNode = exports.needsPinData = exports.registerDefaultPlugins = exports.pluginRegistry = exports.PluginRegistry = exports.parseWorkflowCodeToBuilder = exports.parseWorkflowCode = void 0;
|
|
17
|
+
exports.buildImports = exports.emitInstanceAi = exports.generateWorkflowCode = exports.lintPythonCode = exports.validateWorkflowBuilder = exports.partitionValidationIssues = exports.isInformationalIssue = exports.validateNodeConfig = exports.setSchemaBaseDirs = exports.getSchemaBaseDirs = exports.ValidationWarning = exports.ValidationError = exports.validateWorkflow = exports.hasProperty = exports.getProperty = exports.isPlainObject = exports.toGroupValidationNodes = exports.toEngineConnections = exports.dropInvalidWorkflowJsonGroups = exports.runOnceForEachItem = exports.runOnceForAllItems = exports.createFromAIExpression = exports.nodeJson = exports.expr = exports.isExpression = exports.parseExpression = exports.nextBatch = exports.splitInBatches = exports.fromAi = exports.textSplitter = exports.documentLoader = exports.retriever = exports.vectorStore = exports.embeddings = exports.embedding = exports.outputParser = exports.tool = exports.memory = exports.languageModel = exports.merge = exports.switchCase = exports.ifElse = exports.newCredential = exports.placeholder = exports.sticky = exports.trigger = exports.node = exports.workflow = exports.isNodeInstance = exports.isNodeChain = void 0;
|
|
18
|
+
exports.NODE_Y_SPACING = exports.NODE_X_SPACING = exports.DEFAULT_NODE_SIZE = exports.GRID_SIZE = exports.isDataTableType = exports.isWebhookType = exports.isHttpRequestType = exports.isSplitInBatchesType = exports.isStickyNoteType = exports.isMergeNodeType = exports.isSwitchNodeType = exports.isIfNodeType = exports.NODE_TYPES = exports.matchesDisplayOptions = exports.normalizePinData = exports.inferSchemasFromRunData = exports.discoverOutputSchemaForNode = exports.needsPinData = exports.registerDefaultPlugins = exports.pluginRegistry = exports.PluginRegistry = exports.locateNodeDeclarations = exports.parseWorkflowCodeToBuilder = exports.parseWorkflowCode = exports.SDK_IMPORTABLE_FUNCTIONS = void 0;
|
|
19
19
|
var base_1 = require("./types/base");
|
|
20
20
|
Object.defineProperty(exports, "isNodeChain", { enumerable: true, get: function () { return base_1.isNodeChain; } });
|
|
21
21
|
Object.defineProperty(exports, "isNodeInstance", { enumerable: true, get: function () { return base_1.isNodeInstance; } });
|
|
@@ -79,10 +79,13 @@ var index_1 = require("./codegen/index");
|
|
|
79
79
|
Object.defineProperty(exports, "generateWorkflowCode", { enumerable: true, get: function () { return index_1.generateWorkflowCode; } });
|
|
80
80
|
var index_2 = require("./codegen/index");
|
|
81
81
|
Object.defineProperty(exports, "emitInstanceAi", { enumerable: true, get: function () { return index_2.emitInstanceAi; } });
|
|
82
|
+
Object.defineProperty(exports, "buildImports", { enumerable: true, get: function () { return index_2.buildImports; } });
|
|
82
83
|
Object.defineProperty(exports, "SDK_IMPORTABLE_FUNCTIONS", { enumerable: true, get: function () { return index_2.SDK_IMPORTABLE_FUNCTIONS; } });
|
|
83
84
|
var parse_workflow_code_1 = require("./codegen/parse-workflow-code");
|
|
84
85
|
Object.defineProperty(exports, "parseWorkflowCode", { enumerable: true, get: function () { return parse_workflow_code_1.parseWorkflowCode; } });
|
|
85
86
|
Object.defineProperty(exports, "parseWorkflowCodeToBuilder", { enumerable: true, get: function () { return parse_workflow_code_1.parseWorkflowCodeToBuilder; } });
|
|
87
|
+
var locate_node_declarations_1 = require("./codegen/locate-node-declarations");
|
|
88
|
+
Object.defineProperty(exports, "locateNodeDeclarations", { enumerable: true, get: function () { return locate_node_declarations_1.locateNodeDeclarations; } });
|
|
86
89
|
__exportStar(require("./generate-types"), exports);
|
|
87
90
|
__exportStar(require("./mock-data"), exports);
|
|
88
91
|
var plugins_1 = require("./workflow-builder/plugins");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AA6EA,qCAA2D;AAAlD,mGAAA,WAAW,OAAA;AAAE,sGAAA,cAAc,OAAA;AAMpC,uDAA8C;AAArC,4GAAA,QAAQ,OAAA;AAGjB,8EASuD;AARtD,oGAAA,IAAI,OAAA;AACJ,uGAAA,OAAO,OAAA;AACP,sGAAA,MAAM,OAAA;AACN,2GAAA,WAAW,OAAA;AACX,6GAAA,aAAa,OAAA;AACb,sGAAA,MAAM,OAAA;AACN,0GAAA,UAAU,OAAA;AACV,qGAAA,KAAK,OAAA;AAON,sFAY2D;AAX1D,iHAAA,aAAa,OAAA;AACb,0GAAA,MAAM,OAAA;AACN,wGAAA,IAAI,OAAA;AACJ,gHAAA,YAAY,OAAA;AACZ,6GAAA,SAAS,OAAA;AACT,8GAAA,UAAU,OAAA;AACV,+GAAA,WAAW,OAAA;AACX,6GAAA,SAAS,OAAA;AACT,kHAAA,cAAc,OAAA;AACd,gHAAA,YAAY,OAAA;AACZ,0GAAA,MAAM,OAAA;AAaP,8FAA2F;AAAlF,kHAAA,cAAc,OAAA;AAOvB,kFAAgF;AAAvE,uGAAA,SAAS,OAAA;AAGlB,2CAMsB;AALrB,6GAAA,eAAe,OAAA;AACf,0GAAA,YAAY,OAAA;AACZ,kGAAA,IAAI,OAAA;AACJ,sGAAA,QAAQ,OAAA;AACR,oHAAA,sBAAsB,OAAA;AAIvB,qDAA8E;AAArE,kHAAA,kBAAkB,OAAA;AAAE,kHAAA,kBAAkB,OAAA;AAC/C,qFAI8C;AAH7C,6IAAA,6BAA6B,OAAA;AAC7B,mIAAA,mBAAmB,OAAA;AACnB,sIAAA,sBAAsB,OAAA;AAIvB,mDAA8E;AAArE,4GAAA,aAAa,OAAA;AAAE,0GAAA,WAAW,OAAA;AAAE,0GAAA,WAAW,OAAA;AAGhD,2CAkBsB;AAjBrB,8GAAA,gBAAgB,OAAA;AAChB,6GAAA,eAAe,OAAA;AACf,+GAAA,iBAAiB,OAAA;AACjB,+GAAA,iBAAiB,OAAA;AACjB,+GAAA,iBAAiB,OAAA;AAIjB,gHAAA,kBAAkB,OAAA;AAGlB,kHAAA,oBAAoB,OAAA;AACpB,uHAAA,yBAAyB,OAAA;AACzB,qHAAA,uBAAuB,OAAA;AAaxB,kDAAyD;AAAhD,wGAAA,cAAc,OAAA;AAKvB,yCAAuD;AAA9C,6GAAA,oBAAoB,OAAA;AAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AA6EA,qCAA2D;AAAlD,mGAAA,WAAW,OAAA;AAAE,sGAAA,cAAc,OAAA;AAMpC,uDAA8C;AAArC,4GAAA,QAAQ,OAAA;AAGjB,8EASuD;AARtD,oGAAA,IAAI,OAAA;AACJ,uGAAA,OAAO,OAAA;AACP,sGAAA,MAAM,OAAA;AACN,2GAAA,WAAW,OAAA;AACX,6GAAA,aAAa,OAAA;AACb,sGAAA,MAAM,OAAA;AACN,0GAAA,UAAU,OAAA;AACV,qGAAA,KAAK,OAAA;AAON,sFAY2D;AAX1D,iHAAA,aAAa,OAAA;AACb,0GAAA,MAAM,OAAA;AACN,wGAAA,IAAI,OAAA;AACJ,gHAAA,YAAY,OAAA;AACZ,6GAAA,SAAS,OAAA;AACT,8GAAA,UAAU,OAAA;AACV,+GAAA,WAAW,OAAA;AACX,6GAAA,SAAS,OAAA;AACT,kHAAA,cAAc,OAAA;AACd,gHAAA,YAAY,OAAA;AACZ,0GAAA,MAAM,OAAA;AAaP,8FAA2F;AAAlF,kHAAA,cAAc,OAAA;AAOvB,kFAAgF;AAAvE,uGAAA,SAAS,OAAA;AAGlB,2CAMsB;AALrB,6GAAA,eAAe,OAAA;AACf,0GAAA,YAAY,OAAA;AACZ,kGAAA,IAAI,OAAA;AACJ,sGAAA,QAAQ,OAAA;AACR,oHAAA,sBAAsB,OAAA;AAIvB,qDAA8E;AAArE,kHAAA,kBAAkB,OAAA;AAAE,kHAAA,kBAAkB,OAAA;AAC/C,qFAI8C;AAH7C,6IAAA,6BAA6B,OAAA;AAC7B,mIAAA,mBAAmB,OAAA;AACnB,sIAAA,sBAAsB,OAAA;AAIvB,mDAA8E;AAArE,4GAAA,aAAa,OAAA;AAAE,0GAAA,WAAW,OAAA;AAAE,0GAAA,WAAW,OAAA;AAGhD,2CAkBsB;AAjBrB,8GAAA,gBAAgB,OAAA;AAChB,6GAAA,eAAe,OAAA;AACf,+GAAA,iBAAiB,OAAA;AACjB,+GAAA,iBAAiB,OAAA;AACjB,+GAAA,iBAAiB,OAAA;AAIjB,gHAAA,kBAAkB,OAAA;AAGlB,kHAAA,oBAAoB,OAAA;AACpB,uHAAA,yBAAyB,OAAA;AACzB,qHAAA,uBAAuB,OAAA;AAaxB,kDAAyD;AAAhD,wGAAA,cAAc,OAAA;AAKvB,yCAAuD;AAA9C,6GAAA,oBAAoB,OAAA;AAC7B,yCAKyB;AAJxB,uGAAA,cAAc,OAAA;AACd,qGAAA,YAAY,OAAA;AACZ,iHAAA,wBAAwB,OAAA;AAGzB,qEAA8F;AAArF,wHAAA,iBAAiB,OAAA;AAAE,iIAAA,0BAA0B,OAAA;AACtD,+EAG4C;AAF3C,kIAAA,sBAAsB,OAAA;AAKvB,mDAAiC;AAGjC,8CAA4B;AAG5B,sDAaoC;AAXnC,yGAAA,cAAc,OAAA;AACd,yGAAA,cAAc,OAAA;AAEd,iHAAA,sBAAsB,OAAA;AAWvB,mDAM0B;AALzB,8GAAA,YAAY,OAAA;AACZ,6HAAA,2BAA2B,OAAA;AAC3B,yHAAA,uBAAuB,OAAA;AACvB,kHAAA,gBAAgB,OAAA;AAKjB,gEAIsC;AAHrC,wHAAA,qBAAqB,OAAA;AAMtB,yCAWqB;AAVpB,uGAAA,UAAU,OAAA;AAEV,yGAAA,YAAY,OAAA;AACZ,6GAAA,gBAAgB,OAAA;AAChB,4GAAA,eAAe,OAAA;AACf,6GAAA,gBAAgB,OAAA;AAChB,iHAAA,oBAAoB,OAAA;AACpB,8GAAA,iBAAiB,OAAA;AACjB,0GAAA,aAAa,OAAA;AACb,4GAAA,eAAe,OAAA;AAKhB,0DAKsC;AAJrC,sGAAA,SAAS,OAAA;AACT,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA"}
|
|
@@ -2,3 +2,4 @@ export declare const AGENT_NODE_TYPE = "@n8n/n8n-nodes-langchain.agent";
|
|
|
2
2
|
export declare function isAiRootNodeType(nodeType: string): boolean;
|
|
3
3
|
export declare function describeAiRootShape(nodeType: string): string;
|
|
4
4
|
export declare function findEnvelopeKey(schema: Record<string, unknown> | undefined): string | undefined;
|
|
5
|
+
export declare function buildAiRootPlaceholder(nodeType: string, filler: string): Record<string, unknown> | undefined;
|