@verdaccio/e2e-cli 2.1.0 → 2.2.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/build/adapters/adapter.d.ts +1 -0
- package/build/adapters/index.d.ts +4 -0
- package/build/adapters/npm.d.ts +2 -0
- package/build/adapters/pnpm.d.ts +2 -0
- package/build/adapters/yarn-classic.d.ts +2 -0
- package/build/adapters/yarn-modern.d.ts +2 -0
- package/build/cjs/_virtual/_rolldown/runtime.cjs +23 -0
- package/build/cjs/adapters/index.cjs +4 -0
- package/build/cjs/adapters/npm.cjs +78 -0
- package/build/cjs/adapters/npm.cjs.map +1 -0
- package/build/cjs/adapters/pnpm.cjs +78 -0
- package/build/cjs/adapters/pnpm.cjs.map +1 -0
- package/build/cjs/adapters/yarn-classic.cjs +96 -0
- package/build/cjs/adapters/yarn-classic.cjs.map +1 -0
- package/build/cjs/adapters/yarn-modern.cjs +133 -0
- package/build/cjs/adapters/yarn-modern.cjs.map +1 -0
- package/build/cjs/index.cjs +152 -0
- package/build/cjs/index.cjs.map +1 -0
- package/build/cjs/reporter.cjs +60 -0
- package/build/cjs/reporter.cjs.map +1 -0
- package/build/cjs/runner.cjs +102 -0
- package/build/cjs/runner.cjs.map +1 -0
- package/build/cjs/tests/audit.cjs +27 -0
- package/build/cjs/tests/audit.cjs.map +1 -0
- package/build/cjs/tests/deprecate.cjs +67 -0
- package/build/cjs/tests/deprecate.cjs.map +1 -0
- package/build/cjs/tests/dist-tags.cjs +43 -0
- package/build/cjs/tests/dist-tags.cjs.map +1 -0
- package/build/cjs/tests/index.cjs +27 -0
- package/build/cjs/tests/index.cjs.map +1 -0
- package/build/cjs/tests/info.cjs +38 -0
- package/build/cjs/tests/info.cjs.map +1 -0
- package/build/cjs/tests/install.cjs +28 -0
- package/build/cjs/tests/install.cjs.map +1 -0
- package/build/cjs/tests/ping.cjs +18 -0
- package/build/cjs/tests/ping.cjs.map +1 -0
- package/build/cjs/tests/publish.cjs +34 -0
- package/build/cjs/tests/publish.cjs.map +1 -0
- package/build/cjs/tests/search.cjs +19 -0
- package/build/cjs/tests/search.cjs.map +1 -0
- package/build/cjs/tests/star.cjs +27 -0
- package/build/cjs/tests/star.cjs.map +1 -0
- package/build/cjs/tests/unpublish.cjs +40 -0
- package/build/cjs/tests/unpublish.cjs.map +1 -0
- package/build/cjs/utils/process.cjs +85 -0
- package/build/cjs/utils/process.cjs.map +1 -0
- package/build/cjs/utils/project.cjs +55 -0
- package/build/cjs/utils/project.cjs.map +1 -0
- package/build/cjs/utils/registry-client.cjs +61 -0
- package/build/cjs/utils/registry-client.cjs.map +1 -0
- package/build/esm/adapters/index.js +5 -0
- package/build/esm/adapters/npm.js +76 -0
- package/build/esm/adapters/npm.js.map +1 -0
- package/build/esm/adapters/pnpm.js +76 -0
- package/build/esm/adapters/pnpm.js.map +1 -0
- package/build/esm/adapters/yarn-classic.js +94 -0
- package/build/esm/adapters/yarn-classic.js.map +1 -0
- package/build/esm/adapters/yarn-modern.js +130 -0
- package/build/esm/adapters/yarn-modern.js.map +1 -0
- package/build/esm/index.js +142 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/reporter.js +56 -0
- package/build/esm/reporter.js.map +1 -0
- package/build/esm/runner.js +99 -0
- package/build/esm/runner.js.map +1 -0
- package/build/esm/tests/audit.js +25 -0
- package/build/esm/tests/audit.js.map +1 -0
- package/build/esm/tests/deprecate.js +65 -0
- package/build/esm/tests/deprecate.js.map +1 -0
- package/build/esm/tests/dist-tags.js +41 -0
- package/build/esm/tests/dist-tags.js.map +1 -0
- package/build/esm/tests/index.js +27 -0
- package/build/esm/tests/index.js.map +1 -0
- package/build/esm/tests/info.js +36 -0
- package/build/esm/tests/info.js.map +1 -0
- package/build/esm/tests/install.js +26 -0
- package/build/esm/tests/install.js.map +1 -0
- package/build/esm/tests/ping.js +16 -0
- package/build/esm/tests/ping.js.map +1 -0
- package/build/esm/tests/publish.js +32 -0
- package/build/esm/tests/publish.js.map +1 -0
- package/build/esm/tests/search.js +17 -0
- package/build/esm/tests/search.js.map +1 -0
- package/build/esm/tests/star.js +25 -0
- package/build/esm/tests/star.js.map +1 -0
- package/build/esm/tests/unpublish.js +38 -0
- package/build/esm/tests/unpublish.js.map +1 -0
- package/build/esm/utils/process.js +82 -0
- package/build/esm/utils/process.js.map +1 -0
- package/build/esm/utils/project.js +50 -0
- package/build/esm/utils/project.js.map +1 -0
- package/build/esm/utils/registry-client.js +57 -0
- package/build/esm/utils/registry-client.js.map +1 -0
- package/build/index.d.ts +5 -0
- package/build/reporter.d.ts +6 -0
- package/build/runner.d.ts +13 -0
- package/build/tests/audit.d.ts +2 -0
- package/build/tests/deprecate.d.ts +2 -0
- package/build/tests/dist-tags.d.ts +2 -0
- package/build/tests/index.d.ts +13 -0
- package/build/tests/info.d.ts +2 -0
- package/build/tests/install.d.ts +2 -0
- package/build/tests/ping.d.ts +2 -0
- package/build/tests/publish.d.ts +2 -0
- package/build/tests/search.d.ts +2 -0
- package/build/tests/star.d.ts +2 -0
- package/build/tests/unpublish.d.ts +2 -0
- package/build/types.d.ts +65 -0
- package/build/utils/index.d.ts +3 -0
- package/build/utils/process.d.ts +5 -0
- package/build/utils/project.d.ts +6 -0
- package/build/utils/registry-client.d.ts +14 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PackageManagerAdapter, ExecOutput, TestContext } from '../types';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.__toESM = __toESM;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_process = require("../utils/process.cjs");
|
|
3
|
+
const require_project = require("../utils/project.cjs");
|
|
4
|
+
let debug = require("debug");
|
|
5
|
+
debug = require_runtime.__toESM(debug);
|
|
6
|
+
let child_process = require("child_process");
|
|
7
|
+
//#region src/adapters/npm.ts
|
|
8
|
+
var debug$1 = (0, debug.default)("verdaccio:e2e-cli:npm");
|
|
9
|
+
var NPM_SUPPORTED_COMMANDS = new Set([
|
|
10
|
+
"publish",
|
|
11
|
+
"unpublish",
|
|
12
|
+
"install",
|
|
13
|
+
"info",
|
|
14
|
+
"audit",
|
|
15
|
+
"deprecate",
|
|
16
|
+
"dist-tag",
|
|
17
|
+
"ping",
|
|
18
|
+
"search",
|
|
19
|
+
"star",
|
|
20
|
+
"stars",
|
|
21
|
+
"unstar"
|
|
22
|
+
]);
|
|
23
|
+
function detectVersion(bin) {
|
|
24
|
+
try {
|
|
25
|
+
return (0, child_process.execSync)(`${bin} --version`, {
|
|
26
|
+
encoding: "utf8",
|
|
27
|
+
timeout: 5e3
|
|
28
|
+
}).trim();
|
|
29
|
+
} catch {
|
|
30
|
+
return "unknown";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function installNpm(version) {
|
|
34
|
+
const pkg = `npm@${version}`;
|
|
35
|
+
debug$1("installing %s into temp dir", pkg);
|
|
36
|
+
const tmpDir = (0, child_process.execSync)("mktemp -d", { encoding: "utf8" }).trim();
|
|
37
|
+
(0, child_process.execSync)(`npm install --prefix "${tmpDir}" ${pkg} --loglevel=error`, {
|
|
38
|
+
encoding: "utf8",
|
|
39
|
+
timeout: 3e4
|
|
40
|
+
});
|
|
41
|
+
const bin = `${tmpDir}/node_modules/.bin/npm`;
|
|
42
|
+
const installed = detectVersion(bin);
|
|
43
|
+
debug$1("installed npm %s at %s", installed, bin);
|
|
44
|
+
console.log(` Auto-installed npm ${installed}`);
|
|
45
|
+
return bin;
|
|
46
|
+
}
|
|
47
|
+
function resolveNpmBin(binPath, version) {
|
|
48
|
+
if (binPath) return binPath;
|
|
49
|
+
if (version) return installNpm(version);
|
|
50
|
+
return "npm";
|
|
51
|
+
}
|
|
52
|
+
function createNpmAdapter(binPath, version) {
|
|
53
|
+
const bin = resolveNpmBin(binPath, version);
|
|
54
|
+
const resolved = detectVersion(bin);
|
|
55
|
+
debug$1("creating npm adapter with bin: %s (%s)", bin, resolved);
|
|
56
|
+
return {
|
|
57
|
+
name: `npm@${resolved}`,
|
|
58
|
+
type: "npm",
|
|
59
|
+
bin,
|
|
60
|
+
supports: NPM_SUPPORTED_COMMANDS,
|
|
61
|
+
registryArg(url) {
|
|
62
|
+
return ["--registry", url];
|
|
63
|
+
},
|
|
64
|
+
prefixArg(folder) {
|
|
65
|
+
return ["--prefix", folder];
|
|
66
|
+
},
|
|
67
|
+
exec(options, ...args) {
|
|
68
|
+
return require_process.exec(options, bin, args);
|
|
69
|
+
},
|
|
70
|
+
async prepareProject(packageName, version, registryUrl, port, token, dependencies = {}, devDependencies = {}) {
|
|
71
|
+
return require_project.prepareGenericEmptyProject(packageName, version, port, token, registryUrl, dependencies, devDependencies);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//#endregion
|
|
76
|
+
exports.createNpmAdapter = createNpmAdapter;
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=npm.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.cjs","names":[],"sources":["../../../src/adapters/npm.ts"],"sourcesContent":["import { SpawnOptions, execSync } from 'child_process';\nimport buildDebug from 'debug';\n\nimport { ExecOutput, PackageManagerAdapter } from '../types';\nimport { exec } from '../utils/process';\nimport { prepareGenericEmptyProject } from '../utils/project';\n\nconst debug = buildDebug('verdaccio:e2e-cli:npm');\n\nconst NPM_SUPPORTED_COMMANDS = new Set([\n 'publish',\n 'unpublish',\n 'install',\n 'info',\n 'audit',\n 'deprecate',\n 'dist-tag',\n 'ping',\n 'search',\n 'star',\n 'stars',\n 'unstar',\n]);\n\nfunction detectVersion(bin: string): string {\n try {\n return execSync(`${bin} --version`, { encoding: 'utf8', timeout: 5000 }).trim();\n } catch {\n return 'unknown';\n }\n}\n\nfunction installNpm(version: string): string {\n const pkg = `npm@${version}`;\n debug('installing %s into temp dir', pkg);\n const tmpDir = execSync('mktemp -d', { encoding: 'utf8' }).trim();\n execSync(`npm install --prefix \"${tmpDir}\" ${pkg} --loglevel=error`, {\n encoding: 'utf8',\n timeout: 30000,\n });\n const bin = `${tmpDir}/node_modules/.bin/npm`;\n const installed = detectVersion(bin);\n debug('installed npm %s at %s', installed, bin);\n console.log(` Auto-installed npm ${installed}`);\n return bin;\n}\n\nfunction resolveNpmBin(binPath?: string, version?: string): string {\n if (binPath) return binPath;\n if (version) return installNpm(version);\n return 'npm';\n}\n\nexport function createNpmAdapter(binPath?: string, version?: string): PackageManagerAdapter {\n const bin = resolveNpmBin(binPath, version);\n const resolved = detectVersion(bin);\n debug('creating npm adapter with bin: %s (%s)', bin, resolved);\n\n const adapter: PackageManagerAdapter = {\n name: `npm@${resolved}`,\n type: 'npm',\n bin,\n supports: NPM_SUPPORTED_COMMANDS,\n\n registryArg(url: string): string[] {\n return ['--registry', url];\n },\n\n prefixArg(folder: string): string[] {\n return ['--prefix', folder];\n },\n\n exec(options: SpawnOptions, ...args: string[]): Promise<ExecOutput> {\n return exec(options, bin, args);\n },\n\n async prepareProject(\n packageName: string,\n version: string,\n registryUrl: string,\n port: number,\n token: string,\n dependencies: Record<string, string> = {},\n devDependencies: Record<string, string> = {}\n ): Promise<{ tempFolder: string }> {\n return prepareGenericEmptyProject(\n packageName,\n version,\n port,\n token,\n registryUrl,\n dependencies,\n devDependencies\n );\n },\n };\n\n return adapter;\n}\n"],"mappings":";;;;;;;AAOA,IAAM,WAAA,GAAA,MAAA,SAAmB,wBAAwB;AAEjD,IAAM,yBAAyB,IAAI,IAAI;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,cAAc,KAAqB;AAC1C,KAAI;AACF,UAAA,GAAA,cAAA,UAAgB,GAAG,IAAI,aAAa;GAAE,UAAU;GAAQ,SAAS;GAAM,CAAC,CAAC,MAAM;SACzE;AACN,SAAO;;;AAIX,SAAS,WAAW,SAAyB;CAC3C,MAAM,MAAM,OAAO;AACnB,SAAM,+BAA+B,IAAI;CACzC,MAAM,UAAA,GAAA,cAAA,UAAkB,aAAa,EAAE,UAAU,QAAQ,CAAC,CAAC,MAAM;AACjE,EAAA,GAAA,cAAA,UAAS,yBAAyB,OAAO,IAAI,IAAI,oBAAoB;EACnE,UAAU;EACV,SAAS;EACV,CAAC;CACF,MAAM,MAAM,GAAG,OAAO;CACtB,MAAM,YAAY,cAAc,IAAI;AACpC,SAAM,0BAA0B,WAAW,IAAI;AAC/C,SAAQ,IAAI,wBAAwB,YAAY;AAChD,QAAO;;AAGT,SAAS,cAAc,SAAkB,SAA0B;AACjE,KAAI,QAAS,QAAO;AACpB,KAAI,QAAS,QAAO,WAAW,QAAQ;AACvC,QAAO;;AAGT,SAAgB,iBAAiB,SAAkB,SAAyC;CAC1F,MAAM,MAAM,cAAc,SAAS,QAAQ;CAC3C,MAAM,WAAW,cAAc,IAAI;AACnC,SAAM,0CAA0C,KAAK,SAAS;AAyC9D,QAvCuC;EACrC,MAAM,OAAO;EACb,MAAM;EACN;EACA,UAAU;EAEV,YAAY,KAAuB;AACjC,UAAO,CAAC,cAAc,IAAI;;EAG5B,UAAU,QAA0B;AAClC,UAAO,CAAC,YAAY,OAAO;;EAG7B,KAAK,SAAuB,GAAG,MAAqC;AAClE,UAAO,gBAAA,KAAK,SAAS,KAAK,KAAK;;EAGjC,MAAM,eACJ,aACA,SACA,aACA,MACA,OACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;AACjC,UAAO,gBAAA,2BACL,aACA,SACA,MACA,OACA,aACA,cACA,gBACD;;EAEJ"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_process = require("../utils/process.cjs");
|
|
3
|
+
const require_project = require("../utils/project.cjs");
|
|
4
|
+
let debug = require("debug");
|
|
5
|
+
debug = require_runtime.__toESM(debug);
|
|
6
|
+
let child_process = require("child_process");
|
|
7
|
+
//#region src/adapters/pnpm.ts
|
|
8
|
+
var debug$1 = (0, debug.default)("verdaccio:e2e-cli:pnpm");
|
|
9
|
+
var PNPM_SUPPORTED_COMMANDS = new Set([
|
|
10
|
+
"publish",
|
|
11
|
+
"unpublish",
|
|
12
|
+
"install",
|
|
13
|
+
"info",
|
|
14
|
+
"audit",
|
|
15
|
+
"deprecate",
|
|
16
|
+
"dist-tag",
|
|
17
|
+
"ping",
|
|
18
|
+
"search",
|
|
19
|
+
"star",
|
|
20
|
+
"stars",
|
|
21
|
+
"unstar"
|
|
22
|
+
]);
|
|
23
|
+
function detectVersion(bin) {
|
|
24
|
+
try {
|
|
25
|
+
return (0, child_process.execSync)(`${bin} --version`, {
|
|
26
|
+
encoding: "utf8",
|
|
27
|
+
timeout: 5e3
|
|
28
|
+
}).trim();
|
|
29
|
+
} catch {
|
|
30
|
+
return "unknown";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function installPnpm(version) {
|
|
34
|
+
const pkg = `pnpm@${version}`;
|
|
35
|
+
debug$1("installing %s into temp dir", pkg);
|
|
36
|
+
const tmpDir = (0, child_process.execSync)("mktemp -d", { encoding: "utf8" }).trim();
|
|
37
|
+
(0, child_process.execSync)(`npm install --prefix "${tmpDir}" ${pkg} --loglevel=error`, {
|
|
38
|
+
encoding: "utf8",
|
|
39
|
+
timeout: 3e4
|
|
40
|
+
});
|
|
41
|
+
const bin = `${tmpDir}/node_modules/.bin/pnpm`;
|
|
42
|
+
const installed = detectVersion(bin);
|
|
43
|
+
debug$1("installed pnpm %s at %s", installed, bin);
|
|
44
|
+
console.log(` Auto-installed pnpm ${installed}`);
|
|
45
|
+
return bin;
|
|
46
|
+
}
|
|
47
|
+
function resolvePnpmBin(binPath, version) {
|
|
48
|
+
if (binPath) return binPath;
|
|
49
|
+
if (version) return installPnpm(version);
|
|
50
|
+
return "pnpm";
|
|
51
|
+
}
|
|
52
|
+
function createPnpmAdapter(binPath, version) {
|
|
53
|
+
const bin = resolvePnpmBin(binPath, version);
|
|
54
|
+
const resolved = detectVersion(bin);
|
|
55
|
+
debug$1("creating pnpm adapter with bin: %s (%s)", bin, resolved);
|
|
56
|
+
return {
|
|
57
|
+
name: `pnpm@${resolved}`,
|
|
58
|
+
type: "pnpm",
|
|
59
|
+
bin,
|
|
60
|
+
supports: PNPM_SUPPORTED_COMMANDS,
|
|
61
|
+
registryArg(url) {
|
|
62
|
+
return ["--registry", url];
|
|
63
|
+
},
|
|
64
|
+
prefixArg(folder) {
|
|
65
|
+
return ["--prefix", folder];
|
|
66
|
+
},
|
|
67
|
+
exec(options, ...args) {
|
|
68
|
+
return require_process.exec(options, bin, args);
|
|
69
|
+
},
|
|
70
|
+
async prepareProject(packageName, version, registryUrl, port, token, dependencies = {}, devDependencies = {}) {
|
|
71
|
+
return require_project.prepareGenericEmptyProject(packageName, version, port, token, registryUrl, dependencies, devDependencies);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//#endregion
|
|
76
|
+
exports.createPnpmAdapter = createPnpmAdapter;
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=pnpm.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm.cjs","names":[],"sources":["../../../src/adapters/pnpm.ts"],"sourcesContent":["import { SpawnOptions, execSync } from 'child_process';\nimport buildDebug from 'debug';\n\nimport { ExecOutput, PackageManagerAdapter } from '../types';\nimport { exec } from '../utils/process';\nimport { prepareGenericEmptyProject } from '../utils/project';\n\nconst debug = buildDebug('verdaccio:e2e-cli:pnpm');\n\nconst PNPM_SUPPORTED_COMMANDS = new Set([\n 'publish',\n 'unpublish',\n 'install',\n 'info',\n 'audit',\n 'deprecate',\n 'dist-tag',\n 'ping',\n 'search',\n 'star',\n 'stars',\n 'unstar',\n]);\n\nfunction detectVersion(bin: string): string {\n try {\n return execSync(`${bin} --version`, { encoding: 'utf8', timeout: 5000 }).trim();\n } catch {\n return 'unknown';\n }\n}\n\nfunction installPnpm(version: string): string {\n const pkg = `pnpm@${version}`;\n debug('installing %s into temp dir', pkg);\n const tmpDir = execSync('mktemp -d', { encoding: 'utf8' }).trim();\n execSync(`npm install --prefix \"${tmpDir}\" ${pkg} --loglevel=error`, {\n encoding: 'utf8',\n timeout: 30000,\n });\n const bin = `${tmpDir}/node_modules/.bin/pnpm`;\n const installed = detectVersion(bin);\n debug('installed pnpm %s at %s', installed, bin);\n console.log(` Auto-installed pnpm ${installed}`);\n return bin;\n}\n\nfunction resolvePnpmBin(binPath?: string, version?: string): string {\n if (binPath) return binPath;\n if (version) return installPnpm(version);\n return 'pnpm';\n}\n\nexport function createPnpmAdapter(binPath?: string, version?: string): PackageManagerAdapter {\n const bin = resolvePnpmBin(binPath, version);\n const resolved = detectVersion(bin);\n debug('creating pnpm adapter with bin: %s (%s)', bin, resolved);\n\n const adapter: PackageManagerAdapter = {\n name: `pnpm@${resolved}`,\n type: 'pnpm',\n bin,\n supports: PNPM_SUPPORTED_COMMANDS,\n\n registryArg(url: string): string[] {\n return ['--registry', url];\n },\n\n prefixArg(folder: string): string[] {\n return ['--prefix', folder];\n },\n\n exec(options: SpawnOptions, ...args: string[]): Promise<ExecOutput> {\n return exec(options, bin, args);\n },\n\n async prepareProject(\n packageName: string,\n version: string,\n registryUrl: string,\n port: number,\n token: string,\n dependencies: Record<string, string> = {},\n devDependencies: Record<string, string> = {}\n ): Promise<{ tempFolder: string }> {\n return prepareGenericEmptyProject(\n packageName,\n version,\n port,\n token,\n registryUrl,\n dependencies,\n devDependencies\n );\n },\n };\n\n return adapter;\n}\n"],"mappings":";;;;;;;AAOA,IAAM,WAAA,GAAA,MAAA,SAAmB,yBAAyB;AAElD,IAAM,0BAA0B,IAAI,IAAI;CACtC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,cAAc,KAAqB;AAC1C,KAAI;AACF,UAAA,GAAA,cAAA,UAAgB,GAAG,IAAI,aAAa;GAAE,UAAU;GAAQ,SAAS;GAAM,CAAC,CAAC,MAAM;SACzE;AACN,SAAO;;;AAIX,SAAS,YAAY,SAAyB;CAC5C,MAAM,MAAM,QAAQ;AACpB,SAAM,+BAA+B,IAAI;CACzC,MAAM,UAAA,GAAA,cAAA,UAAkB,aAAa,EAAE,UAAU,QAAQ,CAAC,CAAC,MAAM;AACjE,EAAA,GAAA,cAAA,UAAS,yBAAyB,OAAO,IAAI,IAAI,oBAAoB;EACnE,UAAU;EACV,SAAS;EACV,CAAC;CACF,MAAM,MAAM,GAAG,OAAO;CACtB,MAAM,YAAY,cAAc,IAAI;AACpC,SAAM,2BAA2B,WAAW,IAAI;AAChD,SAAQ,IAAI,yBAAyB,YAAY;AACjD,QAAO;;AAGT,SAAS,eAAe,SAAkB,SAA0B;AAClE,KAAI,QAAS,QAAO;AACpB,KAAI,QAAS,QAAO,YAAY,QAAQ;AACxC,QAAO;;AAGT,SAAgB,kBAAkB,SAAkB,SAAyC;CAC3F,MAAM,MAAM,eAAe,SAAS,QAAQ;CAC5C,MAAM,WAAW,cAAc,IAAI;AACnC,SAAM,2CAA2C,KAAK,SAAS;AAyC/D,QAvCuC;EACrC,MAAM,QAAQ;EACd,MAAM;EACN;EACA,UAAU;EAEV,YAAY,KAAuB;AACjC,UAAO,CAAC,cAAc,IAAI;;EAG5B,UAAU,QAA0B;AAClC,UAAO,CAAC,YAAY,OAAO;;EAG7B,KAAK,SAAuB,GAAG,MAAqC;AAClE,UAAO,gBAAA,KAAK,SAAS,KAAK,KAAK;;EAGjC,MAAM,eACJ,aACA,SACA,aACA,MACA,OACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;AACjC,UAAO,gBAAA,2BACL,aACA,SACA,MACA,OACA,aACA,cACA,gBACD;;EAEJ"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_process = require("../utils/process.cjs");
|
|
3
|
+
const require_project = require("../utils/project.cjs");
|
|
4
|
+
let debug = require("debug");
|
|
5
|
+
debug = require_runtime.__toESM(debug);
|
|
6
|
+
let child_process = require("child_process");
|
|
7
|
+
//#region src/adapters/yarn-classic.ts
|
|
8
|
+
var debug$1 = (0, debug.default)("verdaccio:e2e-cli:yarn-classic");
|
|
9
|
+
var YARN_CLASSIC_SUPPORTED_COMMANDS = new Set([
|
|
10
|
+
"publish",
|
|
11
|
+
"install",
|
|
12
|
+
"info",
|
|
13
|
+
"audit"
|
|
14
|
+
]);
|
|
15
|
+
function detectYarnVersion(bin) {
|
|
16
|
+
try {
|
|
17
|
+
return (0, child_process.execSync)(`${bin} --version`, {
|
|
18
|
+
env: {
|
|
19
|
+
...process.env,
|
|
20
|
+
COREPACK_ENABLE_STRICT: "0"
|
|
21
|
+
},
|
|
22
|
+
encoding: "utf8",
|
|
23
|
+
timeout: 5e3
|
|
24
|
+
}).trim();
|
|
25
|
+
} catch {
|
|
26
|
+
return "unknown";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function installYarnClassic(version = "1") {
|
|
30
|
+
const pkg = version.startsWith("1") ? `yarn@${version}` : `yarn@1`;
|
|
31
|
+
debug$1("installing %s into temp dir", pkg);
|
|
32
|
+
const tmpDir = (0, child_process.execSync)("mktemp -d", { encoding: "utf8" }).trim();
|
|
33
|
+
(0, child_process.execSync)(`npm install --prefix "${tmpDir}" ${pkg} --loglevel=error`, {
|
|
34
|
+
encoding: "utf8",
|
|
35
|
+
timeout: 3e4
|
|
36
|
+
});
|
|
37
|
+
const bin = `${tmpDir}/node_modules/.bin/yarn`;
|
|
38
|
+
const installed = detectYarnVersion(bin);
|
|
39
|
+
debug$1("installed yarn %s at %s", installed, bin);
|
|
40
|
+
console.log(` Auto-installed yarn classic ${installed}`);
|
|
41
|
+
return bin;
|
|
42
|
+
}
|
|
43
|
+
function resolveYarnClassicBin(binPath, version) {
|
|
44
|
+
if (binPath) return binPath;
|
|
45
|
+
if (version) return installYarnClassic(version);
|
|
46
|
+
try {
|
|
47
|
+
const systemYarn = (0, child_process.execSync)("which yarn", {
|
|
48
|
+
encoding: "utf8",
|
|
49
|
+
timeout: 5e3
|
|
50
|
+
}).trim();
|
|
51
|
+
const sysVersion = detectYarnVersion(systemYarn);
|
|
52
|
+
if (sysVersion.split(".")[0] === "1") {
|
|
53
|
+
debug$1("using system yarn classic %s", sysVersion);
|
|
54
|
+
return systemYarn;
|
|
55
|
+
}
|
|
56
|
+
debug$1("system yarn is Berry %s, auto-installing classic", sysVersion);
|
|
57
|
+
} catch {
|
|
58
|
+
debug$1("no system yarn found, auto-installing classic");
|
|
59
|
+
}
|
|
60
|
+
return installYarnClassic();
|
|
61
|
+
}
|
|
62
|
+
function createYarnClassicAdapter(binPath, version) {
|
|
63
|
+
const bin = resolveYarnClassicBin(binPath, version);
|
|
64
|
+
const resolved = detectYarnVersion(bin);
|
|
65
|
+
debug$1("creating yarn classic adapter with bin: %s (%s)", bin, resolved);
|
|
66
|
+
return {
|
|
67
|
+
name: `yarn-classic@${resolved}`,
|
|
68
|
+
type: "yarn-classic",
|
|
69
|
+
bin,
|
|
70
|
+
supports: YARN_CLASSIC_SUPPORTED_COMMANDS,
|
|
71
|
+
registryArg(url) {
|
|
72
|
+
return ["--registry", url];
|
|
73
|
+
},
|
|
74
|
+
prefixArg(folder) {
|
|
75
|
+
return ["--cwd", folder];
|
|
76
|
+
},
|
|
77
|
+
exec(options, ...args) {
|
|
78
|
+
const env = {
|
|
79
|
+
...process.env,
|
|
80
|
+
...options.env,
|
|
81
|
+
COREPACK_ENABLE_STRICT: "0"
|
|
82
|
+
};
|
|
83
|
+
return require_process.exec({
|
|
84
|
+
...options,
|
|
85
|
+
env
|
|
86
|
+
}, bin, args);
|
|
87
|
+
},
|
|
88
|
+
async prepareProject(packageName, version, registryUrl, port, token, dependencies = {}, devDependencies = {}) {
|
|
89
|
+
return require_project.prepareGenericEmptyProject(packageName, version, port, token, registryUrl, dependencies, devDependencies);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//#endregion
|
|
94
|
+
exports.createYarnClassicAdapter = createYarnClassicAdapter;
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=yarn-classic.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yarn-classic.cjs","names":[],"sources":["../../../src/adapters/yarn-classic.ts"],"sourcesContent":["import { SpawnOptions, execSync } from 'child_process';\nimport buildDebug from 'debug';\n\nimport { ExecOutput, PackageManagerAdapter } from '../types';\nimport { exec } from '../utils/process';\nimport { prepareGenericEmptyProject } from '../utils/project';\n\nconst debug = buildDebug('verdaccio:e2e-cli:yarn-classic');\n\nconst YARN_CLASSIC_SUPPORTED_COMMANDS = new Set([\n 'publish',\n 'install',\n 'info',\n 'audit',\n]);\n\nfunction detectYarnVersion(bin: string): string {\n try {\n return execSync(`${bin} --version`, {\n env: { ...process.env, COREPACK_ENABLE_STRICT: '0' },\n encoding: 'utf8',\n timeout: 5000,\n }).trim();\n } catch {\n return 'unknown';\n }\n}\n\nfunction installYarnClassic(version = '1'): string {\n const pkg = version.startsWith('1') ? `yarn@${version}` : `yarn@1`;\n debug('installing %s into temp dir', pkg);\n const tmpDir = execSync('mktemp -d', { encoding: 'utf8' }).trim();\n execSync(`npm install --prefix \"${tmpDir}\" ${pkg} --loglevel=error`, {\n encoding: 'utf8',\n timeout: 30000,\n });\n const bin = `${tmpDir}/node_modules/.bin/yarn`;\n const installed = detectYarnVersion(bin);\n debug('installed yarn %s at %s', installed, bin);\n console.log(` Auto-installed yarn classic ${installed}`);\n return bin;\n}\n\nfunction resolveYarnClassicBin(binPath?: string, version?: string): string {\n if (binPath) return binPath;\n\n // Always install the requested version to ensure reproducibility\n if (version) {\n return installYarnClassic(version);\n }\n\n // Check if system yarn is 1.x\n try {\n const systemYarn = execSync('which yarn', { encoding: 'utf8', timeout: 5000 }).trim();\n const sysVersion = detectYarnVersion(systemYarn);\n const major = sysVersion.split('.')[0];\n if (major === '1') {\n debug('using system yarn classic %s', sysVersion);\n return systemYarn;\n }\n debug('system yarn is Berry %s, auto-installing classic', sysVersion);\n } catch {\n debug('no system yarn found, auto-installing classic');\n }\n\n return installYarnClassic();\n}\n\nexport function createYarnClassicAdapter(binPath?: string, version?: string): PackageManagerAdapter {\n const bin = resolveYarnClassicBin(binPath, version);\n const resolved = detectYarnVersion(bin);\n debug('creating yarn classic adapter with bin: %s (%s)', bin, resolved);\n\n const adapter: PackageManagerAdapter = {\n name: `yarn-classic@${resolved}`,\n type: 'yarn-classic',\n bin,\n supports: YARN_CLASSIC_SUPPORTED_COMMANDS,\n\n registryArg(url: string): string[] {\n return ['--registry', url];\n },\n\n prefixArg(folder: string): string[] {\n return ['--cwd', folder];\n },\n\n exec(options: SpawnOptions, ...args: string[]): Promise<ExecOutput> {\n const env = { ...process.env, ...options.env, COREPACK_ENABLE_STRICT: '0' };\n return exec({ ...options, env }, bin, args);\n },\n\n async prepareProject(\n packageName: string,\n version: string,\n registryUrl: string,\n port: number,\n token: string,\n dependencies: Record<string, string> = {},\n devDependencies: Record<string, string> = {}\n ): Promise<{ tempFolder: string }> {\n return prepareGenericEmptyProject(\n packageName,\n version,\n port,\n token,\n registryUrl,\n dependencies,\n devDependencies\n );\n },\n };\n\n return adapter;\n}\n"],"mappings":";;;;;;;AAOA,IAAM,WAAA,GAAA,MAAA,SAAmB,iCAAiC;AAE1D,IAAM,kCAAkC,IAAI,IAAI;CAC9C;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,kBAAkB,KAAqB;AAC9C,KAAI;AACF,UAAA,GAAA,cAAA,UAAgB,GAAG,IAAI,aAAa;GAClC,KAAK;IAAE,GAAG,QAAQ;IAAK,wBAAwB;IAAK;GACpD,UAAU;GACV,SAAS;GACV,CAAC,CAAC,MAAM;SACH;AACN,SAAO;;;AAIX,SAAS,mBAAmB,UAAU,KAAa;CACjD,MAAM,MAAM,QAAQ,WAAW,IAAI,GAAG,QAAQ,YAAY;AAC1D,SAAM,+BAA+B,IAAI;CACzC,MAAM,UAAA,GAAA,cAAA,UAAkB,aAAa,EAAE,UAAU,QAAQ,CAAC,CAAC,MAAM;AACjE,EAAA,GAAA,cAAA,UAAS,yBAAyB,OAAO,IAAI,IAAI,oBAAoB;EACnE,UAAU;EACV,SAAS;EACV,CAAC;CACF,MAAM,MAAM,GAAG,OAAO;CACtB,MAAM,YAAY,kBAAkB,IAAI;AACxC,SAAM,2BAA2B,WAAW,IAAI;AAChD,SAAQ,IAAI,iCAAiC,YAAY;AACzD,QAAO;;AAGT,SAAS,sBAAsB,SAAkB,SAA0B;AACzE,KAAI,QAAS,QAAO;AAGpB,KAAI,QACF,QAAO,mBAAmB,QAAQ;AAIpC,KAAI;EACF,MAAM,cAAA,GAAA,cAAA,UAAsB,cAAc;GAAE,UAAU;GAAQ,SAAS;GAAM,CAAC,CAAC,MAAM;EACrF,MAAM,aAAa,kBAAkB,WAAW;AAEhD,MADc,WAAW,MAAM,IAAI,CAAC,OACtB,KAAK;AACjB,WAAM,gCAAgC,WAAW;AACjD,UAAO;;AAET,UAAM,oDAAoD,WAAW;SAC/D;AACN,UAAM,gDAAgD;;AAGxD,QAAO,oBAAoB;;AAG7B,SAAgB,yBAAyB,SAAkB,SAAyC;CAClG,MAAM,MAAM,sBAAsB,SAAS,QAAQ;CACnD,MAAM,WAAW,kBAAkB,IAAI;AACvC,SAAM,mDAAmD,KAAK,SAAS;AA0CvE,QAxCuC;EACrC,MAAM,gBAAgB;EACtB,MAAM;EACN;EACA,UAAU;EAEV,YAAY,KAAuB;AACjC,UAAO,CAAC,cAAc,IAAI;;EAG5B,UAAU,QAA0B;AAClC,UAAO,CAAC,SAAS,OAAO;;EAG1B,KAAK,SAAuB,GAAG,MAAqC;GAClE,MAAM,MAAM;IAAE,GAAG,QAAQ;IAAK,GAAG,QAAQ;IAAK,wBAAwB;IAAK;AAC3E,UAAO,gBAAA,KAAK;IAAE,GAAG;IAAS;IAAK,EAAE,KAAK,KAAK;;EAG7C,MAAM,eACJ,aACA,SACA,aACA,MACA,OACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;AACjC,UAAO,gBAAA,2BACL,aACA,SACA,MACA,OACA,aACA,cACA,gBACD;;EAEJ"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_process = require("../utils/process.cjs");
|
|
3
|
+
const require_project = require("../utils/project.cjs");
|
|
4
|
+
let debug = require("debug");
|
|
5
|
+
debug = require_runtime.__toESM(debug);
|
|
6
|
+
let child_process = require("child_process");
|
|
7
|
+
let path = require("path");
|
|
8
|
+
let fs_promises = require("fs/promises");
|
|
9
|
+
let js_yaml = require("js-yaml");
|
|
10
|
+
js_yaml = require_runtime.__toESM(js_yaml);
|
|
11
|
+
let url = require("url");
|
|
12
|
+
//#region src/adapters/yarn-modern.ts
|
|
13
|
+
var debug$1 = (0, debug.default)("verdaccio:e2e-cli:yarn-modern");
|
|
14
|
+
var YARN_MODERN_SUPPORTED_COMMANDS = new Set([
|
|
15
|
+
"publish",
|
|
16
|
+
"install",
|
|
17
|
+
"info"
|
|
18
|
+
]);
|
|
19
|
+
function detectVersion(bin) {
|
|
20
|
+
try {
|
|
21
|
+
return (0, child_process.execSync)(`${bin} --version`, {
|
|
22
|
+
env: {
|
|
23
|
+
...process.env,
|
|
24
|
+
COREPACK_ENABLE_STRICT: "0"
|
|
25
|
+
},
|
|
26
|
+
encoding: "utf8",
|
|
27
|
+
timeout: 5e3
|
|
28
|
+
}).trim();
|
|
29
|
+
} catch {
|
|
30
|
+
return "unknown";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function installYarnModern(version = "4") {
|
|
34
|
+
const pkg = `@yarnpkg/cli-dist@${version}`;
|
|
35
|
+
debug$1("installing %s into temp dir", pkg);
|
|
36
|
+
const tmpDir = (0, child_process.execSync)("mktemp -d", { encoding: "utf8" }).trim();
|
|
37
|
+
(0, child_process.execSync)(`npm install --prefix "${tmpDir}" ${pkg} --loglevel=error`, {
|
|
38
|
+
encoding: "utf8",
|
|
39
|
+
timeout: 3e4
|
|
40
|
+
});
|
|
41
|
+
const bin = `${tmpDir}/node_modules/@yarnpkg/cli-dist/bin/yarn.js`;
|
|
42
|
+
const installed = detectVersion(bin);
|
|
43
|
+
debug$1("installed yarn modern %s at %s", installed, bin);
|
|
44
|
+
console.log(` Auto-installed yarn modern ${installed}`);
|
|
45
|
+
return bin;
|
|
46
|
+
}
|
|
47
|
+
function resolveYarnBin(binPath, version) {
|
|
48
|
+
if (binPath) return binPath;
|
|
49
|
+
if (version) return installYarnModern(version);
|
|
50
|
+
try {
|
|
51
|
+
const systemYarn = (0, child_process.execSync)("which yarn", {
|
|
52
|
+
encoding: "utf8",
|
|
53
|
+
timeout: 5e3
|
|
54
|
+
}).trim();
|
|
55
|
+
const sysVersion = detectVersion(systemYarn);
|
|
56
|
+
if (parseInt(sysVersion.split(".")[0], 10) >= 2) {
|
|
57
|
+
debug$1("using system yarn Berry %s", sysVersion);
|
|
58
|
+
return systemYarn;
|
|
59
|
+
}
|
|
60
|
+
debug$1("system yarn is Classic %s, auto-installing Berry", sysVersion);
|
|
61
|
+
} catch {
|
|
62
|
+
debug$1("no system yarn found, auto-installing Berry");
|
|
63
|
+
}
|
|
64
|
+
return installYarnModern();
|
|
65
|
+
}
|
|
66
|
+
function createYamlConfig(registry, token) {
|
|
67
|
+
const defaultYaml = {
|
|
68
|
+
npmRegistryServer: registry,
|
|
69
|
+
enableImmutableInstalls: false,
|
|
70
|
+
unsafeHttpWhitelist: ["localhost"]
|
|
71
|
+
};
|
|
72
|
+
if (typeof token === "string") {
|
|
73
|
+
const url$1 = new url.URL(registry);
|
|
74
|
+
defaultYaml.npmRegistries = { [`//${url$1.hostname}:${url$1.port}`]: {
|
|
75
|
+
npmAlwaysAuth: true,
|
|
76
|
+
npmAuthToken: token
|
|
77
|
+
} };
|
|
78
|
+
}
|
|
79
|
+
return js_yaml.default.dump(defaultYaml);
|
|
80
|
+
}
|
|
81
|
+
function createYarnModernAdapter(binPath, version) {
|
|
82
|
+
const bin = resolveYarnBin(binPath, version);
|
|
83
|
+
const resolved = detectVersion(bin);
|
|
84
|
+
debug$1("creating yarn modern adapter with bin: %s (%s)", bin, resolved);
|
|
85
|
+
return {
|
|
86
|
+
name: `yarn-modern@${resolved}`,
|
|
87
|
+
type: "yarn-modern",
|
|
88
|
+
bin,
|
|
89
|
+
supports: YARN_MODERN_SUPPORTED_COMMANDS,
|
|
90
|
+
registryArg(_url) {
|
|
91
|
+
return [];
|
|
92
|
+
},
|
|
93
|
+
prefixArg(_folder) {
|
|
94
|
+
return [];
|
|
95
|
+
},
|
|
96
|
+
exec(options, ...args) {
|
|
97
|
+
const env = {
|
|
98
|
+
...process.env,
|
|
99
|
+
...options.env,
|
|
100
|
+
COREPACK_ENABLE_STRICT: "0"
|
|
101
|
+
};
|
|
102
|
+
const cmd = args[0];
|
|
103
|
+
let yarnArgs;
|
|
104
|
+
if (cmd === "publish") yarnArgs = [
|
|
105
|
+
"npm",
|
|
106
|
+
"publish",
|
|
107
|
+
...args.slice(1).filter((a) => a !== "--json" && !a.startsWith("--registry"))
|
|
108
|
+
];
|
|
109
|
+
else if (cmd === "info") yarnArgs = [
|
|
110
|
+
"npm",
|
|
111
|
+
"info",
|
|
112
|
+
...args.slice(1).filter((a) => !a.startsWith("--registry"))
|
|
113
|
+
];
|
|
114
|
+
else yarnArgs = args.filter((a) => !a.startsWith("--registry"));
|
|
115
|
+
return require_process.exec({
|
|
116
|
+
...options,
|
|
117
|
+
env
|
|
118
|
+
}, bin, yarnArgs);
|
|
119
|
+
},
|
|
120
|
+
async prepareProject(packageName, version, registryUrl, _port, token, dependencies = {}, devDependencies = {}) {
|
|
121
|
+
const tempFolder = await require_project.createTempFolder(packageName);
|
|
122
|
+
const yamlContent = createYamlConfig(registryUrl, token);
|
|
123
|
+
await (0, fs_promises.writeFile)((0, path.join)(tempFolder, ".yarnrc.yml"), yamlContent);
|
|
124
|
+
await (0, fs_promises.writeFile)((0, path.join)(tempFolder, "package.json"), require_project.getPackageJSON(packageName, version, dependencies, devDependencies));
|
|
125
|
+
await (0, fs_promises.writeFile)((0, path.join)(tempFolder, "README.md"), require_project.getREADME(packageName));
|
|
126
|
+
return { tempFolder };
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
131
|
+
exports.createYarnModernAdapter = createYarnModernAdapter;
|
|
132
|
+
|
|
133
|
+
//# sourceMappingURL=yarn-modern.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yarn-modern.cjs","names":[],"sources":["../../../src/adapters/yarn-modern.ts"],"sourcesContent":["import { SpawnOptions, execSync } from 'child_process';\nimport buildDebug from 'debug';\nimport { writeFile } from 'fs/promises';\nimport YAML from 'js-yaml';\nimport { join } from 'path';\nimport { URL } from 'url';\n\nimport { ExecOutput, PackageManagerAdapter } from '../types';\nimport { exec } from '../utils/process';\nimport { createTempFolder, getPackageJSON, getREADME } from '../utils/project';\n\nconst debug = buildDebug('verdaccio:e2e-cli:yarn-modern');\n\nconst YARN_MODERN_SUPPORTED_COMMANDS = new Set(['publish', 'install', 'info']);\n\nfunction detectVersion(bin: string): string {\n try {\n return execSync(`${bin} --version`, {\n env: { ...process.env, COREPACK_ENABLE_STRICT: '0' },\n encoding: 'utf8',\n timeout: 5000,\n }).trim();\n } catch {\n return 'unknown';\n }\n}\n\nfunction installYarnModern(version = '4'): string {\n const pkg = `@yarnpkg/cli-dist@${version}`;\n debug('installing %s into temp dir', pkg);\n const tmpDir = execSync('mktemp -d', { encoding: 'utf8' }).trim();\n execSync(`npm install --prefix \"${tmpDir}\" ${pkg} --loglevel=error`, {\n encoding: 'utf8',\n timeout: 30000,\n });\n const bin = `${tmpDir}/node_modules/@yarnpkg/cli-dist/bin/yarn.js`;\n const installed = detectVersion(bin);\n debug('installed yarn modern %s at %s', installed, bin);\n console.log(` Auto-installed yarn modern ${installed}`);\n return bin;\n}\n\nfunction resolveYarnBin(binPath?: string, version?: string): string {\n if (binPath) return binPath;\n\n // Always install the requested version to ensure reproducibility\n if (version) {\n return installYarnModern(version);\n }\n\n // Check if system yarn is Berry (2+)\n try {\n const systemYarn = execSync('which yarn', { encoding: 'utf8', timeout: 5000 }).trim();\n const sysVersion = detectVersion(systemYarn);\n const major = parseInt(sysVersion.split('.')[0], 10);\n if (major >= 2) {\n debug('using system yarn Berry %s', sysVersion);\n return systemYarn;\n }\n debug('system yarn is Classic %s, auto-installing Berry', sysVersion);\n } catch {\n debug('no system yarn found, auto-installing Berry');\n }\n\n return installYarnModern();\n}\n\nfunction createYamlConfig(registry: string, token?: string) {\n const defaultYaml: any = {\n npmRegistryServer: registry,\n enableImmutableInstalls: false,\n unsafeHttpWhitelist: ['localhost'],\n };\n\n if (typeof token === 'string') {\n const url = new URL(registry);\n defaultYaml.npmRegistries = {\n [`//${url.hostname}:${url.port}`]: {\n npmAlwaysAuth: true,\n npmAuthToken: token,\n },\n };\n }\n\n return YAML.dump(defaultYaml);\n}\n\nexport function createYarnModernAdapter(binPath?: string, version?: string): PackageManagerAdapter {\n const bin = resolveYarnBin(binPath, version);\n const resolved = detectVersion(bin);\n debug('creating yarn modern adapter with bin: %s (%s)', bin, resolved);\n\n const adapter: PackageManagerAdapter = {\n name: `yarn-modern@${resolved}`,\n type: 'yarn-modern',\n bin,\n supports: YARN_MODERN_SUPPORTED_COMMANDS,\n\n registryArg(_url: string): string[] {\n return [];\n },\n\n prefixArg(_folder: string): string[] {\n return [];\n },\n\n exec(options: SpawnOptions, ...args: string[]): Promise<ExecOutput> {\n const env = { ...process.env, ...options.env, COREPACK_ENABLE_STRICT: '0' };\n\n const cmd = args[0];\n let yarnArgs: string[];\n if (cmd === 'publish') {\n const filtered = args.slice(1).filter(\n (a) => a !== '--json' && !a.startsWith('--registry')\n );\n yarnArgs = ['npm', 'publish', ...filtered];\n } else if (cmd === 'info') {\n const filtered = args.slice(1).filter((a) => !a.startsWith('--registry'));\n yarnArgs = ['npm', 'info', ...filtered];\n } else {\n yarnArgs = args.filter((a) => !a.startsWith('--registry'));\n }\n\n return exec({ ...options, env }, bin, yarnArgs);\n },\n\n async prepareProject(\n packageName: string,\n version: string,\n registryUrl: string,\n _port: number,\n token: string,\n dependencies: Record<string, string> = {},\n devDependencies: Record<string, string> = {}\n ): Promise<{ tempFolder: string }> {\n const tempFolder = await createTempFolder(packageName);\n const yamlContent = createYamlConfig(registryUrl, token);\n await writeFile(join(tempFolder, '.yarnrc.yml'), yamlContent);\n await writeFile(\n join(tempFolder, 'package.json'),\n getPackageJSON(packageName, version, dependencies, devDependencies)\n );\n await writeFile(join(tempFolder, 'README.md'), getREADME(packageName));\n return { tempFolder };\n },\n };\n\n return adapter;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
const require_npm = require("./adapters/npm.cjs");
|
|
4
|
+
const require_pnpm = require("./adapters/pnpm.cjs");
|
|
5
|
+
const require_yarn_classic = require("./adapters/yarn-classic.cjs");
|
|
6
|
+
const require_yarn_modern = require("./adapters/yarn-modern.cjs");
|
|
7
|
+
require("./adapters/index.cjs");
|
|
8
|
+
const require_index$1 = require("./tests/index.cjs");
|
|
9
|
+
const require_registry_client = require("./utils/registry-client.cjs");
|
|
10
|
+
const require_runner = require("./runner.cjs");
|
|
11
|
+
let debug = require("debug");
|
|
12
|
+
debug = require_runtime.__toESM(debug);
|
|
13
|
+
//#region src/index.ts
|
|
14
|
+
(0, debug.default)("verdaccio:e2e-cli");
|
|
15
|
+
function parsePmSpec(filter) {
|
|
16
|
+
const eqIdx = filter.indexOf("=");
|
|
17
|
+
if (eqIdx !== -1) return {
|
|
18
|
+
name: filter.slice(0, eqIdx).toLowerCase(),
|
|
19
|
+
binPath: filter.slice(eqIdx + 1)
|
|
20
|
+
};
|
|
21
|
+
const atIdx = filter.indexOf("@");
|
|
22
|
+
if (atIdx !== -1) return {
|
|
23
|
+
name: filter.slice(0, atIdx).toLowerCase(),
|
|
24
|
+
version: filter.slice(atIdx + 1)
|
|
25
|
+
};
|
|
26
|
+
return { name: filter.toLowerCase() };
|
|
27
|
+
}
|
|
28
|
+
function parseAdapters(pmFilters) {
|
|
29
|
+
if (!pmFilters || pmFilters.length === 0) return [require_npm.createNpmAdapter()];
|
|
30
|
+
const adapters = [];
|
|
31
|
+
for (const filter of pmFilters) {
|
|
32
|
+
const { name, version, binPath } = parsePmSpec(filter);
|
|
33
|
+
if (name === "npm") adapters.push(require_npm.createNpmAdapter(binPath, version));
|
|
34
|
+
else if (name === "pnpm") adapters.push(require_pnpm.createPnpmAdapter(binPath, version));
|
|
35
|
+
else if (name === "yarn-classic" || name === "yarn1") adapters.push(require_yarn_classic.createYarnClassicAdapter(binPath, version));
|
|
36
|
+
else if (name === "yarn-modern" || name === "yarn") adapters.push(require_yarn_modern.createYarnModernAdapter(binPath, version));
|
|
37
|
+
else throw new Error(`Unknown package manager: "${name}". Supported: npm, pnpm, yarn-classic, yarn-modern[@version]`);
|
|
38
|
+
}
|
|
39
|
+
return adapters;
|
|
40
|
+
}
|
|
41
|
+
function parseArgs(argv) {
|
|
42
|
+
const options = {
|
|
43
|
+
registry: "",
|
|
44
|
+
pm: [],
|
|
45
|
+
test: [],
|
|
46
|
+
concurrency: 1,
|
|
47
|
+
timeout: 5e4,
|
|
48
|
+
verbose: false
|
|
49
|
+
};
|
|
50
|
+
for (let i = 2; i < argv.length; i++) {
|
|
51
|
+
const arg = argv[i];
|
|
52
|
+
if (arg === "--registry" || arg === "-r") options.registry = argv[++i];
|
|
53
|
+
else if (arg === "--pm") options.pm.push(argv[++i]);
|
|
54
|
+
else if (arg === "--test" || arg === "-t") options.test.push(argv[++i]);
|
|
55
|
+
else if (arg === "--concurrency" || arg === "-c") options.concurrency = parseInt(argv[++i], 10);
|
|
56
|
+
else if (arg === "--timeout") options.timeout = parseInt(argv[++i], 10);
|
|
57
|
+
else if (arg === "--token") options.token = argv[++i];
|
|
58
|
+
else if (arg === "--verbose" || arg === "-v") options.verbose = true;
|
|
59
|
+
else if (arg === "--help" || arg === "-h") {
|
|
60
|
+
printHelp();
|
|
61
|
+
process.exit(0);
|
|
62
|
+
} else if (arg.startsWith("--registry=")) options.registry = arg.split("=")[1];
|
|
63
|
+
else if (arg.startsWith("--pm=")) options.pm.push(arg.split("=")[1]);
|
|
64
|
+
else if (arg.startsWith("--test=")) options.test.push(arg.split("=")[1]);
|
|
65
|
+
else if (arg.startsWith("--token=")) options.token = arg.split("=")[1];
|
|
66
|
+
else if (arg.startsWith("--timeout=")) options.timeout = parseInt(arg.split("=")[1], 10);
|
|
67
|
+
else {
|
|
68
|
+
console.error(`Unknown argument: ${arg}`);
|
|
69
|
+
printHelp();
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return options;
|
|
74
|
+
}
|
|
75
|
+
function printHelp() {
|
|
76
|
+
console.log(`
|
|
77
|
+
@verdaccio/e2e-cli - Run Verdaccio e2e tests against any running registry
|
|
78
|
+
|
|
79
|
+
Usage:
|
|
80
|
+
verdaccio-e2e --registry <url> [options]
|
|
81
|
+
|
|
82
|
+
Required:
|
|
83
|
+
-r, --registry <url> Verdaccio registry URL (e.g. http://localhost:4873)
|
|
84
|
+
|
|
85
|
+
Options:
|
|
86
|
+
--pm <name[@version]> Package manager to test (can be repeated)
|
|
87
|
+
Supported: npm, pnpm, yarn-classic, yarn-modern (or yarn)
|
|
88
|
+
Examples: --pm npm@10 --pm pnpm@9
|
|
89
|
+
--pm yarn-modern@4
|
|
90
|
+
--pm yarn-modern@3
|
|
91
|
+
--pm yarn-classic
|
|
92
|
+
--pm npm --pm pnpm (uses system version)
|
|
93
|
+
Auto-installs the requested yarn version if needed
|
|
94
|
+
Default: npm
|
|
95
|
+
|
|
96
|
+
-t, --test <name> Filter tests by name (can be repeated)
|
|
97
|
+
Available: publish, install, audit, info, deprecate,
|
|
98
|
+
dist-tags, ping, search, star, unpublish
|
|
99
|
+
Default: all supported by the PM
|
|
100
|
+
|
|
101
|
+
--token <token> Auth token (skips user creation)
|
|
102
|
+
--timeout <ms> Per-test timeout (default: 50000)
|
|
103
|
+
-v, --verbose Enable debug output
|
|
104
|
+
-h, --help Show this help
|
|
105
|
+
`);
|
|
106
|
+
}
|
|
107
|
+
async function main(argv = process.argv) {
|
|
108
|
+
const options = parseArgs(argv);
|
|
109
|
+
if (!options.registry) {
|
|
110
|
+
console.error("Error: --registry is required\n");
|
|
111
|
+
printHelp();
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
if (options.verbose) {
|
|
115
|
+
const { setVerbose } = await Promise.resolve().then(() => require("./utils/process.cjs"));
|
|
116
|
+
setVerbose(true);
|
|
117
|
+
}
|
|
118
|
+
console.log(`Checking registry at ${options.registry}...`);
|
|
119
|
+
if (!await require_registry_client.pingRegistry(options.registry)) {
|
|
120
|
+
console.error(`Error: Registry at ${options.registry} is not reachable`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
console.log(`Registry is alive.`);
|
|
124
|
+
let token = options.token;
|
|
125
|
+
if (!token) {
|
|
126
|
+
console.log("Creating test user...");
|
|
127
|
+
const auth = await require_registry_client.createUser(options.registry);
|
|
128
|
+
token = auth.token;
|
|
129
|
+
console.log(`User "${auth.user}" created.`);
|
|
130
|
+
}
|
|
131
|
+
const adapters = parseAdapters(options.pm);
|
|
132
|
+
console.log(`Adapters: ${adapters.map((a) => a.name).join(", ")}`);
|
|
133
|
+
const tests = options.test && options.test.length > 0 ? require_index$1.allTests.filter((t) => options.test.includes(t.name)) : require_index$1.allTests;
|
|
134
|
+
console.log(`Tests: ${tests.map((t) => t.name).join(", ")}`);
|
|
135
|
+
const { exitCode } = await require_runner.runAll(adapters, tests, options.registry, token, {
|
|
136
|
+
timeout: options.timeout,
|
|
137
|
+
concurrency: options.concurrency,
|
|
138
|
+
testFilter: options.test
|
|
139
|
+
});
|
|
140
|
+
process.exit(exitCode);
|
|
141
|
+
}
|
|
142
|
+
//#endregion
|
|
143
|
+
exports.allTests = require_index$1.allTests;
|
|
144
|
+
exports.createNpmAdapter = require_npm.createNpmAdapter;
|
|
145
|
+
exports.createPnpmAdapter = require_pnpm.createPnpmAdapter;
|
|
146
|
+
exports.createYarnClassicAdapter = require_yarn_classic.createYarnClassicAdapter;
|
|
147
|
+
exports.createYarnModernAdapter = require_yarn_modern.createYarnModernAdapter;
|
|
148
|
+
exports.main = main;
|
|
149
|
+
exports.runAll = require_runner.runAll;
|
|
150
|
+
exports.runSuite = require_runner.runSuite;
|
|
151
|
+
|
|
152
|
+
//# sourceMappingURL=index.cjs.map
|