@verdaccio/test-helper 4.0.0-next-8.7

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 (61) hide show
  1. package/.babelrc +3 -0
  2. package/.eslintignore +5 -0
  3. package/CHANGELOG.md +563 -0
  4. package/LICENSE +21 -0
  5. package/README.md +80 -0
  6. package/build/actions.d.ts +2 -0
  7. package/build/actions.js +26 -0
  8. package/build/actions.js.map +1 -0
  9. package/build/addNewVersion.d.ts +2 -0
  10. package/build/addNewVersion.js +72 -0
  11. package/build/addNewVersion.js.map +1 -0
  12. package/build/generateLocalPackageMetadata.d.ts +2 -0
  13. package/build/generateLocalPackageMetadata.js +68 -0
  14. package/build/generateLocalPackageMetadata.js.map +1 -0
  15. package/build/generatePackageMetadata.d.ts +3 -0
  16. package/build/generatePackageMetadata.js +64 -0
  17. package/build/generatePackageMetadata.js.map +1 -0
  18. package/build/generatePublishNewVersionManifest.d.ts +16 -0
  19. package/build/generatePublishNewVersionManifest.js +72 -0
  20. package/build/generatePublishNewVersionManifest.js.map +1 -0
  21. package/build/generateRemotePackageMetadata.d.ts +2 -0
  22. package/build/generateRemotePackageMetadata.js +81 -0
  23. package/build/generateRemotePackageMetadata.js.map +1 -0
  24. package/build/generateUnPublishPackageMetadata.d.ts +2 -0
  25. package/build/generateUnPublishPackageMetadata.js +81 -0
  26. package/build/generateUnPublishPackageMetadata.js.map +1 -0
  27. package/build/getDeprecatedPackageMetadata.d.ts +3 -0
  28. package/build/getDeprecatedPackageMetadata.js +18 -0
  29. package/build/getDeprecatedPackageMetadata.js.map +1 -0
  30. package/build/index.d.ts +9 -0
  31. package/build/index.js +69 -0
  32. package/build/index.js.map +1 -0
  33. package/build/initializeServer.d.ts +2 -0
  34. package/build/initializeServer.js +64 -0
  35. package/build/initializeServer.js.map +1 -0
  36. package/build/types.d.ts +3 -0
  37. package/build/types.js +6 -0
  38. package/build/types.js.map +1 -0
  39. package/build/utils.d.ts +1 -0
  40. package/build/utils.js +16 -0
  41. package/build/utils.js.map +1 -0
  42. package/package.json +32 -0
  43. package/src/actions.ts +27 -0
  44. package/src/addNewVersion.ts +60 -0
  45. package/src/generateLocalPackageMetadata.ts +67 -0
  46. package/src/generatePackageMetadata.ts +73 -0
  47. package/src/generatePublishNewVersionManifest.ts +76 -0
  48. package/src/generateRemotePackageMetadata.ts +86 -0
  49. package/src/generateUnPublishPackageMetadata.ts +89 -0
  50. package/src/getDeprecatedPackageMetadata.ts +19 -0
  51. package/src/index.ts +9 -0
  52. package/src/initializeServer.ts +61 -0
  53. package/src/types.ts +3 -0
  54. package/src/utils.ts +8 -0
  55. package/tests/generateUnPublishPackageMetadata.ts.spec.ts +98 -0
  56. package/tests/getDeprecatedPackageMetadata.spec.ts +40 -0
  57. package/tests/metadata.spec.ts +119 -0
  58. package/tests/utils.spec.ts +19 -0
  59. package/tsconfig.build.json +10 -0
  60. package/tsconfig.json +27 -0
  61. package/types/patch.d.ts +18 -0
