@verdaccio/e2e-cli 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/build/adapters/adapter.d.ts +1 -0
  2. package/build/adapters/index.d.ts +4 -0
  3. package/build/adapters/npm.d.ts +2 -0
  4. package/build/adapters/pnpm.d.ts +2 -0
  5. package/build/adapters/yarn-classic.d.ts +2 -0
  6. package/build/adapters/yarn-modern.d.ts +2 -0
  7. package/build/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  8. package/build/cjs/adapters/index.cjs +4 -0
  9. package/build/cjs/adapters/npm.cjs +78 -0
  10. package/build/cjs/adapters/npm.cjs.map +1 -0
  11. package/build/cjs/adapters/pnpm.cjs +78 -0
  12. package/build/cjs/adapters/pnpm.cjs.map +1 -0
  13. package/build/cjs/adapters/yarn-classic.cjs +96 -0
  14. package/build/cjs/adapters/yarn-classic.cjs.map +1 -0
  15. package/build/cjs/adapters/yarn-modern.cjs +133 -0
  16. package/build/cjs/adapters/yarn-modern.cjs.map +1 -0
  17. package/build/cjs/index.cjs +152 -0
  18. package/build/cjs/index.cjs.map +1 -0
  19. package/build/cjs/reporter.cjs +60 -0
  20. package/build/cjs/reporter.cjs.map +1 -0
  21. package/build/cjs/runner.cjs +102 -0
  22. package/build/cjs/runner.cjs.map +1 -0
  23. package/build/cjs/tests/audit.cjs +27 -0
  24. package/build/cjs/tests/audit.cjs.map +1 -0
  25. package/build/cjs/tests/deprecate.cjs +67 -0
  26. package/build/cjs/tests/deprecate.cjs.map +1 -0
  27. package/build/cjs/tests/dist-tags.cjs +43 -0
  28. package/build/cjs/tests/dist-tags.cjs.map +1 -0
  29. package/build/cjs/tests/index.cjs +27 -0
  30. package/build/cjs/tests/index.cjs.map +1 -0
  31. package/build/cjs/tests/info.cjs +38 -0
  32. package/build/cjs/tests/info.cjs.map +1 -0
  33. package/build/cjs/tests/install.cjs +28 -0
  34. package/build/cjs/tests/install.cjs.map +1 -0
  35. package/build/cjs/tests/ping.cjs +18 -0
  36. package/build/cjs/tests/ping.cjs.map +1 -0
  37. package/build/cjs/tests/publish.cjs +34 -0
  38. package/build/cjs/tests/publish.cjs.map +1 -0
  39. package/build/cjs/tests/search.cjs +19 -0
  40. package/build/cjs/tests/search.cjs.map +1 -0
  41. package/build/cjs/tests/star.cjs +27 -0
  42. package/build/cjs/tests/star.cjs.map +1 -0
  43. package/build/cjs/tests/unpublish.cjs +40 -0
  44. package/build/cjs/tests/unpublish.cjs.map +1 -0
  45. package/build/cjs/utils/process.cjs +85 -0
  46. package/build/cjs/utils/process.cjs.map +1 -0
  47. package/build/cjs/utils/project.cjs +55 -0
  48. package/build/cjs/utils/project.cjs.map +1 -0
  49. package/build/cjs/utils/registry-client.cjs +61 -0
  50. package/build/cjs/utils/registry-client.cjs.map +1 -0
  51. package/build/esm/adapters/index.js +5 -0
  52. package/build/esm/adapters/npm.js +76 -0
  53. package/build/esm/adapters/npm.js.map +1 -0
  54. package/build/esm/adapters/pnpm.js +76 -0
  55. package/build/esm/adapters/pnpm.js.map +1 -0
  56. package/build/esm/adapters/yarn-classic.js +94 -0
  57. package/build/esm/adapters/yarn-classic.js.map +1 -0
  58. package/build/esm/adapters/yarn-modern.js +130 -0
  59. package/build/esm/adapters/yarn-modern.js.map +1 -0
  60. package/build/esm/index.js +142 -0
  61. package/build/esm/index.js.map +1 -0
  62. package/build/esm/reporter.js +56 -0
  63. package/build/esm/reporter.js.map +1 -0
  64. package/build/esm/runner.js +99 -0
  65. package/build/esm/runner.js.map +1 -0
  66. package/build/esm/tests/audit.js +25 -0
  67. package/build/esm/tests/audit.js.map +1 -0
  68. package/build/esm/tests/deprecate.js +65 -0
  69. package/build/esm/tests/deprecate.js.map +1 -0
  70. package/build/esm/tests/dist-tags.js +41 -0
  71. package/build/esm/tests/dist-tags.js.map +1 -0
  72. package/build/esm/tests/index.js +27 -0
  73. package/build/esm/tests/index.js.map +1 -0
  74. package/build/esm/tests/info.js +36 -0
  75. package/build/esm/tests/info.js.map +1 -0
  76. package/build/esm/tests/install.js +26 -0
  77. package/build/esm/tests/install.js.map +1 -0
  78. package/build/esm/tests/ping.js +16 -0
  79. package/build/esm/tests/ping.js.map +1 -0
  80. package/build/esm/tests/publish.js +32 -0
  81. package/build/esm/tests/publish.js.map +1 -0
  82. package/build/esm/tests/search.js +17 -0
  83. package/build/esm/tests/search.js.map +1 -0
  84. package/build/esm/tests/star.js +25 -0
  85. package/build/esm/tests/star.js.map +1 -0
  86. package/build/esm/tests/unpublish.js +38 -0
  87. package/build/esm/tests/unpublish.js.map +1 -0
  88. package/build/esm/utils/process.js +82 -0
  89. package/build/esm/utils/process.js.map +1 -0
  90. package/build/esm/utils/project.js +50 -0
  91. package/build/esm/utils/project.js.map +1 -0
  92. package/build/esm/utils/registry-client.js +57 -0
  93. package/build/esm/utils/registry-client.js.map +1 -0
  94. package/build/index.d.ts +5 -0
  95. package/build/reporter.d.ts +6 -0
  96. package/build/runner.d.ts +13 -0
  97. package/build/tests/audit.d.ts +2 -0
  98. package/build/tests/deprecate.d.ts +2 -0
  99. package/build/tests/dist-tags.d.ts +2 -0
  100. package/build/tests/index.d.ts +13 -0
  101. package/build/tests/info.d.ts +2 -0
  102. package/build/tests/install.d.ts +2 -0
  103. package/build/tests/ping.d.ts +2 -0
  104. package/build/tests/publish.d.ts +2 -0
  105. package/build/tests/search.d.ts +2 -0
  106. package/build/tests/star.d.ts +2 -0
  107. package/build/tests/unpublish.d.ts +2 -0
  108. package/build/types.d.ts +65 -0
  109. package/build/utils/index.d.ts +3 -0
  110. package/build/utils/process.d.ts +5 -0
  111. package/build/utils/project.d.ts +6 -0
  112. package/build/utils/registry-client.d.ts +14 -0
  113. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dist-tags.js","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,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,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,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
