@verdaccio/e2e-cli 2.1.0 → 2.1.1
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 +47 -0
- package/build/cjs/adapters/npm.cjs.map +1 -0
- package/build/cjs/adapters/pnpm.cjs +47 -0
- package/build/cjs/adapters/pnpm.cjs.map +1 -0
- package/build/cjs/adapters/yarn-classic.cjs +64 -0
- package/build/cjs/adapters/yarn-classic.cjs.map +1 -0
- package/build/cjs/adapters/yarn-modern.cjs +83 -0
- package/build/cjs/adapters/yarn-modern.cjs.map +1 -0
- package/build/cjs/index.cjs +139 -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 +45 -0
- package/build/esm/adapters/npm.js.map +1 -0
- package/build/esm/adapters/pnpm.js +45 -0
- package/build/esm/adapters/pnpm.js.map +1 -0
- package/build/esm/adapters/yarn-classic.js +62 -0
- package/build/esm/adapters/yarn-classic.js.map +1 -0
- package/build/esm/adapters/yarn-modern.js +80 -0
- package/build/esm/adapters/yarn-modern.js.map +1 -0
- package/build/esm/index.js +129 -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,102 @@
|
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_reporter = require("./reporter.cjs");
|
|
3
|
+
let debug = require("debug");
|
|
4
|
+
debug = require_runtime.__toESM(debug);
|
|
5
|
+
let url = require("url");
|
|
6
|
+
//#region src/runner.ts
|
|
7
|
+
var debug$1 = (0, debug.default)("verdaccio:e2e-cli:runner");
|
|
8
|
+
function getPort(registryUrl) {
|
|
9
|
+
try {
|
|
10
|
+
const url$1 = new url.URL(registryUrl);
|
|
11
|
+
return parseInt(url$1.port, 10) || (url$1.protocol === "https:" ? 443 : 80);
|
|
12
|
+
} catch {
|
|
13
|
+
return 4873;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async function runSingleTest(adapter, test, registryUrl, token, timeout) {
|
|
17
|
+
const ctx = {
|
|
18
|
+
registryUrl,
|
|
19
|
+
token,
|
|
20
|
+
port: getPort(registryUrl),
|
|
21
|
+
exec: adapter.exec.bind(adapter),
|
|
22
|
+
adapter,
|
|
23
|
+
runId: `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`
|
|
24
|
+
};
|
|
25
|
+
const start = Date.now();
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
const timer = setTimeout(() => {
|
|
28
|
+
resolve({
|
|
29
|
+
name: test.name,
|
|
30
|
+
passed: false,
|
|
31
|
+
duration: Date.now() - start,
|
|
32
|
+
error: `Test timed out after ${timeout}ms`
|
|
33
|
+
});
|
|
34
|
+
}, timeout);
|
|
35
|
+
test.run(ctx).then(() => {
|
|
36
|
+
clearTimeout(timer);
|
|
37
|
+
resolve({
|
|
38
|
+
name: test.name,
|
|
39
|
+
passed: true,
|
|
40
|
+
duration: Date.now() - start
|
|
41
|
+
});
|
|
42
|
+
}).catch((err) => {
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
resolve({
|
|
45
|
+
name: test.name,
|
|
46
|
+
passed: false,
|
|
47
|
+
duration: Date.now() - start,
|
|
48
|
+
error: err instanceof Error ? err.message : String(err)
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async function runSuite(adapter, tests, registryUrl, token, options) {
|
|
54
|
+
const suiteStart = Date.now();
|
|
55
|
+
const results = [];
|
|
56
|
+
let skipped = 0;
|
|
57
|
+
require_reporter.reportSuiteStart(adapter.name);
|
|
58
|
+
for (const test of tests) {
|
|
59
|
+
if (options.testFilter && options.testFilter.length > 0) {
|
|
60
|
+
if (!options.testFilter.includes(test.name)) continue;
|
|
61
|
+
}
|
|
62
|
+
if (test.requires) {
|
|
63
|
+
if (test.requires.filter((cmd) => !adapter.supports.has(cmd)).length > 0) {
|
|
64
|
+
require_reporter.reportSkipped(test.name);
|
|
65
|
+
skipped++;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
require_reporter.reportTestStart(adapter.name, test.name);
|
|
70
|
+
const result = await runSingleTest(adapter, test, registryUrl, token, options.timeout);
|
|
71
|
+
results.push(result);
|
|
72
|
+
require_reporter.reportTestResult(result);
|
|
73
|
+
}
|
|
74
|
+
const passed = results.filter((r) => r.passed).length;
|
|
75
|
+
const failed = results.filter((r) => !r.passed).length;
|
|
76
|
+
return {
|
|
77
|
+
adapter: adapter.name,
|
|
78
|
+
tests: results,
|
|
79
|
+
passed,
|
|
80
|
+
failed,
|
|
81
|
+
skipped,
|
|
82
|
+
duration: Date.now() - suiteStart
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async function runAll(adapters, tests, registryUrl, token, options) {
|
|
86
|
+
debug$1("running %d adapters with %d tests", adapters.length, tests.length);
|
|
87
|
+
const results = [];
|
|
88
|
+
for (const adapter of adapters) {
|
|
89
|
+
const result = await runSuite(adapter, tests, registryUrl, token, options);
|
|
90
|
+
results.push(result);
|
|
91
|
+
}
|
|
92
|
+
require_reporter.reportSummary(results);
|
|
93
|
+
return {
|
|
94
|
+
results,
|
|
95
|
+
exitCode: results.reduce((sum, r) => sum + r.failed, 0) > 0 ? 1 : 0
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//#endregion
|
|
99
|
+
exports.runAll = runAll;
|
|
100
|
+
exports.runSuite = runSuite;
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=runner.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.cjs","names":[],"sources":["../../src/runner.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { URL } from 'url';\n\nimport { PackageManagerAdapter, SuiteResult, TestContext, TestDefinition, TestResult } from './types';\nimport { reportSkipped, reportSuiteStart, reportSummary, reportTestResult, reportTestStart } from './reporter';\n\nconst debug = buildDebug('verdaccio:e2e-cli:runner');\n\nfunction getPort(registryUrl: string): number {\n try {\n const url = new URL(registryUrl);\n return parseInt(url.port, 10) || (url.protocol === 'https:' ? 443 : 80);\n } catch {\n return 4873;\n }\n}\n\nasync function runSingleTest(\n adapter: PackageManagerAdapter,\n test: TestDefinition,\n registryUrl: string,\n token: string,\n timeout: number\n): Promise<TestResult> {\n const port = getPort(registryUrl);\n const ctx: TestContext = {\n registryUrl,\n token,\n port,\n exec: adapter.exec.bind(adapter),\n adapter,\n runId: `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`,\n };\n\n const start = Date.now();\n\n return new Promise<TestResult>((resolve) => {\n const timer = setTimeout(() => {\n resolve({\n name: test.name,\n passed: false,\n duration: Date.now() - start,\n error: `Test timed out after ${timeout}ms`,\n });\n }, timeout);\n\n test\n .run(ctx)\n .then(() => {\n clearTimeout(timer);\n resolve({\n name: test.name,\n passed: true,\n duration: Date.now() - start,\n });\n })\n .catch((err) => {\n clearTimeout(timer);\n resolve({\n name: test.name,\n passed: false,\n duration: Date.now() - start,\n error: err instanceof Error ? err.message : String(err),\n });\n });\n });\n}\n\nexport async function runSuite(\n adapter: PackageManagerAdapter,\n tests: TestDefinition[],\n registryUrl: string,\n token: string,\n options: { timeout: number; testFilter?: string[] }\n): Promise<SuiteResult> {\n const suiteStart = Date.now();\n const results: TestResult[] = [];\n let skipped = 0;\n\n reportSuiteStart(adapter.name);\n\n for (const test of tests) {\n // Filter by test name if specified\n if (options.testFilter && options.testFilter.length > 0) {\n if (!options.testFilter.includes(test.name)) {\n continue;\n }\n }\n\n // Check if adapter supports required commands\n if (test.requires) {\n const unsupported = test.requires.filter((cmd) => !adapter.supports.has(cmd));\n if (unsupported.length > 0) {\n reportSkipped(test.name);\n skipped++;\n continue;\n }\n }\n\n reportTestStart(adapter.name, test.name);\n const result = await runSingleTest(adapter, test, registryUrl, token, options.timeout);\n results.push(result);\n reportTestResult(result);\n }\n\n const passed = results.filter((r) => r.passed).length;\n const failed = results.filter((r) => !r.passed).length;\n\n return {\n adapter: adapter.name,\n tests: results,\n passed,\n failed,\n skipped,\n duration: Date.now() - suiteStart,\n };\n}\n\nexport async function runAll(\n adapters: PackageManagerAdapter[],\n tests: TestDefinition[],\n registryUrl: string,\n token: string,\n options: { timeout: number; concurrency: number; testFilter?: string[] }\n): Promise<{ results: SuiteResult[]; exitCode: number }> {\n debug('running %d adapters with %d tests', adapters.length, tests.length);\n const results: SuiteResult[] = [];\n\n // Run adapters sequentially (each suite is already complex enough)\n for (const adapter of adapters) {\n const result = await runSuite(adapter, tests, registryUrl, token, options);\n results.push(result);\n }\n\n reportSummary(results);\n\n const totalFailed = results.reduce((sum, r) => sum + r.failed, 0);\n return { results, exitCode: totalFailed > 0 ? 1 : 0 };\n}\n"],"mappings":";;;;;;AAMA,IAAM,WAAA,GAAA,MAAA,SAAmB,2BAA2B;AAEpD,SAAS,QAAQ,aAA6B;AAC5C,KAAI;EACF,MAAM,QAAM,IAAI,IAAA,IAAI,YAAY;AAChC,SAAO,SAAS,MAAI,MAAM,GAAG,KAAK,MAAI,aAAa,WAAW,MAAM;SAC9D;AACN,SAAO;;;AAIX,eAAe,cACb,SACA,MACA,aACA,OACA,SACqB;CAErB,MAAM,MAAmB;EACvB;EACA;EACA,MAJW,QAAQ,YAAY;EAK/B,MAAM,QAAQ,KAAK,KAAK,QAAQ;EAChC;EACA,OAAO,GAAG,KAAK,KAAK,CAAC,SAAS,GAAG,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE;EAC3E;CAED,MAAM,QAAQ,KAAK,KAAK;AAExB,QAAO,IAAI,SAAqB,YAAY;EAC1C,MAAM,QAAQ,iBAAiB;AAC7B,WAAQ;IACN,MAAM,KAAK;IACX,QAAQ;IACR,UAAU,KAAK,KAAK,GAAG;IACvB,OAAO,wBAAwB,QAAQ;IACxC,CAAC;KACD,QAAQ;AAEX,OACG,IAAI,IAAI,CACR,WAAW;AACV,gBAAa,MAAM;AACnB,WAAQ;IACN,MAAM,KAAK;IACX,QAAQ;IACR,UAAU,KAAK,KAAK,GAAG;IACxB,CAAC;IACF,CACD,OAAO,QAAQ;AACd,gBAAa,MAAM;AACnB,WAAQ;IACN,MAAM,KAAK;IACX,QAAQ;IACR,UAAU,KAAK,KAAK,GAAG;IACvB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;IACxD,CAAC;IACF;GACJ;;AAGJ,eAAsB,SACpB,SACA,OACA,aACA,OACA,SACsB;CACtB,MAAM,aAAa,KAAK,KAAK;CAC7B,MAAM,UAAwB,EAAE;CAChC,IAAI,UAAU;AAEd,kBAAA,iBAAiB,QAAQ,KAAK;AAE9B,MAAK,MAAM,QAAQ,OAAO;AAExB,MAAI,QAAQ,cAAc,QAAQ,WAAW,SAAS;OAChD,CAAC,QAAQ,WAAW,SAAS,KAAK,KAAK,CACzC;;AAKJ,MAAI,KAAK;OACa,KAAK,SAAS,QAAQ,QAAQ,CAAC,QAAQ,SAAS,IAAI,IAAI,CAAC,CAC7D,SAAS,GAAG;AAC1B,qBAAA,cAAc,KAAK,KAAK;AACxB;AACA;;;AAIJ,mBAAA,gBAAgB,QAAQ,MAAM,KAAK,KAAK;EACxC,MAAM,SAAS,MAAM,cAAc,SAAS,MAAM,aAAa,OAAO,QAAQ,QAAQ;AACtF,UAAQ,KAAK,OAAO;AACpB,mBAAA,iBAAiB,OAAO;;CAG1B,MAAM,SAAS,QAAQ,QAAQ,MAAM,EAAE,OAAO,CAAC;CAC/C,MAAM,SAAS,QAAQ,QAAQ,MAAM,CAAC,EAAE,OAAO,CAAC;AAEhD,QAAO;EACL,SAAS,QAAQ;EACjB,OAAO;EACP;EACA;EACA;EACA,UAAU,KAAK,KAAK,GAAG;EACxB;;AAGH,eAAsB,OACpB,UACA,OACA,aACA,OACA,SACuD;AACvD,SAAM,qCAAqC,SAAS,QAAQ,MAAM,OAAO;CACzE,MAAM,UAAyB,EAAE;AAGjC,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,SAAS,MAAM,SAAS,SAAS,OAAO,aAAa,OAAO,QAAQ;AAC1E,UAAQ,KAAK,OAAO;;AAGtB,kBAAA,cAAc,QAAQ;AAGtB,QAAO;EAAE;EAAS,UADE,QAAQ,QAAQ,KAAK,MAAM,MAAM,EAAE,QAAQ,EAAE,GACvB,IAAI,IAAI;EAAG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/audit.ts
|
|
5
|
+
async function testAudit(ctx) {
|
|
6
|
+
const packages = [`verdaccio-audit-${ctx.runId}`, `@verdaccio/audit-${ctx.runId}`];
|
|
7
|
+
for (const pkgName of packages) {
|
|
8
|
+
const { tempFolder } = await ctx.adapter.prepareProject(pkgName, "1.0.0", ctx.registryUrl, ctx.port, ctx.token, { jquery: "3.6.1" });
|
|
9
|
+
await ctx.adapter.exec({ cwd: tempFolder }, "install", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
10
|
+
const resp = await ctx.adapter.exec({ cwd: tempFolder }, "audit", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
11
|
+
const parsedBody = JSON.parse(resp.stdout);
|
|
12
|
+
if (ctx.adapter.type === "npm") {
|
|
13
|
+
assert.default.ok(parsedBody.metadata !== void 0, "Expected \"metadata\" in audit response");
|
|
14
|
+
assert.default.ok(parsedBody.auditReportVersion !== void 0, "Expected \"auditReportVersion\" in audit response");
|
|
15
|
+
assert.default.ok(parsedBody.vulnerabilities !== void 0, "Expected \"vulnerabilities\" in audit response");
|
|
16
|
+
} else assert.default.ok(parsedBody !== void 0, "Expected audit JSON response");
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
var auditTest = {
|
|
20
|
+
name: "audit",
|
|
21
|
+
requires: ["audit"],
|
|
22
|
+
run: testAudit
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
exports.auditTest = auditTest;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=audit.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.cjs","names":[],"sources":["../../../src/tests/audit.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function testAudit(ctx: TestContext): Promise<void> {\n const packages = [`verdaccio-audit-${ctx.runId}`, `@verdaccio/audit-${ctx.runId}`];\n\n for (const pkgName of packages) {\n const { tempFolder } = await ctx.adapter.prepareProject(\n pkgName,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token,\n { jquery: '3.6.1' }\n );\n\n // install is required to create package lock file\n await ctx.adapter.exec(\n { cwd: tempFolder },\n 'install',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n\n const resp = await ctx.adapter.exec(\n { cwd: tempFolder },\n 'audit',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n\n const parsedBody = JSON.parse(resp.stdout);\n\n if (ctx.adapter.type === 'npm') {\n assert.ok(parsedBody.metadata !== undefined, 'Expected \"metadata\" in audit response');\n assert.ok(\n parsedBody.auditReportVersion !== undefined,\n 'Expected \"auditReportVersion\" in audit response'\n );\n assert.ok(\n parsedBody.vulnerabilities !== undefined,\n 'Expected \"vulnerabilities\" in audit response'\n );\n } else {\n // pnpm audit --json returns advisories-based format\n assert.ok(parsedBody !== undefined, 'Expected audit JSON response');\n }\n }\n}\n\nexport const auditTest: TestDefinition = {\n name: 'audit',\n requires: ['audit'],\n run: testAudit,\n};\n"],"mappings":";;;;AAIA,eAAe,UAAU,KAAiC;CACxD,MAAM,WAAW,CAAC,mBAAmB,IAAI,SAAS,oBAAoB,IAAI,QAAQ;AAElF,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,EAAE,eAAe,MAAM,IAAI,QAAQ,eACvC,SACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,OACJ,EAAE,QAAQ,SAAS,CACpB;AAGD,QAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,YAAY,EACnB,WACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;EAED,MAAM,OAAO,MAAM,IAAI,QAAQ,KAC7B,EAAE,KAAK,YAAY,EACnB,SACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;EAED,MAAM,aAAa,KAAK,MAAM,KAAK,OAAO;AAE1C,MAAI,IAAI,QAAQ,SAAS,OAAO;AAC9B,UAAA,QAAO,GAAG,WAAW,aAAa,KAAA,GAAW,0CAAwC;AACrF,UAAA,QAAO,GACL,WAAW,uBAAuB,KAAA,GAClC,oDACD;AACD,UAAA,QAAO,GACL,WAAW,oBAAoB,KAAA,GAC/B,iDACD;QAGD,QAAA,QAAO,GAAG,eAAe,KAAA,GAAW,+BAA+B;;;AAKzE,IAAa,YAA4B;CACvC,MAAM;CACN,UAAU,CAAC,QAAQ;CACnB,KAAK;CACN"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/deprecate.ts
|
|
5
|
+
async function publishPkg(ctx, tempFolder, pkgName) {
|
|
6
|
+
await ctx.adapter.exec({ cwd: tempFolder }, "publish", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
7
|
+
}
|
|
8
|
+
async function deprecate(ctx, tempFolder, packageVersion, message) {
|
|
9
|
+
await ctx.adapter.exec({ cwd: tempFolder }, "deprecate", packageVersion, message, "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
10
|
+
}
|
|
11
|
+
async function getInfo(ctx, pkgName) {
|
|
12
|
+
const resp = await ctx.adapter.exec({}, "info", pkgName, "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
13
|
+
return JSON.parse(resp.stdout);
|
|
14
|
+
}
|
|
15
|
+
async function bumpVersion(ctx, tempFolder) {
|
|
16
|
+
await ctx.adapter.exec({ cwd: tempFolder }, "version", "minor", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
17
|
+
}
|
|
18
|
+
async function testDeprecate(ctx) {
|
|
19
|
+
const id = ctx.runId;
|
|
20
|
+
const pkgName1 = `@verdaccio/dep1-${id}`;
|
|
21
|
+
const message = "some message";
|
|
22
|
+
const { tempFolder: tf1 } = await ctx.adapter.prepareProject(pkgName1, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
23
|
+
await publishPkg(ctx, tf1, pkgName1);
|
|
24
|
+
await deprecate(ctx, tf1, `${pkgName1}@1.0.0`, message);
|
|
25
|
+
const info1 = await getInfo(ctx, pkgName1);
|
|
26
|
+
assert.default.strictEqual(info1.name, pkgName1);
|
|
27
|
+
assert.default.strictEqual(info1.deprecated, message, "Package should be deprecated");
|
|
28
|
+
const pkgName2 = `@verdaccio/dep2-${id}`;
|
|
29
|
+
const { tempFolder: tf2 } = await ctx.adapter.prepareProject(pkgName2, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
30
|
+
await publishPkg(ctx, tf2, pkgName2);
|
|
31
|
+
await deprecate(ctx, tf2, `${pkgName2}@1.0.0`, message);
|
|
32
|
+
const info2a = await getInfo(ctx, pkgName2);
|
|
33
|
+
assert.default.strictEqual(info2a.deprecated, message);
|
|
34
|
+
await deprecate(ctx, tf2, `${pkgName2}@1.0.0`, "");
|
|
35
|
+
const info2b = await getInfo(ctx, pkgName2);
|
|
36
|
+
assert.default.strictEqual(info2b.deprecated, void 0, "Package should be un-deprecated");
|
|
37
|
+
const pkgName3 = `@verdaccio/dep3-${id}`;
|
|
38
|
+
const { tempFolder: tf3 } = await ctx.adapter.prepareProject(pkgName3, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
39
|
+
await publishPkg(ctx, tf3, pkgName3);
|
|
40
|
+
for (let i = 0; i < 3; i++) {
|
|
41
|
+
await bumpVersion(ctx, tf3);
|
|
42
|
+
await publishPkg(ctx, tf3, pkgName3);
|
|
43
|
+
}
|
|
44
|
+
await deprecate(ctx, tf3, pkgName3, message);
|
|
45
|
+
for (const v of [
|
|
46
|
+
"1.0.0",
|
|
47
|
+
"1.1.0",
|
|
48
|
+
"1.2.0",
|
|
49
|
+
"1.3.0"
|
|
50
|
+
]) {
|
|
51
|
+
const info = await getInfo(ctx, `${pkgName3}@${v}`);
|
|
52
|
+
assert.default.strictEqual(info.deprecated, message, `Version ${v} should be deprecated`);
|
|
53
|
+
}
|
|
54
|
+
await bumpVersion(ctx, tf3);
|
|
55
|
+
await publishPkg(ctx, tf3, pkgName3);
|
|
56
|
+
const info3 = await getInfo(ctx, `${pkgName3}@1.4.0`);
|
|
57
|
+
assert.default.strictEqual(info3.deprecated, void 0, "New version should not be deprecated");
|
|
58
|
+
}
|
|
59
|
+
var deprecateTest = {
|
|
60
|
+
name: "deprecate",
|
|
61
|
+
requires: ["deprecate"],
|
|
62
|
+
run: testDeprecate
|
|
63
|
+
};
|
|
64
|
+
//#endregion
|
|
65
|
+
exports.deprecateTest = deprecateTest;
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=deprecate.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecate.cjs","names":[],"sources":["../../../src/tests/deprecate.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function publishPkg(ctx: TestContext, tempFolder: string, pkgName: string) {\n await ctx.adapter.exec(\n { cwd: tempFolder },\n 'publish',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n}\n\nasync function deprecate(\n ctx: TestContext,\n tempFolder: string,\n packageVersion: string,\n message: string\n) {\n await ctx.adapter.exec(\n { cwd: tempFolder },\n 'deprecate',\n packageVersion,\n message,\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n}\n\nasync function getInfo(ctx: TestContext, pkgName: string) {\n const resp = await ctx.adapter.exec(\n {},\n 'info',\n pkgName,\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n return JSON.parse(resp.stdout);\n}\n\nasync function bumpVersion(ctx: TestContext, tempFolder: string) {\n await ctx.adapter.exec(\n { cwd: tempFolder },\n 'version',\n 'minor',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n}\n\nasync function testDeprecate(ctx: TestContext): Promise<void> {\n const id = ctx.runId;\n\n // Test 1: deprecate a single version\n const pkgName1 = `@verdaccio/dep1-${id}`;\n const message = 'some message';\n const { tempFolder: tf1 } = await ctx.adapter.prepareProject(\n pkgName1,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await publishPkg(ctx, tf1, pkgName1);\n await deprecate(ctx, tf1, `${pkgName1}@1.0.0`, message);\n const info1 = await getInfo(ctx, pkgName1);\n assert.strictEqual(info1.name, pkgName1);\n assert.strictEqual(info1.deprecated, message, 'Package should be deprecated');\n\n // Test 2: un-deprecate\n const pkgName2 = `@verdaccio/dep2-${id}`;\n const { tempFolder: tf2 } = await ctx.adapter.prepareProject(\n pkgName2,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await publishPkg(ctx, tf2, pkgName2);\n await deprecate(ctx, tf2, `${pkgName2}@1.0.0`, message);\n const info2a = await getInfo(ctx, pkgName2);\n assert.strictEqual(info2a.deprecated, message);\n // empty string = undeprecate\n await deprecate(ctx, tf2, `${pkgName2}@1.0.0`, '');\n const info2b = await getInfo(ctx, pkgName2);\n assert.strictEqual(info2b.deprecated, undefined, 'Package should be un-deprecated');\n\n // Test 3: deprecate multiple versions\n const pkgName3 = `@verdaccio/dep3-${id}`;\n const { tempFolder: tf3 } = await ctx.adapter.prepareProject(\n pkgName3,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await publishPkg(ctx, tf3, pkgName3);\n for (let i = 0; i < 3; i++) {\n await bumpVersion(ctx, tf3);\n await publishPkg(ctx, tf3, pkgName3);\n }\n await deprecate(ctx, tf3, pkgName3, message);\n for (const v of ['1.0.0', '1.1.0', '1.2.0', '1.3.0']) {\n const info = await getInfo(ctx, `${pkgName3}@${v}`);\n assert.strictEqual(info.deprecated, message, `Version ${v} should be deprecated`);\n }\n // publish a new version after deprecation — should NOT be deprecated\n await bumpVersion(ctx, tf3);\n await publishPkg(ctx, tf3, pkgName3);\n const info3 = await getInfo(ctx, `${pkgName3}@1.4.0`);\n assert.strictEqual(info3.deprecated, undefined, 'New version should not be deprecated');\n}\n\nexport const deprecateTest: TestDefinition = {\n name: 'deprecate',\n requires: ['deprecate'],\n run: testDeprecate,\n};\n"],"mappings":";;;;AAIA,eAAe,WAAW,KAAkB,YAAoB,SAAiB;AAC/E,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,YAAY,EACnB,WACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;;AAGH,eAAe,UACb,KACA,YACA,gBACA,SACA;AACA,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,YAAY,EACnB,aACA,gBACA,SACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;;AAGH,eAAe,QAAQ,KAAkB,SAAiB;CACxD,MAAM,OAAO,MAAM,IAAI,QAAQ,KAC7B,EAAE,EACF,QACA,SACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,QAAO,KAAK,MAAM,KAAK,OAAO;;AAGhC,eAAe,YAAY,KAAkB,YAAoB;AAC/D,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,YAAY,EACnB,WACA,SACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;;AAGH,eAAe,cAAc,KAAiC;CAC5D,MAAM,KAAK,IAAI;CAGf,MAAM,WAAW,mBAAmB;CACpC,MAAM,UAAU;CAChB,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,WAAW,KAAK,KAAK,SAAS;AACpC,OAAM,UAAU,KAAK,KAAK,GAAG,SAAS,SAAS,QAAQ;CACvD,MAAM,QAAQ,MAAM,QAAQ,KAAK,SAAS;AAC1C,QAAA,QAAO,YAAY,MAAM,MAAM,SAAS;AACxC,QAAA,QAAO,YAAY,MAAM,YAAY,SAAS,+BAA+B;CAG7E,MAAM,WAAW,mBAAmB;CACpC,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,WAAW,KAAK,KAAK,SAAS;AACpC,OAAM,UAAU,KAAK,KAAK,GAAG,SAAS,SAAS,QAAQ;CACvD,MAAM,SAAS,MAAM,QAAQ,KAAK,SAAS;AAC3C,QAAA,QAAO,YAAY,OAAO,YAAY,QAAQ;AAE9C,OAAM,UAAU,KAAK,KAAK,GAAG,SAAS,SAAS,GAAG;CAClD,MAAM,SAAS,MAAM,QAAQ,KAAK,SAAS;AAC3C,QAAA,QAAO,YAAY,OAAO,YAAY,KAAA,GAAW,kCAAkC;CAGnF,MAAM,WAAW,mBAAmB;CACpC,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,WAAW,KAAK,KAAK,SAAS;AACpC,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,WAAW,KAAK,KAAK,SAAS;;AAEtC,OAAM,UAAU,KAAK,KAAK,UAAU,QAAQ;AAC5C,MAAK,MAAM,KAAK;EAAC;EAAS;EAAS;EAAS;EAAQ,EAAE;EACpD,MAAM,OAAO,MAAM,QAAQ,KAAK,GAAG,SAAS,GAAG,IAAI;AACnD,SAAA,QAAO,YAAY,KAAK,YAAY,SAAS,WAAW,EAAE,uBAAuB;;AAGnF,OAAM,YAAY,KAAK,IAAI;AAC3B,OAAM,WAAW,KAAK,KAAK,SAAS;CACpC,MAAM,QAAQ,MAAM,QAAQ,KAAK,GAAG,SAAS,QAAQ;AACrD,QAAA,QAAO,YAAY,MAAM,YAAY,KAAA,GAAW,uCAAuC;;AAGzF,IAAa,gBAAgC;CAC3C,MAAM;CACN,UAAU,CAAC,YAAY;CACvB,KAAK;CACN"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/dist-tags.ts
|
|
5
|
+
async function publishPkg(ctx, tempFolder, extraArgs = []) {
|
|
6
|
+
await ctx.adapter.exec({ cwd: tempFolder }, "publish", ...extraArgs, ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
7
|
+
}
|
|
8
|
+
async function bumpVersion(ctx, tempFolder) {
|
|
9
|
+
await ctx.adapter.exec({ cwd: tempFolder }, "version", "minor", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
10
|
+
}
|
|
11
|
+
async function testDistTags(ctx) {
|
|
12
|
+
const id = ctx.runId;
|
|
13
|
+
const pkgName1 = `@foo/dt1-${id}`;
|
|
14
|
+
const { tempFolder: tf1 } = await ctx.adapter.prepareProject(pkgName1, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
15
|
+
await publishPkg(ctx, tf1);
|
|
16
|
+
await bumpVersion(ctx, tf1);
|
|
17
|
+
await publishPkg(ctx, tf1, ["--tag", "beta"]);
|
|
18
|
+
const resp1 = await ctx.adapter.exec({ cwd: tf1 }, "dist-tag", "ls", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
19
|
+
assert.default.strictEqual(resp1.stdout, "beta: 1.1.0latest: 1.0.0");
|
|
20
|
+
const pkgName2 = `@verdaccio/dt2-${id}`;
|
|
21
|
+
const { tempFolder: tf2 } = await ctx.adapter.prepareProject(pkgName2, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
22
|
+
await publishPkg(ctx, tf2);
|
|
23
|
+
await bumpVersion(ctx, tf2);
|
|
24
|
+
await publishPkg(ctx, tf2, ["--tag", "beta"]);
|
|
25
|
+
const resp2 = await ctx.adapter.exec({ cwd: tf2 }, "dist-tag", "rm", `${pkgName2}@1.1.0`, "beta", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
26
|
+
assert.default.strictEqual(resp2.stdout, `-beta: ${pkgName2}@1.1.0`);
|
|
27
|
+
const pkgName3 = `@verdaccio/dt3-${id}`;
|
|
28
|
+
const { tempFolder: tf3 } = await ctx.adapter.prepareProject(pkgName3, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
29
|
+
await publishPkg(ctx, tf3);
|
|
30
|
+
await bumpVersion(ctx, tf3);
|
|
31
|
+
await publishPkg(ctx, tf3);
|
|
32
|
+
const resp3 = await ctx.adapter.exec({ cwd: tf3 }, "dist-tag", "add", `${pkgName3}@1.1.0`, "alfa", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
33
|
+
assert.default.strictEqual(resp3.stdout, `+alfa: ${pkgName3}@1.1.0`);
|
|
34
|
+
}
|
|
35
|
+
var distTagsTest = {
|
|
36
|
+
name: "dist-tags",
|
|
37
|
+
requires: ["dist-tag"],
|
|
38
|
+
run: testDistTags
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
exports.distTagsTest = distTagsTest;
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=dist-tags.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist-tags.cjs","names":[],"sources":["../../../src/tests/dist-tags.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function publishPkg(ctx: TestContext, tempFolder: string, extraArgs: string[] = []) {\n await ctx.adapter.exec(\n { cwd: tempFolder },\n 'publish',\n ...extraArgs,\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n}\n\nasync function bumpVersion(ctx: TestContext, tempFolder: string) {\n await ctx.adapter.exec(\n { cwd: tempFolder },\n 'version',\n 'minor',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n}\n\nasync function testDistTags(ctx: TestContext): Promise<void> {\n const id = ctx.runId;\n\n // Test 1: list dist-tags\n const pkgName1 = `@foo/dt1-${id}`;\n const { tempFolder: tf1 } = await ctx.adapter.prepareProject(\n pkgName1,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await publishPkg(ctx, tf1);\n await bumpVersion(ctx, tf1);\n await publishPkg(ctx, tf1, ['--tag', 'beta']);\n const resp1 = await ctx.adapter.exec(\n { cwd: tf1 },\n 'dist-tag',\n 'ls',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n assert.strictEqual(resp1.stdout, 'beta: 1.1.0latest: 1.0.0');\n\n // Test 2: remove tag\n const pkgName2 = `@verdaccio/dt2-${id}`;\n const { tempFolder: tf2 } = await ctx.adapter.prepareProject(\n pkgName2,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await publishPkg(ctx, tf2);\n await bumpVersion(ctx, tf2);\n await publishPkg(ctx, tf2, ['--tag', 'beta']);\n const resp2 = await ctx.adapter.exec(\n { cwd: tf2 },\n 'dist-tag',\n 'rm',\n `${pkgName2}@1.1.0`,\n 'beta',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n assert.strictEqual(resp2.stdout, `-beta: ${pkgName2}@1.1.0`);\n\n // Test 3: add tag\n const pkgName3 = `@verdaccio/dt3-${id}`;\n const { tempFolder: tf3 } = await ctx.adapter.prepareProject(\n pkgName3,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await publishPkg(ctx, tf3);\n await bumpVersion(ctx, tf3);\n await publishPkg(ctx, tf3);\n const resp3 = await ctx.adapter.exec(\n { cwd: tf3 },\n 'dist-tag',\n 'add',\n `${pkgName3}@1.1.0`,\n 'alfa',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n assert.strictEqual(resp3.stdout, `+alfa: ${pkgName3}@1.1.0`);\n}\n\nexport const distTagsTest: TestDefinition = {\n name: 'dist-tags',\n requires: ['dist-tag'],\n run: testDistTags,\n};\n"],"mappings":";;;;AAIA,eAAe,WAAW,KAAkB,YAAoB,YAAsB,EAAE,EAAE;AACxF,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,YAAY,EACnB,WACA,GAAG,WACH,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;;AAGH,eAAe,YAAY,KAAkB,YAAoB;AAC/D,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,YAAY,EACnB,WACA,SACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;;AAGH,eAAe,aAAa,KAAiC;CAC3D,MAAM,KAAK,IAAI;CAGf,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,WAAW,KAAK,IAAI;AAC1B,OAAM,YAAY,KAAK,IAAI;AAC3B,OAAM,WAAW,KAAK,KAAK,CAAC,SAAS,OAAO,CAAC;CAC7C,MAAM,QAAQ,MAAM,IAAI,QAAQ,KAC9B,EAAE,KAAK,KAAK,EACZ,YACA,MACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,QAAA,QAAO,YAAY,MAAM,QAAQ,2BAA2B;CAG5D,MAAM,WAAW,kBAAkB;CACnC,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,WAAW,KAAK,IAAI;AAC1B,OAAM,YAAY,KAAK,IAAI;AAC3B,OAAM,WAAW,KAAK,KAAK,CAAC,SAAS,OAAO,CAAC;CAC7C,MAAM,QAAQ,MAAM,IAAI,QAAQ,KAC9B,EAAE,KAAK,KAAK,EACZ,YACA,MACA,GAAG,SAAS,SACZ,QACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,QAAA,QAAO,YAAY,MAAM,QAAQ,UAAU,SAAS,QAAQ;CAG5D,MAAM,WAAW,kBAAkB;CACnC,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,WAAW,KAAK,IAAI;AAC1B,OAAM,YAAY,KAAK,IAAI;AAC3B,OAAM,WAAW,KAAK,IAAI;CAC1B,MAAM,QAAQ,MAAM,IAAI,QAAQ,KAC9B,EAAE,KAAK,KAAK,EACZ,YACA,OACA,GAAG,SAAS,SACZ,QACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,QAAA,QAAO,YAAY,MAAM,QAAQ,UAAU,SAAS,QAAQ;;AAG9D,IAAa,eAA+B;CAC1C,MAAM;CACN,UAAU,CAAC,WAAW;CACtB,KAAK;CACN"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const require_audit = require("./audit.cjs");
|
|
2
|
+
const require_deprecate = require("./deprecate.cjs");
|
|
3
|
+
const require_dist_tags = require("./dist-tags.cjs");
|
|
4
|
+
const require_info = require("./info.cjs");
|
|
5
|
+
const require_install = require("./install.cjs");
|
|
6
|
+
const require_ping = require("./ping.cjs");
|
|
7
|
+
const require_publish = require("./publish.cjs");
|
|
8
|
+
const require_search = require("./search.cjs");
|
|
9
|
+
const require_star = require("./star.cjs");
|
|
10
|
+
const require_unpublish = require("./unpublish.cjs");
|
|
11
|
+
//#region src/tests/index.ts
|
|
12
|
+
var allTests = [
|
|
13
|
+
require_publish.publishTest,
|
|
14
|
+
require_install.installTest,
|
|
15
|
+
require_audit.auditTest,
|
|
16
|
+
require_info.infoTest,
|
|
17
|
+
require_deprecate.deprecateTest,
|
|
18
|
+
require_dist_tags.distTagsTest,
|
|
19
|
+
require_ping.pingTest,
|
|
20
|
+
require_search.searchTest,
|
|
21
|
+
require_star.starTest,
|
|
22
|
+
require_unpublish.unpublishTest
|
|
23
|
+
];
|
|
24
|
+
//#endregion
|
|
25
|
+
exports.allTests = allTests;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/tests/index.ts"],"sourcesContent":["import { TestDefinition } from '../types';\n\nimport { auditTest } from './audit';\nimport { deprecateTest } from './deprecate';\nimport { distTagsTest } from './dist-tags';\nimport { infoTest } from './info';\nimport { installTest } from './install';\nimport { pingTest } from './ping';\nimport { publishTest } from './publish';\nimport { searchTest } from './search';\nimport { starTest } from './star';\nimport { unpublishTest } from './unpublish';\n\nexport const allTests: TestDefinition[] = [\n publishTest,\n installTest,\n auditTest,\n infoTest,\n deprecateTest,\n distTagsTest,\n pingTest,\n searchTest,\n starTest,\n unpublishTest,\n];\n\nexport {\n publishTest,\n installTest,\n auditTest,\n infoTest,\n deprecateTest,\n distTagsTest,\n pingTest,\n searchTest,\n starTest,\n unpublishTest,\n};\n"],"mappings":";;;;;;;;;;;AAaA,IAAa,WAA6B;CACxC,gBAAA;CACA,gBAAA;CACA,cAAA;CACA,aAAA;CACA,kBAAA;CACA,kBAAA;CACA,aAAA;CACA,eAAA;CACA,aAAA;CACA,kBAAA;CACD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_project = require("../utils/project.cjs");
|
|
3
|
+
let path = require("path");
|
|
4
|
+
let fs_promises = require("fs/promises");
|
|
5
|
+
let assert = require("assert");
|
|
6
|
+
assert = require_runtime.__toESM(assert);
|
|
7
|
+
//#region src/tests/info.ts
|
|
8
|
+
async function testInfo(ctx) {
|
|
9
|
+
const tempFolder = await require_project.createTempFolder("info-test");
|
|
10
|
+
await (0, fs_promises.writeFile)((0, path.join)(tempFolder, "package.json"), JSON.stringify({
|
|
11
|
+
name: "info-test",
|
|
12
|
+
version: "1.0.0"
|
|
13
|
+
}));
|
|
14
|
+
const resp = await ctx.adapter.exec({ cwd: tempFolder }, "info", "verdaccio", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
15
|
+
if (ctx.adapter.type === "yarn-classic") {
|
|
16
|
+
const dataLine = resp.stdout.split("\n").filter(Boolean).find((l) => {
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(l).type === "inspect";
|
|
19
|
+
} catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
assert.default.ok(dataLine, "Expected yarn info NDJSON to contain an \"inspect\" entry");
|
|
24
|
+
} else {
|
|
25
|
+
const parsedBody = JSON.parse(resp.stdout);
|
|
26
|
+
assert.default.strictEqual(parsedBody.name, "verdaccio", "Expected package name \"verdaccio\"");
|
|
27
|
+
assert.default.ok(parsedBody.dependencies !== void 0, "Expected \"dependencies\" to be defined");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
var infoTest = {
|
|
31
|
+
name: "info",
|
|
32
|
+
requires: ["info"],
|
|
33
|
+
run: testInfo
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
exports.infoTest = infoTest;
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=info.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.cjs","names":[],"sources":["../../../src/tests/info.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\nimport { createTempFolder } from '../utils/project';\nimport { writeFile } from 'fs/promises';\nimport { join } from 'path';\n\nasync function testInfo(ctx: TestContext): Promise<void> {\n // Create a minimal temp project so yarn modern has a project context\n // and yarn classic doesn't pick up the repo's packageManager field\n const tempFolder = await createTempFolder('info-test');\n await writeFile(join(tempFolder, 'package.json'), JSON.stringify({ name: 'info-test', version: '1.0.0' }));\n\n const resp = await ctx.adapter.exec(\n { cwd: tempFolder },\n 'info',\n 'verdaccio',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n\n if (ctx.adapter.type === 'yarn-classic') {\n const lines = resp.stdout.split('\\n').filter(Boolean);\n const dataLine = lines.find((l) => {\n try {\n const obj = JSON.parse(l);\n return obj.type === 'inspect';\n } catch {\n return false;\n }\n });\n assert.ok(dataLine, 'Expected yarn info NDJSON to contain an \"inspect\" entry');\n } else {\n const parsedBody = JSON.parse(resp.stdout);\n assert.strictEqual(parsedBody.name, 'verdaccio', 'Expected package name \"verdaccio\"');\n assert.ok(parsedBody.dependencies !== undefined, 'Expected \"dependencies\" to be defined');\n }\n}\n\nexport const infoTest: TestDefinition = {\n name: 'info',\n requires: ['info'],\n run: testInfo,\n};\n"],"mappings":";;;;;;;AAOA,eAAe,SAAS,KAAiC;CAGvD,MAAM,aAAa,MAAM,gBAAA,iBAAiB,YAAY;AACtD,QAAA,GAAA,YAAA,YAAA,GAAA,KAAA,MAAqB,YAAY,eAAe,EAAE,KAAK,UAAU;EAAE,MAAM;EAAa,SAAS;EAAS,CAAC,CAAC;CAE1G,MAAM,OAAO,MAAM,IAAI,QAAQ,KAC7B,EAAE,KAAK,YAAY,EACnB,QACA,aACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AAED,KAAI,IAAI,QAAQ,SAAS,gBAAgB;EAEvC,MAAM,WADQ,KAAK,OAAO,MAAM,KAAK,CAAC,OAAO,QAAQ,CAC9B,MAAM,MAAM;AACjC,OAAI;AAEF,WADY,KAAK,MAAM,EAAE,CACd,SAAS;WACd;AACN,WAAO;;IAET;AACF,SAAA,QAAO,GAAG,UAAU,4DAA0D;QACzE;EACL,MAAM,aAAa,KAAK,MAAM,KAAK,OAAO;AAC1C,SAAA,QAAO,YAAY,WAAW,MAAM,aAAa,sCAAoC;AACrF,SAAA,QAAO,GAAG,WAAW,iBAAiB,KAAA,GAAW,0CAAwC;;;AAI7F,IAAa,WAA2B;CACtC,MAAM;CACN,UAAU,CAAC,OAAO;CAClB,KAAK;CACN"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/install.ts
|
|
5
|
+
async function testInstall(ctx) {
|
|
6
|
+
const { tempFolder } = await ctx.adapter.prepareProject(`install-test-${ctx.runId}`, "1.0.0", ctx.registryUrl, ctx.port, ctx.token, { react: "18.2.0" });
|
|
7
|
+
const isNpm = ctx.adapter.type === "npm";
|
|
8
|
+
const args = isNpm ? [
|
|
9
|
+
"install",
|
|
10
|
+
"--json",
|
|
11
|
+
...ctx.adapter.registryArg(ctx.registryUrl)
|
|
12
|
+
] : ["install", ...ctx.adapter.registryArg(ctx.registryUrl)];
|
|
13
|
+
const resp = await ctx.adapter.exec({ cwd: tempFolder }, ...args);
|
|
14
|
+
if (isNpm) {
|
|
15
|
+
const parsedBody = JSON.parse(resp.stdout);
|
|
16
|
+
assert.default.ok(parsedBody.added !== void 0, "Expected \"added\" field in install response");
|
|
17
|
+
assert.default.ok(parsedBody.audit !== void 0, "Expected \"audit\" field in install response");
|
|
18
|
+
} else assert.default.ok(true, "Install completed successfully");
|
|
19
|
+
}
|
|
20
|
+
var installTest = {
|
|
21
|
+
name: "install",
|
|
22
|
+
requires: ["install"],
|
|
23
|
+
run: testInstall
|
|
24
|
+
};
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.installTest = installTest;
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=install.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.cjs","names":[],"sources":["../../../src/tests/install.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function testInstall(ctx: TestContext): Promise<void> {\n const { tempFolder } = await ctx.adapter.prepareProject(\n `install-test-${ctx.runId}`,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token,\n { react: '18.2.0' }\n );\n\n const isNpm = ctx.adapter.type === 'npm';\n\n // pnpm doesn't support --json on install\n const args = isNpm\n ? ['install', '--json', ...ctx.adapter.registryArg(ctx.registryUrl)]\n : ['install', ...ctx.adapter.registryArg(ctx.registryUrl)];\n\n const resp = await ctx.adapter.exec({ cwd: tempFolder }, ...args);\n\n if (isNpm) {\n const parsedBody = JSON.parse(resp.stdout);\n assert.ok(parsedBody.added !== undefined, 'Expected \"added\" field in install response');\n assert.ok(parsedBody.audit !== undefined, 'Expected \"audit\" field in install response');\n } else {\n // for pnpm/yarn just verify it completed without error (exit code 0)\n assert.ok(true, 'Install completed successfully');\n }\n}\n\nexport const installTest: TestDefinition = {\n name: 'install',\n requires: ['install'],\n run: testInstall,\n};\n"],"mappings":";;;;AAIA,eAAe,YAAY,KAAiC;CAC1D,MAAM,EAAE,eAAe,MAAM,IAAI,QAAQ,eACvC,gBAAgB,IAAI,SACpB,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,OACJ,EAAE,OAAO,UAAU,CACpB;CAED,MAAM,QAAQ,IAAI,QAAQ,SAAS;CAGnC,MAAM,OAAO,QACT;EAAC;EAAW;EAAU,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY;EAAC,GAClE,CAAC,WAAW,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAAC;CAE5D,MAAM,OAAO,MAAM,IAAI,QAAQ,KAAK,EAAE,KAAK,YAAY,EAAE,GAAG,KAAK;AAEjE,KAAI,OAAO;EACT,MAAM,aAAa,KAAK,MAAM,KAAK,OAAO;AAC1C,SAAA,QAAO,GAAG,WAAW,UAAU,KAAA,GAAW,+CAA6C;AACvF,SAAA,QAAO,GAAG,WAAW,UAAU,KAAA,GAAW,+CAA6C;OAGvF,QAAA,QAAO,GAAG,MAAM,iCAAiC;;AAIrD,IAAa,cAA8B;CACzC,MAAM;CACN,UAAU,CAAC,UAAU;CACrB,KAAK;CACN"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/ping.ts
|
|
5
|
+
async function testPing(ctx) {
|
|
6
|
+
const resp = await ctx.adapter.exec({}, "ping", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
7
|
+
const parsedBody = JSON.parse(resp.stdout);
|
|
8
|
+
assert.default.strictEqual(parsedBody.registry, ctx.registryUrl + "/", `Expected registry "${ctx.registryUrl}/" but got "${parsedBody.registry}"`);
|
|
9
|
+
}
|
|
10
|
+
var pingTest = {
|
|
11
|
+
name: "ping",
|
|
12
|
+
requires: ["ping"],
|
|
13
|
+
run: testPing
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
exports.pingTest = pingTest;
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=ping.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping.cjs","names":[],"sources":["../../../src/tests/ping.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function testPing(ctx: TestContext): Promise<void> {\n const resp = await ctx.adapter.exec(\n {},\n 'ping',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n const parsedBody = JSON.parse(resp.stdout);\n assert.strictEqual(\n parsedBody.registry,\n ctx.registryUrl + '/',\n `Expected registry \"${ctx.registryUrl}/\" but got \"${parsedBody.registry}\"`\n );\n}\n\nexport const pingTest: TestDefinition = {\n name: 'ping',\n requires: ['ping'],\n run: testPing,\n};\n"],"mappings":";;;;AAIA,eAAe,SAAS,KAAiC;CACvD,MAAM,OAAO,MAAM,IAAI,QAAQ,KAC7B,EAAE,EACF,QACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;CACD,MAAM,aAAa,KAAK,MAAM,KAAK,OAAO;AAC1C,QAAA,QAAO,YACL,WAAW,UACX,IAAI,cAAc,KAClB,sBAAsB,IAAI,YAAY,cAAc,WAAW,SAAS,GACzE;;AAGH,IAAa,WAA2B;CACtC,MAAM;CACN,UAAU,CAAC,OAAO;CAClB,KAAK;CACN"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/publish.ts
|
|
5
|
+
async function testPublish(ctx) {
|
|
6
|
+
const packages = [
|
|
7
|
+
`verdaccio-memory-${ctx.runId}`,
|
|
8
|
+
`verdaccio-${ctx.runId}`,
|
|
9
|
+
`@verdaccio/foo-${ctx.runId}`,
|
|
10
|
+
`@verdaccio/some-foo-${ctx.runId}`
|
|
11
|
+
];
|
|
12
|
+
const type = ctx.adapter.type;
|
|
13
|
+
for (const pkgName of packages) {
|
|
14
|
+
const { tempFolder } = await ctx.adapter.prepareProject(pkgName, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
15
|
+
if (type === "yarn-modern") await ctx.adapter.exec({ cwd: tempFolder }, "install");
|
|
16
|
+
const resp = await ctx.adapter.exec({ cwd: tempFolder }, "publish", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
17
|
+
if (type === "yarn-modern") assert.default.ok(resp.stdout.match(/Package archive published/), `Expected "Package archive published" for ${pkgName} but got "${resp.stdout}"`);
|
|
18
|
+
else if (type === "yarn-classic") assert.default.ok(resp.stdout.length > 0, `Expected publish output for ${pkgName}`);
|
|
19
|
+
else {
|
|
20
|
+
const parsedBody = JSON.parse(resp.stdout);
|
|
21
|
+
assert.default.strictEqual(parsedBody.name, pkgName, `Expected package name "${pkgName}" but got "${parsedBody.name}"`);
|
|
22
|
+
assert.default.ok(parsedBody.files, `Expected files to be defined for ${pkgName}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
var publishTest = {
|
|
27
|
+
name: "publish",
|
|
28
|
+
requires: ["publish"],
|
|
29
|
+
run: testPublish
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
exports.publishTest = publishTest;
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=publish.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.cjs","names":[],"sources":["../../../src/tests/publish.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function testPublish(ctx: TestContext): Promise<void> {\n const packages = [\n `verdaccio-memory-${ctx.runId}`,\n `verdaccio-${ctx.runId}`,\n `@verdaccio/foo-${ctx.runId}`,\n `@verdaccio/some-foo-${ctx.runId}`,\n ];\n\n const type = ctx.adapter.type;\n\n for (const pkgName of packages) {\n const { tempFolder } = await ctx.adapter.prepareProject(\n pkgName,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n\n // yarn modern requires install before publish to generate lockfile\n if (type === 'yarn-modern') {\n await ctx.adapter.exec({ cwd: tempFolder }, 'install');\n }\n\n const resp = await ctx.adapter.exec(\n { cwd: tempFolder },\n 'publish',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n\n if (type === 'yarn-modern') {\n assert.ok(\n resp.stdout.match(/Package archive published/),\n `Expected \"Package archive published\" for ${pkgName} but got \"${resp.stdout}\"`\n );\n } else if (type === 'yarn-classic') {\n // yarn classic --json outputs NDJSON — just verify no error exit (exit code 0 is enough)\n assert.ok(resp.stdout.length > 0, `Expected publish output for ${pkgName}`);\n } else {\n // npm / pnpm\n const parsedBody = JSON.parse(resp.stdout);\n assert.strictEqual(parsedBody.name, pkgName, `Expected package name \"${pkgName}\" but got \"${parsedBody.name}\"`);\n assert.ok(parsedBody.files, `Expected files to be defined for ${pkgName}`);\n }\n }\n}\n\nexport const publishTest: TestDefinition = {\n name: 'publish',\n requires: ['publish'],\n run: testPublish,\n};\n"],"mappings":";;;;AAIA,eAAe,YAAY,KAAiC;CAC1D,MAAM,WAAW;EACf,oBAAoB,IAAI;EACxB,aAAa,IAAI;EACjB,kBAAkB,IAAI;EACtB,uBAAuB,IAAI;EAC5B;CAED,MAAM,OAAO,IAAI,QAAQ;AAEzB,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,EAAE,eAAe,MAAM,IAAI,QAAQ,eACvC,SACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AAGD,MAAI,SAAS,cACX,OAAM,IAAI,QAAQ,KAAK,EAAE,KAAK,YAAY,EAAE,UAAU;EAGxD,MAAM,OAAO,MAAM,IAAI,QAAQ,KAC7B,EAAE,KAAK,YAAY,EACnB,WACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AAED,MAAI,SAAS,cACX,QAAA,QAAO,GACL,KAAK,OAAO,MAAM,4BAA4B,EAC9C,4CAA4C,QAAQ,YAAY,KAAK,OAAO,GAC7E;WACQ,SAAS,eAElB,QAAA,QAAO,GAAG,KAAK,OAAO,SAAS,GAAG,+BAA+B,UAAU;OACtE;GAEL,MAAM,aAAa,KAAK,MAAM,KAAK,OAAO;AAC1C,UAAA,QAAO,YAAY,WAAW,MAAM,SAAS,0BAA0B,QAAQ,aAAa,WAAW,KAAK,GAAG;AAC/G,UAAA,QAAO,GAAG,WAAW,OAAO,oCAAoC,UAAU;;;;AAKhF,IAAa,cAA8B;CACzC,MAAM;CACN,UAAU,CAAC,UAAU;CACrB,KAAK;CACN"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/search.ts
|
|
5
|
+
async function testSearch(ctx) {
|
|
6
|
+
const resp = await ctx.adapter.exec({}, "search", "@verdaccio/cli", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
7
|
+
const pkgFind = JSON.parse(resp.stdout).find((item) => item.name === "@verdaccio/cli");
|
|
8
|
+
assert.default.ok(pkgFind, "Expected to find @verdaccio/cli in search results");
|
|
9
|
+
assert.default.strictEqual(pkgFind.name, "@verdaccio/cli");
|
|
10
|
+
}
|
|
11
|
+
var searchTest = {
|
|
12
|
+
name: "search",
|
|
13
|
+
requires: ["search"],
|
|
14
|
+
run: testSearch
|
|
15
|
+
};
|
|
16
|
+
//#endregion
|
|
17
|
+
exports.searchTest = searchTest;
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=search.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.cjs","names":[],"sources":["../../../src/tests/search.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function testSearch(ctx: TestContext): Promise<void> {\n const resp = await ctx.adapter.exec(\n {},\n 'search',\n '@verdaccio/cli',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n const parsedBody = JSON.parse(resp.stdout);\n const pkgFind = parsedBody.find((item: any) => item.name === '@verdaccio/cli');\n assert.ok(pkgFind, 'Expected to find @verdaccio/cli in search results');\n assert.strictEqual(pkgFind.name, '@verdaccio/cli');\n}\n\nexport const searchTest: TestDefinition = {\n name: 'search',\n requires: ['search'],\n run: testSearch,\n};\n"],"mappings":";;;;AAIA,eAAe,WAAW,KAAiC;CACzD,MAAM,OAAO,MAAM,IAAI,QAAQ,KAC7B,EAAE,EACF,UACA,kBACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;CAED,MAAM,UADa,KAAK,MAAM,KAAK,OAAO,CACf,MAAM,SAAc,KAAK,SAAS,iBAAiB;AAC9E,QAAA,QAAO,GAAG,SAAS,oDAAoD;AACvE,QAAA,QAAO,YAAY,QAAQ,MAAM,iBAAiB;;AAGpD,IAAa,aAA6B;CACxC,MAAM;CACN,UAAU,CAAC,SAAS;CACpB,KAAK;CACN"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/star.ts
|
|
5
|
+
async function testStar(ctx) {
|
|
6
|
+
const id = ctx.runId;
|
|
7
|
+
const pkgName1 = `@verdaccio/star1-${id}`;
|
|
8
|
+
const { tempFolder: tf1 } = await ctx.adapter.prepareProject(pkgName1, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
9
|
+
await ctx.adapter.exec({ cwd: tf1 }, "publish", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
10
|
+
const resp1 = await ctx.adapter.exec({ cwd: tf1 }, "star", pkgName1, ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
11
|
+
assert.default.ok(resp1.stdout.includes(pkgName1), `Expected star output to contain "${pkgName1}" but got "${resp1.stdout}"`);
|
|
12
|
+
const pkgName2 = `@verdaccio/star2-${id}`;
|
|
13
|
+
const { tempFolder: tf2 } = await ctx.adapter.prepareProject(pkgName2, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
14
|
+
await ctx.adapter.exec({ cwd: tf2 }, "publish", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
15
|
+
await ctx.adapter.exec({ cwd: tf2 }, "star", pkgName2, ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
16
|
+
const resp2 = await ctx.adapter.exec({ cwd: tf2 }, "unstar", pkgName2, ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
17
|
+
assert.default.ok(resp2.stdout.includes(pkgName2), `Expected unstar output to contain "${pkgName2}" but got "${resp2.stdout}"`);
|
|
18
|
+
}
|
|
19
|
+
var starTest = {
|
|
20
|
+
name: "star",
|
|
21
|
+
requires: ["star"],
|
|
22
|
+
run: testStar
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
exports.starTest = starTest;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=star.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"star.cjs","names":[],"sources":["../../../src/tests/star.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function testStar(ctx: TestContext): Promise<void> {\n const id = ctx.runId;\n\n // Test 1: star a package\n const pkgName1 = `@verdaccio/star1-${id}`;\n const { tempFolder: tf1 } = await ctx.adapter.prepareProject(\n pkgName1,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await ctx.adapter.exec(\n { cwd: tf1 },\n 'publish',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n const resp1 = await ctx.adapter.exec(\n { cwd: tf1 },\n 'star',\n pkgName1,\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n assert.ok(\n resp1.stdout.includes(pkgName1),\n `Expected star output to contain \"${pkgName1}\" but got \"${resp1.stdout}\"`\n );\n\n // Test 2: unstar a package\n const pkgName2 = `@verdaccio/star2-${id}`;\n const { tempFolder: tf2 } = await ctx.adapter.prepareProject(\n pkgName2,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await ctx.adapter.exec(\n { cwd: tf2 },\n 'publish',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n await ctx.adapter.exec(\n { cwd: tf2 },\n 'star',\n pkgName2,\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n const resp2 = await ctx.adapter.exec(\n { cwd: tf2 },\n 'unstar',\n pkgName2,\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n assert.ok(\n resp2.stdout.includes(pkgName2),\n `Expected unstar output to contain \"${pkgName2}\" but got \"${resp2.stdout}\"`\n );\n}\n\nexport const starTest: TestDefinition = {\n name: 'star',\n requires: ['star'],\n run: testStar,\n};\n"],"mappings":";;;;AAIA,eAAe,SAAS,KAAiC;CACvD,MAAM,KAAK,IAAI;CAGf,MAAM,WAAW,oBAAoB;CACrC,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,KAAK,EACZ,WACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;CACD,MAAM,QAAQ,MAAM,IAAI,QAAQ,KAC9B,EAAE,KAAK,KAAK,EACZ,QACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,QAAA,QAAO,GACL,MAAM,OAAO,SAAS,SAAS,EAC/B,oCAAoC,SAAS,aAAa,MAAM,OAAO,GACxE;CAGD,MAAM,WAAW,oBAAoB;CACrC,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,KAAK,EACZ,WACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,KAAK,EACZ,QACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;CACD,MAAM,QAAQ,MAAM,IAAI,QAAQ,KAC9B,EAAE,KAAK,KAAK,EACZ,UACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,QAAA,QAAO,GACL,MAAM,OAAO,SAAS,SAAS,EAC/B,sCAAsC,SAAS,aAAa,MAAM,OAAO,GAC1E;;AAGH,IAAa,WAA2B;CACtC,MAAM;CACN,UAAU,CAAC,OAAO;CAClB,KAAK;CACN"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let assert = require("assert");
|
|
3
|
+
assert = require_runtime.__toESM(assert);
|
|
4
|
+
//#region src/tests/unpublish.ts
|
|
5
|
+
async function publishPkg(ctx, tempFolder) {
|
|
6
|
+
await ctx.adapter.exec({ cwd: tempFolder }, "publish", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
7
|
+
}
|
|
8
|
+
async function bumpVersion(ctx, tempFolder, bump) {
|
|
9
|
+
await ctx.adapter.exec({ cwd: tempFolder }, "version", bump, "--no--git-tag-version", "--loglevel=info", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
10
|
+
}
|
|
11
|
+
async function testUnpublish(ctx) {
|
|
12
|
+
const id = ctx.runId;
|
|
13
|
+
const pkgName = `@verdaccio/unpub1-${id}`;
|
|
14
|
+
const { tempFolder } = await ctx.adapter.prepareProject(pkgName, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
15
|
+
await publishPkg(ctx, tempFolder);
|
|
16
|
+
await bumpVersion(ctx, tempFolder, "minor");
|
|
17
|
+
await publishPkg(ctx, tempFolder);
|
|
18
|
+
await bumpVersion(ctx, tempFolder, "minor");
|
|
19
|
+
await publishPkg(ctx, tempFolder);
|
|
20
|
+
await bumpVersion(ctx, tempFolder, "major");
|
|
21
|
+
await publishPkg(ctx, tempFolder);
|
|
22
|
+
const resp = await ctx.adapter.exec({ cwd: tempFolder }, "unpublish", pkgName, "--force", "--loglevel=info", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
23
|
+
assert.default.ok(resp.stdout.includes(pkgName), `Expected unpublish output to contain "${pkgName}" but got "${resp.stdout}"`);
|
|
24
|
+
const pkgName2 = `@verdaccio/unpub2-${id}`;
|
|
25
|
+
const { tempFolder: tf2 } = await ctx.adapter.prepareProject(pkgName2, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
|
|
26
|
+
await publishPkg(ctx, tf2);
|
|
27
|
+
await bumpVersion(ctx, tf2, "minor");
|
|
28
|
+
await publishPkg(ctx, tf2);
|
|
29
|
+
const resp2 = await ctx.adapter.exec({ cwd: tf2 }, "unpublish", `${pkgName2}@1.0.0`, "--force", "--loglevel=info", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
|
|
30
|
+
assert.default.ok(resp2.stdout.includes(`${pkgName2}@1.0.0`), `Expected unpublish output to contain "${pkgName2}@1.0.0" but got "${resp2.stdout}"`);
|
|
31
|
+
}
|
|
32
|
+
var unpublishTest = {
|
|
33
|
+
name: "unpublish",
|
|
34
|
+
requires: ["unpublish"],
|
|
35
|
+
run: testUnpublish
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
exports.unpublishTest = unpublishTest;
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=unpublish.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpublish.cjs","names":[],"sources":["../../../src/tests/unpublish.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { TestContext, TestDefinition } from '../types';\n\nasync function publishPkg(ctx: TestContext, tempFolder: string) {\n await ctx.adapter.exec(\n { cwd: tempFolder },\n 'publish',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n}\n\nasync function bumpVersion(ctx: TestContext, tempFolder: string, bump: string) {\n await ctx.adapter.exec(\n { cwd: tempFolder },\n 'version',\n bump,\n '--no--git-tag-version',\n '--loglevel=info',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n}\n\nasync function testUnpublish(ctx: TestContext): Promise<void> {\n const id = ctx.runId;\n\n // Test 1: unpublish a full package\n const pkgName = `@verdaccio/unpub1-${id}`;\n const { tempFolder } = await ctx.adapter.prepareProject(\n pkgName,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await publishPkg(ctx, tempFolder);\n await bumpVersion(ctx, tempFolder, 'minor');\n await publishPkg(ctx, tempFolder);\n await bumpVersion(ctx, tempFolder, 'minor');\n await publishPkg(ctx, tempFolder);\n await bumpVersion(ctx, tempFolder, 'major');\n await publishPkg(ctx, tempFolder);\n\n const resp = await ctx.adapter.exec(\n { cwd: tempFolder },\n 'unpublish',\n pkgName,\n '--force',\n '--loglevel=info',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n assert.ok(\n resp.stdout.includes(pkgName),\n `Expected unpublish output to contain \"${pkgName}\" but got \"${resp.stdout}\"`\n );\n\n // Test 2: unpublish a specific version\n const pkgName2 = `@verdaccio/unpub2-${id}`;\n const { tempFolder: tf2 } = await ctx.adapter.prepareProject(\n pkgName2,\n '1.0.0',\n ctx.registryUrl,\n ctx.port,\n ctx.token\n );\n await publishPkg(ctx, tf2);\n await bumpVersion(ctx, tf2, 'minor');\n await publishPkg(ctx, tf2);\n\n const resp2 = await ctx.adapter.exec(\n { cwd: tf2 },\n 'unpublish',\n `${pkgName2}@1.0.0`,\n '--force',\n '--loglevel=info',\n '--json',\n ...ctx.adapter.registryArg(ctx.registryUrl)\n );\n assert.ok(\n resp2.stdout.includes(`${pkgName2}@1.0.0`),\n `Expected unpublish output to contain \"${pkgName2}@1.0.0\" but got \"${resp2.stdout}\"`\n );\n}\n\nexport const unpublishTest: TestDefinition = {\n name: 'unpublish',\n requires: ['unpublish'],\n run: testUnpublish,\n};\n"],"mappings":";;;;AAIA,eAAe,WAAW,KAAkB,YAAoB;AAC9D,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,YAAY,EACnB,WACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;;AAGH,eAAe,YAAY,KAAkB,YAAoB,MAAc;AAC7E,OAAM,IAAI,QAAQ,KAChB,EAAE,KAAK,YAAY,EACnB,WACA,MACA,yBACA,mBACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;;AAGH,eAAe,cAAc,KAAiC;CAC5D,MAAM,KAAK,IAAI;CAGf,MAAM,UAAU,qBAAqB;CACrC,MAAM,EAAE,eAAe,MAAM,IAAI,QAAQ,eACvC,SACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,WAAW,KAAK,WAAW;AACjC,OAAM,YAAY,KAAK,YAAY,QAAQ;AAC3C,OAAM,WAAW,KAAK,WAAW;AACjC,OAAM,YAAY,KAAK,YAAY,QAAQ;AAC3C,OAAM,WAAW,KAAK,WAAW;AACjC,OAAM,YAAY,KAAK,YAAY,QAAQ;AAC3C,OAAM,WAAW,KAAK,WAAW;CAEjC,MAAM,OAAO,MAAM,IAAI,QAAQ,KAC7B,EAAE,KAAK,YAAY,EACnB,aACA,SACA,WACA,mBACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,QAAA,QAAO,GACL,KAAK,OAAO,SAAS,QAAQ,EAC7B,yCAAyC,QAAQ,aAAa,KAAK,OAAO,GAC3E;CAGD,MAAM,WAAW,qBAAqB;CACtC,MAAM,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,eAC5C,UACA,SACA,IAAI,aACJ,IAAI,MACJ,IAAI,MACL;AACD,OAAM,WAAW,KAAK,IAAI;AAC1B,OAAM,YAAY,KAAK,KAAK,QAAQ;AACpC,OAAM,WAAW,KAAK,IAAI;CAE1B,MAAM,QAAQ,MAAM,IAAI,QAAQ,KAC9B,EAAE,KAAK,KAAK,EACZ,aACA,GAAG,SAAS,SACZ,WACA,mBACA,UACA,GAAG,IAAI,QAAQ,YAAY,IAAI,YAAY,CAC5C;AACD,QAAA,QAAO,GACL,MAAM,OAAO,SAAS,GAAG,SAAS,QAAQ,EAC1C,yCAAyC,SAAS,mBAAmB,MAAM,OAAO,GACnF;;AAGH,IAAa,gBAAgC;CAC3C,MAAM;CACN,UAAU,CAAC,YAAY;CACvB,KAAK;CACN"}
|