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,10 @@
import { Command } from '@oclif/core';
export default class Dev extends Command {
static description: string;
static examples: string[];
static flags: {
'external-n8n': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
'custom-user-folder': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
};
run(): Promise<void>;
}

109
node_modules/@n8n/node-cli/dist/commands/dev/index.js generated vendored Normal file
View File

@@ -0,0 +1,109 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const prompts_1 = require("@clack/prompts");
const core_1 = require("@oclif/core");
const node_os_1 = __importDefault(require("node:os"));
const node_path_1 = __importDefault(require("node:path"));
const picocolors_1 = __importDefault(require("picocolors"));
const rimraf_1 = require("rimraf");
const filesystem_1 = require("../../utils/filesystem");
const package_manager_1 = require("../../utils/package-manager");
const prompts_2 = require("../../utils/prompts");
const validation_1 = require("../../utils/validation");
const build_1 = require("../build");
const utils_1 = require("./utils");
const child_process_1 = require("../../utils/child-process");
class Dev extends core_1.Command {
async run() {
const { flags } = await this.parse(Dev);
const packageManager = (await (0, package_manager_1.detectPackageManager)()) ?? 'npm';
const { runPersistentCommand } = (0, utils_1.commands)();
(0, prompts_1.intro)(picocolors_1.default.inverse(' n8n-node dev '));
await (0, prompts_2.ensureN8nPackage)('n8n-node dev');
await (0, build_1.copyStaticFiles)();
const linkingSpinner = (0, prompts_1.spinner)();
linkingSpinner.start('Linking custom node to n8n');
await (0, child_process_1.runCommand)(packageManager, ['link']);
const n8nUserFolder = flags['custom-user-folder'];
const customNodesFolder = node_path_1.default.join(n8nUserFolder, '.n8n', 'custom');
await (0, filesystem_1.ensureFolder)(customNodesFolder);
const packageName = await (0, utils_1.readPackageName)();
const invalidNodeNameError = (0, validation_1.validateNodeName)(packageName);
if (invalidNodeNameError)
return (0, prompts_2.onCancel)(invalidNodeNameError);
await (0, rimraf_1.rimraf)(node_path_1.default.join(customNodesFolder, 'package.json'));
await (0, child_process_1.runCommand)(packageManager, ['link', packageName], {
cwd: customNodesFolder,
});
linkingSpinner.stop('Linked custom node to n8n');
if (!flags['external-n8n']) {
let setupComplete = false;
const npxN8nSpinner = (0, prompts_1.spinner)();
npxN8nSpinner.start('Starting n8n dev server');
prompts_1.log.warn(picocolors_1.default.dim('First run may take a few minutes while dependencies are installed'));
try {
await Promise.race([
new Promise((resolve) => {
runPersistentCommand('npx', ['-y', '--quiet', '--prefer-online', 'n8n@latest'], {
cwd: n8nUserFolder,
env: {
...process.env,
N8N_DEV_RELOAD: 'true',
N8N_RUNNERS_ENABLED: 'true',
DB_SQLITE_POOL_SIZE: '10',
N8N_USER_FOLDER: n8nUserFolder,
},
name: 'n8n',
color: picocolors_1.default.green,
allowOutput: (line) => {
if (line.includes('Initializing n8n process')) {
resolve();
}
return setupComplete;
},
});
}),
new Promise((_, reject) => {
setTimeout(() => {
const error = new Error('n8n startup timeout after 120 seconds');
reject(error);
}, 120_000);
}),
]);
setupComplete = true;
npxN8nSpinner.stop('Started n8n dev server');
}
catch (error) {
npxN8nSpinner.stop('Failed to start n8n dev server');
(0, prompts_2.onCancel)(error instanceof Error ? error.message : 'Unknown error occurred', 1);
return;
}
}
(0, prompts_1.outro)('✓ Setup complete');
runPersistentCommand(packageManager, ['exec', '--', 'tsc', '--watch'], {
name: 'build',
color: picocolors_1.default.cyan,
});
}
}
Dev.description = 'Run n8n with the node and rebuild on changes for live preview';
Dev.examples = [
'<%= config.bin %> <%= command.id %>',
'<%= config.bin %> <%= command.id %> --external-n8n',
'<%= config.bin %> <%= command.id %> --custom-user-folder /Users/test',
];
Dev.flags = {
'external-n8n': core_1.Flags.boolean({
default: false,
description: 'By default n8n-node dev will run n8n in a sub process. Enable this option if you would like to run n8n elsewhere. Make sure to set N8N_DEV_RELOAD to true in that case.',
}),
'custom-user-folder': core_1.Flags.directory({
default: node_path_1.default.join(node_os_1.default.homedir(), '.n8n-node-cli'),
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.',
}),
};
exports.default = Dev;
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":";;;;;AAAA,4CAA4D;AAC5D,sCAA6C;AAC7C,sDAAyB;AACzB,0DAA6B;AAC7B,4DAAoC;AACpC,mCAAgC;AAEhC,uDAAsD;AACtD,iEAAmE;AACnE,iDAAiE;AACjE,uDAA0D;AAC1D,oCAA2C;AAC3C,mCAAoD;AACpD,6DAAuD;AAEvD,MAAqB,GAAI,SAAQ,cAAO;IAoBvC,KAAK,CAAC,GAAG;QACR,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,MAAM,cAAc,GAAG,CAAC,MAAM,IAAA,sCAAoB,GAAE,CAAC,IAAI,KAAK,CAAC;QAC/D,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAA,gBAAQ,GAAE,CAAC;QAE5C,IAAA,eAAK,EAAC,oBAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAE5C,MAAM,IAAA,0BAAgB,EAAC,cAAc,CAAC,CAAC;QAEvC,MAAM,IAAA,uBAAe,GAAE,CAAC;QAExB,MAAM,cAAc,GAAG,IAAA,iBAAO,GAAE,CAAC;QACjC,cAAc,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnD,MAAM,IAAA,0BAAU,EAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3C,MAAM,aAAa,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,iBAAiB,GAAG,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAErE,MAAM,IAAA,yBAAY,EAAC,iBAAiB,CAAC,CAAC;QAEtC,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAe,GAAE,CAAC;QAC5C,MAAM,oBAAoB,GAAG,IAAA,6BAAgB,EAAC,WAAW,CAAC,CAAC;QAE3D,IAAI,oBAAoB;YAAE,OAAO,IAAA,kBAAQ,EAAC,oBAAoB,CAAC,CAAC;QAGhE,MAAM,IAAA,eAAM,EAAC,mBAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAA,0BAAU,EAAC,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;YACvD,GAAG,EAAE,iBAAiB;SACtB,CAAC,CAAC;QAEH,cAAc,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAEjD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,iBAAO,GAAE,CAAC;YAChC,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,aAAG,CAAC,IAAI,CAAC,oBAAU,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC,CAAC;YAG9F,IAAI,CAAC;gBACJ,MAAM,OAAO,CAAC,IAAI,CAAC;oBAClB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;wBAC7B,oBAAoB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE;4BAC/E,GAAG,EAAE,aAAa;4BAClB,GAAG,EAAE;gCACJ,GAAG,OAAO,CAAC,GAAG;gCACd,cAAc,EAAE,MAAM;gCACtB,mBAAmB,EAAE,MAAM;gCAC3B,mBAAmB,EAAE,IAAI;gCACzB,eAAe,EAAE,aAAa;6BAC9B;4BACD,IAAI,EAAE,KAAK;4BACX,KAAK,EAAE,oBAAU,CAAC,KAAK;4BACvB,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;gCACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;oCAC/C,OAAO,EAAE,CAAC;gCACX,CAAC;gCAED,OAAO,aAAa,CAAC;4BACtB,CAAC;yBACD,CAAC,CAAC;oBACJ,CAAC,CAAC;oBACF,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;wBAC/B,UAAU,CAAC,GAAG,EAAE;4BACf,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;4BACjE,MAAM,CAAC,KAAK,CAAC,CAAC;wBACf,CAAC,EAAE,OAAO,CAAC,CAAC;oBACb,CAAC,CAAC;iBACF,CAAC,CAAC;gBAEH,aAAa,GAAG,IAAI,CAAC;gBACrB,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,aAAa,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBACrD,IAAA,kBAAQ,EAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;gBAC/E,OAAO;YACR,CAAC;QACF,CAAC;QAED,IAAA,eAAK,EAAC,kBAAkB,CAAC,CAAC;QAG1B,oBAAoB,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;YACtE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,oBAAU,CAAC,IAAI;SACtB,CAAC,CAAC;IACJ,CAAC;;AA3Ge,eAAW,GAAG,+DAA+D,CAAC;AAC9E,YAAQ,GAAG;IAC1B,qCAAqC;IACrC,oDAAoD;IACpD,sEAAsE;CACtE,CAAC;AACc,SAAK,GAAG;IACvB,cAAc,EAAE,YAAK,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,KAAK;QACd,WAAW,EACV,yKAAyK;KAC1K,CAAC;IACF,oBAAoB,EAAE,YAAK,CAAC,SAAS,CAAC;QACrC,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC;QACjD,WAAW,EACV,kIAAkI;KACnI,CAAC;CACF,CAAC;kBAlBkB,GAAG"}

