@n8n/node-cli 0.5.0 → 0.8.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/README.md +18 -18
- package/dist/build.tsbuildinfo +1 -1
- package/dist/commands/dev/index.js +44 -16
- package/dist/commands/dev/index.js.map +1 -1
- package/dist/commands/dev/utils.d.ts +3 -1
- package/dist/commands/dev/utils.js +81 -40
- package/dist/commands/dev/utils.js.map +1 -1
- package/dist/commands/new/prompts.js +3 -3
- package/dist/commands/new/prompts.js.map +1 -1
- package/dist/utils/validation.js +1 -1
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
|
@@ -39,22 +39,50 @@ class Dev extends core_1.Command {
|
|
|
39
39
|
cwd: customNodesFolder,
|
|
40
40
|
});
|
|
41
41
|
linkingSpinner.stop('Linked custom node to n8n');
|
|
42
|
-
(0, prompts_1.outro)('✓ Setup complete');
|
|
43
42
|
if (!flags['external-n8n']) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
43
|
+
let setupComplete = false;
|
|
44
|
+
const npxN8nSpinner = (0, prompts_1.spinner)();
|
|
45
|
+
npxN8nSpinner.start('Starting n8n dev server');
|
|
46
|
+
prompts_1.log.warn(picocolors_1.default.dim('First run may take a few minutes while dependencies are installed'));
|
|
47
|
+
try {
|
|
48
|
+
await Promise.race([
|
|
49
|
+
new Promise((resolve) => {
|
|
50
|
+
runPersistentCommand('npx', ['-y', '--quiet', '--prefer-online', 'n8n@latest'], {
|
|
51
|
+
cwd: n8nUserFolder,
|
|
52
|
+
env: {
|
|
53
|
+
...process.env,
|
|
54
|
+
N8N_DEV_RELOAD: 'true',
|
|
55
|
+
N8N_RUNNERS_ENABLED: 'true',
|
|
56
|
+
DB_SQLITE_POOL_SIZE: '10',
|
|
57
|
+
N8N_USER_FOLDER: n8nUserFolder,
|
|
58
|
+
},
|
|
59
|
+
name: 'n8n',
|
|
60
|
+
color: picocolors_1.default.green,
|
|
61
|
+
allowOutput: (line) => {
|
|
62
|
+
if (line.includes('Initializing n8n process')) {
|
|
63
|
+
resolve();
|
|
64
|
+
}
|
|
65
|
+
return setupComplete;
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}),
|
|
69
|
+
new Promise((_, reject) => {
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
const error = new Error('n8n startup timeout after 120 seconds');
|
|
72
|
+
reject(error);
|
|
73
|
+
}, 120_000);
|
|
74
|
+
}),
|
|
75
|
+
]);
|
|
76
|
+
setupComplete = true;
|
|
77
|
+
npxN8nSpinner.stop('Started n8n dev server');
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
npxN8nSpinner.stop('Failed to start n8n dev server');
|
|
81
|
+
(0, prompts_2.onCancel)(error instanceof Error ? error.message : 'Unknown error occurred', 1);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
57
84
|
}
|
|
85
|
+
(0, prompts_1.outro)('✓ Setup complete');
|
|
58
86
|
runPersistentCommand(packageManager, ['exec', '--', 'tsc', '--watch'], {
|
|
59
87
|
name: 'build',
|
|
60
88
|
color: picocolors_1.default.cyan,
|
|
@@ -65,7 +93,7 @@ Dev.description = 'Run n8n with the node and rebuild on changes for live preview
|
|
|
65
93
|
Dev.examples = [
|
|
66
94
|
'<%= config.bin %> <%= command.id %>',
|
|
67
95
|
'<%= config.bin %> <%= command.id %> --external-n8n',
|
|
68
|
-
'<%= config.bin %> <%= command.id %> --custom-
|
|
96
|
+
'<%= config.bin %> <%= command.id %> --custom-user-folder /Users/test',
|
|
69
97
|
];
|
|
70
98
|
Dev.flags = {
|
|
71
99
|
'external-n8n': core_1.Flags.boolean({
|
|
@@ -74,7 +102,7 @@ Dev.flags = {
|
|
|
74
102
|
}),
|
|
75
103
|
'custom-user-folder': core_1.Flags.directory({
|
|
76
104
|
default: node_path_1.default.join(node_os_1.default.homedir(), '.n8n-node-cli'),
|
|
77
|
-
description: 'Folder to use to store user-specific n8n data. By default it will use ~/.n8n-node-cli.
|
|
105
|
+
description: 'Folder to use to store user-specific n8n data. By default it will use ~/.n8n-node-cli. The node CLI will install your node here.',
|
|
78
106
|
}),
|
|
79
107
|
};
|
|
80
108
|
exports.default = Dev;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ChildProcess } from 'child_process';
|
|
1
2
|
import type { Formatter } from 'picocolors/types';
|
|
2
3
|
export declare function commands(): {
|
|
3
4
|
runPersistentCommand: (cmd: string, args: string[], opts?: {
|
|
@@ -5,6 +6,7 @@ export declare function commands(): {
|
|
|
5
6
|
env?: NodeJS.ProcessEnv;
|
|
6
7
|
name?: string;
|
|
7
8
|
color?: Formatter;
|
|
8
|
-
|
|
9
|
+
allowOutput?: (line: string) => boolean;
|
|
10
|
+
}) => ChildProcess;
|
|
9
11
|
};
|
|
10
12
|
export declare function readPackageName(): Promise<string>;
|
|
@@ -10,57 +10,98 @@ const promises_1 = __importDefault(require("node:fs/promises"));
|
|
|
10
10
|
const json_1 = require("../../utils/json");
|
|
11
11
|
function commands() {
|
|
12
12
|
const childProcesses = [];
|
|
13
|
-
|
|
13
|
+
let isShuttingDown = false;
|
|
14
|
+
const registerChild = (child) => {
|
|
14
15
|
childProcesses.push(child);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
};
|
|
17
|
+
const killChild = (child, signal) => {
|
|
18
|
+
if (!child.killed) {
|
|
18
19
|
child.kill(signal);
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
};
|
|
22
|
+
const forceKillAllChildren = () => {
|
|
23
|
+
childProcesses.forEach((child) => killChild(child, 'SIGKILL'));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
};
|
|
26
|
+
const gracefulShutdown = (signal) => {
|
|
27
|
+
if (childProcesses.length === 0) {
|
|
28
|
+
process.exit();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
let exitedCount = 0;
|
|
32
|
+
const totalChildren = childProcesses.length;
|
|
33
|
+
const forceExitTimer = setTimeout(forceKillAllChildren, 5000);
|
|
34
|
+
const onChildExit = () => {
|
|
35
|
+
exitedCount++;
|
|
36
|
+
if (exitedCount === totalChildren) {
|
|
37
|
+
clearTimeout(forceExitTimer);
|
|
38
|
+
process.exit();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
childProcesses.forEach((child) => {
|
|
42
|
+
if (!child.killed) {
|
|
43
|
+
child.once('exit', onChildExit);
|
|
44
|
+
killChild(child, signal);
|
|
45
|
+
setTimeout(() => killChild(child, 'SIGKILL'), 5000);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
onChildExit();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
const handleSignal = (signal) => {
|
|
53
|
+
if (isShuttingDown) {
|
|
54
|
+
console.log('\nForce killing processes...');
|
|
55
|
+
forceKillAllChildren();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
isShuttingDown = true;
|
|
59
|
+
if (signal === 'SIGINT') {
|
|
60
|
+
console.log('\nShutting down gracefully... (press Ctrl+C again to force quit)');
|
|
61
|
+
}
|
|
62
|
+
gracefulShutdown(signal);
|
|
63
|
+
};
|
|
64
|
+
process.on('SIGINT', () => handleSignal('SIGINT'));
|
|
65
|
+
process.on('SIGTERM', () => handleSignal('SIGTERM'));
|
|
66
|
+
const stripAnsiCodes = (input) => input
|
|
67
|
+
.replace(/\x1Bc/g, '')
|
|
68
|
+
.replace(/\x1B\[2J/g, '')
|
|
69
|
+
.replace(/\x1B\[3J/g, '')
|
|
70
|
+
.replace(/\x1B\[H/g, '')
|
|
71
|
+
.replace(/\x1B\[0?m/g, '');
|
|
72
|
+
const createLogger = (name, color, allowOutput) => (text) => {
|
|
73
|
+
if (allowOutput && !allowOutput(text))
|
|
74
|
+
return;
|
|
75
|
+
const prefix = name ? (color ? color(`[${name}]`) : `[${name}]`) : '';
|
|
76
|
+
console.log(prefix ? `${prefix} ${text}` : text);
|
|
77
|
+
};
|
|
78
|
+
const processOutput = (data, logger) => {
|
|
79
|
+
data
|
|
80
|
+
.toString()
|
|
81
|
+
.split('\n')
|
|
82
|
+
.map((line) => stripAnsiCodes(line).trim())
|
|
83
|
+
.filter(Boolean)
|
|
84
|
+
.forEach(logger);
|
|
85
|
+
};
|
|
86
|
+
const runPersistentCommand = (cmd, args, opts = {}) => {
|
|
25
87
|
const child = (0, child_process_1.spawn)(cmd, args, {
|
|
26
88
|
cwd: opts.cwd,
|
|
27
89
|
env: { ...process.env, ...opts.env },
|
|
28
90
|
stdio: ['inherit', 'pipe', 'pipe'],
|
|
29
91
|
});
|
|
30
92
|
registerChild(child);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
.replace(/\x1B\[3J/g, '')
|
|
36
|
-
.replace(/\x1B\[H/g, '')
|
|
37
|
-
.replace(/\x1B\[0?m/g, '');
|
|
38
|
-
}
|
|
39
|
-
const log = (text) => {
|
|
40
|
-
if (opts.name) {
|
|
41
|
-
const rawPrefix = `[${opts.name}]`;
|
|
42
|
-
const prefix = opts.color ? opts.color(rawPrefix) : rawPrefix;
|
|
43
|
-
console.log(`${prefix} ${text}`);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
console.log(text);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const handleOutput = (data) => {
|
|
50
|
-
data
|
|
51
|
-
.toString()
|
|
52
|
-
.split('\n')
|
|
53
|
-
.map((line) => stripClearCodes(line).trim())
|
|
54
|
-
.filter(Boolean)
|
|
55
|
-
.forEach((line) => log(line));
|
|
56
|
-
};
|
|
57
|
-
child.stdout.on('data', handleOutput);
|
|
58
|
-
child.stderr.on('data', handleOutput);
|
|
93
|
+
const logger = createLogger(opts.name, opts.color, opts.allowOutput);
|
|
94
|
+
const handleOutput = (data) => processOutput(data, logger);
|
|
95
|
+
child.stdout?.on('data', handleOutput);
|
|
96
|
+
child.stderr?.on('data', handleOutput);
|
|
59
97
|
child.on('close', (code) => {
|
|
60
|
-
|
|
61
|
-
|
|
98
|
+
if (!isShuttingDown) {
|
|
99
|
+
console.log(`${opts.name ?? cmd} exited with code ${code}`);
|
|
100
|
+
process.exit(code ?? 0);
|
|
101
|
+
}
|
|
62
102
|
});
|
|
63
|
-
|
|
103
|
+
return child;
|
|
104
|
+
};
|
|
64
105
|
return {
|
|
65
106
|
runPersistentCommand,
|
|
66
107
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/dev/utils.ts"],"names":[],"mappings":";;;;;AAOA,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/dev/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,10 @@ const templates_1 = require("../../template/templates");
|
|
|
6
6
|
const prompts_2 = require("../../utils/prompts");
|
|
7
7
|
const validation_1 = require("../../utils/validation");
|
|
8
8
|
const nodeNamePrompt = async () => await (0, prompts_2.withCancelHandler)((0, prompts_1.text)({
|
|
9
|
-
message:
|
|
10
|
-
placeholder: 'n8n-nodes-
|
|
9
|
+
message: "Package name (must start with 'n8n-nodes-' or '@org/n8n-nodes-')",
|
|
10
|
+
placeholder: 'n8n-nodes-my-app',
|
|
11
11
|
validate: validation_1.validateNodeName,
|
|
12
|
-
defaultValue: 'n8n-nodes-
|
|
12
|
+
defaultValue: 'n8n-nodes-my-app',
|
|
13
13
|
}));
|
|
14
14
|
exports.nodeNamePrompt = nodeNamePrompt;
|
|
15
15
|
const nodeTypePrompt = async () => await (0, prompts_2.withCancelHandler)((0, prompts_1.select)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/new/prompts.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAE9C,wDAAqD;AACrD,iDAAwD;AACxD,uDAA0D;AAEnD,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE,CACxC,MAAM,IAAA,2BAAiB,EACtB,IAAA,cAAI,EAAC;IACJ,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/new/prompts.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAE9C,wDAAqD;AACrD,iDAAwD;AACxD,uDAA0D;AAEnD,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE,CACxC,MAAM,IAAA,2BAAiB,EACtB,IAAA,cAAI,EAAC;IACJ,OAAO,EAAE,kEAAkE;IAC3E,WAAW,EAAE,kBAAkB;IAC/B,QAAQ,EAAE,6BAAgB;IAC1B,YAAY,EAAE,kBAAkB;CAChC,CAAC,CACF,CAAC;AARU,QAAA,cAAc,kBAQxB;AAEI,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE,CACxC,MAAM,IAAA,2BAAiB,EACtB,IAAA,gBAAM,EAAiC;IACtC,OAAO,EAAE,qCAAqC;IAC9C,OAAO,EAAE;QACR;YACC,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,yCAAyC;SAC/C;QACD;YACC,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,yCAAyC;SAC/C;KACD;IACD,YAAY,EAAE,aAAa;CAC3B,CAAC,CACF,CAAC;AAlBU,QAAA,cAAc,kBAkBxB;AAEI,MAAM,yBAAyB,GAAG,KAAK,IAAI,EAAE,CACnD,MAAM,IAAA,2BAAiB,EACtB,IAAA,gBAAM,EAAqC;IAC1C,OAAO,EAAE,mCAAmC;IAC5C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,qBAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,KAAK,EAAE,KAA2C;QAClD,KAAK,EAAE,QAAQ,CAAC,IAAI;QACpB,IAAI,EAAE,QAAQ,CAAC,WAAW;KAC1B,CAAC,CAAC;IACH,YAAY,EAAE,cAAc;CAC5B,CAAC,CACF,CAAC;AAXU,QAAA,yBAAyB,6BAWnC"}
|
package/dist/utils/validation.js
CHANGED
|
@@ -7,7 +7,7 @@ const validateNodeName = (name) => {
|
|
|
7
7
|
const regexScoped = /^@([a-z0-9]+(?:-[a-z0-9]+)*)\/n8n-nodes-([a-z0-9]+(?:-[a-z0-9]+)*)$/;
|
|
8
8
|
const regexUnscoped = /^n8n-nodes-([a-z0-9]+(?:-[a-z0-9]+)*)$/;
|
|
9
9
|
if (!regexScoped.test(name) && !regexUnscoped.test(name)) {
|
|
10
|
-
return
|
|
10
|
+
return "Must start with 'n8n-nodes-' or '@org/n8n-nodes-'. Examples: n8n-nodes-my-app, @mycompany/n8n-nodes-my-app";
|
|
11
11
|
}
|
|
12
12
|
return;
|
|
13
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAsB,EAAE;IACpE,IAAI,CAAC,IAAI;QAAE,OAAO;IAGlB,MAAM,WAAW,GAAG,qEAAqE,CAAC;IAE1F,MAAM,aAAa,GAAG,wCAAwC,CAAC;IAE/D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,OAAO
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAsB,EAAE;IACpE,IAAI,CAAC,IAAI;QAAE,OAAO;IAGlB,MAAM,WAAW,GAAG,qEAAqE,CAAC;IAE1F,MAAM,aAAa,GAAG,wCAAwC,CAAC;IAE/D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,OAAO,4GAA4G,CAAC;IACrH,CAAC;IACD,OAAO;AACR,CAAC,CAAC;AAZW,QAAA,gBAAgB,oBAY3B"}
|