mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-14 16:44:07 -08:00
0fa2e8ca85
Some checks are pending
Test Master / install-and-build (push) Waiting to run
Test Master / Unit tests (18.x) (push) Blocked by required conditions
Test Master / Unit tests (20.x) (push) Blocked by required conditions
Test Master / Unit tests (22.4) (push) Blocked by required conditions
Test Master / Lint (push) Blocked by required conditions
Test Master / Notify Slack on failure (push) Blocked by required conditions
73 lines
2.5 KiB
JavaScript
Executable file
73 lines
2.5 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
const path = require('path');
|
|
|
|
// Make sure that it also find the config folder when it
|
|
// did get started from another folder that the root one.
|
|
process.env.NODE_CONFIG_DIR = process.env.NODE_CONFIG_DIR || path.join(__dirname, 'config');
|
|
|
|
// Check if version should be displayed
|
|
const versionFlags = ['-v', '-V', '--version'];
|
|
if (versionFlags.includes(process.argv.slice(-1)[0])) {
|
|
console.log(require('../package').version);
|
|
process.exit(0);
|
|
}
|
|
|
|
if (process.argv.length === 2) {
|
|
// When no command is given choose by default start
|
|
process.argv.push('start');
|
|
}
|
|
|
|
const ENFORCE_NODE_VERSION_RANGE = process.env.E2E_TESTS !== 'true';
|
|
if (ENFORCE_NODE_VERSION_RANGE) {
|
|
const satisfies = require('semver/functions/satisfies');
|
|
const nodeVersion = process.versions.node;
|
|
const {
|
|
engines: { node: supportedNodeVersions },
|
|
} = require('../package.json');
|
|
if (!satisfies(nodeVersion, supportedNodeVersions)) {
|
|
console.error(`
|
|
Your Node.js version ${nodeVersion} is currently not supported by n8n.
|
|
Please use a Node.js version that satisfies the following version range: ${supportedNodeVersions}
|
|
`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Disable nodejs custom inspection across the app
|
|
const { inspect } = require('util');
|
|
inspect.defaultOptions.customInspect = false;
|
|
|
|
require('express-async-errors');
|
|
require('source-map-support').install();
|
|
require('reflect-metadata');
|
|
|
|
// Skip loading dotenv in e2e tests.
|
|
// Also, do not use `inE2ETests` from constants here, because that'd end up code that might read from `process.env` before the values are loaded from an `.env` file.
|
|
if (process.env.E2E_TESTS !== 'true') {
|
|
// Loading dotenv early ensures that `process.env` is up-to-date everywhere in code
|
|
require('dotenv').config();
|
|
}
|
|
|
|
if (process.env.NODEJS_PREFER_IPV4 === 'true') {
|
|
require('dns').setDefaultResultOrder('ipv4first');
|
|
}
|
|
|
|
// Node.js 20 enabled a Happy Eyeballs algorithm which enables support
|
|
// for both IPv6 and IPv4 at the same time, favoring IPv6 when possible.
|
|
// However there are some issues in the algorithm implementation that is causing
|
|
// issues to our users with services like Telegram or Airtable. This restores the
|
|
// behavior to pre v20
|
|
// More details: https://github.com/nodejs/node/issues/48145
|
|
require('net').setDefaultAutoSelectFamily?.(false);
|
|
|
|
// WebCrypto Polyfill for older versions of Node.js 18
|
|
if (!globalThis.crypto?.getRandomValues) {
|
|
globalThis.crypto = require('node:crypto').webcrypto;
|
|
}
|
|
|
|
(async () => {
|
|
const oclif = await import('@oclif/core');
|
|
await oclif.execute({ dir: __dirname });
|
|
})();
|