View File

@@ -0,0 +1,12 @@
import { type ChildProcess } from 'node:child_process';
import type { Formatter } from 'picocolors/types';
export declare function commands(): {
runPersistentCommand: (cmd: string, args: string[], opts?: {
cwd?: string;
env?: NodeJS.ProcessEnv;
name?: string;
color?: Formatter;
allowOutput?: (line: string) => boolean;
}) => ChildProcess;
};
export declare function readPackageName(): Promise<string>;

115
node_modules/@n8n/node-cli/dist/commands/dev/utils.js generated vendored Normal file
View File

@@ -0,0 +1,115 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.commands = commands;
exports.readPackageName = readPackageName;
const node_child_process_1 = require("node:child_process");
const promises_1 = __importDefault(require("node:fs/promises"));
const json_1 = require("../../utils/json");
function commands() {
const childProcesses = [];
let isShuttingDown = false;
const registerChild = (child) => {
childProcesses.push(child);
};
const killChild = (child, signal) => {
if (!child.killed) {
child.kill(signal);
}
};
const forceKillAllChildren = () => {
childProcesses.forEach((child) => killChild(child, 'SIGKILL'));
process.exit(1);
};
const gracefulShutdown = (signal) => {
if (childProcesses.length === 0) {
process.exit();
return;
}
let exitedCount = 0;
const totalChildren = childProcesses.length;
const forceExitTimer = setTimeout(forceKillAllChildren, 5000);
const onChildExit = () => {
exitedCount++;
if (exitedCount === totalChildren) {
clearTimeout(forceExitTimer);
process.exit();
}
};
childProcesses.forEach((child) => {
if (!child.killed) {
child.once('exit', onChildExit);
killChild(child, signal);
setTimeout(() => killChild(child, 'SIGKILL'), 5000);
}
else {
onChildExit();
}
});
};
const handleSignal = (signal) => {
if (isShuttingDown) {
console.log('\nForce killing processes...');
forceKillAllChildren();
return;
}
isShuttingDown = true;
if (signal === 'SIGINT') {
console.log('\nShutting down gracefully... (press Ctrl+C again to force quit)');
}
gracefulShutdown(signal);
};
process.on('SIGINT', () => handleSignal('SIGINT'));
process.on('SIGTERM', () => handleSignal('SIGTERM'));
const stripAnsiCodes = (input) => input
.replace(/\x1Bc/g, '')
.replace(/\x1B\[2J/g, '')
.replace(/\x1B\[3J/g, '')
.replace(/\x1B\[H/g, '')
.replace(/\x1B\[0?m/g, '');
const createLogger = (name, color, allowOutput) => (text) => {
if (allowOutput && !allowOutput(text))
return;
const prefix = name ? (color ? color(`[${name}]`) : `[${name}]`) : '';
console.log(prefix ? `${prefix} ${text}` : text);
};
const processOutput = (data, logger) => {
data
.toString()
.split('\n')
.map((line) => stripAnsiCodes(line).trim())
.filter(Boolean)
.forEach(logger);
};
const runPersistentCommand = (cmd, args, opts = {}) => {
const child = (0, node_child_process_1.spawn)(cmd, args, {
cwd: opts.cwd,
env: { ...process.env, ...opts.env },
stdio: ['inherit', 'pipe', 'pipe'],
shell: process.platform === 'win32',
});
registerChild(child);
const logger = createLogger(opts.name, opts.color, opts.allowOutput);
const handleOutput = (data) => processOutput(data, logger);
child.stdout?.on('data', handleOutput);
child.stderr?.on('data', handleOutput);
child.on('close', (code) => {
if (!isShuttingDown) {
console.log(`${opts.name ?? cmd} exited with code ${code}`);
process.exit(code ?? 0);
}
});
return child;
};
return {
runPersistentCommand,
};
}
async function readPackageName() {
return await promises_1.default
.readFile('package.json', 'utf-8')
.then((packageJson) => (0, json_1.jsonParse)(packageJson)?.name ?? 'unknown');
}
//# sourceMappingURL=utils.js.map

View File

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