@verdaccio/e2e-cli 2.10.1 → 3.0.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/Cargo.lock +1591 -0
- package/Cargo.toml +19 -0
- package/bin/e2e-cli.js +26 -6
- package/build/bin/verdaccio-e2e +0 -0
- package/build/cjs/index.cjs +11 -166
- package/build/esm/index.js +10 -153
- package/build/index.d.ts +15 -6
- package/package.json +14 -16
- package/scripts/build-js-package.mjs +25 -0
- package/src/e2e_tests/audit.rs +51 -0
- package/src/e2e_tests/ci.rs +32 -0
- package/src/e2e_tests/deprecate.rs +64 -0
- package/src/e2e_tests/dist_tags.rs +56 -0
- package/src/e2e_tests/info.rs +43 -0
- package/src/e2e_tests/install.rs +27 -0
- package/src/e2e_tests/login.rs +64 -0
- package/src/e2e_tests/mod.rs +104 -0
- package/src/e2e_tests/ping.rs +33 -0
- package/src/e2e_tests/publish.rs +68 -0
- package/src/e2e_tests/search.rs +14 -0
- package/src/e2e_tests/unpublish.rs +37 -0
- package/src/main.rs +1411 -0
- package/src/scenarios/install_multiple_deps.rs +99 -0
- package/src/scenarios/minimum_release_age.rs +45 -0
- package/src/scenarios/mod.rs +11 -0
- package/build/adapters/adapter.d.ts +0 -1
- package/build/adapters/bun.d.ts +0 -2
- package/build/adapters/deno.d.ts +0 -2
- package/build/adapters/index.d.ts +0 -6
- package/build/adapters/npm.d.ts +0 -2
- package/build/adapters/pnpm.d.ts +0 -2
- package/build/adapters/yarn-classic.d.ts +0 -2
- package/build/adapters/yarn-modern.d.ts +0 -2
- package/build/cjs/_virtual/_rolldown/runtime.cjs +0 -23
- package/build/cjs/adapters/bun.cjs +0 -63
- package/build/cjs/adapters/bun.cjs.map +0 -1
- package/build/cjs/adapters/deno.cjs +0 -58
- package/build/cjs/adapters/deno.cjs.map +0 -1
- package/build/cjs/adapters/index.cjs +0 -6
- package/build/cjs/adapters/npm.cjs +0 -75
- package/build/cjs/adapters/npm.cjs.map +0 -1
- package/build/cjs/adapters/pnpm.cjs +0 -104
- package/build/cjs/adapters/pnpm.cjs.map +0 -1
- package/build/cjs/adapters/yarn-classic.cjs +0 -98
- package/build/cjs/adapters/yarn-classic.cjs.map +0 -1
- package/build/cjs/adapters/yarn-modern.cjs +0 -206
- package/build/cjs/adapters/yarn-modern.cjs.map +0 -1
- package/build/cjs/index.cjs.map +0 -1
- package/build/cjs/reporter.cjs +0 -113
- package/build/cjs/reporter.cjs.map +0 -1
- package/build/cjs/runner.cjs +0 -141
- package/build/cjs/runner.cjs.map +0 -1
- package/build/cjs/scenarios/index.cjs +0 -8
- package/build/cjs/scenarios/index.cjs.map +0 -1
- package/build/cjs/scenarios/install-multiple-deps.cjs +0 -116
- package/build/cjs/scenarios/install-multiple-deps.cjs.map +0 -1
- package/build/cjs/scenarios/minimum-release-age.cjs +0 -112
- package/build/cjs/scenarios/minimum-release-age.cjs.map +0 -1
- package/build/cjs/tests/audit.cjs +0 -47
- package/build/cjs/tests/audit.cjs.map +0 -1
- package/build/cjs/tests/ci.cjs +0 -83
- package/build/cjs/tests/ci.cjs.map +0 -1
- package/build/cjs/tests/deprecate.cjs +0 -107
- package/build/cjs/tests/deprecate.cjs.map +0 -1
- package/build/cjs/tests/dist-tags.cjs +0 -43
- package/build/cjs/tests/dist-tags.cjs.map +0 -1
- package/build/cjs/tests/index.cjs +0 -33
- package/build/cjs/tests/index.cjs.map +0 -1
- package/build/cjs/tests/info.cjs +0 -41
- package/build/cjs/tests/info.cjs.map +0 -1
- package/build/cjs/tests/install.cjs +0 -27
- package/build/cjs/tests/install.cjs.map +0 -1
- package/build/cjs/tests/login.cjs +0 -117
- package/build/cjs/tests/login.cjs.map +0 -1
- package/build/cjs/tests/ping.cjs +0 -30
- package/build/cjs/tests/ping.cjs.map +0 -1
- package/build/cjs/tests/publish.cjs +0 -37
- package/build/cjs/tests/publish.cjs.map +0 -1
- package/build/cjs/tests/search.cjs +0 -19
- package/build/cjs/tests/search.cjs.map +0 -1
- package/build/cjs/tests/unpublish.cjs +0 -40
- package/build/cjs/tests/unpublish.cjs.map +0 -1
- package/build/cjs/utils/process.cjs +0 -85
- package/build/cjs/utils/process.cjs.map +0 -1
- package/build/cjs/utils/project.cjs +0 -55
- package/build/cjs/utils/project.cjs.map +0 -1
- package/build/cjs/utils/registry-client.cjs +0 -56
- package/build/cjs/utils/registry-client.cjs.map +0 -1
- package/build/esm/adapters/bun.js +0 -61
- package/build/esm/adapters/bun.js.map +0 -1
- package/build/esm/adapters/deno.js +0 -56
- package/build/esm/adapters/deno.js.map +0 -1
- package/build/esm/adapters/index.js +0 -7
- package/build/esm/adapters/npm.js +0 -73
- package/build/esm/adapters/npm.js.map +0 -1
- package/build/esm/adapters/pnpm.js +0 -102
- package/build/esm/adapters/pnpm.js.map +0 -1
- package/build/esm/adapters/yarn-classic.js +0 -96
- package/build/esm/adapters/yarn-classic.js.map +0 -1
- package/build/esm/adapters/yarn-modern.js +0 -203
- package/build/esm/adapters/yarn-modern.js.map +0 -1
- package/build/esm/index.js.map +0 -1
- package/build/esm/reporter.js +0 -107
- package/build/esm/reporter.js.map +0 -1
- package/build/esm/runner.js +0 -138
- package/build/esm/runner.js.map +0 -1
- package/build/esm/scenarios/index.js +0 -8
- package/build/esm/scenarios/index.js.map +0 -1
- package/build/esm/scenarios/install-multiple-deps.js +0 -113
- package/build/esm/scenarios/install-multiple-deps.js.map +0 -1
- package/build/esm/scenarios/minimum-release-age.js +0 -109
- package/build/esm/scenarios/minimum-release-age.js.map +0 -1
- package/build/esm/tests/audit.js +0 -44
- package/build/esm/tests/audit.js.map +0 -1
- package/build/esm/tests/ci.js +0 -80
- package/build/esm/tests/ci.js.map +0 -1
- package/build/esm/tests/deprecate.js +0 -104
- package/build/esm/tests/deprecate.js.map +0 -1
- package/build/esm/tests/dist-tags.js +0 -41
- package/build/esm/tests/dist-tags.js.map +0 -1
- package/build/esm/tests/index.js +0 -33
- package/build/esm/tests/index.js.map +0 -1
- package/build/esm/tests/info.js +0 -39
- package/build/esm/tests/info.js.map +0 -1
- package/build/esm/tests/install.js +0 -25
- package/build/esm/tests/install.js.map +0 -1
- package/build/esm/tests/login.js +0 -113
- package/build/esm/tests/login.js.map +0 -1
- package/build/esm/tests/ping.js +0 -28
- package/build/esm/tests/ping.js.map +0 -1
- package/build/esm/tests/publish.js +0 -35
- package/build/esm/tests/publish.js.map +0 -1
- package/build/esm/tests/search.js +0 -17
- package/build/esm/tests/search.js.map +0 -1
- package/build/esm/tests/unpublish.js +0 -38
- package/build/esm/tests/unpublish.js.map +0 -1
- package/build/esm/utils/process.js +0 -82
- package/build/esm/utils/process.js.map +0 -1
- package/build/esm/utils/project.js +0 -50
- package/build/esm/utils/project.js.map +0 -1
- package/build/esm/utils/registry-client.js +0 -53
- package/build/esm/utils/registry-client.js.map +0 -1
- package/build/reporter.d.ts +0 -7
- package/build/runner.d.ts +0 -13
- package/build/scenarios/index.d.ts +0 -5
- package/build/scenarios/install-multiple-deps.d.ts +0 -2
- package/build/scenarios/minimum-release-age.d.ts +0 -11
- package/build/tests/audit.d.ts +0 -2
- package/build/tests/ci.d.ts +0 -2
- package/build/tests/deprecate.d.ts +0 -2
- package/build/tests/dist-tags.d.ts +0 -2
- package/build/tests/index.d.ts +0 -15
- package/build/tests/info.d.ts +0 -2
- package/build/tests/install.d.ts +0 -2
- package/build/tests/login.d.ts +0 -2
- package/build/tests/ping.d.ts +0 -2
- package/build/tests/publish.d.ts +0 -2
- package/build/tests/search.d.ts +0 -2
- package/build/tests/unpublish.d.ts +0 -2
- package/build/types.d.ts +0 -81
- package/build/utils/index.d.ts +0 -3
- package/build/utils/process.d.ts +0 -4
- package/build/utils/project.d.ts +0 -6
- package/build/utils/registry-client.d.ts +0 -15
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
use super::prelude::*;
|
|
2
|
+
|
|
3
|
+
pub(crate) fn scenario_install_multiple_deps(ctx: &mut TestContext<'_>) -> Result<()> {
|
|
4
|
+
let id = ctx.run_id.clone();
|
|
5
|
+
let mut project_cwd = PathBuf::new();
|
|
6
|
+
sub_test(ctx, "publish seed packages", |ctx| {
|
|
7
|
+
for i in 1..=5 {
|
|
8
|
+
publish_seed(
|
|
9
|
+
ctx,
|
|
10
|
+
&format!("@verdaccio/seed-{id}-{i}"),
|
|
11
|
+
"1.0.0",
|
|
12
|
+
BTreeMap::new(),
|
|
13
|
+
)?;
|
|
14
|
+
}
|
|
15
|
+
let shared = format!("@verdaccio/seed-shared-{id}");
|
|
16
|
+
publish_seed(ctx, &shared, "1.0.0", BTreeMap::new())?;
|
|
17
|
+
let mut deps = BTreeMap::new();
|
|
18
|
+
deps.insert(format!("@verdaccio/seed-{id}-1"), "1.0.0".into());
|
|
19
|
+
deps.insert(format!("@verdaccio/seed-{id}-2"), "1.0.0".into());
|
|
20
|
+
deps.insert(shared, "1.0.0".into());
|
|
21
|
+
publish_seed(ctx, &format!("@verdaccio/seed-mid-{id}"), "1.0.0", deps)
|
|
22
|
+
})?;
|
|
23
|
+
sub_test(ctx, "install all dependencies in consumer project", |ctx| {
|
|
24
|
+
let mut deps = BTreeMap::new();
|
|
25
|
+
for i in 1..=5 {
|
|
26
|
+
deps.insert(format!("@verdaccio/seed-{id}-{i}"), "1.0.0".into());
|
|
27
|
+
}
|
|
28
|
+
deps.insert(format!("@verdaccio/seed-mid-{id}"), "1.0.0".into());
|
|
29
|
+
deps.insert(format!("@verdaccio/seed-shared-{id}"), "1.0.0".into());
|
|
30
|
+
project_cwd = prepare_project(
|
|
31
|
+
ctx,
|
|
32
|
+
&format!("@verdaccio/consumer-{id}"),
|
|
33
|
+
"1.0.0",
|
|
34
|
+
deps,
|
|
35
|
+
BTreeMap::new(),
|
|
36
|
+
)?;
|
|
37
|
+
let mut args = vec!["install".into()];
|
|
38
|
+
args.extend(registry_arg(&ctx.adapter, &ctx.registry_url));
|
|
39
|
+
exec_adapter(ctx, Some(&project_cwd), args)?;
|
|
40
|
+
Ok(())
|
|
41
|
+
})?;
|
|
42
|
+
sub_test(ctx, "verify installed packages", |ctx| {
|
|
43
|
+
for i in 1..=5 {
|
|
44
|
+
let name = format!("@verdaccio/seed-{id}-{i}");
|
|
45
|
+
let info = info_pkg(ctx, &project_cwd, &name)?;
|
|
46
|
+
assert_eq_json(info.get("name"), name.as_str(), "Expected package name")?;
|
|
47
|
+
assert_eq_json(info.get("version"), "1.0.0", "Expected version")?;
|
|
48
|
+
}
|
|
49
|
+
let mid = format!("@verdaccio/seed-mid-{id}");
|
|
50
|
+
let info = info_pkg(ctx, &project_cwd, &mid)?;
|
|
51
|
+
assert_eq_json(info.get("name"), mid.as_str(), "Expected mid package")?;
|
|
52
|
+
let deps = info
|
|
53
|
+
.get("dependencies")
|
|
54
|
+
.and_then(Value::as_object)
|
|
55
|
+
.ok_or_else(|| anyhow!("Expected dependencies"))?;
|
|
56
|
+
assert_eq_json(
|
|
57
|
+
deps.get(&format!("@verdaccio/seed-{id}-1")),
|
|
58
|
+
"1.0.0",
|
|
59
|
+
"Intermediate dependency mismatch",
|
|
60
|
+
)?;
|
|
61
|
+
assert_eq_json(
|
|
62
|
+
deps.get(&format!("@verdaccio/seed-{id}-2")),
|
|
63
|
+
"1.0.0",
|
|
64
|
+
"Intermediate dependency mismatch",
|
|
65
|
+
)?;
|
|
66
|
+
assert_eq_json(
|
|
67
|
+
deps.get(&format!("@verdaccio/seed-shared-{id}")),
|
|
68
|
+
"1.0.0",
|
|
69
|
+
"Intermediate dependency mismatch",
|
|
70
|
+
)
|
|
71
|
+
})?;
|
|
72
|
+
sub_test(ctx, "update and re-install", |ctx| {
|
|
73
|
+
let leaf = format!("@verdaccio/seed-{id}-1");
|
|
74
|
+
let shared = format!("@verdaccio/seed-shared-{id}");
|
|
75
|
+
publish_seed(ctx, &leaf, "2.0.0", BTreeMap::new())?;
|
|
76
|
+
publish_seed(ctx, &shared, "2.0.0", BTreeMap::new())?;
|
|
77
|
+
let mut deps = BTreeMap::new();
|
|
78
|
+
deps.insert(leaf.clone(), "^1.0.0".into());
|
|
79
|
+
deps.insert(shared, "^1.0.0".into());
|
|
80
|
+
let temp = prepare_project(
|
|
81
|
+
ctx,
|
|
82
|
+
&format!("@verdaccio/consumer-update-{id}"),
|
|
83
|
+
"1.0.0",
|
|
84
|
+
deps,
|
|
85
|
+
BTreeMap::new(),
|
|
86
|
+
)?;
|
|
87
|
+
let mut args = vec!["install".into()];
|
|
88
|
+
args.extend(registry_arg(&ctx.adapter, &ctx.registry_url));
|
|
89
|
+
exec_adapter(ctx, Some(&temp), args)?;
|
|
90
|
+
let info = info_pkg(ctx, &temp, &leaf)?;
|
|
91
|
+
let latest = info
|
|
92
|
+
.pointer("/dist-tags/latest")
|
|
93
|
+
.or_else(|| info.get("version"))
|
|
94
|
+
.and_then(Value::as_str)
|
|
95
|
+
.unwrap_or("");
|
|
96
|
+
assert_eq_str(latest, "2.0.0")
|
|
97
|
+
})?;
|
|
98
|
+
Ok(())
|
|
99
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
use super::prelude::*;
|
|
2
|
+
|
|
3
|
+
pub(crate) fn scenario_minimum_release_age(ctx: &mut TestContext<'_>) -> Result<()> {
|
|
4
|
+
let id = ctx.run_id.clone();
|
|
5
|
+
let excluded_scoped = format!("@verdaccio/release-age-{id}");
|
|
6
|
+
let excluded_unscoped = format!("verdaccio-release-age-{id}");
|
|
7
|
+
let blocked = format!("e2e-release-age-blocked-{id}");
|
|
8
|
+
sub_test(ctx, "publish fresh packages", |ctx| {
|
|
9
|
+
publish_seed(ctx, &excluded_scoped, "1.0.0", BTreeMap::new())?;
|
|
10
|
+
publish_seed(ctx, &excluded_unscoped, "1.0.0", BTreeMap::new())?;
|
|
11
|
+
publish_seed(ctx, &blocked, "1.0.0", BTreeMap::new())
|
|
12
|
+
})?;
|
|
13
|
+
sub_test(ctx, "excluded packages bypass the cooldown", |ctx| {
|
|
14
|
+
let mut deps = BTreeMap::new();
|
|
15
|
+
deps.insert(excluded_scoped.clone(), "1.0.0".into());
|
|
16
|
+
deps.insert(excluded_unscoped.clone(), "1.0.0".into());
|
|
17
|
+
let temp =
|
|
18
|
+
prepare_cooldown_consumer(ctx, &format!("@verdaccio/consumer-excluded-{id}"), deps)?;
|
|
19
|
+
let mut args = vec!["install".into()];
|
|
20
|
+
args.extend(registry_arg(&ctx.adapter, &ctx.registry_url));
|
|
21
|
+
exec_adapter(ctx, Some(&temp), args)?;
|
|
22
|
+
Ok(())
|
|
23
|
+
})?;
|
|
24
|
+
sub_test(ctx, "non-excluded fresh package is blocked", |ctx| {
|
|
25
|
+
let mut deps = BTreeMap::new();
|
|
26
|
+
deps.insert(blocked.clone(), "1.0.0".into());
|
|
27
|
+
let temp = prepare_cooldown_consumer(ctx, &format!("e2e-consumer-blocked-{id}"), deps)?;
|
|
28
|
+
let mut args = vec!["install".into(), "--no-frozen-lockfile".into()];
|
|
29
|
+
args.extend(registry_arg(&ctx.adapter, &ctx.registry_url));
|
|
30
|
+
let error = exec_adapter(ctx, Some(&temp), args)
|
|
31
|
+
.err()
|
|
32
|
+
.map(|err| format!("{err:#}"))
|
|
33
|
+
.unwrap_or_default();
|
|
34
|
+
assert_true(
|
|
35
|
+
!error.is_empty(),
|
|
36
|
+
"Expected install of fresh non-excluded package to be blocked",
|
|
37
|
+
)?;
|
|
38
|
+
assert_true(
|
|
39
|
+
error.to_ascii_lowercase().contains("minimumreleaseage")
|
|
40
|
+
|| error.contains("NO_MATURE_MATCHING_VERSION"),
|
|
41
|
+
&format!("Expected minimumReleaseAge cooldown error, got: {error}"),
|
|
42
|
+
)
|
|
43
|
+
})?;
|
|
44
|
+
Ok(())
|
|
45
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
pub(crate) mod install_multiple_deps;
|
|
2
|
+
pub(crate) mod minimum_release_age;
|
|
3
|
+
|
|
4
|
+
pub(crate) mod prelude {
|
|
5
|
+
pub(crate) use anyhow::{anyhow, Result};
|
|
6
|
+
pub(crate) use serde_json::Value;
|
|
7
|
+
pub(crate) use std::collections::BTreeMap;
|
|
8
|
+
pub(crate) use std::path::PathBuf;
|
|
9
|
+
|
|
10
|
+
pub(crate) use crate::*;
|
|
11
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { PackageManagerAdapter, ExecOutput, TestContext } from '../types';
|
package/build/adapters/bun.d.ts
DELETED
package/build/adapters/deno.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { createBunAdapter } from './bun';
|
|
2
|
-
export { createDenoAdapter } from './deno';
|
|
3
|
-
export { createNpmAdapter } from './npm';
|
|
4
|
-
export { createPnpmAdapter } from './pnpm';
|
|
5
|
-
export { createYarnClassicAdapter } from './yarn-classic';
|
|
6
|
-
export { createYarnModernAdapter } from './yarn-modern';
|
package/build/adapters/npm.d.ts
DELETED
package/build/adapters/pnpm.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
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;
|
|
@@ -1,63 +0,0 @@
|
|
|
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, 1);
|
|
6
|
-
let child_process = require("child_process");
|
|
7
|
-
//#region src/adapters/bun.ts
|
|
8
|
-
var debug$1 = (0, debug.default)("verdaccio:e2e-cli:bun");
|
|
9
|
-
var BUN_SUPPORTED_COMMANDS = new Set([
|
|
10
|
-
"publish",
|
|
11
|
-
"install",
|
|
12
|
-
"info",
|
|
13
|
-
"audit"
|
|
14
|
-
]);
|
|
15
|
-
function detectVersion(bin) {
|
|
16
|
-
try {
|
|
17
|
-
return (0, child_process.execSync)(`${bin} --version`, {
|
|
18
|
-
encoding: "utf8",
|
|
19
|
-
timeout: 5e3
|
|
20
|
-
}).trim();
|
|
21
|
-
} catch {
|
|
22
|
-
return "unknown";
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
function resolveBunBin(binPath) {
|
|
26
|
-
if (binPath) return binPath;
|
|
27
|
-
return "bun";
|
|
28
|
-
}
|
|
29
|
-
function createBunAdapter(binPath, _version) {
|
|
30
|
-
const bin = resolveBunBin(binPath);
|
|
31
|
-
const resolved = detectVersion(bin);
|
|
32
|
-
debug$1("creating bun adapter with bin: %s (%s)", bin, resolved);
|
|
33
|
-
return {
|
|
34
|
-
name: `bun@${resolved}`,
|
|
35
|
-
type: "bun",
|
|
36
|
-
bin,
|
|
37
|
-
supports: BUN_SUPPORTED_COMMANDS,
|
|
38
|
-
registryArg(url) {
|
|
39
|
-
return ["--registry", url];
|
|
40
|
-
},
|
|
41
|
-
prefixArg(folder) {
|
|
42
|
-
return ["--cwd", folder];
|
|
43
|
-
},
|
|
44
|
-
exec(options, ...args) {
|
|
45
|
-
if (args[0] === "info") {
|
|
46
|
-
const pkgName = args[1];
|
|
47
|
-
return require_process.exec(options, bin, [
|
|
48
|
-
"info",
|
|
49
|
-
pkgName,
|
|
50
|
-
...args.slice(2).filter((a) => a !== "--registry").filter((a) => !a.startsWith("http"))
|
|
51
|
-
]);
|
|
52
|
-
}
|
|
53
|
-
return require_process.exec(options, bin, args);
|
|
54
|
-
},
|
|
55
|
-
async prepareProject(packageName, version, registryUrl, port, token, dependencies = {}, devDependencies = {}) {
|
|
56
|
-
return require_project.prepareGenericEmptyProject(packageName, version, port, token, registryUrl, dependencies, devDependencies);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
//#endregion
|
|
61
|
-
exports.createBunAdapter = createBunAdapter;
|
|
62
|
-
|
|
63
|
-
//# sourceMappingURL=bun.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bun.cjs","names":[],"sources":["../../../src/adapters/bun.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:bun');\n\nconst BUN_SUPPORTED_COMMANDS = new Set(['publish', 'install', 'info', 'audit']);\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 resolveBunBin(binPath?: string): string {\n if (binPath) return binPath;\n return 'bun';\n}\n\nexport function createBunAdapter(binPath?: string, _version?: string): PackageManagerAdapter {\n const bin = resolveBunBin(binPath);\n const resolved = detectVersion(bin);\n debug('creating bun adapter with bin: %s (%s)', bin, resolved);\n\n const adapter: PackageManagerAdapter = {\n name: `bun@${resolved}`,\n type: 'bun',\n bin,\n supports: BUN_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 cmd = args[0];\n\n if (cmd === 'info') {\n // bun info <pkg> reads registry from .npmrc, strip --registry <url>\n const pkgName = args[1];\n const filteredArgs = args.slice(2).filter((a) => a !== '--registry');\n // also remove the URL that follows --registry\n const cleaned = filteredArgs.filter((a) => !a.startsWith('http'));\n return exec(options, bin, ['info', pkgName, ...cleaned]);\n }\n\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;CAAC;CAAW;CAAW;CAAQ;CAAQ,CAAC;AAE/E,SAAS,cAAc,KAAqB;CAC1C,IAAI;EACF,QAAA,GAAA,cAAA,UAAgB,GAAG,IAAI,aAAa;GAAE,UAAU;GAAQ,SAAS;GAAM,CAAC,CAAC,MAAM;SACzE;EACN,OAAO;;;AAIX,SAAS,cAAc,SAA0B;CAC/C,IAAI,SAAS,OAAO;CACpB,OAAO;;AAGT,SAAgB,iBAAiB,SAAkB,UAA0C;CAC3F,MAAM,MAAM,cAAc,QAAQ;CAClC,MAAM,WAAW,cAAc,IAAI;CACnC,QAAM,0CAA0C,KAAK,SAAS;CAoD9D,OAAO;EAjDL,MAAM,OAAO;EACb,MAAM;EACN;EACA,UAAU;EAEV,YAAY,KAAuB;GACjC,OAAO,CAAC,cAAc,IAAI;;EAG5B,UAAU,QAA0B;GAClC,OAAO,CAAC,SAAS,OAAO;;EAG1B,KAAK,SAAuB,GAAG,MAAqC;GAGlE,IAFY,KAAK,OAEL,QAAQ;IAElB,MAAM,UAAU,KAAK;IAIrB,OAAO,gBAAA,KAAK,SAAS,KAAK;KAAC;KAAQ;KAAS,GAHvB,KAAK,MAAM,EAAE,CAAC,QAAQ,MAAM,MAAM,aAEvC,CAAa,QAAQ,MAAM,CAAC,EAAE,WAAW,OAAO,CACjB;KAAQ,CAAC;;GAG1D,OAAO,gBAAA,KAAK,SAAS,KAAK,KAAK;;EAGjC,MAAM,eACJ,aACA,SACA,aACA,MACA,OACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;GACjC,OAAO,gBAAA,2BACL,aACA,SACA,MACA,OACA,aACA,cACA,gBACD;;EAIE"}
|
|
@@ -1,58 +0,0 @@
|
|
|
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, 1);
|
|
6
|
-
let child_process = require("child_process");
|
|
7
|
-
//#region src/adapters/deno.ts
|
|
8
|
-
var debug$1 = (0, debug.default)("verdaccio:e2e-cli:deno");
|
|
9
|
-
var DENO_SUPPORTED_COMMANDS = new Set(["install", "info"]);
|
|
10
|
-
function detectVersion(bin) {
|
|
11
|
-
try {
|
|
12
|
-
const match = (0, child_process.execSync)(`${bin} --version`, {
|
|
13
|
-
encoding: "utf8",
|
|
14
|
-
timeout: 5e3
|
|
15
|
-
}).match(/deno (\S+)/);
|
|
16
|
-
return match ? match[1] : "unknown";
|
|
17
|
-
} catch {
|
|
18
|
-
return "unknown";
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function resolveDenoBin(binPath) {
|
|
22
|
-
if (binPath) return binPath;
|
|
23
|
-
return "deno";
|
|
24
|
-
}
|
|
25
|
-
function createDenoAdapter(binPath, _version) {
|
|
26
|
-
const bin = resolveDenoBin(binPath);
|
|
27
|
-
const resolved = detectVersion(bin);
|
|
28
|
-
debug$1("creating deno adapter with bin: %s (%s)", bin, resolved);
|
|
29
|
-
return {
|
|
30
|
-
name: `deno@${resolved}`,
|
|
31
|
-
type: "deno",
|
|
32
|
-
bin,
|
|
33
|
-
supports: DENO_SUPPORTED_COMMANDS,
|
|
34
|
-
registryArg(_url) {
|
|
35
|
-
return [];
|
|
36
|
-
},
|
|
37
|
-
prefixArg(folder) {
|
|
38
|
-
return ["--root", folder];
|
|
39
|
-
},
|
|
40
|
-
exec(options, ...args) {
|
|
41
|
-
const cmd = args[0];
|
|
42
|
-
if (cmd === "info") return require_process.exec(options, bin, [
|
|
43
|
-
"info",
|
|
44
|
-
`npm:${args[1]}`,
|
|
45
|
-
"--node-modules-dir=auto"
|
|
46
|
-
].concat(args.slice(2).filter((a) => a !== "--json")));
|
|
47
|
-
if (cmd === "install") return require_process.exec(options, bin, ["install"]);
|
|
48
|
-
return require_process.exec(options, bin, args);
|
|
49
|
-
},
|
|
50
|
-
async prepareProject(packageName, version, registryUrl, port, token, dependencies = {}, devDependencies = {}) {
|
|
51
|
-
return require_project.prepareGenericEmptyProject(packageName, version, port, token, registryUrl, dependencies, devDependencies);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
//#endregion
|
|
56
|
-
exports.createDenoAdapter = createDenoAdapter;
|
|
57
|
-
|
|
58
|
-
//# sourceMappingURL=deno.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deno.cjs","names":[],"sources":["../../../src/adapters/deno.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:deno');\n\nconst DENO_SUPPORTED_COMMANDS = new Set(['install', 'info']);\n\nfunction detectVersion(bin: string): string {\n try {\n const output = execSync(`${bin} --version`, { encoding: 'utf8', timeout: 5000 });\n const match = output.match(/deno (\\S+)/);\n return match ? match[1] : 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\nfunction resolveDenoBin(binPath?: string): string {\n if (binPath) return binPath;\n return 'deno';\n}\n\nexport function createDenoAdapter(binPath?: string, _version?: string): PackageManagerAdapter {\n const bin = resolveDenoBin(binPath);\n const resolved = detectVersion(bin);\n debug('creating deno adapter with bin: %s (%s)', bin, resolved);\n\n const adapter: PackageManagerAdapter = {\n name: `deno@${resolved}`,\n type: 'deno',\n bin,\n supports: DENO_SUPPORTED_COMMANDS,\n\n registryArg(_url: string): string[] {\n // deno reads the registry from .npmrc (written by prepareProject), no CLI flag needed\n return [];\n },\n\n prefixArg(folder: string): string[] {\n return ['--root', folder];\n },\n\n exec(options: SpawnOptions, ...args: string[]): Promise<ExecOutput> {\n const cmd = args[0];\n\n if (cmd === 'info') {\n // deno info npm:<pkg> --node-modules-dir=auto\n const pkgName = args[1];\n const filteredArgs = ['info', `npm:${pkgName}`, '--node-modules-dir=auto'].concat(\n args.slice(2).filter((a) => a !== '--json')\n );\n return exec(options, bin, filteredArgs);\n }\n\n if (cmd === 'install') {\n // deno install — reads registry from .npmrc, no extra flags needed\n return exec(options, bin, ['install']);\n }\n\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,CAAC,WAAW,OAAO,CAAC;AAE5D,SAAS,cAAc,KAAqB;CAC1C,IAAI;EAEF,MAAM,SAAA,GAAA,cAAA,UADkB,GAAG,IAAI,aAAa;GAAE,UAAU;GAAQ,SAAS;GAAM,CACjE,CAAO,MAAM,aAAa;EACxC,OAAO,QAAQ,MAAM,KAAK;SACpB;EACN,OAAO;;;AAIX,SAAS,eAAe,SAA0B;CAChD,IAAI,SAAS,OAAO;CACpB,OAAO;;AAGT,SAAgB,kBAAkB,SAAkB,UAA0C;CAC5F,MAAM,MAAM,eAAe,QAAQ;CACnC,MAAM,WAAW,cAAc,IAAI;CACnC,QAAM,2CAA2C,KAAK,SAAS;CA0D/D,OAAO;EAvDL,MAAM,QAAQ;EACd,MAAM;EACN;EACA,UAAU;EAEV,YAAY,MAAwB;GAElC,OAAO,EAAE;;EAGX,UAAU,QAA0B;GAClC,OAAO,CAAC,UAAU,OAAO;;EAG3B,KAAK,SAAuB,GAAG,MAAqC;GAClE,MAAM,MAAM,KAAK;GAEjB,IAAI,QAAQ,QAMV,OAAO,gBAAA,KAAK,SAAS,KAHA;IAAC;IAAQ,OADd,KAAK;IAC2B;IAA0B,CAAC,OACzE,KAAK,MAAM,EAAE,CAAC,QAAQ,MAAM,MAAM,SAAS,CAEnB,CAAa;GAGzC,IAAI,QAAQ,WAEV,OAAO,gBAAA,KAAK,SAAS,KAAK,CAAC,UAAU,CAAC;GAGxC,OAAO,gBAAA,KAAK,SAAS,KAAK,KAAK;;EAGjC,MAAM,eACJ,aACA,SACA,aACA,MACA,OACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;GACjC,OAAO,gBAAA,2BACL,aACA,SACA,MACA,OACA,aACA,cACA,gBACD;;EAIE"}
|
|
@@ -1,75 +0,0 @@
|
|
|
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, 1);
|
|
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
|
-
]);
|
|
20
|
-
function detectVersion(bin) {
|
|
21
|
-
try {
|
|
22
|
-
return (0, child_process.execSync)(`${bin} --version`, {
|
|
23
|
-
encoding: "utf8",
|
|
24
|
-
timeout: 5e3
|
|
25
|
-
}).trim();
|
|
26
|
-
} catch {
|
|
27
|
-
return "unknown";
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function installNpm(version) {
|
|
31
|
-
const pkg = `npm@${version}`;
|
|
32
|
-
debug$1("installing %s into temp dir", pkg);
|
|
33
|
-
const tmpDir = (0, child_process.execSync)("mktemp -d", { encoding: "utf8" }).trim();
|
|
34
|
-
(0, child_process.execSync)(`npm install --prefix "${tmpDir}" ${pkg} --loglevel=error`, {
|
|
35
|
-
encoding: "utf8",
|
|
36
|
-
timeout: 3e4
|
|
37
|
-
});
|
|
38
|
-
const bin = `${tmpDir}/node_modules/.bin/npm`;
|
|
39
|
-
const installed = detectVersion(bin);
|
|
40
|
-
debug$1("installed npm %s at %s", installed, bin);
|
|
41
|
-
console.log(` Auto-installed npm ${installed}`);
|
|
42
|
-
return bin;
|
|
43
|
-
}
|
|
44
|
-
function resolveNpmBin(binPath, version) {
|
|
45
|
-
if (binPath) return binPath;
|
|
46
|
-
if (version) return installNpm(version);
|
|
47
|
-
return "npm";
|
|
48
|
-
}
|
|
49
|
-
function createNpmAdapter(binPath, version) {
|
|
50
|
-
const bin = resolveNpmBin(binPath, version);
|
|
51
|
-
const resolved = detectVersion(bin);
|
|
52
|
-
debug$1("creating npm adapter with bin: %s (%s)", bin, resolved);
|
|
53
|
-
return {
|
|
54
|
-
name: `npm@${resolved}`,
|
|
55
|
-
type: "npm",
|
|
56
|
-
bin,
|
|
57
|
-
supports: NPM_SUPPORTED_COMMANDS,
|
|
58
|
-
registryArg(url) {
|
|
59
|
-
return ["--registry", url];
|
|
60
|
-
},
|
|
61
|
-
prefixArg(folder) {
|
|
62
|
-
return ["--prefix", folder];
|
|
63
|
-
},
|
|
64
|
-
exec(options, ...args) {
|
|
65
|
-
return require_process.exec(options, bin, args);
|
|
66
|
-
},
|
|
67
|
-
async prepareProject(packageName, version, registryUrl, port, token, dependencies = {}, devDependencies = {}) {
|
|
68
|
-
return require_project.prepareGenericEmptyProject(packageName, version, port, token, registryUrl, dependencies, devDependencies);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
//#endregion
|
|
73
|
-
exports.createNpmAdapter = createNpmAdapter;
|
|
74
|
-
|
|
75
|
-
//# sourceMappingURL=npm.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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]);\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;CACD,CAAC;AAEF,SAAS,cAAc,KAAqB;CAC1C,IAAI;EACF,QAAA,GAAA,cAAA,UAAgB,GAAG,IAAI,aAAa;GAAE,UAAU;GAAQ,SAAS;GAAM,CAAC,CAAC,MAAM;SACzE;EACN,OAAO;;;AAIX,SAAS,WAAW,SAAyB;CAC3C,MAAM,MAAM,OAAO;CACnB,QAAM,+BAA+B,IAAI;CACzC,MAAM,UAAA,GAAA,cAAA,UAAkB,aAAa,EAAE,UAAU,QAAQ,CAAC,CAAC,MAAM;CACjE,CAAA,GAAA,cAAA,UAAS,yBAAyB,OAAO,IAAI,IAAI,oBAAoB;EACnE,UAAU;EACV,SAAS;EACV,CAAC;CACF,MAAM,MAAM,GAAG,OAAO;CACtB,MAAM,YAAY,cAAc,IAAI;CACpC,QAAM,0BAA0B,WAAW,IAAI;CAC/C,QAAQ,IAAI,wBAAwB,YAAY;CAChD,OAAO;;AAGT,SAAS,cAAc,SAAkB,SAA0B;CACjE,IAAI,SAAS,OAAO;CACpB,IAAI,SAAS,OAAO,WAAW,QAAQ;CACvC,OAAO;;AAGT,SAAgB,iBAAiB,SAAkB,SAAyC;CAC1F,MAAM,MAAM,cAAc,SAAS,QAAQ;CAC3C,MAAM,WAAW,cAAc,IAAI;CACnC,QAAM,0CAA0C,KAAK,SAAS;CAyC9D,OAAO;EAtCL,MAAM,OAAO;EACb,MAAM;EACN;EACA,UAAU;EAEV,YAAY,KAAuB;GACjC,OAAO,CAAC,cAAc,IAAI;;EAG5B,UAAU,QAA0B;GAClC,OAAO,CAAC,YAAY,OAAO;;EAG7B,KAAK,SAAuB,GAAG,MAAqC;GAClE,OAAO,gBAAA,KAAK,SAAS,KAAK,KAAK;;EAGjC,MAAM,eACJ,aACA,SACA,aACA,MACA,OACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;GACjC,OAAO,gBAAA,2BACL,aACA,SACA,MACA,OACA,aACA,cACA,gBACD;;EAIE"}
|
|
@@ -1,104 +0,0 @@
|
|
|
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, 1);
|
|
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_V10_COMMANDS = new Set([
|
|
10
|
-
"publish",
|
|
11
|
-
"unpublish",
|
|
12
|
-
"install",
|
|
13
|
-
"info",
|
|
14
|
-
"audit",
|
|
15
|
-
"deprecate",
|
|
16
|
-
"dist-tag",
|
|
17
|
-
"ping",
|
|
18
|
-
"search"
|
|
19
|
-
]);
|
|
20
|
-
var PNPM_V11_COMMANDS = new Set([
|
|
21
|
-
"publish",
|
|
22
|
-
"unpublish",
|
|
23
|
-
"install",
|
|
24
|
-
"info",
|
|
25
|
-
"audit",
|
|
26
|
-
"deprecate"
|
|
27
|
-
]);
|
|
28
|
-
function getSupportedCommands(version) {
|
|
29
|
-
const major = parseInt(version.split(".")[0], 10);
|
|
30
|
-
if (major >= 11) {
|
|
31
|
-
debug$1("pnpm v%d detected, using v11 command set", major);
|
|
32
|
-
return PNPM_V11_COMMANDS;
|
|
33
|
-
}
|
|
34
|
-
return PNPM_V10_COMMANDS;
|
|
35
|
-
}
|
|
36
|
-
function detectVersion(bin) {
|
|
37
|
-
try {
|
|
38
|
-
return (0, child_process.execSync)(`${bin} --version`, {
|
|
39
|
-
encoding: "utf8",
|
|
40
|
-
timeout: 5e3
|
|
41
|
-
}).trim();
|
|
42
|
-
} catch {
|
|
43
|
-
return "unknown";
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function installPnpm(version) {
|
|
47
|
-
const pkg = `pnpm@${version}`;
|
|
48
|
-
debug$1("installing %s into temp dir", pkg);
|
|
49
|
-
const tmpDir = (0, child_process.execSync)("mktemp -d", { encoding: "utf8" }).trim();
|
|
50
|
-
(0, child_process.execSync)(`npm install --prefix "${tmpDir}" ${pkg} --loglevel=error`, {
|
|
51
|
-
encoding: "utf8",
|
|
52
|
-
timeout: 3e4
|
|
53
|
-
});
|
|
54
|
-
const bin = `${tmpDir}/node_modules/.bin/pnpm`;
|
|
55
|
-
const installed = detectVersion(bin);
|
|
56
|
-
debug$1("installed pnpm %s at %s", installed, bin);
|
|
57
|
-
console.log(` Auto-installed pnpm ${installed}`);
|
|
58
|
-
return bin;
|
|
59
|
-
}
|
|
60
|
-
function resolvePnpmBin(binPath, version) {
|
|
61
|
-
if (binPath) return binPath;
|
|
62
|
-
if (version) return installPnpm(version);
|
|
63
|
-
return "pnpm";
|
|
64
|
-
}
|
|
65
|
-
function createPnpmAdapter(binPath, version) {
|
|
66
|
-
const bin = resolvePnpmBin(binPath, version);
|
|
67
|
-
const resolved = detectVersion(bin);
|
|
68
|
-
debug$1("creating pnpm adapter with bin: %s (%s)", bin, resolved);
|
|
69
|
-
return {
|
|
70
|
-
name: `pnpm@${resolved}`,
|
|
71
|
-
type: "pnpm",
|
|
72
|
-
bin,
|
|
73
|
-
supports: getSupportedCommands(resolved),
|
|
74
|
-
registryArg(url) {
|
|
75
|
-
return ["--registry", url];
|
|
76
|
-
},
|
|
77
|
-
prefixArg(folder) {
|
|
78
|
-
return ["--prefix", folder];
|
|
79
|
-
},
|
|
80
|
-
exec(options, ...args) {
|
|
81
|
-
if (parseInt(resolved.split(".")[0], 10) >= 11) {
|
|
82
|
-
const cmd = args[0];
|
|
83
|
-
if (cmd === "deprecate" || cmd === "unpublish" || cmd === "publish" || cmd === "dist-tag") args = args.filter((a) => a !== "--json" && !a.startsWith("--loglevel"));
|
|
84
|
-
if (cmd === "deprecate") {
|
|
85
|
-
const msgIdx = 2;
|
|
86
|
-
if (args.length > msgIdx && args[msgIdx] === "") args = [
|
|
87
|
-
"undeprecate",
|
|
88
|
-
args[1],
|
|
89
|
-
...args.slice(3)
|
|
90
|
-
];
|
|
91
|
-
}
|
|
92
|
-
if (cmd === "version") args = args.filter((a) => !a.startsWith("--registry") && !a.startsWith("--loglevel") && !a.startsWith("--no--git-tag-version"));
|
|
93
|
-
}
|
|
94
|
-
return require_process.exec(options, bin, args);
|
|
95
|
-
},
|
|
96
|
-
async prepareProject(packageName, version, registryUrl, port, token, dependencies = {}, devDependencies = {}) {
|
|
97
|
-
return require_project.prepareGenericEmptyProject(packageName, version, port, token, registryUrl, dependencies, devDependencies);
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
//#endregion
|
|
102
|
-
exports.createPnpmAdapter = createPnpmAdapter;
|
|
103
|
-
|
|
104
|
-
//# sourceMappingURL=pnpm.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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_V10_COMMANDS = new Set([\n 'publish',\n 'unpublish',\n 'install',\n 'info',\n 'audit',\n 'deprecate',\n 'dist-tag',\n 'ping',\n 'search',\n]);\n\n// pnpm v11 removed ping and search\n// dist-tag output format changed (no --json), needs adapted assertions\nconst PNPM_V11_COMMANDS = new Set([\n 'publish',\n 'unpublish',\n 'install',\n 'info',\n 'audit',\n 'deprecate',\n]);\n\nfunction getSupportedCommands(version: string): Set<string> {\n const major = parseInt(version.split('.')[0], 10);\n if (major >= 11) {\n debug('pnpm v%d detected, using v11 command set', major);\n return PNPM_V11_COMMANDS;\n }\n return PNPM_V10_COMMANDS;\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: getSupportedCommands(resolved),\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 const major = parseInt(resolved.split('.')[0], 10);\n if (major >= 11) {\n // pnpm v11: native deprecate/unpublish don't support --json\n const cmd = args[0];\n if (cmd === 'deprecate' || cmd === 'unpublish' || cmd === 'publish' || cmd === 'dist-tag') {\n args = args.filter((a) => a !== '--json' && !a.startsWith('--loglevel'));\n }\n // pnpm v11: un-deprecate uses `undeprecate` command instead of `deprecate pkg \"\"`\n if (cmd === 'deprecate') {\n // Check if message arg is empty string (un-deprecate)\n // args: ['deprecate', 'pkg@version', '', ...flags]\n const msgIdx = 2; // message is the third arg\n if (args.length > msgIdx && args[msgIdx] === '') {\n args = ['undeprecate', args[1], ...args.slice(3)];\n }\n }\n // pnpm v11: native version command doesn't accept --registry, --loglevel, or --no--git-tag-version\n if (cmd === 'version') {\n args = args.filter(\n (a) =>\n !a.startsWith('--registry') &&\n !a.startsWith('--loglevel') &&\n !a.startsWith('--no--git-tag-version')\n );\n }\n }\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,oBAAoB,IAAI,IAAI;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAIF,IAAM,oBAAoB,IAAI,IAAI;CAChC;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,qBAAqB,SAA8B;CAC1D,MAAM,QAAQ,SAAS,QAAQ,MAAM,IAAI,CAAC,IAAI,GAAG;CACjD,IAAI,SAAS,IAAI;EACf,QAAM,4CAA4C,MAAM;EACxD,OAAO;;CAET,OAAO;;AAGT,SAAS,cAAc,KAAqB;CAC1C,IAAI;EACF,QAAA,GAAA,cAAA,UAAgB,GAAG,IAAI,aAAa;GAAE,UAAU;GAAQ,SAAS;GAAM,CAAC,CAAC,MAAM;SACzE;EACN,OAAO;;;AAIX,SAAS,YAAY,SAAyB;CAC5C,MAAM,MAAM,QAAQ;CACpB,QAAM,+BAA+B,IAAI;CACzC,MAAM,UAAA,GAAA,cAAA,UAAkB,aAAa,EAAE,UAAU,QAAQ,CAAC,CAAC,MAAM;CACjE,CAAA,GAAA,cAAA,UAAS,yBAAyB,OAAO,IAAI,IAAI,oBAAoB;EACnE,UAAU;EACV,SAAS;EACV,CAAC;CACF,MAAM,MAAM,GAAG,OAAO;CACtB,MAAM,YAAY,cAAc,IAAI;CACpC,QAAM,2BAA2B,WAAW,IAAI;CAChD,QAAQ,IAAI,yBAAyB,YAAY;CACjD,OAAO;;AAGT,SAAS,eAAe,SAAkB,SAA0B;CAClE,IAAI,SAAS,OAAO;CACpB,IAAI,SAAS,OAAO,YAAY,QAAQ;CACxC,OAAO;;AAGT,SAAgB,kBAAkB,SAAkB,SAAyC;CAC3F,MAAM,MAAM,eAAe,SAAS,QAAQ;CAC5C,MAAM,WAAW,cAAc,IAAI;CACnC,QAAM,2CAA2C,KAAK,SAAS;CAmE/D,OAAO;EAhEL,MAAM,QAAQ;EACd,MAAM;EACN;EACA,UAAU,qBAAqB,SAAS;EAExC,YAAY,KAAuB;GACjC,OAAO,CAAC,cAAc,IAAI;;EAG5B,UAAU,QAA0B;GAClC,OAAO,CAAC,YAAY,OAAO;;EAG7B,KAAK,SAAuB,GAAG,MAAqC;GAElE,IADc,SAAS,SAAS,MAAM,IAAI,CAAC,IAAI,GAC3C,IAAS,IAAI;IAEf,MAAM,MAAM,KAAK;IACjB,IAAI,QAAQ,eAAe,QAAQ,eAAe,QAAQ,aAAa,QAAQ,YAC7E,OAAO,KAAK,QAAQ,MAAM,MAAM,YAAY,CAAC,EAAE,WAAW,aAAa,CAAC;IAG1E,IAAI,QAAQ,aAAa;KAGvB,MAAM,SAAS;KACf,IAAI,KAAK,SAAS,UAAU,KAAK,YAAY,IAC3C,OAAO;MAAC;MAAe,KAAK;MAAI,GAAG,KAAK,MAAM,EAAE;MAAC;;IAIrD,IAAI,QAAQ,WACV,OAAO,KAAK,QACT,MACC,CAAC,EAAE,WAAW,aAAa,IAC3B,CAAC,EAAE,WAAW,aAAa,IAC3B,CAAC,EAAE,WAAW,wBAAwB,CACzC;;GAGL,OAAO,gBAAA,KAAK,SAAS,KAAK,KAAK;;EAGjC,MAAM,eACJ,aACA,SACA,aACA,MACA,OACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;GACjC,OAAO,gBAAA,2BACL,aACA,SACA,MACA,OACA,aACA,cACA,gBACD;;EAIE"}
|