mirror of
https://github.com/n8n-io/n8n.git
synced 2026-06-03 18:27:09 +02:00
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import { cancel, intro, log, outro, spinner } from '@clack/prompts';
|
|
import { Command } from '@oclif/core';
|
|
import glob from 'fast-glob';
|
|
import { cp, mkdir } from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
import { rimraf } from 'rimraf';
|
|
|
|
import { runCommand } from '../utils/child-process';
|
|
import { ensureN8nPackage, getCommandHeader } from '../utils/prompts';
|
|
|
|
export default class Build extends Command {
|
|
static override description = 'Compile the node in the current directory and copy assets';
|
|
static override examples = ['<%= config.bin %> <%= command.id %>'];
|
|
static override flags = {};
|
|
|
|
async run(): Promise<void> {
|
|
await this.parse(Build);
|
|
|
|
const commandName = 'n8n-node build';
|
|
intro(await getCommandHeader(commandName));
|
|
|
|
await ensureN8nPackage(commandName);
|
|
|
|
const buildSpinner = spinner();
|
|
buildSpinner.start('Building TypeScript files');
|
|
await rimraf('dist');
|
|
|
|
try {
|
|
await runTscBuild();
|
|
buildSpinner.stop('TypeScript build successful');
|
|
} catch (error) {
|
|
cancel('TypeScript build failed');
|
|
this.exit(1);
|
|
}
|
|
|
|
const copyStaticFilesSpinner = spinner();
|
|
copyStaticFilesSpinner.start('Copying static files');
|
|
await copyStaticFiles();
|
|
copyStaticFilesSpinner.stop('Copied static files');
|
|
|
|
outro('✓ Build successful');
|
|
}
|
|
}
|
|
|
|
async function runTscBuild(): Promise<void> {
|
|
return await runCommand('tsc', [], {
|
|
context: 'local',
|
|
printOutput: ({ stdout, stderr }) => {
|
|
log.error(stdout.concat(stderr).toString());
|
|
},
|
|
});
|
|
}
|
|
|
|
export async function copyStaticFiles() {
|
|
const staticFiles = glob.sync(['**/*.{png,svg}', '**/__schema__/**/*.json'], {
|
|
ignore: ['dist', 'node_modules'],
|
|
});
|
|
|
|
return await Promise.all(
|
|
staticFiles.map(async (filePath) => {
|
|
const destPath = path.join('dist', filePath);
|
|
await mkdir(path.dirname(destPath), { recursive: true });
|
|
return await cp(filePath, destPath, { recursive: true });
|
|
}),
|
|
);
|
|
}
|