+ import { auditTest } from "./audit.js";
2
+ import { deprecateTest } from "./deprecate.js";
3
+ import { distTagsTest } from "./dist-tags.js";
4
+ import { infoTest } from "./info.js";
5
+ import { installTest } from "./install.js";
6
+ import { pingTest } from "./ping.js";
7
+ import { publishTest } from "./publish.js";
8
+ import { searchTest } from "./search.js";
9
+ import { starTest } from "./star.js";
10
+ import { unpublishTest } from "./unpublish.js";
11
+ //#region src/tests/index.ts
12
+ var allTests = [
13
+ publishTest,
14
+ installTest,
15
+ auditTest,
16
+ infoTest,
17
+ deprecateTest,
18
+ distTagsTest,
19
+ pingTest,
20
+ searchTest,
21
+ starTest,
22
+ unpublishTest
23
+ ];
24
+ //#endregion
25
+ export { allTests };
26
+
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","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;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,36 @@
1
+ import { createTempFolder } from "../utils/project.js";
2
+ import { join } from "path";
3
+ import { writeFile } from "fs/promises";
4
+ import assert from "assert";
5
+ //#region src/tests/info.ts
6
+ async function testInfo(ctx) {
7
+ const tempFolder = await createTempFolder("info-test");
8
+ await writeFile(join(tempFolder, "package.json"), JSON.stringify({
9
+ name: "info-test",
10
+ version: "1.0.0"
11
+ }));
12
+ const resp = await ctx.adapter.exec({ cwd: tempFolder }, "info", "verdaccio", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
13
+ if (ctx.adapter.type === "yarn-classic") {
14
+ const dataLine = resp.stdout.split("\n").filter(Boolean).find((l) => {
15
+ try {
16
+ return JSON.parse(l).type === "inspect";
17
+ } catch {
18
+ return false;
19
+ }
20
+ });
21
+ assert.ok(dataLine, "Expected yarn info NDJSON to contain an \"inspect\" entry");
22
+ } else {
23
+ const parsedBody = JSON.parse(resp.stdout);
24
+ assert.strictEqual(parsedBody.name, "verdaccio", "Expected package name \"verdaccio\"");
25
+ assert.ok(parsedBody.dependencies !== void 0, "Expected \"dependencies\" to be defined");
26
+ }
27
+ }
28
+ var infoTest = {
29
+ name: "info",
30
+ requires: ["info"],
31
+ run: testInfo
32
+ };
33
+ //#endregion
34
+ export { infoTest };
35
+
36
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","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,iBAAiB,YAAY;AACtD,OAAM,UAAU,KAAK,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,SAAO,GAAG,UAAU,4DAA0D;QACzE;EACL,MAAM,aAAa,KAAK,MAAM,KAAK,OAAO;AAC1C,SAAO,YAAY,WAAW,MAAM,aAAa,sCAAoC;AACrF,SAAO,GAAG,WAAW,iBAAiB,KAAA,GAAW,0CAAwC;;;AAI7F,IAAa,WAA2B;CACtC,MAAM;CACN,UAAU,CAAC,OAAO;CAClB,KAAK;CACN"}
@@ -0,0 +1,26 @@
1
+ import assert from "assert";
2
+ //#region src/tests/install.ts
3
+ async function testInstall(ctx) {
4
+ const { tempFolder } = await ctx.adapter.prepareProject(`install-test-${ctx.runId}`, "1.0.0", ctx.registryUrl, ctx.port, ctx.token, { react: "18.2.0" });
5
+ const isNpm = ctx.adapter.type === "npm";
6
+ const args = isNpm ? [
7
+ "install",
8
+ "--json",
9
+ ...ctx.adapter.registryArg(ctx.registryUrl)
10
+ ] : ["install", ...ctx.adapter.registryArg(ctx.registryUrl)];
11
+ const resp = await ctx.adapter.exec({ cwd: tempFolder }, ...args);
12
+ if (isNpm) {
13
+ const parsedBody = JSON.parse(resp.stdout);
14
+ assert.ok(parsedBody.added !== void 0, "Expected \"added\" field in install response");
15
+ assert.ok(parsedBody.audit !== void 0, "Expected \"audit\" field in install response");
16
+ } else assert.ok(true, "Install completed successfully");
17
+ }
18
+ var installTest = {
19
+ name: "install",
20
+ requires: ["install"],
21
+ run: testInstall
22
+ };
23
+ //#endregion
24
+ export { installTest };
25
+
26
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","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,SAAO,GAAG,WAAW,UAAU,KAAA,GAAW,+CAA6C;AACvF,SAAO,GAAG,WAAW,UAAU,KAAA,GAAW,+CAA6C;OAGvF,QAAO,GAAG,MAAM,iCAAiC;;AAIrD,IAAa,cAA8B;CACzC,MAAM;CACN,UAAU,CAAC,UAAU;CACrB,KAAK;CACN"}
@@ -0,0 +1,16 @@
1
+ import assert from "assert";
2
+ //#region src/tests/ping.ts
3
+ async function testPing(ctx) {
4
+ const resp = await ctx.adapter.exec({}, "ping", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
5
+ const parsedBody = JSON.parse(resp.stdout);
6
+ assert.strictEqual(parsedBody.registry, ctx.registryUrl + "/", `Expected registry "${ctx.registryUrl}/" but got "${parsedBody.registry}"`);
7
+ }
8
+ var pingTest = {
9
+ name: "ping",
10
+ requires: ["ping"],
11
+ run: testPing
12
+ };
13
+ //#endregion
14
+ export { pingTest };
15
+
16
+ //# sourceMappingURL=ping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping.js","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,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,32 @@
1
+ import assert from "assert";
2
+ //#region src/tests/publish.ts
3
+ async function testPublish(ctx) {
4
+ const packages = [
5
+ `verdaccio-memory-${ctx.runId}`,
6
+ `verdaccio-${ctx.runId}`,
7
+ `@verdaccio/foo-${ctx.runId}`,
8
+ `@verdaccio/some-foo-${ctx.runId}`
9
+ ];
10
+ const type = ctx.adapter.type;
11
+ for (const pkgName of packages) {
12
+ const { tempFolder } = await ctx.adapter.prepareProject(pkgName, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
13
+ if (type === "yarn-modern") await ctx.adapter.exec({ cwd: tempFolder }, "install");
14
+ const resp = await ctx.adapter.exec({ cwd: tempFolder }, "publish", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
15
+ if (type === "yarn-modern") assert.ok(resp.stdout.match(/Package archive published/), `Expected "Package archive published" for ${pkgName} but got "${resp.stdout}"`);
16
+ else if (type === "yarn-classic") assert.ok(resp.stdout.length > 0, `Expected publish output for ${pkgName}`);
17
+ else {
18
+ const parsedBody = JSON.parse(resp.stdout);
19
+ assert.strictEqual(parsedBody.name, pkgName, `Expected package name "${pkgName}" but got "${parsedBody.name}"`);
20
+ assert.ok(parsedBody.files, `Expected files to be defined for ${pkgName}`);
21
+ }
22
+ }
23
+ }
24
+ var publishTest = {
25
+ name: "publish",
26
+ requires: ["publish"],
27
+ run: testPublish
28
+ };
29
+ //#endregion
30
+ export { publishTest };
31
+
32
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","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,QAAO,GACL,KAAK,OAAO,MAAM,4BAA4B,EAC9C,4CAA4C,QAAQ,YAAY,KAAK,OAAO,GAC7E;WACQ,SAAS,eAElB,QAAO,GAAG,KAAK,OAAO,SAAS,GAAG,+BAA+B,UAAU;OACtE;GAEL,MAAM,aAAa,KAAK,MAAM,KAAK,OAAO;AAC1C,UAAO,YAAY,WAAW,MAAM,SAAS,0BAA0B,QAAQ,aAAa,WAAW,KAAK,GAAG;AAC/G,UAAO,GAAG,WAAW,OAAO,oCAAoC,UAAU;;;;AAKhF,IAAa,cAA8B;CACzC,MAAM;CACN,UAAU,CAAC,UAAU;CACrB,KAAK;CACN"}
@@ -0,0 +1,17 @@
1
+ import assert from "assert";
2
+ //#region src/tests/search.ts
3
+ async function testSearch(ctx) {
4
+ const resp = await ctx.adapter.exec({}, "search", "@verdaccio/cli", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
5
+ const pkgFind = JSON.parse(resp.stdout).find((item) => item.name === "@verdaccio/cli");
6
+ assert.ok(pkgFind, "Expected to find @verdaccio/cli in search results");
7
+ assert.strictEqual(pkgFind.name, "@verdaccio/cli");
8
+ }
9
+ var searchTest = {
10
+ name: "search",
11
+ requires: ["search"],
12
+ run: testSearch
13
+ };
14
+ //#endregion
15
+ export { searchTest };
16
+
17
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","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,QAAO,GAAG,SAAS,oDAAoD;AACvE,QAAO,YAAY,QAAQ,MAAM,iBAAiB;;AAGpD,IAAa,aAA6B;CACxC,MAAM;CACN,UAAU,CAAC,SAAS;CACpB,KAAK;CACN"}
@@ -0,0 +1,25 @@
1
+ import assert from "assert";
2
+ //#region src/tests/star.ts
3
+ async function testStar(ctx) {
4
+ const id = ctx.runId;
5
+ const pkgName1 = `@verdaccio/star1-${id}`;
6
+ const { tempFolder: tf1 } = await ctx.adapter.prepareProject(pkgName1, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
7
+ await ctx.adapter.exec({ cwd: tf1 }, "publish", ...ctx.adapter.registryArg(ctx.registryUrl));
8
+ const resp1 = await ctx.adapter.exec({ cwd: tf1 }, "star", pkgName1, ...ctx.adapter.registryArg(ctx.registryUrl));
9
+ assert.ok(resp1.stdout.includes(pkgName1), `Expected star output to contain "${pkgName1}" but got "${resp1.stdout}"`);
10
+ const pkgName2 = `@verdaccio/star2-${id}`;
11
+ const { tempFolder: tf2 } = await ctx.adapter.prepareProject(pkgName2, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
12
+ await ctx.adapter.exec({ cwd: tf2 }, "publish", ...ctx.adapter.registryArg(ctx.registryUrl));
13
+ await ctx.adapter.exec({ cwd: tf2 }, "star", pkgName2, ...ctx.adapter.registryArg(ctx.registryUrl));
14
+ const resp2 = await ctx.adapter.exec({ cwd: tf2 }, "unstar", pkgName2, ...ctx.adapter.registryArg(ctx.registryUrl));
15
+ assert.ok(resp2.stdout.includes(pkgName2), `Expected unstar output to contain "${pkgName2}" but got "${resp2.stdout}"`);
16
+ }
17
+ var starTest = {
18
+ name: "star",
19
+ requires: ["star"],
20
+ run: testStar
21
+ };
22
+ //#endregion
23
+ export { starTest };
24
+
25
+ //# sourceMappingURL=star.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star.js","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,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,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,38 @@
1
+ import assert from "assert";
2
+ //#region src/tests/unpublish.ts
3
+ async function publishPkg(ctx, tempFolder) {
4
+ await ctx.adapter.exec({ cwd: tempFolder }, "publish", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
5
+ }
6
+ async function bumpVersion(ctx, tempFolder, bump) {
7
+ await ctx.adapter.exec({ cwd: tempFolder }, "version", bump, "--no--git-tag-version", "--loglevel=info", ...ctx.adapter.registryArg(ctx.registryUrl));
8
+ }
9
+ async function testUnpublish(ctx) {
10
+ const id = ctx.runId;
11
+ const pkgName = `@verdaccio/unpub1-${id}`;
12
+ const { tempFolder } = await ctx.adapter.prepareProject(pkgName, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
13
+ await publishPkg(ctx, tempFolder);
14
+ await bumpVersion(ctx, tempFolder, "minor");
15
+ await publishPkg(ctx, tempFolder);
16
+ await bumpVersion(ctx, tempFolder, "minor");
17
+ await publishPkg(ctx, tempFolder);
18
+ await bumpVersion(ctx, tempFolder, "major");
19
+ await publishPkg(ctx, tempFolder);
20
+ const resp = await ctx.adapter.exec({ cwd: tempFolder }, "unpublish", pkgName, "--force", "--loglevel=info", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
21
+ assert.ok(resp.stdout.includes(pkgName), `Expected unpublish output to contain "${pkgName}" but got "${resp.stdout}"`);
22
+ const pkgName2 = `@verdaccio/unpub2-${id}`;
23
+ const { tempFolder: tf2 } = await ctx.adapter.prepareProject(pkgName2, "1.0.0", ctx.registryUrl, ctx.port, ctx.token);
24
+ await publishPkg(ctx, tf2);
25
+ await bumpVersion(ctx, tf2, "minor");
26
+ await publishPkg(ctx, tf2);
27
+ const resp2 = await ctx.adapter.exec({ cwd: tf2 }, "unpublish", `${pkgName2}@1.0.0`, "--force", "--loglevel=info", "--json", ...ctx.adapter.registryArg(ctx.registryUrl));
28
+ assert.ok(resp2.stdout.includes(`${pkgName2}@1.0.0`), `Expected unpublish output to contain "${pkgName2}@1.0.0" but got "${resp2.stdout}"`);
29
+ }
30
+ var unpublishTest = {
31
+ name: "unpublish",
32
+ requires: ["unpublish"],
33
+ run: testUnpublish
34
+ };
35
+ //#endregion
36
+ export { unpublishTest };
37
+
38
+ //# sourceMappingURL=unpublish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpublish.js","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,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,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"}
@@ -0,0 +1,82 @@
1
+ import buildDebug from "debug";
2
+ import { spawn } from "child_process";
3
+ import { createInterface } from "readline";
4
+ import { basename } from "path";
5
+ //#region src/utils/process.ts
6
+ var debug = buildDebug("verdaccio:e2e-cli:process");
7
+ var debugRead = buildDebug("verdaccio:e2e-cli:line");
8
+ var _verbose = false;
9
+ function setVerbose(v) {
10
+ _verbose = v;
11
+ }
12
+ var COLORS = {
13
+ reset: "\x1B[0m",
14
+ dim: "\x1B[2m",
15
+ cyan: "\x1B[36m",
16
+ green: "\x1B[32m",
17
+ red: "\x1B[31m",
18
+ yellow: "\x1B[33m"
19
+ };
20
+ function shortCmd(cmd, args) {
21
+ return `${basename(cmd)} ${args.join(" ")}`;
22
+ }
23
+ async function exec(options, cmd, args) {
24
+ debug("start exec %o %o %o", options, cmd, args ? args.join(" ") : "");
25
+ let stdout = "";
26
+ let stderr = "";
27
+ if (_verbose) {
28
+ const cwd = options.cwd ? ` ${COLORS.dim}(cwd: ${basename(String(options.cwd))})${COLORS.reset}` : "";
29
+ process.stdout.write(` ${COLORS.cyan}$${COLORS.reset} ${shortCmd(cmd, args)}${cwd}\n`);
30
+ }
31
+ const spawnOptions = {
32
+ cwd: options.cwd,
33
+ stdio: options.stdio || "pipe",
34
+ env: options.env || process.env
35
+ };
36
+ if (process.platform.startsWith("win")) {
37
+ args.unshift("/c", cmd);
38
+ cmd = "cmd.exe";
39
+ spawnOptions.stdio = "pipe";
40
+ }
41
+ const start = Date.now();
42
+ const childProcess = spawn(cmd, args, spawnOptions);
43
+ if (childProcess.stdout) {
44
+ childProcess.stdout.on("data", (data) => {
45
+ debugRead("data %o", data.toString());
46
+ });
47
+ createInterface({
48
+ input: childProcess.stdout,
49
+ output: process.stdout,
50
+ terminal: false
51
+ }).on("line", function(line) {
52
+ debugRead("line %o", line);
53
+ stdout += line;
54
+ });
55
+ }
56
+ if (childProcess.stderr) childProcess.stderr.on("data", (data) => {
57
+ stderr += data.toString();
58
+ });
59
+ const err = /* @__PURE__ */ new Error(`Running "${cmd} ${args.join(" ")}" returned error code `);
60
+ return new Promise((resolve, reject) => {
61
+ childProcess.on("exit", (code) => {
62
+ const duration = Date.now() - start;
63
+ debugRead("exit %o", code);
64
+ if (_verbose) {
65
+ const status = code ? `${COLORS.red}exit ${code}${COLORS.reset}` : `${COLORS.green}ok${COLORS.reset}`;
66
+ process.stdout.write(` ${COLORS.dim} -> ${status} ${COLORS.dim}(${duration}ms)${COLORS.reset}\n`);
67
+ }
68
+ if (!code) resolve({
69
+ stdout,
70
+ stderr
71
+ });
72
+ else {
73
+ err.message += `${code}...\n\nSTDOUT:\n${stdout}\n\nSTDERR:\n${stderr}\n`;
74
+ reject(err);
75
+ }
76
+ });
77
+ });
78
+ }
79
+ //#endregion
80
+ export { exec, setVerbose };
81
+
82
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","names":[],"sources":["../../../src/utils/process.ts"],"sourcesContent":["import { SpawnOptions, spawn } from 'child_process';\nimport buildDebug from 'debug';\nimport { createInterface } from 'readline';\nimport { basename } from 'path';\n\nimport { ExecOutput } from '../types';\n\nconst debug = buildDebug('verdaccio:e2e-cli:process');\nconst debugRead = buildDebug('verdaccio:e2e-cli:line');\n\nlet _verbose = false;\n\nexport function setVerbose(v: boolean) {\n _verbose = v;\n}\n\nconst COLORS = {\n reset: '\\x1b[0m',\n dim: '\\x1b[2m',\n cyan: '\\x1b[36m',\n green: '\\x1b[32m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n};\n\nfunction shortCmd(cmd: string, args: string[]): string {\n const bin = basename(cmd);\n return `${bin} ${args.join(' ')}`;\n}\n\nexport async function exec(options: SpawnOptions, cmd: string, args: string[]): Promise<ExecOutput> {\n debug('start exec %o %o %o', options, cmd, args ? args.join(' ') : '');\n let stdout = '';\n let stderr = '';\n\n if (_verbose) {\n const cwd = options.cwd ? ` ${COLORS.dim}(cwd: ${basename(String(options.cwd))})${COLORS.reset}` : '';\n process.stdout.write(` ${COLORS.cyan}$${COLORS.reset} ${shortCmd(cmd, args)}${cwd}\\n`);\n }\n\n const spawnOptions: SpawnOptions = {\n cwd: options.cwd,\n stdio: options.stdio || 'pipe',\n env: options.env || process.env,\n };\n\n if (process.platform.startsWith('win')) {\n args.unshift('/c', cmd);\n cmd = 'cmd.exe';\n spawnOptions.stdio = 'pipe';\n }\n\n const start = Date.now();\n const childProcess = spawn(cmd, args, spawnOptions);\n\n if (childProcess.stdout) {\n childProcess.stdout.on('data', (data) => {\n debugRead('data %o', data.toString());\n });\n const rl = createInterface({\n input: childProcess.stdout,\n output: process.stdout,\n terminal: false,\n });\n\n rl.on('line', function (line) {\n debugRead('line %o', line);\n stdout += line;\n });\n }\n\n if (childProcess.stderr) {\n childProcess.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n }\n\n const err = new Error(`Running \"${cmd} ${args.join(' ')}\" returned error code `);\n return new Promise((resolve, reject) => {\n childProcess.on('exit', (code) => {\n const duration = Date.now() - start;\n debugRead('exit %o', code);\n\n if (_verbose) {\n const status = code\n ? `${COLORS.red}exit ${code}${COLORS.reset}`\n : `${COLORS.green}ok${COLORS.reset}`;\n process.stdout.write(` ${COLORS.dim} -> ${status} ${COLORS.dim}(${duration}ms)${COLORS.reset}\\n`);\n }\n\n if (!code) {\n resolve({ stdout, stderr });\n } else {\n err.message += `${code}...\\n\\nSTDOUT:\\n${stdout}\\n\\nSTDERR:\\n${stderr}\\n`;\n reject(err);\n }\n });\n });\n}\n"],"mappings":";;;;;AAOA,IAAM,QAAQ,WAAW,4BAA4B;AACrD,IAAM,YAAY,WAAW,yBAAyB;AAEtD,IAAI,WAAW;AAEf,SAAgB,WAAW,GAAY;AACrC,YAAW;;AAGb,IAAM,SAAS;CACb,OAAO;CACP,KAAK;CACL,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;CACT;AAED,SAAS,SAAS,KAAa,MAAwB;AAErD,QAAO,GADK,SAAS,IAAI,CACX,GAAG,KAAK,KAAK,IAAI;;AAGjC,eAAsB,KAAK,SAAuB,KAAa,MAAqC;AAClG,OAAM,uBAAuB,SAAS,KAAK,OAAO,KAAK,KAAK,IAAI,GAAG,GAAG;CACtE,IAAI,SAAS;CACb,IAAI,SAAS;AAEb,KAAI,UAAU;EACZ,MAAM,MAAM,QAAQ,MAAM,IAAI,OAAO,IAAI,QAAQ,SAAS,OAAO,QAAQ,IAAI,CAAC,CAAC,GAAG,OAAO,UAAU;AACnG,UAAQ,OAAO,MAAM,SAAS,OAAO,KAAK,GAAG,OAAO,MAAM,GAAG,SAAS,KAAK,KAAK,GAAG,IAAI,IAAI;;CAG7F,MAAM,eAA6B;EACjC,KAAK,QAAQ;EACb,OAAO,QAAQ,SAAS;EACxB,KAAK,QAAQ,OAAO,QAAQ;EAC7B;AAED,KAAI,QAAQ,SAAS,WAAW,MAAM,EAAE;AACtC,OAAK,QAAQ,MAAM,IAAI;AACvB,QAAM;AACN,eAAa,QAAQ;;CAGvB,MAAM,QAAQ,KAAK,KAAK;CACxB,MAAM,eAAe,MAAM,KAAK,MAAM,aAAa;AAEnD,KAAI,aAAa,QAAQ;AACvB,eAAa,OAAO,GAAG,SAAS,SAAS;AACvC,aAAU,WAAW,KAAK,UAAU,CAAC;IACrC;AACS,kBAAgB;GACzB,OAAO,aAAa;GACpB,QAAQ,QAAQ;GAChB,UAAU;GACX,CAAC,CAEC,GAAG,QAAQ,SAAU,MAAM;AAC5B,aAAU,WAAW,KAAK;AAC1B,aAAU;IACV;;AAGJ,KAAI,aAAa,OACf,cAAa,OAAO,GAAG,SAAS,SAAS;AACvC,YAAU,KAAK,UAAU;GACzB;CAGJ,MAAM,sBAAM,IAAI,MAAM,YAAY,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,wBAAwB;AAChF,QAAO,IAAI,SAAS,SAAS,WAAW;AACtC,eAAa,GAAG,SAAS,SAAS;GAChC,MAAM,WAAW,KAAK,KAAK,GAAG;AAC9B,aAAU,WAAW,KAAK;AAE1B,OAAI,UAAU;IACZ,MAAM,SAAS,OACX,GAAG,OAAO,IAAI,OAAO,OAAO,OAAO,UACnC,GAAG,OAAO,MAAM,IAAI,OAAO;AAC/B,YAAQ,OAAO,MAAM,SAAS,OAAO,IAAI,OAAO,OAAO,GAAG,OAAO,IAAI,GAAG,SAAS,KAAK,OAAO,MAAM,IAAI;;AAGzG,OAAI,CAAC,KACH,SAAQ;IAAE;IAAQ;IAAQ,CAAC;QACtB;AACL,QAAI,WAAW,GAAG,KAAK,kBAAkB,OAAO,eAAe,OAAO;AACtE,WAAO,IAAI;;IAEb;GACF"}
@@ -0,0 +1,50 @@
1
+ import buildDebug from "debug";
2
+ import { join } from "path";
3
+ import { mkdtemp, writeFile } from "fs/promises";
4
+ import { tmpdir } from "os";
5
+ //#region src/utils/project.ts
6
+ var debug = buildDebug("verdaccio:e2e-cli:project");
7
+ async function createTempFolder(prefix) {
8
+ const sanitized = prefix.replace(/[^a-zA-Z0-9-_]/g, "-");
9
+ debug("creating temp folder %o", sanitized);
10
+ return mkdtemp(join(tmpdir(), `verdaccio-e2e-${sanitized}-`));
11
+ }
12
+ function getPackageJSON(packageName, version = "1.0.0", dependencies = {}, devDependencies = {}) {
13
+ debug("creating package.json %o", packageName);
14
+ return JSON.stringify({
15
+ name: packageName,
16
+ version,
17
+ description: "some cool project",
18
+ main: "index.js",
19
+ scripts: { test: "echo exit 1" },
20
+ dependencies,
21
+ devDependencies,
22
+ keywords: ["foo", "bar"],
23
+ author: "Verdaccio E2E <verdaccio@example.org>",
24
+ license: "MIT"
25
+ });
26
+ }
27
+ function getREADME(packageName) {
28
+ return `
29
+ # My README ${packageName}
30
+
31
+ some text
32
+
33
+ ## subtitle
34
+
35
+ more text
36
+ `;
37
+ }
38
+ async function prepareGenericEmptyProject(packageName, version, port, token, registryDomain, dependencies = {}, devDependencies = {}) {
39
+ debug("preparing generic project %o", packageName);
40
+ const getNPMrc = (port, token, registry) => `//localhost:${port}/:_authToken=${token}\nregistry=${registry}`;
41
+ const tempFolder = await createTempFolder("temp-folder");
42
+ await writeFile(join(tempFolder, "package.json"), getPackageJSON(packageName, version, dependencies, devDependencies));
43
+ await writeFile(join(tempFolder, "README.md"), getREADME(packageName));
44
+ await writeFile(join(tempFolder, ".npmrc"), getNPMrc(port, token, registryDomain));
45
+ return { tempFolder };
46
+ }
47
+ //#endregion
48
+ export { createTempFolder, getPackageJSON, getREADME, prepareGenericEmptyProject };
49
+
50
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","names":[],"sources":["../../../src/utils/project.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { mkdirSync } from 'fs';\nimport { mkdtemp, writeFile } from 'fs/promises';\nimport { tmpdir } from 'os';\nimport { join } from 'path';\n\nconst debug = buildDebug('verdaccio:e2e-cli:project');\n\nexport async function createTempFolder(prefix: string): Promise<string> {\n const sanitized = prefix.replace(/[^a-zA-Z0-9-_]/g, '-');\n debug('creating temp folder %o', sanitized);\n return mkdtemp(join(tmpdir(), `verdaccio-e2e-${sanitized}-`));\n}\n\nexport function getPackageJSON(\n packageName: string,\n version = '1.0.0',\n dependencies: Record<string, string> = {},\n devDependencies: Record<string, string> = {}\n): string {\n debug('creating package.json %o', packageName);\n const json = {\n name: packageName,\n version,\n description: 'some cool project',\n main: 'index.js',\n scripts: {\n test: 'echo exit 1',\n },\n dependencies,\n devDependencies,\n keywords: ['foo', 'bar'],\n author: 'Verdaccio E2E <verdaccio@example.org>',\n license: 'MIT',\n };\n return JSON.stringify(json);\n}\n\nexport function getREADME(packageName: string): string {\n return `\n # My README ${packageName}\n\n some text\n\n ## subtitle\n\n more text\n `;\n}\n\nexport async function prepareGenericEmptyProject(\n packageName: string,\n version: string,\n port: number,\n token: string,\n registryDomain: string,\n dependencies: Record<string, string> = {},\n devDependencies: Record<string, string> = {}\n): Promise<{ tempFolder: string }> {\n debug('preparing generic project %o', packageName);\n const getNPMrc = (port: number, token: string, registry: string) =>\n `//localhost:${port}/:_authToken=${token}\\nregistry=${registry}`;\n const tempFolder = await createTempFolder('temp-folder');\n await writeFile(\n join(tempFolder, 'package.json'),\n getPackageJSON(packageName, version, dependencies, devDependencies)\n );\n await writeFile(join(tempFolder, 'README.md'), getREADME(packageName));\n await writeFile(join(tempFolder, '.npmrc'), getNPMrc(port, token, registryDomain));\n return { tempFolder };\n}\n"],"mappings":";;;;;AAMA,IAAM,QAAQ,WAAW,4BAA4B;AAErD,eAAsB,iBAAiB,QAAiC;CACtE,MAAM,YAAY,OAAO,QAAQ,mBAAmB,IAAI;AACxD,OAAM,2BAA2B,UAAU;AAC3C,QAAO,QAAQ,KAAK,QAAQ,EAAE,iBAAiB,UAAU,GAAG,CAAC;;AAG/D,SAAgB,eACd,aACA,UAAU,SACV,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACpC;AACR,OAAM,4BAA4B,YAAY;AAe9C,QAAO,KAAK,UAdC;EACX,MAAM;EACN;EACA,aAAa;EACb,MAAM;EACN,SAAS,EACP,MAAM,eACP;EACD;EACA;EACA,UAAU,CAAC,OAAO,MAAM;EACxB,QAAQ;EACR,SAAS;EACV,CAC0B;;AAG7B,SAAgB,UAAU,aAA6B;AACrD,QAAO;iBACQ,YAAY;;;;;;;;;AAU7B,eAAsB,2BACpB,aACA,SACA,MACA,OACA,gBACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;AACjC,OAAM,gCAAgC,YAAY;CAClD,MAAM,YAAY,MAAc,OAAe,aAC7C,eAAe,KAAK,eAAe,MAAM,aAAa;CACxD,MAAM,aAAa,MAAM,iBAAiB,cAAc;AACxD,OAAM,UACJ,KAAK,YAAY,eAAe,EAChC,eAAe,aAAa,SAAS,cAAc,gBAAgB,CACpE;AACD,OAAM,UAAU,KAAK,YAAY,YAAY,EAAE,UAAU,YAAY,CAAC;AACtE,OAAM,UAAU,KAAK,YAAY,SAAS,EAAE,SAAS,MAAM,OAAO,eAAe,CAAC;AAClF,QAAO,EAAE,YAAY"}
@@ -0,0 +1,57 @@
1
+ import buildDebug from "debug";
2
+ import got from "got";
3
+ //#region src/utils/registry-client.ts
4
+ var debug = buildDebug("verdaccio:e2e-cli:registry-client");
5
+ /**
6
+ * Creates a user on the registry and returns the auth token.
7
+ * Uses a unique username per run to avoid 409 conflicts.
8
+ * Works against any running Verdaccio instance with htpasswd auth.
9
+ */
10
+ async function createUser(registryUrl, user = `e2e-user-${Date.now()}`, password = "e2e-test-password") {
11
+ debug("creating user %s on %s", user, registryUrl);
12
+ const url = `${registryUrl}/-/user/org.couchdb.user:${encodeURIComponent(user)}`;
13
+ const response = await got.put(url, {
14
+ json: {
15
+ name: user,
16
+ password,
17
+ _id: `org.couchdb.user:${user}`,
18
+ type: "user",
19
+ roles: [],
20
+ date: (/* @__PURE__ */ new Date()).toISOString()
21
+ },
22
+ responseType: "json",
23
+ throwHttpErrors: false,
24
+ retry: { limit: 0 }
25
+ });
26
+ const body = response.body;
27
+ if (response.statusCode === 201 || response.statusCode === 200 || response.statusCode === 409) {
28
+ const token = body.token;
29
+ if (token) {
30
+ debug("user %s authenticated, token obtained", user);
31
+ return {
32
+ token,
33
+ user
34
+ };
35
+ }
36
+ }
37
+ throw new Error(`Failed to create/login user "${user}" on ${registryUrl}: ${response.statusCode} ${JSON.stringify(body)}`);
38
+ }
39
+ /**
40
+ * Ping the registry to check it's alive.
41
+ */
42
+ async function pingRegistry(registryUrl) {
43
+ debug("pinging %s", registryUrl);
44
+ try {
45
+ return (await got.get(`${registryUrl}/-/ping`, {
46
+ throwHttpErrors: false,
47
+ retry: { limit: 2 },
48
+ timeout: { request: 5e3 }
49
+ })).statusCode === 200;
50
+ } catch {
51
+ return false;
52
+ }
53
+ }
54
+ //#endregion
55
+ export { createUser, pingRegistry };
56
+
57
+ //# sourceMappingURL=registry-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-client.js","names":[],"sources":["../../../src/utils/registry-client.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport got from 'got';\n\nconst debug = buildDebug('verdaccio:e2e-cli:registry-client');\n\nexport type RegistryAuth = {\n token: string;\n user: string;\n};\n\n/**\n * Creates a user on the registry and returns the auth token.\n * Uses a unique username per run to avoid 409 conflicts.\n * Works against any running Verdaccio instance with htpasswd auth.\n */\nexport async function createUser(\n registryUrl: string,\n user = `e2e-user-${Date.now()}`,\n password = 'e2e-test-password'\n): Promise<RegistryAuth> {\n debug('creating user %s on %s', user, registryUrl);\n const url = `${registryUrl}/-/user/org.couchdb.user:${encodeURIComponent(user)}`;\n const response = await got.put(url, {\n json: {\n name: user,\n password,\n _id: `org.couchdb.user:${user}`,\n type: 'user',\n roles: [],\n date: new Date().toISOString(),\n },\n responseType: 'json',\n throwHttpErrors: false,\n retry: { limit: 0 },\n });\n\n const body = response.body as any;\n\n // 409 = user already exists, the PUT still returns a token (login)\n if (response.statusCode === 201 || response.statusCode === 200 || response.statusCode === 409) {\n const token = body.token;\n if (token) {\n debug('user %s authenticated, token obtained', user);\n return { token, user };\n }\n }\n\n throw new Error(\n `Failed to create/login user \"${user}\" on ${registryUrl}: ${response.statusCode} ${JSON.stringify(body)}`\n );\n}\n\n/**\n * Ping the registry to check it's alive.\n */\nexport async function pingRegistry(registryUrl: string): Promise<boolean> {\n debug('pinging %s', registryUrl);\n try {\n const response = await got.get(`${registryUrl}/-/ping`, {\n throwHttpErrors: false,\n retry: { limit: 2 },\n timeout: { request: 5000 },\n });\n return response.statusCode === 200;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;AAGA,IAAM,QAAQ,WAAW,oCAAoC;;;;;;AAY7D,eAAsB,WACpB,aACA,OAAO,YAAY,KAAK,KAAK,IAC7B,WAAW,qBACY;AACvB,OAAM,0BAA0B,MAAM,YAAY;CAClD,MAAM,MAAM,GAAG,YAAY,2BAA2B,mBAAmB,KAAK;CAC9E,MAAM,WAAW,MAAM,IAAI,IAAI,KAAK;EAClC,MAAM;GACJ,MAAM;GACN;GACA,KAAK,oBAAoB;GACzB,MAAM;GACN,OAAO,EAAE;GACT,uBAAM,IAAI,MAAM,EAAC,aAAa;GAC/B;EACD,cAAc;EACd,iBAAiB;EACjB,OAAO,EAAE,OAAO,GAAG;EACpB,CAAC;CAEF,MAAM,OAAO,SAAS;AAGtB,KAAI,SAAS,eAAe,OAAO,SAAS,eAAe,OAAO,SAAS,eAAe,KAAK;EAC7F,MAAM,QAAQ,KAAK;AACnB,MAAI,OAAO;AACT,SAAM,yCAAyC,KAAK;AACpD,UAAO;IAAE;IAAO;IAAM;;;AAI1B,OAAM,IAAI,MACR,gCAAgC,KAAK,OAAO,YAAY,IAAI,SAAS,WAAW,GAAG,KAAK,UAAU,KAAK,GACxG;;;;;AAMH,eAAsB,aAAa,aAAuC;AACxE,OAAM,cAAc,YAAY;AAChC,KAAI;AAMF,UALiB,MAAM,IAAI,IAAI,GAAG,YAAY,UAAU;GACtD,iBAAiB;GACjB,OAAO,EAAE,OAAO,GAAG;GACnB,SAAS,EAAE,SAAS,KAAM;GAC3B,CAAC,EACc,eAAe;SACzB;AACN,SAAO"}
@@ -0,0 +1,5 @@
1
+ export declare function main(argv?: string[]): Promise<void>;
2
+ export { allTests } from './tests';
3
+ export { createNpmAdapter, createPnpmAdapter, createYarnClassicAdapter, createYarnModernAdapter } from './adapters';
4
+ export { runAll, runSuite } from './runner';
5
+ export type { PackageManagerAdapter, TestDefinition, TestContext, CliOptions } from './types';
@@ -0,0 +1,6 @@
1
+ import { SuiteResult, TestResult } from './types';
2
+ export declare function reportTestStart(adapterName: string, testName: string): void;
3
+ export declare function reportTestResult(result: TestResult): void;
4
+ export declare function reportSuiteStart(adapterName: string): void;
5
+ export declare function reportSkipped(testName: string): void;
6
+ export declare function reportSummary(results: SuiteResult[]): void;
@@ -0,0 +1,13 @@
1
+ import { PackageManagerAdapter, SuiteResult, TestDefinition } from './types';
2
+ export declare function runSuite(adapter: PackageManagerAdapter, tests: TestDefinition[], registryUrl: string, token: string, options: {
3
+ timeout: number;
4
+ testFilter?: string[];
5
+ }): Promise<SuiteResult>;
6
+ export declare function runAll(adapters: PackageManagerAdapter[], tests: TestDefinition[], registryUrl: string, token: string, options: {
7
+ timeout: number;
8
+ concurrency: number;
9
+ testFilter?: string[];
10
+ }): Promise<{
11
+ results: SuiteResult[];
12
+ exitCode: number;
13
+ }>;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const auditTest: TestDefinition;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const deprecateTest: TestDefinition;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const distTagsTest: TestDefinition;
@@ -0,0 +1,13 @@
1
+ import { TestDefinition } from '../types';
2
+ import { auditTest } from './audit';
3
+ import { deprecateTest } from './deprecate';
4
+ import { distTagsTest } from './dist-tags';
5
+ import { infoTest } from './info';
6
+ import { installTest } from './install';
7
+ import { pingTest } from './ping';
8
+ import { publishTest } from './publish';
9
+ import { searchTest } from './search';
10
+ import { starTest } from './star';
11
+ import { unpublishTest } from './unpublish';
12
+ export declare const allTests: TestDefinition[];
13
+ export { publishTest, installTest, auditTest, infoTest, deprecateTest, distTagsTest, pingTest, searchTest, starTest, unpublishTest, };
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const infoTest: TestDefinition;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const installTest: TestDefinition;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const pingTest: TestDefinition;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const publishTest: TestDefinition;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const searchTest: TestDefinition;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const starTest: TestDefinition;
@@ -0,0 +1,2 @@
1
+ import { TestDefinition } from '../types';
2
+ export declare const unpublishTest: TestDefinition;