This commit is contained in:
Kismet Hasanaj
2026-05-02 20:07:02 +02:00
parent ce8672e283
commit 34dc9aec52
9428 changed files with 1733330 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
import os from 'os';
import path from 'path';
import fs from 'fs';
// get platform specific cache directory adapted from playwright's handling
// https://github.com/microsoft/playwright/blob/7d924470d397975a74a19184c136b3573a974e13/packages/playwright-core/src/utils/registry.ts#L141
export function getCacheDirectory(fileDirectory, envPath) {
let result;
if (envPath) {
result = envPath;
} else {
let systemCacheDirectory;
if (process.platform === 'linux') {
systemCacheDirectory = process.env.XDG_CACHE_HOME || path.join(os.homedir(), '.cache');
} else if (process.platform === 'darwin') {
systemCacheDirectory = path.join(os.homedir(), 'Library', 'Caches');
} else if (process.platform === 'win32') {
systemCacheDirectory = process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local');
} else {
/// Attempt to use generic tmp location for un-handled platform
if (!systemCacheDirectory) {
for (const dir of [
path.join(os.homedir(), '.cache'),
path.join(os.tmpdir())
]){
if (fs.existsSync(dir)) {
systemCacheDirectory = dir;
break;
}
}
}
if (!systemCacheDirectory) {
console.error(Object.defineProperty(new Error('Unsupported platform: ' + process.platform), "__NEXT_ERROR_CODE", {
value: "E141",
enumerable: false,
configurable: true
}));
process.exit(0);
}
}
result = path.join(systemCacheDirectory, fileDirectory);
}
if (!path.isAbsolute(result)) {
// It is important to resolve to the absolute path:
// - for unzipping to work correctly;
// - so that registry directory matches between installation and execution.
// INIT_CWD points to the root of `npm/yarn install` and is probably what
// the user meant when typing the relative path.
result = path.resolve(process.env['INIT_CWD'] || process.cwd(), result);
}
return result;
}
//# sourceMappingURL=get-cache-directory.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/helpers/get-cache-directory.ts"],"sourcesContent":["import os from 'os'\nimport path from 'path'\nimport fs from 'fs'\n\n// get platform specific cache directory adapted from playwright's handling\n// https://github.com/microsoft/playwright/blob/7d924470d397975a74a19184c136b3573a974e13/packages/playwright-core/src/utils/registry.ts#L141\nexport function getCacheDirectory(fileDirectory: string, envPath?: string) {\n let result\n\n if (envPath) {\n result = envPath\n } else {\n let systemCacheDirectory\n if (process.platform === 'linux') {\n systemCacheDirectory =\n process.env.XDG_CACHE_HOME || path.join(os.homedir(), '.cache')\n } else if (process.platform === 'darwin') {\n systemCacheDirectory = path.join(os.homedir(), 'Library', 'Caches')\n } else if (process.platform === 'win32') {\n systemCacheDirectory =\n process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local')\n } else {\n /// Attempt to use generic tmp location for un-handled platform\n if (!systemCacheDirectory) {\n for (const dir of [\n path.join(os.homedir(), '.cache'),\n path.join(os.tmpdir()),\n ]) {\n if (fs.existsSync(dir)) {\n systemCacheDirectory = dir\n break\n }\n }\n }\n\n if (!systemCacheDirectory) {\n console.error(new Error('Unsupported platform: ' + process.platform))\n process.exit(0)\n }\n }\n result = path.join(systemCacheDirectory, fileDirectory)\n }\n\n if (!path.isAbsolute(result)) {\n // It is important to resolve to the absolute path:\n // - for unzipping to work correctly;\n // - so that registry directory matches between installation and execution.\n // INIT_CWD points to the root of `npm/yarn install` and is probably what\n // the user meant when typing the relative path.\n result = path.resolve(process.env['INIT_CWD'] || process.cwd(), result)\n }\n return result\n}\n"],"names":["os","path","fs","getCacheDirectory","fileDirectory","envPath","result","systemCacheDirectory","process","platform","env","XDG_CACHE_HOME","join","homedir","LOCALAPPDATA","dir","tmpdir","existsSync","console","error","Error","exit","isAbsolute","resolve","cwd"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,UAAU,OAAM;AACvB,OAAOC,QAAQ,KAAI;AAEnB,2EAA2E;AAC3E,4IAA4I;AAC5I,OAAO,SAASC,kBAAkBC,aAAqB,EAAEC,OAAgB;IACvE,IAAIC;IAEJ,IAAID,SAAS;QACXC,SAASD;IACX,OAAO;QACL,IAAIE;QACJ,IAAIC,QAAQC,QAAQ,KAAK,SAAS;YAChCF,uBACEC,QAAQE,GAAG,CAACC,cAAc,IAAIV,KAAKW,IAAI,CAACZ,GAAGa,OAAO,IAAI;QAC1D,OAAO,IAAIL,QAAQC,QAAQ,KAAK,UAAU;YACxCF,uBAAuBN,KAAKW,IAAI,CAACZ,GAAGa,OAAO,IAAI,WAAW;QAC5D,OAAO,IAAIL,QAAQC,QAAQ,KAAK,SAAS;YACvCF,uBACEC,QAAQE,GAAG,CAACI,YAAY,IAAIb,KAAKW,IAAI,CAACZ,GAAGa,OAAO,IAAI,WAAW;QACnE,OAAO;YACL,+DAA+D;YAC/D,IAAI,CAACN,sBAAsB;gBACzB,KAAK,MAAMQ,OAAO;oBAChBd,KAAKW,IAAI,CAACZ,GAAGa,OAAO,IAAI;oBACxBZ,KAAKW,IAAI,CAACZ,GAAGgB,MAAM;iBACpB,CAAE;oBACD,IAAId,GAAGe,UAAU,CAACF,MAAM;wBACtBR,uBAAuBQ;wBACvB;oBACF;gBACF;YACF;YAEA,IAAI,CAACR,sBAAsB;gBACzBW,QAAQC,KAAK,CAAC,qBAAsD,CAAtD,IAAIC,MAAM,2BAA2BZ,QAAQC,QAAQ,GAArD,qBAAA;2BAAA;gCAAA;kCAAA;gBAAqD;gBACnED,QAAQa,IAAI,CAAC;YACf;QACF;QACAf,SAASL,KAAKW,IAAI,CAACL,sBAAsBH;IAC3C;IAEA,IAAI,CAACH,KAAKqB,UAAU,CAAChB,SAAS;QAC5B,mDAAmD;QACnD,uCAAuC;QACvC,6EAA6E;QAC7E,yEAAyE;QACzE,gDAAgD;QAChDA,SAASL,KAAKsB,OAAO,CAACf,QAAQE,GAAG,CAAC,WAAW,IAAIF,QAAQgB,GAAG,IAAIlB;IAClE;IACA,OAAOA;AACT","ignoreList":[0]}
+19
View File
@@ -0,0 +1,19 @@
import { execSync } from 'child_process';
import { getPkgManager } from './get-pkg-manager';
export function getNpxCommand(baseDir) {
const pkgManager = getPkgManager(baseDir);
let command = 'npx --yes';
if (pkgManager === 'pnpm') {
command = 'pnpm --silent dlx';
} else if (pkgManager === 'yarn') {
try {
execSync('yarn dlx --help', {
stdio: 'ignore'
});
command = 'yarn --quiet dlx';
} catch {}
}
return command;
}
//# sourceMappingURL=get-npx-command.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/helpers/get-npx-command.ts"],"sourcesContent":["import { execSync } from 'child_process'\nimport { getPkgManager } from './get-pkg-manager'\n\nexport function getNpxCommand(baseDir: string) {\n const pkgManager = getPkgManager(baseDir)\n let command = 'npx --yes'\n if (pkgManager === 'pnpm') {\n command = 'pnpm --silent dlx'\n } else if (pkgManager === 'yarn') {\n try {\n execSync('yarn dlx --help', { stdio: 'ignore' })\n command = 'yarn --quiet dlx'\n } catch {}\n }\n\n return command\n}\n"],"names":["execSync","getPkgManager","getNpxCommand","baseDir","pkgManager","command","stdio"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAe;AACxC,SAASC,aAAa,QAAQ,oBAAmB;AAEjD,OAAO,SAASC,cAAcC,OAAe;IAC3C,MAAMC,aAAaH,cAAcE;IACjC,IAAIE,UAAU;IACd,IAAID,eAAe,QAAQ;QACzBC,UAAU;IACZ,OAAO,IAAID,eAAe,QAAQ;QAChC,IAAI;YACFJ,SAAS,mBAAmB;gBAAEM,OAAO;YAAS;YAC9CD,UAAU;QACZ,EAAE,OAAM,CAAC;IACX;IAEA,OAAOA;AACT","ignoreList":[0]}
+35
View File
@@ -0,0 +1,35 @@
import { execSync } from 'child_process';
import dns from 'dns/promises';
function getProxy() {
if (process.env.https_proxy) {
return process.env.https_proxy;
}
try {
const httpsProxy = execSync('npm config get https-proxy', {
encoding: 'utf8'
}).trim();
return httpsProxy !== 'null' ? httpsProxy : undefined;
} catch (e) {
return;
}
}
export async function getOnline() {
try {
await dns.lookup('registry.yarnpkg.com');
return true;
} catch {
const proxy = getProxy();
if (!proxy) {
return false;
}
try {
const { hostname } = new URL(proxy);
await dns.lookup(hostname);
return true;
} catch {
return false;
}
}
}
//# sourceMappingURL=get-online.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/helpers/get-online.ts"],"sourcesContent":["import { execSync } from 'child_process'\nimport dns from 'dns/promises'\n\nfunction getProxy(): string | undefined {\n if (process.env.https_proxy) {\n return process.env.https_proxy\n }\n\n try {\n const httpsProxy = execSync('npm config get https-proxy', {\n encoding: 'utf8',\n }).trim()\n return httpsProxy !== 'null' ? httpsProxy : undefined\n } catch (e) {\n return\n }\n}\n\nexport async function getOnline(): Promise<boolean> {\n try {\n await dns.lookup('registry.yarnpkg.com')\n return true\n } catch {\n const proxy = getProxy()\n if (!proxy) {\n return false\n }\n\n try {\n const { hostname } = new URL(proxy)\n await dns.lookup(hostname)\n return true\n } catch {\n return false\n }\n }\n}\n"],"names":["execSync","dns","getProxy","process","env","https_proxy","httpsProxy","encoding","trim","undefined","e","getOnline","lookup","proxy","hostname","URL"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAe;AACxC,OAAOC,SAAS,eAAc;AAE9B,SAASC;IACP,IAAIC,QAAQC,GAAG,CAACC,WAAW,EAAE;QAC3B,OAAOF,QAAQC,GAAG,CAACC,WAAW;IAChC;IAEA,IAAI;QACF,MAAMC,aAAaN,SAAS,8BAA8B;YACxDO,UAAU;QACZ,GAAGC,IAAI;QACP,OAAOF,eAAe,SAASA,aAAaG;IAC9C,EAAE,OAAOC,GAAG;QACV;IACF;AACF;AAEA,OAAO,eAAeC;IACpB,IAAI;QACF,MAAMV,IAAIW,MAAM,CAAC;QACjB,OAAO;IACT,EAAE,OAAM;QACN,MAAMC,QAAQX;QACd,IAAI,CAACW,OAAO;YACV,OAAO;QACT;QAEA,IAAI;YACF,MAAM,EAAEC,QAAQ,EAAE,GAAG,IAAIC,IAAIF;YAC7B,MAAMZ,IAAIW,MAAM,CAACE;YACjB,OAAO;QACT,EAAE,OAAM;YACN,OAAO;QACT;IACF;AACF","ignoreList":[0]}
+48
View File
@@ -0,0 +1,48 @@
import fs from 'fs';
import path from 'path';
import { execSync } from 'child_process';
export function getPkgManager(baseDir) {
try {
for (const { lockFile, packageManager } of [
{
lockFile: 'yarn.lock',
packageManager: 'yarn'
},
{
lockFile: 'pnpm-lock.yaml',
packageManager: 'pnpm'
},
{
lockFile: 'package-lock.json',
packageManager: 'npm'
}
]){
if (fs.existsSync(path.join(baseDir, lockFile))) {
return packageManager;
}
}
const userAgent = process.env.npm_config_user_agent;
if (userAgent) {
if (userAgent.startsWith('yarn')) {
return 'yarn';
} else if (userAgent.startsWith('pnpm')) {
return 'pnpm';
}
}
try {
execSync('yarn --version', {
stdio: 'ignore'
});
return 'yarn';
} catch {
execSync('pnpm --version', {
stdio: 'ignore'
});
return 'pnpm';
}
} catch {
return 'npm';
}
}
//# sourceMappingURL=get-pkg-manager.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/helpers/get-pkg-manager.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport { execSync } from 'child_process'\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn'\n\nexport function getPkgManager(baseDir: string): PackageManager {\n try {\n for (const { lockFile, packageManager } of [\n { lockFile: 'yarn.lock', packageManager: 'yarn' },\n { lockFile: 'pnpm-lock.yaml', packageManager: 'pnpm' },\n { lockFile: 'package-lock.json', packageManager: 'npm' },\n ]) {\n if (fs.existsSync(path.join(baseDir, lockFile))) {\n return packageManager as PackageManager\n }\n }\n const userAgent = process.env.npm_config_user_agent\n if (userAgent) {\n if (userAgent.startsWith('yarn')) {\n return 'yarn'\n } else if (userAgent.startsWith('pnpm')) {\n return 'pnpm'\n }\n }\n try {\n execSync('yarn --version', { stdio: 'ignore' })\n return 'yarn'\n } catch {\n execSync('pnpm --version', { stdio: 'ignore' })\n return 'pnpm'\n }\n } catch {\n return 'npm'\n }\n}\n"],"names":["fs","path","execSync","getPkgManager","baseDir","lockFile","packageManager","existsSync","join","userAgent","process","env","npm_config_user_agent","startsWith","stdio"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,UAAU,OAAM;AACvB,SAASC,QAAQ,QAAQ,gBAAe;AAIxC,OAAO,SAASC,cAAcC,OAAe;IAC3C,IAAI;QACF,KAAK,MAAM,EAAEC,QAAQ,EAAEC,cAAc,EAAE,IAAI;YACzC;gBAAED,UAAU;gBAAaC,gBAAgB;YAAO;YAChD;gBAAED,UAAU;gBAAkBC,gBAAgB;YAAO;YACrD;gBAAED,UAAU;gBAAqBC,gBAAgB;YAAM;SACxD,CAAE;YACD,IAAIN,GAAGO,UAAU,CAACN,KAAKO,IAAI,CAACJ,SAASC,YAAY;gBAC/C,OAAOC;YACT;QACF;QACA,MAAMG,YAAYC,QAAQC,GAAG,CAACC,qBAAqB;QACnD,IAAIH,WAAW;YACb,IAAIA,UAAUI,UAAU,CAAC,SAAS;gBAChC,OAAO;YACT,OAAO,IAAIJ,UAAUI,UAAU,CAAC,SAAS;gBACvC,OAAO;YACT;QACF;QACA,IAAI;YACFX,SAAS,kBAAkB;gBAAEY,OAAO;YAAS;YAC7C,OAAO;QACT,EAAE,OAAM;YACNZ,SAAS,kBAAkB;gBAAEY,OAAO;YAAS;YAC7C,OAAO;QACT;IACF,EAAE,OAAM;QACN,OAAO;IACT;AACF","ignoreList":[0]}
+39
View File
@@ -0,0 +1,39 @@
import { execSync } from 'child_process';
import { getPkgManager } from './get-pkg-manager';
import { getFormattedNodeOptionsWithoutInspect } from '../../server/lib/utils';
/**
* Returns the package registry using the user's package manager.
* The URL will have a trailing slash.
* @default https://registry.npmjs.org/
*/ export function getRegistry(baseDir = process.cwd()) {
const pkgManager = getPkgManager(baseDir);
// Since `npm config` command fails in npm workspace to prevent workspace config conflicts,
// add `--no-workspaces` flag to run under the context of the root project only.
// Safe for non-workspace projects as it's equivalent to default `--workspaces=false`.
// x-ref: https://github.com/vercel/next.js/issues/47121#issuecomment-1499044345
// x-ref: https://github.com/npm/statusboard/issues/371#issue-920669998
const resolvedFlags = pkgManager === 'npm' ? '--no-workspaces' : '';
let registry = `https://registry.npmjs.org/`;
try {
const output = execSync(`${pkgManager} config get registry ${resolvedFlags}`, {
env: {
...process.env,
NODE_OPTIONS: getFormattedNodeOptionsWithoutInspect()
}
}).toString().trim();
if (output.startsWith('http')) {
registry = output.endsWith('/') ? output : `${output}/`;
}
} catch (err) {
throw Object.defineProperty(new Error(`Failed to get registry from "${pkgManager}".`, {
cause: err
}), "__NEXT_ERROR_CODE", {
value: "E508",
enumerable: false,
configurable: true
});
}
return registry;
}
//# sourceMappingURL=get-registry.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/helpers/get-registry.ts"],"sourcesContent":["import { execSync } from 'child_process'\nimport { getPkgManager } from './get-pkg-manager'\nimport { getFormattedNodeOptionsWithoutInspect } from '../../server/lib/utils'\n\n/**\n * Returns the package registry using the user's package manager.\n * The URL will have a trailing slash.\n * @default https://registry.npmjs.org/\n */\nexport function getRegistry(baseDir: string = process.cwd()) {\n const pkgManager = getPkgManager(baseDir)\n // Since `npm config` command fails in npm workspace to prevent workspace config conflicts,\n // add `--no-workspaces` flag to run under the context of the root project only.\n // Safe for non-workspace projects as it's equivalent to default `--workspaces=false`.\n // x-ref: https://github.com/vercel/next.js/issues/47121#issuecomment-1499044345\n // x-ref: https://github.com/npm/statusboard/issues/371#issue-920669998\n const resolvedFlags = pkgManager === 'npm' ? '--no-workspaces' : ''\n let registry = `https://registry.npmjs.org/`\n\n try {\n const output = execSync(\n `${pkgManager} config get registry ${resolvedFlags}`,\n {\n env: {\n ...process.env,\n NODE_OPTIONS: getFormattedNodeOptionsWithoutInspect(),\n },\n }\n )\n .toString()\n .trim()\n\n if (output.startsWith('http')) {\n registry = output.endsWith('/') ? output : `${output}/`\n }\n } catch (err) {\n throw new Error(`Failed to get registry from \"${pkgManager}\".`, {\n cause: err,\n })\n }\n\n return registry\n}\n"],"names":["execSync","getPkgManager","getFormattedNodeOptionsWithoutInspect","getRegistry","baseDir","process","cwd","pkgManager","resolvedFlags","registry","output","env","NODE_OPTIONS","toString","trim","startsWith","endsWith","err","Error","cause"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAe;AACxC,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,qCAAqC,QAAQ,yBAAwB;AAE9E;;;;CAIC,GACD,OAAO,SAASC,YAAYC,UAAkBC,QAAQC,GAAG,EAAE;IACzD,MAAMC,aAAaN,cAAcG;IACjC,2FAA2F;IAC3F,gFAAgF;IAChF,sFAAsF;IACtF,gFAAgF;IAChF,uEAAuE;IACvE,MAAMI,gBAAgBD,eAAe,QAAQ,oBAAoB;IACjE,IAAIE,WAAW,CAAC,2BAA2B,CAAC;IAE5C,IAAI;QACF,MAAMC,SAASV,SACb,GAAGO,WAAW,qBAAqB,EAAEC,eAAe,EACpD;YACEG,KAAK;gBACH,GAAGN,QAAQM,GAAG;gBACdC,cAAcV;YAChB;QACF,GAECW,QAAQ,GACRC,IAAI;QAEP,IAAIJ,OAAOK,UAAU,CAAC,SAAS;YAC7BN,WAAWC,OAAOM,QAAQ,CAAC,OAAON,SAAS,GAAGA,OAAO,CAAC,CAAC;QACzD;IACF,EAAE,OAAOO,KAAK;QACZ,MAAM,qBAEJ,CAFI,IAAIC,MAAM,CAAC,6BAA6B,EAAEX,WAAW,EAAE,CAAC,EAAE;YAC9DY,OAAOF;QACT,IAFM,qBAAA;mBAAA;wBAAA;0BAAA;QAEL;IACH;IAEA,OAAOR;AACT","ignoreList":[0]}
+90
View File
@@ -0,0 +1,90 @@
/** https://fetch.spec.whatwg.org/#port-blocking */ export const KNOWN_RESERVED_PORTS = {
1: 'tcpmux',
7: 'echo',
9: 'discard',
11: 'systat',
13: 'daytime',
15: 'netstat',
17: 'qotd',
19: 'chargen',
20: 'ftp-data',
21: 'ftp',
22: 'ssh',
23: 'telnet',
25: 'smtp',
37: 'time',
42: 'name',
43: 'nicname',
53: 'domain',
69: 'tftp',
77: 'rje',
79: 'finger',
87: 'link',
95: 'supdup',
101: 'hostname',
102: 'iso-tsap',
103: 'gppitnp',
104: 'acr-nema',
109: 'pop2',
110: 'pop3',
111: 'sunrpc',
113: 'auth',
115: 'sftp',
117: 'uucp-path',
119: 'nntp',
123: 'ntp',
135: 'epmap',
137: 'netbios-ns',
139: 'netbios-ssn',
143: 'imap',
161: 'snmp',
179: 'bgp',
389: 'ldap',
427: 'svrloc',
465: 'submissions',
512: 'exec',
513: 'login',
514: 'shell',
515: 'printer',
526: 'tempo',
530: 'courier',
531: 'chat',
532: 'netnews',
540: 'uucp',
548: 'afp',
554: 'rtsp',
556: 'remotefs',
563: 'nntps',
587: 'submission',
601: 'syslog-conn',
636: 'ldaps',
989: 'ftps-data',
990: 'ftps',
993: 'imaps',
995: 'pop3s',
1719: 'h323gatestat',
1720: 'h323hostcall',
1723: 'pptp',
2049: 'nfs',
3659: 'apple-sasl',
4045: 'npp',
5060: 'sip',
5061: 'sips',
6000: 'x11',
6566: 'sane-port',
6665: 'ircu',
6666: 'ircu',
6667: 'ircu',
6668: 'ircu',
6669: 'ircu',
6697: 'ircs-u',
10080: 'amanda'
};
export function isPortIsReserved(port) {
return port in KNOWN_RESERVED_PORTS;
}
export function getReservedPortExplanation(port) {
return `Bad port: "${port}" is reserved for ${KNOWN_RESERVED_PORTS[port]}\n` + 'Read more: https://nextjs.org/docs/messages/reserved-port';
}
//# sourceMappingURL=get-reserved-port.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/helpers/get-reserved-port.ts"],"sourcesContent":["/** https://fetch.spec.whatwg.org/#port-blocking */\nexport const KNOWN_RESERVED_PORTS = {\n 1: 'tcpmux',\n 7: 'echo',\n 9: 'discard',\n 11: 'systat',\n 13: 'daytime',\n 15: 'netstat',\n 17: 'qotd',\n 19: 'chargen',\n 20: 'ftp-data',\n 21: 'ftp',\n 22: 'ssh',\n 23: 'telnet',\n 25: 'smtp',\n 37: 'time',\n 42: 'name',\n 43: 'nicname',\n 53: 'domain',\n 69: 'tftp',\n 77: 'rje',\n 79: 'finger',\n 87: 'link',\n 95: 'supdup',\n 101: 'hostname',\n 102: 'iso-tsap',\n 103: 'gppitnp',\n 104: 'acr-nema',\n 109: 'pop2',\n 110: 'pop3',\n 111: 'sunrpc',\n 113: 'auth',\n 115: 'sftp',\n 117: 'uucp-path',\n 119: 'nntp',\n 123: 'ntp',\n 135: 'epmap',\n 137: 'netbios-ns',\n 139: 'netbios-ssn',\n 143: 'imap',\n 161: 'snmp',\n 179: 'bgp',\n 389: 'ldap',\n 427: 'svrloc',\n 465: 'submissions',\n 512: 'exec',\n 513: 'login',\n 514: 'shell',\n 515: 'printer',\n 526: 'tempo',\n 530: 'courier',\n 531: 'chat',\n 532: 'netnews',\n 540: 'uucp',\n 548: 'afp',\n 554: 'rtsp',\n 556: 'remotefs',\n 563: 'nntps',\n 587: 'submission',\n 601: 'syslog-conn',\n 636: 'ldaps',\n 989: 'ftps-data',\n 990: 'ftps',\n 993: 'imaps',\n 995: 'pop3s',\n 1719: 'h323gatestat',\n 1720: 'h323hostcall',\n 1723: 'pptp',\n 2049: 'nfs',\n 3659: 'apple-sasl',\n 4045: 'npp',\n 5060: 'sip',\n 5061: 'sips',\n 6000: 'x11',\n 6566: 'sane-port',\n 6665: 'ircu',\n 6666: 'ircu',\n 6667: 'ircu',\n 6668: 'ircu',\n 6669: 'ircu',\n 6697: 'ircs-u',\n 10080: 'amanda',\n} as const\n\ntype ReservedPort = keyof typeof KNOWN_RESERVED_PORTS\n\nexport function isPortIsReserved(port: number): port is ReservedPort {\n return port in KNOWN_RESERVED_PORTS\n}\n\nexport function getReservedPortExplanation(port: ReservedPort): string {\n return (\n `Bad port: \"${port}\" is reserved for ${KNOWN_RESERVED_PORTS[port]}\\n` +\n 'Read more: https://nextjs.org/docs/messages/reserved-port'\n )\n}\n"],"names":["KNOWN_RESERVED_PORTS","isPortIsReserved","port","getReservedPortExplanation"],"mappings":"AAAA,iDAAiD,GACjD,OAAO,MAAMA,uBAAuB;IAClC,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;AACT,EAAU;AAIV,OAAO,SAASC,iBAAiBC,IAAY;IAC3C,OAAOA,QAAQF;AACjB;AAEA,OAAO,SAASG,2BAA2BD,IAAkB;IAC3D,OACE,CAAC,WAAW,EAAEA,KAAK,kBAAkB,EAAEF,oBAAoB,CAACE,KAAK,CAAC,EAAE,CAAC,GACrE;AAEJ","ignoreList":[0]}
+72
View File
@@ -0,0 +1,72 @@
import { yellow } from '../picocolors';
import spawn from 'next/dist/compiled/cross-spawn';
/**
* Spawn a package manager installation with either npm, pnpm, or yarn.
*
* @returns A Promise that resolves once the installation is finished.
*/ export function install(root, dependencies, { packageManager, isOnline, devDependencies }) {
let args = [];
if (dependencies.length > 0) {
if (packageManager === 'yarn') {
args = [
'add',
'--exact'
];
if (devDependencies) args.push('--dev');
} else if (packageManager === 'pnpm') {
args = [
'add',
'--save-exact'
];
args.push(devDependencies ? '--save-dev' : '--save-prod');
} else {
// npm
args = [
'install',
'--save-exact'
];
args.push(devDependencies ? '--save-dev' : '--save');
}
args.push(...dependencies);
} else {
args = [
'install'
] // npm, pnpm, and yarn all support `install`
;
if (!isOnline) {
args.push('--offline');
console.log(yellow('You appear to be offline.'));
if (packageManager !== 'npm') {
console.log(yellow(`Falling back to the local ${packageManager} cache.`));
}
console.log();
}
}
return new Promise((resolve, reject)=>{
/**
* Spawn the installation process.
*/ const child = spawn(packageManager, args, {
cwd: root,
stdio: 'inherit',
env: {
...process.env,
ADBLOCK: '1',
// we set NODE_ENV to development as pnpm skips dev
// dependencies when production
NODE_ENV: 'development',
DISABLE_OPENCOLLECTIVE: '1'
}
});
child.on('close', (code)=>{
if (code !== 0) {
reject({
command: `${packageManager} ${args.join(' ')}`
});
return;
}
resolve();
});
});
}
//# sourceMappingURL=install.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/helpers/install.ts"],"sourcesContent":["import { yellow } from '../picocolors'\nimport spawn from 'next/dist/compiled/cross-spawn'\nimport type { PackageManager } from './get-pkg-manager'\n\ninterface InstallArgs {\n /**\n * Indicate whether to install packages using npm, pnpm, or yarn.\n */\n packageManager: PackageManager\n /**\n * Indicate whether there is an active internet connection.\n */\n isOnline: boolean\n /**\n * Indicate whether the given dependencies are devDependencies.\n */\n devDependencies?: boolean\n}\n\n/**\n * Spawn a package manager installation with either npm, pnpm, or yarn.\n *\n * @returns A Promise that resolves once the installation is finished.\n */\nexport function install(\n root: string,\n dependencies: string[],\n { packageManager, isOnline, devDependencies }: InstallArgs\n): Promise<void> {\n let args: string[] = []\n\n if (dependencies.length > 0) {\n if (packageManager === 'yarn') {\n args = ['add', '--exact']\n if (devDependencies) args.push('--dev')\n } else if (packageManager === 'pnpm') {\n args = ['add', '--save-exact']\n args.push(devDependencies ? '--save-dev' : '--save-prod')\n } else {\n // npm\n args = ['install', '--save-exact']\n args.push(devDependencies ? '--save-dev' : '--save')\n }\n\n args.push(...dependencies)\n } else {\n args = ['install'] // npm, pnpm, and yarn all support `install`\n\n if (!isOnline) {\n args.push('--offline')\n console.log(yellow('You appear to be offline.'))\n if (packageManager !== 'npm') {\n console.log(\n yellow(`Falling back to the local ${packageManager} cache.`)\n )\n }\n console.log()\n }\n }\n\n return new Promise((resolve, reject) => {\n /**\n * Spawn the installation process.\n */\n const child = spawn(packageManager, args, {\n cwd: root,\n stdio: 'inherit',\n env: {\n ...process.env,\n ADBLOCK: '1',\n // we set NODE_ENV to development as pnpm skips dev\n // dependencies when production\n NODE_ENV: 'development',\n DISABLE_OPENCOLLECTIVE: '1',\n },\n })\n child.on('close', (code) => {\n if (code !== 0) {\n reject({ command: `${packageManager} ${args.join(' ')}` })\n return\n }\n resolve()\n })\n })\n}\n"],"names":["yellow","spawn","install","root","dependencies","packageManager","isOnline","devDependencies","args","length","push","console","log","Promise","resolve","reject","child","cwd","stdio","env","process","ADBLOCK","NODE_ENV","DISABLE_OPENCOLLECTIVE","on","code","command","join"],"mappings":"AAAA,SAASA,MAAM,QAAQ,gBAAe;AACtC,OAAOC,WAAW,iCAAgC;AAkBlD;;;;CAIC,GACD,OAAO,SAASC,QACdC,IAAY,EACZC,YAAsB,EACtB,EAAEC,cAAc,EAAEC,QAAQ,EAAEC,eAAe,EAAe;IAE1D,IAAIC,OAAiB,EAAE;IAEvB,IAAIJ,aAAaK,MAAM,GAAG,GAAG;QAC3B,IAAIJ,mBAAmB,QAAQ;YAC7BG,OAAO;gBAAC;gBAAO;aAAU;YACzB,IAAID,iBAAiBC,KAAKE,IAAI,CAAC;QACjC,OAAO,IAAIL,mBAAmB,QAAQ;YACpCG,OAAO;gBAAC;gBAAO;aAAe;YAC9BA,KAAKE,IAAI,CAACH,kBAAkB,eAAe;QAC7C,OAAO;YACL,MAAM;YACNC,OAAO;gBAAC;gBAAW;aAAe;YAClCA,KAAKE,IAAI,CAACH,kBAAkB,eAAe;QAC7C;QAEAC,KAAKE,IAAI,IAAIN;IACf,OAAO;QACLI,OAAO;YAAC;SAAU,CAAC,4CAA4C;;QAE/D,IAAI,CAACF,UAAU;YACbE,KAAKE,IAAI,CAAC;YACVC,QAAQC,GAAG,CAACZ,OAAO;YACnB,IAAIK,mBAAmB,OAAO;gBAC5BM,QAAQC,GAAG,CACTZ,OAAO,CAAC,0BAA0B,EAAEK,eAAe,OAAO,CAAC;YAE/D;YACAM,QAAQC,GAAG;QACb;IACF;IAEA,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3B;;KAEC,GACD,MAAMC,QAAQf,MAAMI,gBAAgBG,MAAM;YACxCS,KAAKd;YACLe,OAAO;YACPC,KAAK;gBACH,GAAGC,QAAQD,GAAG;gBACdE,SAAS;gBACT,mDAAmD;gBACnD,+BAA+B;gBAC/BC,UAAU;gBACVC,wBAAwB;YAC1B;QACF;QACAP,MAAMQ,EAAE,CAAC,SAAS,CAACC;YACjB,IAAIA,SAAS,GAAG;gBACdV,OAAO;oBAAEW,SAAS,GAAGrB,eAAe,CAAC,EAAEG,KAAKmB,IAAI,CAAC,MAAM;gBAAC;gBACxD;YACF;YACAb;QACF;IACF;AACF","ignoreList":[0]}