package/build/index.js ADDED
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "addNewVersion", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _addNewVersion.addNewVersion;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "generateLocalPackageMetadata", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _generateLocalPackageMetadata.generateLocalPackageMetadata;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "generatePackageMetadata", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _generatePackageMetadata.generatePackageMetadata;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "generatePublishNewVersionManifest", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _generatePublishNewVersionManifest.generatePublishNewVersionManifest;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "generateRemotePackageMetadata", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _generateRemotePackageMetadata.generateRemotePackageMetadata;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "generateUnPublishPackageMetadata", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _generateUnPublishPackageMetadata.generateUnPublishPackageMetadata;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "getDeprecatedPackageMetadata", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _getDeprecatedPackageMetadata.getDeprecatedPackageMetadata;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "initializeServer", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _initializeServer.initializeServer;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "publishVersion", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _actions.publishVersion;
58
+ }
59
+ });
60
+ var _generatePackageMetadata = require("./generatePackageMetadata");
61
+ var _getDeprecatedPackageMetadata = require("./getDeprecatedPackageMetadata");
62
+ var _generateLocalPackageMetadata = require("./generateLocalPackageMetadata");
63
+ var _generateRemotePackageMetadata = require("./generateRemotePackageMetadata");
64
+ var _addNewVersion = require("./addNewVersion");
65
+ var _generatePublishNewVersionManifest = require("./generatePublishNewVersionManifest");
66
+ var _initializeServer = require("./initializeServer");
67
+ var _actions = require("./actions");
68
+ var _generateUnPublishPackageMetadata = require("./generateUnPublishPackageMetadata");
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_generatePackageMetadata","require","_getDeprecatedPackageMetadata","_generateLocalPackageMetadata","_generateRemotePackageMetadata","_addNewVersion","_generatePublishNewVersionManifest","_initializeServer","_actions","_generateUnPublishPackageMetadata"],"sources":["../src/index.ts"],"sourcesContent":["export { generatePackageMetadata } from './generatePackageMetadata';\nexport { getDeprecatedPackageMetadata } from './getDeprecatedPackageMetadata';\nexport { generateLocalPackageMetadata } from './generateLocalPackageMetadata';\nexport { generateRemotePackageMetadata } from './generateRemotePackageMetadata';\nexport { addNewVersion } from './addNewVersion';\nexport { generatePublishNewVersionManifest } from './generatePublishNewVersionManifest';\nexport { initializeServer } from './initializeServer';\nexport { publishVersion } from './actions';\nexport { generateUnPublishPackageMetadata } from './generateUnPublishPackageMetadata';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AACA,IAAAC,6BAAA,GAAAD,OAAA;AACA,IAAAE,6BAAA,GAAAF,OAAA;AACA,IAAAG,8BAAA,GAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AACA,IAAAK,kCAAA,GAAAL,OAAA;AACA,IAAAM,iBAAA,GAAAN,OAAA;AACA,IAAAO,QAAA,GAAAP,OAAA;AACA,IAAAQ,iCAAA,GAAAR,OAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import { Application } from 'express';
2
+ export declare function initializeServer(configObject: any, routesMiddleware: any[] | undefined, Storage: any): Promise<Application>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.initializeServer = initializeServer;
7
+ var _debug = _interopRequireDefault(require("debug"));
8
+ var _express = _interopRequireDefault(require("express"));
9
+ var _nodeOs = _interopRequireDefault(require("node:os"));
10
+ var _nodePath = _interopRequireDefault(require("node:path"));
11
+ var _auth = require("@verdaccio/auth");
12
+ var _config = require("@verdaccio/config");
13
+ var _core = require("@verdaccio/core");
14
+ var _logger = require("@verdaccio/logger");
15
+ var _middleware = require("@verdaccio/middleware");
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
+ const debug = (0, _debug.default)('verdaccio:tools:helpers:server');
18
+ async function initializeServer(configObject, routesMiddleware = [], Storage) {
19
+ const app = (0, _express.default)();
20
+ const logger = (0, _logger.setup)(configObject.log ?? {});
21
+ const config = new _config.Config(configObject);
22
+ config.storage = _nodePath.default.join(_nodeOs.default.tmpdir(), '/storage', _core.cryptoUtils.generateRandomHexString());
23
+ // httpass would get path.basename() for configPath thus we need to create a dummy folder
24
+ // to avoid conflics
25
+ config.configPath = config.storage;
26
+ debug('storage: %s', config.storage);
27
+ const storage = new Storage(config, logger);
28
+ await storage.init(config, []);
29
+ const auth = new _auth.Auth(config, logger);
30
+ await auth.init();
31
+ // TODO: this might not be need it, used in apiEndpoints
32
+ app.use(_express.default.json({
33
+ strict: false,
34
+ limit: '10mb'
35
+ }));
36
+ // @ts-ignore
37
+ app.use((0, _middleware.errorReportingMiddleware)(logger));
38
+ for (let route of routesMiddleware) {
39
+ if (route.async) {
40
+ const middleware = await route.routes(config, auth, storage, logger);
41
+ app.use(middleware);
42
+ } else {
43
+ app.use(route(config, auth, storage, logger));
44
+ }
45
+ }
46
+
47
+ // catch 404
48
+ app.get('/*', function (req, res, next) {
49
+ next(_core.errorUtils.getNotFound('resource not found'));
50
+ });
51
+
52
+ // @ts-ignore
53
+ app.use((0, _middleware.handleError)(logger));
54
+ // @ts-ignore
55
+ app.use(_middleware.final);
56
+ app.use(function (request, response) {
57
+ response.status(590);
58
+ response.json({
59
+ error: 'cannot handle this'
60
+ });
61
+ });
62
+ return app;
63
+ }
64
+ //# sourceMappingURL=initializeServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializeServer.js","names":["_debug","_interopRequireDefault","require","_express","_nodeOs","_nodePath","_auth","_config","_core","_logger","_middleware","e","__esModule","default","debug","buildDebug","initializeServer","configObject","routesMiddleware","Storage","app","express","logger","setup","log","config","Config","storage","path","join","os","tmpdir","cryptoUtils","generateRandomHexString","configPath","init","auth","Auth","use","json","strict","limit","errorReportingMiddleware","route","async","middleware","routes","get","req","res","next","errorUtils","getNotFound","handleError","final","request","response","status","error"],"sources":["../src/initializeServer.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport express, { Application } from 'express';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { Auth } from '@verdaccio/auth';\nimport { Config } from '@verdaccio/config';\nimport { cryptoUtils, errorUtils } from '@verdaccio/core';\nimport { setup } from '@verdaccio/logger';\nimport { errorReportingMiddleware, final, handleError } from '@verdaccio/middleware';\n\nconst debug = buildDebug('verdaccio:tools:helpers:server');\n\nexport async function initializeServer(\n configObject,\n routesMiddleware: any[] = [],\n Storage\n): Promise<Application> {\n const app = express();\n const logger = setup(configObject.log ?? {});\n const config = new Config(configObject);\n config.storage = path.join(os.tmpdir(), '/storage', cryptoUtils.generateRandomHexString());\n // httpass would get path.basename() for configPath thus we need to create a dummy folder\n // to avoid conflics\n config.configPath = config.storage;\n debug('storage: %s', config.storage);\n\n const storage = new Storage(config, logger);\n await storage.init(config, []);\n const auth: Auth = new Auth(config, logger);\n await auth.init();\n // TODO: this might not be need it, used in apiEndpoints\n app.use(express.json({ strict: false, limit: '10mb' }));\n // @ts-ignore\n app.use(errorReportingMiddleware(logger));\n for (let route of routesMiddleware) {\n if (route.async) {\n const middleware = await route.routes(config, auth, storage, logger);\n app.use(middleware);\n } else {\n app.use(route(config, auth, storage, logger));\n }\n }\n\n // catch 404\n app.get('/*', function (req, res, next) {\n next(errorUtils.getNotFound('resource not found'));\n });\n\n // @ts-ignore\n app.use(handleError(logger));\n // @ts-ignore\n app.use(final);\n\n app.use(function (request, response) {\n response.status(590);\n response.json({ error: 'cannot handle this' });\n });\n\n return app;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export interface DistTags {
2
+ [key: string]: string;
3
+ }
package/build/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["export interface DistTags {\n [key: string]: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const getTarball: (name: string) => string;
package/build/utils.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getTarball = void 0;
7
+ const getTarball = name => {
8
+ const r = name.split('/');
9
+ if (r.length === 1) {
10
+ return r[0];
11
+ } else {
12
+ return r[1];
13
+ }
14
+ };
15
+ exports.getTarball = getTarball;
16
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["getTarball","name","r","split","length","exports"],"sources":["../src/utils.ts"],"sourcesContent":["export const getTarball = (name: string): string => {\n const r = name.split('/');\n if (r.length === 1) {\n return r[0];\n } else {\n return r[1];\n }\n};\n"],"mappings":";;;;;;AAAO,MAAMA,UAAU,GAAIC,IAAY,IAAa;EAClD,MAAMC,CAAC,GAAGD,IAAI,CAACE,KAAK,CAAC,GAAG,CAAC;EACzB,IAAID,CAAC,CAACE,MAAM,KAAK,CAAC,EAAE;IAClB,OAAOF,CAAC,CAAC,CAAC,CAAC;EACb,CAAC,MAAM;IACL,OAAOA,CAAC,CAAC,CAAC,CAAC;EACb;AACF,CAAC;AAACG,OAAA,CAAAL,UAAA,GAAAA,UAAA","ignoreList":[]}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@verdaccio/test-helper",
3
+ "version": "4.0.0-next-8.7",
4
+ "description": "Verdaccio Test Helpers",
5
+ "author": "Juan Picado <juanpicado19@gmail.com>",
6
+ "license": "MIT",
7
+ "homepage": "https://verdaccio.org",
8
+ "main": "build/index.js",
9
+ "types": "build/index.d.ts",
10
+ "dependencies": {
11
+ "@verdaccio/auth": "8.0.0-next-8.23",
12
+ "@verdaccio/config": "8.0.0-next-8.23",
13
+ "@verdaccio/core": "8.0.0-next-8.23",
14
+ "@verdaccio/logger": "8.0.0-next-8.23",
15
+ "@verdaccio/middleware": "8.0.0-next-8.23",
16
+ "@verdaccio/types": "13.0.0-next-8.8",
17
+ "body-parser": "1.20.3",
18
+ "debug": "4.4.3",
19
+ "express": "4.21.2",
20
+ "fs-extra": "11.2.0",
21
+ "supertest": "7.1.4"
22
+ },
23
+ "scripts": {
24
+ "test": "vitest run",
25
+ "clean": "rimraf ./build",
26
+ "type-check": "tsc --noEmit -p tsconfig.build.json",
27
+ "build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
28
+ "build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
29
+ "watch": "pnpm build:js -- --watch",
30
+ "build": "pnpm run build:js && pnpm run build:types"
31
+ }
32
+ }
package/src/actions.ts ADDED
@@ -0,0 +1,27 @@
1
+ import buildDebug from 'debug';
2
+ import supertest from 'supertest';
3
+
4
+ import { HEADERS, HEADER_TYPE } from '@verdaccio/core';
5
+ import type { Manifest } from '@verdaccio/types';
6
+
7
+ import { generatePackageMetadata } from './generatePackageMetadata';
8
+
9
+ const debug = buildDebug('verdaccio:tools:helpers:actions');
10
+
11
+ export function publishVersion(app: any, pkgName, version, metadata: Partial<Manifest> = {}): any {
12
+ debug('publishVersion %s : %s : %s', pkgName, version, JSON.stringify(metadata, null, 2));
13
+ let pkgMetadata = { ...generatePackageMetadata(pkgName, version), ...metadata };
14
+ // sync metadata readme to version of package
15
+ pkgMetadata.versions[version].readme = metadata.readme ? (metadata.readme as string) : '';
16
+ debug('metadata %s', JSON.stringify(pkgMetadata, null, 2));
17
+ return (
18
+ supertest(app)
19
+ .put(`/${encodeURIComponent(pkgName)}`)
20
+ // @ts-ignore ignore content-type mismatch
21
+ .set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
22
+ .send(JSON.stringify(pkgMetadata))
23
+ .set('accept', HEADERS.GZIP)
24
+ .set(HEADER_TYPE.ACCEPT_ENCODING, HEADERS.JSON)
25
+ .set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
26
+ );
27
+ }
@@ -0,0 +1,60 @@
1
+ import { Manifest } from '@verdaccio/types';
2
+
3
+ import { getTarball } from './utils';
4
+
5
+ export function addNewVersion(
6
+ manifest: Manifest,
7
+ version: string,
8
+ isRemote: boolean = true,
9
+ domain: string = 'http://localhost:5555'
10
+ ): Manifest {
11
+ const currentVersions = Object.keys(manifest.versions);
12
+ if (currentVersions.includes(version)) {
13
+ throw new Error(`Version ${version} already exists`);
14
+ }
15
+
16
+ const newManifest = { ...manifest };
17
+ newManifest.versions[version] = {
18
+ name: manifest.name,
19
+ version,
20
+ description: manifest.description ?? '',
21
+ readme: '',
22
+ main: 'index.js',
23
+ scripts: { test: 'echo "Error: no test specified" && exit 1' },
24
+ keywords: [],
25
+ author: { name: 'User NPM', email: 'user@domain.com' },
26
+ license: 'ISC',
27
+ dependencies: { verdaccio: '^2.7.2' },
28
+ readmeFilename: 'README.md',
29
+ _id: `${manifest.name}@${version}`,
30
+ _npmVersion: '5.5.1',
31
+ _npmUser: { name: 'foo' },
32
+ dist: {
33
+ integrity: 'sha512-6gHiERpiDgtb3hjqpQHoPoH4g==',
34
+ shasum: '2c03764f651a9f016ca0b7620421457b619151b9',
35
+ tarball: `${domain}/${manifest.name}/-/${getTarball(manifest.name)}-${version}.tgz`,
36
+ },
37
+ contributors: [],
38
+ };
39
+ // update the latest with the new version
40
+ newManifest['dist-tags'] = { latest: version };
41
+ // add new version does not need attachments
42
+ if (isRemote) {
43
+ newManifest._distfiles = {
44
+ ...newManifest._distfiles,
45
+ [`${getTarball(manifest.name)}-${version}.tgz`]: {
46
+ sha: '2c03764f651a9f016ca0b7620421457b619151b9',
47
+ url: `${domain}/${manifest.name}/-/${getTarball(manifest.name)}-${version}.tgz`,
48
+ },
49
+ };
50
+ } else {
51
+ newManifest._attachments = {
52
+ ...newManifest._attachments,
53
+ [`${getTarball(manifest.name)}-${version}.tgz`]: {
54
+ shasum: '2c03764f651a9f016ca0b7620421457b619151b9', // pragma: allowlist secret
55
+ version: version,
56
+ },
57
+ };
58
+ }
59
+ return newManifest;
60
+ }
@@ -0,0 +1,67 @@
1
+ import { GenericBody, Manifest } from '@verdaccio/types';
2
+
3
+ import { getTarball } from './utils';
4
+
5
+ export function generateLocalPackageMetadata(
6
+ pkgName: string,
7
+ version = '1.0.0',
8
+ domain: string = 'http://localhost:5555',
9
+ time?: GenericBody
10
+ ): Manifest {
11
+ // @ts-ignore
12
+ return {
13
+ _id: pkgName,
14
+ name: pkgName,
15
+ description: '',
16
+ 'dist-tags': { ['latest']: version },
17
+ versions: {
18
+ [version]: {
19
+ name: pkgName,
20
+ version: version,
21
+ description: 'package generated',
22
+ main: 'index.js',
23
+ scripts: {
24
+ test: 'echo "Error: no test specified" && exit 1',
25
+ },
26
+ keywords: [],
27
+ author: {
28
+ name: 'User NPM',
29
+ email: 'user@domain.com',
30
+ },
31
+ license: 'ISC',
32
+ dependencies: {
33
+ verdaccio: '^2.7.2',
34
+ },
35
+ readme: '# test',
36
+ readmeFilename: 'README.md',
37
+ _id: `${pkgName}@${version}`,
38
+ _npmVersion: '5.5.1',
39
+ _npmUser: {
40
+ name: 'foo',
41
+ },
42
+ dist: {
43
+ integrity:
44
+ 'sha512-6gHiERpiDgtb3hjqpQH5/i7zRmvYi9pmCjQf2ZMy3QEa9wVk9RgdZaPWUt7ZOnWUPFjcr9cm' +
45
+ 'E6dUBf+XoPoH4g==',
46
+ shasum: '2c03764f651a9f016ca0b7620421457b619151b9', // pragma: allowlist secret
47
+ tarball: `${domain}/${pkgName}\/-\/${getTarball(pkgName)}-${version}.tgz`,
48
+ },
49
+ },
50
+ },
51
+ time: time ?? {
52
+ modified: new Date().toISOString(),
53
+ created: new Date().toISOString(),
54
+ [version]: new Date().toISOString(),
55
+ },
56
+ readme: '# test',
57
+ _attachments: {
58
+ [`${getTarball(pkgName)}-${version}.tgz`]: {
59
+ shasum: '2c03764f651a9f016ca0b7620421457b619151b9', // pragma: allowlist secret
60
+ version: version,
61
+ },
62
+ },
63
+ _uplinks: {},
64
+ _distfiles: {},
65
+ _rev: '',
66
+ };
67
+ }
@@ -0,0 +1,73 @@
1
+ import { Manifest } from '@verdaccio/types';
2
+
3
+ import { DistTags } from './types';
4
+ import { getTarball } from './utils';
5
+
6
+ export function generatePackageMetadata(
7
+ pkgName: string,
8
+ version = '1.0.0',
9
+ distTags: DistTags = { ['latest']: version }
10
+ ): Manifest {
11
+ // @ts-ignore
12
+ return {
13
+ _id: pkgName,
14
+ name: pkgName,
15
+ 'dist-tags': {
16
+ ...distTags,
17
+ },
18
+ versions: {
19
+ [version]: {
20
+ name: pkgName,
21
+ version: version,
22
+ description: 'package generated',
23
+ main: 'index.js',
24
+ scripts: {
25
+ test: 'echo "Error: no test specified" && exit 1',
26
+ },
27
+ keywords: [],
28
+ author: {
29
+ name: 'User NPM',
30
+ email: 'user@domain.com',
31
+ },
32
+ license: 'ISC',
33
+ dependencies: {
34
+ verdaccio: '^2.7.2',
35
+ },
36
+ readme: '# test',
37
+ readmeFilename: 'README.md',
38
+ _id: `${pkgName}@${version}`,
39
+ _npmVersion: '5.5.1',
40
+ _npmUser: {
41
+ name: 'foo',
42
+ },
43
+ dist: {
44
+ integrity:
45
+ 'sha512-6gHiERpiDgtb3hjqpQH5/i7zRmvYi9pmCjQf2ZMy3QEa9wVk9RgdZaPWUt7ZOnWUPFjcr9cm' +
46
+ 'E6dUBf+XoPoH4g==',
47
+ shasum: '2c03764f651a9f016ca0b7620421457b619151b9', // pragma: allowlist secret
48
+ tarball: `http:\/\/localhost:5555\/${pkgName}\/-\/${getTarball(pkgName)}-${version}.tgz`,
49
+ },
50
+ },
51
+ },
52
+ readme: '# test',
53
+ _attachments: {
54
+ [`${getTarball(pkgName)}-${version}.tgz`]: {
55
+ content_type: 'application/octet-stream',
56
+ data:
57
+ 'H4sIAAAAAAAAE+2W32vbMBDH85y/QnjQp9qxLEeBMsbGlocNBmN7bFdQ5WuqxJaEpGQdo//79KPeQsnI' +
58
+ 'w5KUDX/9IOvurLuz/DHSjK/YAiY6jcXSKjk6sMqypHWNdtmD6hlBI0wqQmo8nVbVqMR4OsNoVB66kF1a' +
59
+ 'W8eML+Vv10m9oF/jP6IfY4QyyTrILlD2eqkcm+gVzpdrJrPz4NuAsULJ4MZFWdBkbcByI7R79CRjx0Sc' +
60
+ 'CdnAvf+SkjUFWu8IubzBgXUhDPidQlfZ3BhlLpBUKDiQ1cDFrYDmKkNnZwjuhUM4808+xNVW8P2bMk1Y' +
61
+ '7vJrtLC1u1MmLPjBF40+Cc4ahV6GDmI/DWygVRpMwVX3KtXUCg7Sxp7ff3nbt6TBFy65gK1iffsN41yo' +
62
+ 'EHtdFbOiisWMH8bPvXUH0SP3k+KG3UBr+DFy7OGfEJr4x5iWVeS/pLQe+D+FIv/agIWI6GX66kFuIhT+' +
63
+ '1gDjrp/4d7WAvAwEJPh0u14IufWkM0zaW2W6nLfM2lybgJ4LTJ0/jWiAK8OcMjt8MW3OlfQppcuhhQ6k' +
64
+ '+2OgkK2Q8DssFPi/IHpU9fz3/+xj5NjDf8QFE39VmE4JDfzPCBn4P4X6/f88f/Pu47zomiPk2Lv/dOv8' +
65
+ 'h+P/34/D/p9CL+Kp67mrGDRo0KBBp9ZPsETQegASAAA=+2W32vbMBDH85y',
66
+ length: 512,
67
+ },
68
+ },
69
+ _uplinks: {},
70
+ _distfiles: {},
71
+ _rev: '',
72
+ };
73
+ }
@@ -0,0 +1,76 @@
1
+ import { Manifest } from '@verdaccio/types';
2
+
3
+ export interface DistTags {
4
+ [key: string]: string;
5
+ }
6
+
7
+ /**
8
+ * Generate package metadata for a published package.
9
+ * This is the shape that a package manager would send to the registry. *
10
+ * @export
11
+ * @param {string} pkgName
12
+ * @param {string} [version='1.0.0']
13
+ * @param {DistTags} [distTags={ ['latest']: version }]
14
+ * @param {string} [description='package generated']
15
+ * @param {string} [readme='# test']
16
+ * @return {*} {Manifest}
17
+ */
18
+ export function generatePublishNewVersionManifest(
19
+ pkgName: string,
20
+ version = '1.0.0',
21
+ distTags: DistTags = { ['latest']: version },
22
+ description = 'package generated',
23
+ readme = '# test'
24
+ ): Manifest {
25
+ // @ts-ignore
26
+ return {
27
+ _id: pkgName,
28
+ description,
29
+ 'dist-tags': {
30
+ ...distTags,
31
+ },
32
+ versions: {
33
+ [version]: {
34
+ name: pkgName,
35
+ version: version,
36
+ description,
37
+ main: 'index.js',
38
+ scripts: {
39
+ test: 'echo "Error: no test specified" && exit 1',
40
+ },
41
+ keywords: [],
42
+ author: {
43
+ name: 'User NPM',
44
+ email: 'user@domain.com',
45
+ },
46
+ license: 'ISC',
47
+ dependencies: {
48
+ verdaccio: '^2.7.2',
49
+ },
50
+ readme: '# test',
51
+ readmeFilename: 'README.md',
52
+ _id: `${pkgName}@${version}`,
53
+ _npmVersion: '5.5.1',
54
+ _npmUser: {
55
+ name: 'foo',
56
+ },
57
+ dist: {
58
+ integrity:
59
+ 'sha512-6gHiERpiDgtb3hjqpQH5/i7zRmvYi9pmCjQf2ZMy3QEa9wVk9RgdZaPWUt7ZOnWUPFjcr9cm' +
60
+ 'E6dUBf+XoPoH4g==',
61
+ shasum: '2c03764f651a9f016ca0b7620421457b619151b9', // pragma: allowlist secret
62
+ tarball: `http:\/\/localhost:5555\/${pkgName}\/-\/${pkgName}-${version}.tgz`,
63
+ },
64
+ },
65
+ },
66
+ access: null,
67
+ readme,
68
+ _attachments: {
69
+ [`${pkgName}-${version}.tgz`]: {
70
+ content_type: 'application/octet-stream',
71
+ data: 'H4sIAAAAAAAC/+2SP0/DMBDFM+dTnDx0QsFpEyN1RQzMjBQiyzlat8Q2tgOtUL8754R/A2OFBMpvOee9i++dZCfVTq7x3I212AZrshPDORdVBT/piWpeQ7aoBS9LITj10aGuLqhmv0AfovQU5QRLEvBZ/wivOQAzskO2pOq6JmKIjfPNnAt2lsxn9EFbk/yy4AUf1RaD8trFd2cUO6mHL21a3NNTGtWxMZCRhpGQRqQ2VBsLK3blvfVLMBaSAcGh0g8a2xWD2QxwryOUjP48Drft8PBifZuuu70bFNnHjfVfKR61QhOGha5vLj/iOqRQRmn8FmT71KM/pMb7RSFotTQlP+bZxMTExP/nDZZA1xkACAAA',
72
+ length: 276,
73
+ },
74
+ },
75
+ };
76
+ }
@@ -0,0 +1,86 @@
1
+ import { FullRemoteManifest, GenericBody, Version, Versions } from '@verdaccio/types';
2
+
3
+ import { getTarball } from './utils';
4
+
5
+ export function generateRemotePackageMetadata(
6
+ pkgName: string,
7
+ version = '1.0.0',
8
+ domain: string = 'http://localhost:5555',
9
+ versions: string[] = []
10
+ ): FullRemoteManifest {
11
+ // @ts-ignore
12
+ const generateVersion = (version: string): Version => {
13
+ const metadata = {
14
+ name: pkgName,
15
+ version: version,
16
+ description: 'package generated',
17
+ main: 'index.js',
18
+ scripts: {
19
+ test: 'echo "Error: no test specified" && exit 1',
20
+ },
21
+ keywords: [],
22
+ author: {
23
+ name: 'User NPM',
24
+ email: 'user@domain.com',
25
+ },
26
+ license: 'ISC',
27
+ dependencies: {
28
+ verdaccio: '^2.7.2',
29
+ },
30
+ readme: '# test',
31
+ readmeFilename: 'README.md',
32
+ _id: `${pkgName}@${version}`,
33
+ _npmVersion: '5.5.1',
34
+ _npmUser: {
35
+ name: 'foo',
36
+ },
37
+ dist: {
38
+ integrity:
39
+ 'sha512-6gHiERpiDgtb3hjqpQH5/i7zRmvYi9pmCjQf2ZMy3QEa9wVk9RgdZaPWUt7ZOnWUPFjcr9cm' +
40
+ 'E6dUBf+XoPoH4g==',
41
+ shasum: '2c03764f651a9f016ca0b7620421457b619151b9', // pragma: allowlist secret
42
+ tarball: `${domain}\/${pkgName}\/-\/${getTarball(pkgName)}-${version}.tgz`,
43
+ },
44
+ };
45
+
46
+ return metadata;
47
+ };
48
+ const mappedVersions: Versions = versions.reduce((acc, v) => {
49
+ acc[v] = generateVersion(v);
50
+ return acc;
51
+ }, {});
52
+
53
+ const mappedTimes: GenericBody = versions.reduce((acc, v) => {
54
+ const date = new Date(Date.now());
55
+ acc[v] = date.toISOString();
56
+ return acc;
57
+ }, {});
58
+
59
+ return {
60
+ _id: pkgName,
61
+ name: pkgName,
62
+ description: '',
63
+ 'dist-tags': { ['latest']: version },
64
+ versions: {
65
+ [version]: generateVersion(version),
66
+ ...mappedVersions,
67
+ },
68
+ time: {
69
+ modified: '2019-06-13T06:44:45.747Z',
70
+ created: '2019-06-13T06:44:45.747Z',
71
+ [version]: '2019-06-13T06:44:45.747Z',
72
+ ...mappedTimes,
73
+ },
74
+ maintainers: [
75
+ {
76
+ name: 'foo',
77
+ email: 'foo@foo.com',
78
+ },
79
+ ],
80
+ author: {
81
+ name: 'foo',
82
+ },
83
+ readme: '# test',
84
+ _rev: '12-c8fe8a9c79fa57a87347a0213e6f2548',
85
+ };
86
+ }