@verdaccio/e2e-cli 2.8.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/adapters/bun.cjs +1 -1
- package/build/cjs/adapters/bun.cjs.map +1 -1
- package/build/cjs/adapters/deno.cjs +1 -1
- package/build/cjs/adapters/deno.cjs.map +1 -1
- package/build/cjs/adapters/npm.cjs +1 -1
- package/build/cjs/adapters/npm.cjs.map +1 -1
- package/build/cjs/adapters/pnpm.cjs +1 -1
- package/build/cjs/adapters/pnpm.cjs.map +1 -1
- package/build/cjs/adapters/yarn-classic.cjs +1 -1
- package/build/cjs/adapters/yarn-classic.cjs.map +1 -1
- package/build/cjs/adapters/yarn-modern.cjs +26 -6
- package/build/cjs/adapters/yarn-modern.cjs.map +1 -1
- package/build/cjs/index.cjs +4 -3
- package/build/cjs/index.cjs.map +1 -1
- package/build/cjs/reporter.cjs.map +1 -1
- package/build/cjs/runner.cjs +6 -1
- package/build/cjs/runner.cjs.map +1 -1
- package/build/cjs/scenarios/index.cjs +3 -1
- package/build/cjs/scenarios/index.cjs.map +1 -1
- package/build/cjs/scenarios/install-multiple-deps.cjs +2 -2
- package/build/cjs/scenarios/install-multiple-deps.cjs.map +1 -1
- package/build/cjs/scenarios/minimum-release-age.cjs +112 -0
- package/build/cjs/scenarios/minimum-release-age.cjs.map +1 -0
- package/build/cjs/tests/audit.cjs +2 -2
- package/build/cjs/tests/audit.cjs.map +1 -1
- package/build/cjs/tests/ci.cjs +2 -2
- package/build/cjs/tests/ci.cjs.map +1 -1
- package/build/cjs/tests/deprecate.cjs +2 -2
- package/build/cjs/tests/deprecate.cjs.map +1 -1
- package/build/cjs/tests/dist-tags.cjs +1 -1
- package/build/cjs/tests/dist-tags.cjs.map +1 -1
- package/build/cjs/tests/index.cjs +1 -0
- package/build/cjs/tests/index.cjs.map +1 -1
- package/build/cjs/tests/info.cjs +1 -1
- package/build/cjs/tests/info.cjs.map +1 -1
- package/build/cjs/tests/install.cjs +1 -1
- package/build/cjs/tests/install.cjs.map +1 -1
- package/build/cjs/tests/login.cjs +3 -3
- package/build/cjs/tests/login.cjs.map +1 -1
- package/build/cjs/tests/ping.cjs +1 -1
- package/build/cjs/tests/ping.cjs.map +1 -1
- package/build/cjs/tests/publish.cjs +1 -1
- package/build/cjs/tests/publish.cjs.map +1 -1
- package/build/cjs/tests/search.cjs +1 -1
- package/build/cjs/tests/search.cjs.map +1 -1
- package/build/cjs/tests/star.cjs +1 -1
- package/build/cjs/tests/star.cjs.map +1 -1
- package/build/cjs/tests/unpublish.cjs +1 -1
- package/build/cjs/tests/unpublish.cjs.map +1 -1
- package/build/cjs/utils/process.cjs +2 -2
- package/build/cjs/utils/process.cjs.map +1 -1
- package/build/cjs/utils/project.cjs +1 -1
- package/build/cjs/utils/project.cjs.map +1 -1
- package/build/cjs/utils/registry-client.cjs +1 -1
- package/build/cjs/utils/registry-client.cjs.map +1 -1
- package/build/esm/adapters/bun.js.map +1 -1
- package/build/esm/adapters/deno.js.map +1 -1
- package/build/esm/adapters/npm.js.map +1 -1
- package/build/esm/adapters/pnpm.js.map +1 -1
- package/build/esm/adapters/yarn-classic.js.map +1 -1
- package/build/esm/adapters/yarn-modern.js +24 -4
- package/build/esm/adapters/yarn-modern.js.map +1 -1
- package/build/esm/index.js +3 -2
- package/build/esm/index.js.map +1 -1
- package/build/esm/reporter.js.map +1 -1
- package/build/esm/runner.js +5 -0
- package/build/esm/runner.js.map +1 -1
- package/build/esm/scenarios/index.js +2 -1
- package/build/esm/scenarios/index.js.map +1 -1
- package/build/esm/scenarios/install-multiple-deps.js.map +1 -1
- package/build/esm/scenarios/minimum-release-age.js +109 -0
- package/build/esm/scenarios/minimum-release-age.js.map +1 -0
- package/build/esm/tests/audit.js.map +1 -1
- package/build/esm/tests/ci.js.map +1 -1
- package/build/esm/tests/deprecate.js.map +1 -1
- package/build/esm/tests/dist-tags.js.map +1 -1
- package/build/esm/tests/index.js +1 -0
- package/build/esm/tests/index.js.map +1 -1
- package/build/esm/tests/info.js.map +1 -1
- package/build/esm/tests/install.js.map +1 -1
- package/build/esm/tests/login.js.map +1 -1
- package/build/esm/tests/ping.js.map +1 -1
- package/build/esm/tests/publish.js.map +1 -1
- package/build/esm/tests/search.js.map +1 -1
- package/build/esm/tests/star.js.map +1 -1
- package/build/esm/tests/unpublish.js.map +1 -1
- package/build/esm/utils/process.js +1 -1
- package/build/esm/utils/process.js.map +1 -1
- package/build/esm/utils/project.js.map +1 -1
- package/build/esm/utils/registry-client.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/scenarios/index.d.ts +2 -1
- package/build/scenarios/minimum-release-age.d.ts +11 -0
- package/build/tests/index.d.ts +2 -2
- package/build/types.d.ts +6 -1
- package/build/utils/process.d.ts +0 -1
- package/package.json +4 -4
|
@@ -1 +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 {
|
|
1
|
+
{"version":3,"file":"process.js","names":[],"sources":["../../../src/utils/process.ts"],"sourcesContent":["import { SpawnOptions, spawn } from 'child_process';\nimport buildDebug from 'debug';\nimport { basename } from 'path';\nimport { createInterface } from 'readline';\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(\n options: SpawnOptions,\n cmd: string,\n args: string[]\n): 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\n ? ` ${COLORS.dim}(cwd: ${basename(String(options.cwd))})${COLORS.reset}`\n : '';\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(\n ` ${COLORS.dim} -> ${status} ${COLORS.dim}(${duration}ms)${COLORS.reset}\\n`\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;CACrC,WAAW;;AAGb,IAAM,SAAS;CACb,OAAO;CACP,KAAK;CACL,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;CACT;AAED,SAAS,SAAS,KAAa,MAAwB;CAErD,OAAO,GADK,SAAS,IACX,CAAI,GAAG,KAAK,KAAK,IAAI;;AAGjC,eAAsB,KACpB,SACA,KACA,MACqB;CACrB,MAAM,uBAAuB,SAAS,KAAK,OAAO,KAAK,KAAK,IAAI,GAAG,GAAG;CACtE,IAAI,SAAS;CACb,IAAI,SAAS;CAEb,IAAI,UAAU;EACZ,MAAM,MAAM,QAAQ,MAChB,IAAI,OAAO,IAAI,QAAQ,SAAS,OAAO,QAAQ,IAAI,CAAC,CAAC,GAAG,OAAO,UAC/D;EACJ,QAAQ,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;CAED,IAAI,QAAQ,SAAS,WAAW,MAAM,EAAE;EACtC,KAAK,QAAQ,MAAM,IAAI;EACvB,MAAM;EACN,aAAa,QAAQ;;CAGvB,MAAM,QAAQ,KAAK,KAAK;CACxB,MAAM,eAAe,MAAM,KAAK,MAAM,aAAa;CAEnD,IAAI,aAAa,QAAQ;EACvB,aAAa,OAAO,GAAG,SAAS,SAAS;GACvC,UAAU,WAAW,KAAK,UAAU,CAAC;IACrC;EAOF,gBAN2B;GACzB,OAAO,aAAa;GACpB,QAAQ,QAAQ;GAChB,UAAU;GACX,CAED,CAAG,GAAG,QAAQ,SAAU,MAAM;GAC5B,UAAU,WAAW,KAAK;GAC1B,UAAU;IACV;;CAGJ,IAAI,aAAa,QACf,aAAa,OAAO,GAAG,SAAS,SAAS;EACvC,UAAU,KAAK,UAAU;GACzB;CAGJ,MAAM,sBAAM,IAAI,MAAM,YAAY,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,wBAAwB;CAChF,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,aAAa,GAAG,SAAS,SAAS;GAChC,MAAM,WAAW,KAAK,KAAK,GAAG;GAC9B,UAAU,WAAW,KAAK;GAE1B,IAAI,UAAU;IACZ,MAAM,SAAS,OACX,GAAG,OAAO,IAAI,OAAO,OAAO,OAAO,UACnC,GAAG,OAAO,MAAM,IAAI,OAAO;IAC/B,QAAQ,OAAO,MACb,SAAS,OAAO,IAAI,OAAO,OAAO,GAAG,OAAO,IAAI,GAAG,SAAS,KAAK,OAAO,MAAM,IAC/E;;GAGH,IAAI,CAAC,MACH,QAAQ;IAAE;IAAQ;IAAQ,CAAC;QACtB;IACL,IAAI,WAAW,GAAG,KAAK,kBAAkB,OAAO,eAAe,OAAO;IACtE,OAAO,IAAI;;IAEb;GACF"}
|
|
@@ -1 +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;
|
|
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;CACxD,MAAM,2BAA2B,UAAU;CAC3C,OAAO,QAAQ,KAAK,QAAQ,EAAE,iBAAiB,UAAU,GAAG,CAAC;;AAG/D,SAAgB,eACd,aACA,UAAU,SACV,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACpC;CACR,MAAM,4BAA4B,YAAY;CAe9C,OAAO,KAAK,UAAU;EAbpB,MAAM;EACN;EACA,aAAa;EACb,MAAM;EACN,SAAS,EACP,MAAM,eACP;EACD;EACA;EACA,UAAU,CAAC,OAAO,MAAM;EACxB,QAAQ;EACR,SAAS;EAEW,CAAK;;AAG7B,SAAgB,UAAU,aAA6B;CACrD,OAAO;iBACQ,YAAY;;;;;;;;;AAU7B,eAAsB,2BACpB,aACA,SACA,MACA,OACA,gBACA,eAAuC,EAAE,EACzC,kBAA0C,EAAE,EACX;CACjC,MAAM,gCAAgC,YAAY;CAClD,MAAM,YAAY,MAAc,OAAe,aAC7C,eAAe,KAAK,eAAe,MAAM,aAAa;CACxD,MAAM,aAAa,MAAM,iBAAiB,cAAc;CACxD,MAAM,UACJ,KAAK,YAAY,eAAe,EAChC,eAAe,aAAa,SAAS,cAAc,gBAAgB,CACpE;CACD,MAAM,UAAU,KAAK,YAAY,YAAY,EAAE,UAAU,YAAY,CAAC;CACtE,MAAM,UAAU,KAAK,YAAY,SAAS,EAAE,SAAS,MAAM,OAAO,eAAe,CAAC;CAClF,OAAO,EAAE,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-client.js","names":[],"sources":["../../../src/utils/registry-client.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { ping } from '@verdaccio/registry-cli';\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 fetch(url, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: user,\n password,\n _id: `org.couchdb.user:${user}`,\n type: 'user',\n roles: [],\n date: new Date().toISOString(),\n }),\n });\n\n const body = (await response.json()) as any;\n\n if (response.status === 201 || response.status === 200 || response.status === 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.status} ${JSON.stringify(body)}`\n );\n}\n\n/**\n * Ping the registry to check it's alive.\n * Uses @verdaccio/registry-cli ping.\n */\nexport async function pingRegistry(registryUrl: string): Promise<boolean> {\n debug('pinging %s', registryUrl);\n try {\n const result = await ping(registryUrl);\n return result.ok;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"registry-client.js","names":[],"sources":["../../../src/utils/registry-client.ts"],"sourcesContent":["import buildDebug from 'debug';\n\nimport { ping } from '@verdaccio/registry-cli';\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 fetch(url, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: user,\n password,\n _id: `org.couchdb.user:${user}`,\n type: 'user',\n roles: [],\n date: new Date().toISOString(),\n }),\n });\n\n const body = (await response.json()) as any;\n\n if (response.status === 201 || response.status === 200 || response.status === 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.status} ${JSON.stringify(body)}`\n );\n}\n\n/**\n * Ping the registry to check it's alive.\n * Uses @verdaccio/registry-cli ping.\n */\nexport async function pingRegistry(registryUrl: string): Promise<boolean> {\n debug('pinging %s', registryUrl);\n try {\n const result = await ping(registryUrl);\n return result.ok;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;AAIA,IAAM,QAAQ,WAAW,oCAAoC;;;;;;AAY7D,eAAsB,WACpB,aACA,OAAO,YAAY,KAAK,KAAK,IAC7B,WAAW,qBACY;CACvB,MAAM,0BAA0B,MAAM,YAAY;CAClD,MAAM,MAAM,GAAG,YAAY,2BAA2B,mBAAmB,KAAK;CAC9E,MAAM,WAAW,MAAM,MAAM,KAAK;EAChC,QAAQ;EACR,SAAS,EAAE,gBAAgB,oBAAoB;EAC/C,MAAM,KAAK,UAAU;GACnB,MAAM;GACN;GACA,KAAK,oBAAoB;GACzB,MAAM;GACN,OAAO,EAAE;GACT,uBAAM,IAAI,MAAM,EAAC,aAAa;GAC/B,CAAC;EACH,CAAC;CAEF,MAAM,OAAQ,MAAM,SAAS,MAAM;CAEnC,IAAI,SAAS,WAAW,OAAO,SAAS,WAAW,OAAO,SAAS,WAAW,KAAK;EACjF,MAAM,QAAQ,KAAK;EACnB,IAAI,OAAO;GACT,MAAM,yCAAyC,KAAK;GACpD,OAAO;IAAE;IAAO;IAAM;;;CAI1B,MAAM,IAAI,MACR,gCAAgC,KAAK,OAAO,YAAY,IAAI,SAAS,OAAO,GAAG,KAAK,UAAU,KAAK,GACpG;;;;;;AAOH,eAAsB,aAAa,aAAuC;CACxE,MAAM,cAAc,YAAY;CAChC,IAAI;EAEF,QAAO,MADc,KAAK,YAAY,EACxB;SACR;EACN,OAAO"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare function main(argv?: string[]): Promise<void>;
|
|
2
2
|
export { allTests } from './tests';
|
|
3
3
|
export { allScenarios } from './scenarios';
|
|
4
|
-
export { createBunAdapter, createDenoAdapter, createNpmAdapter, createPnpmAdapter, createYarnClassicAdapter, createYarnModernAdapter } from './adapters';
|
|
4
|
+
export { createBunAdapter, createDenoAdapter, createNpmAdapter, createPnpmAdapter, createYarnClassicAdapter, createYarnModernAdapter, } from './adapters';
|
|
5
5
|
export { runAll, runSuite } from './runner';
|
|
6
6
|
export type { PackageManagerAdapter, TestDefinition, TestContext, CliOptions } from './types';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TestDefinition } from '../types';
|
|
2
2
|
import { installMultipleDepsScenario } from './install-multiple-deps';
|
|
3
|
+
import { minimumReleaseAgeScenario } from './minimum-release-age';
|
|
3
4
|
export declare const allScenarios: TestDefinition[];
|
|
4
|
-
export { installMultipleDepsScenario };
|
|
5
|
+
export { installMultipleDepsScenario, minimumReleaseAgeScenario };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PackageManagerAdapter, TestDefinition } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* True only for pnpm versions that actually enforce minimumReleaseAge.
|
|
4
|
+
*
|
|
5
|
+
* The cooldown is honored in pnpm 11.1.0+, but it is silently ignored in
|
|
6
|
+
* 11.0.0 / 11.0.1 (and the 11.0.0 release candidates) — those versions install
|
|
7
|
+
* brand-new packages regardless of the configured cooldown. We scope this
|
|
8
|
+
* scenario to pnpm 11.1.0 and newer so it doesn't false-fail on that regression.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isPnpm11Plus(adapter: PackageManagerAdapter): boolean;
|
|
11
|
+
export declare const minimumReleaseAgeScenario: TestDefinition;
|
package/build/tests/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { allScenarios, installMultipleDepsScenario, minimumReleaseAgeScenario } from '../scenarios';
|
|
1
2
|
import { TestDefinition } from '../types';
|
|
2
|
-
import { allScenarios, installMultipleDepsScenario } from '../scenarios';
|
|
3
3
|
import { auditTest } from './audit';
|
|
4
4
|
import { ciTest } from './ci';
|
|
5
5
|
import { deprecateTest } from './deprecate';
|
|
@@ -13,4 +13,4 @@ import { searchTest } from './search';
|
|
|
13
13
|
import { starTest } from './star';
|
|
14
14
|
import { unpublishTest } from './unpublish';
|
|
15
15
|
export declare const allTests: TestDefinition[];
|
|
16
|
-
export { publishTest, installTest, ciTest, auditTest, infoTest, deprecateTest, distTagsTest, loginTest, pingTest, searchTest, starTest, unpublishTest, installMultipleDepsScenario, allScenarios, };
|
|
16
|
+
export { publishTest, installTest, ciTest, auditTest, infoTest, deprecateTest, distTagsTest, loginTest, pingTest, searchTest, starTest, unpublishTest, installMultipleDepsScenario, minimumReleaseAgeScenario, allScenarios, };
|
package/build/types.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { SpawnOptions } from 'child_process';
|
|
3
2
|
export type ExecOutput = {
|
|
4
3
|
stdout: string;
|
|
@@ -42,6 +41,12 @@ export type TestDefinition = {
|
|
|
42
41
|
run: (ctx: TestContext) => Promise<void>;
|
|
43
42
|
/** Commands required for this test (e.g. 'deprecate', 'star'). Skipped if adapter doesn't support them. */
|
|
44
43
|
requires?: string[];
|
|
44
|
+
/**
|
|
45
|
+
* Predicate to gate a test to specific adapters/versions. Returns false to skip.
|
|
46
|
+
* Use for tests that only make sense on a particular package manager or version
|
|
47
|
+
* (e.g. pnpm-only settings). Evaluated after the `requires` check.
|
|
48
|
+
*/
|
|
49
|
+
appliesTo?: (adapter: PackageManagerAdapter) => boolean;
|
|
45
50
|
};
|
|
46
51
|
export interface PackageManagerAdapter {
|
|
47
52
|
/** Display name, e.g. "npm@10" */
|
package/build/utils/process.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/e2e-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "CLI tool to run Verdaccio e2e tests against any running registry",
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
"@verdaccio/registry-cli": "^1.1.0",
|
|
31
31
|
"debug": "4.4.0",
|
|
32
32
|
"get-port": "5.1.1",
|
|
33
|
-
"js-yaml": "4.1.
|
|
33
|
+
"js-yaml": "4.1.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/debug": "4.1.12",
|
|
37
37
|
"@types/js-yaml": "4.0.9",
|
|
38
|
-
"@types/node": "
|
|
39
|
-
"vite": "8.0.
|
|
38
|
+
"@types/node": "24.12.4",
|
|
39
|
+
"vite": "8.0.11"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "vite build && tsc --emitDeclarationOnly -p tsconfig.build.json",
|