@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.
- package/.babelrc +3 -0
- package/.eslintignore +5 -0
- package/CHANGELOG.md +563 -0
- package/LICENSE +21 -0
- package/README.md +80 -0
- package/build/actions.d.ts +2 -0
- package/build/actions.js +26 -0
- package/build/actions.js.map +1 -0
- package/build/addNewVersion.d.ts +2 -0
- package/build/addNewVersion.js +72 -0
- package/build/addNewVersion.js.map +1 -0
- package/build/generateLocalPackageMetadata.d.ts +2 -0
- package/build/generateLocalPackageMetadata.js +68 -0
- package/build/generateLocalPackageMetadata.js.map +1 -0
- package/build/generatePackageMetadata.d.ts +3 -0
- package/build/generatePackageMetadata.js +64 -0
- package/build/generatePackageMetadata.js.map +1 -0
- package/build/generatePublishNewVersionManifest.d.ts +16 -0
- package/build/generatePublishNewVersionManifest.js +72 -0
- package/build/generatePublishNewVersionManifest.js.map +1 -0
- package/build/generateRemotePackageMetadata.d.ts +2 -0
- package/build/generateRemotePackageMetadata.js +81 -0
- package/build/generateRemotePackageMetadata.js.map +1 -0
- package/build/generateUnPublishPackageMetadata.d.ts +2 -0
- package/build/generateUnPublishPackageMetadata.js +81 -0
- package/build/generateUnPublishPackageMetadata.js.map +1 -0
- package/build/getDeprecatedPackageMetadata.d.ts +3 -0
- package/build/getDeprecatedPackageMetadata.js +18 -0
- package/build/getDeprecatedPackageMetadata.js.map +1 -0
- package/build/index.d.ts +9 -0
- package/build/index.js +69 -0
- package/build/index.js.map +1 -0
- package/build/initializeServer.d.ts +2 -0
- package/build/initializeServer.js +64 -0
- package/build/initializeServer.js.map +1 -0
- package/build/types.d.ts +3 -0
- package/build/types.js +6 -0
- package/build/types.js.map +1 -0
- package/build/utils.d.ts +1 -0
- package/build/utils.js +16 -0
- package/build/utils.js.map +1 -0
- package/package.json +32 -0
- package/src/actions.ts +27 -0
- package/src/addNewVersion.ts +60 -0
- package/src/generateLocalPackageMetadata.ts +67 -0
- package/src/generatePackageMetadata.ts +73 -0
- package/src/generatePublishNewVersionManifest.ts +76 -0
- package/src/generateRemotePackageMetadata.ts +86 -0
- package/src/generateUnPublishPackageMetadata.ts +89 -0
- package/src/getDeprecatedPackageMetadata.ts +19 -0
- package/src/index.ts +9 -0
- package/src/initializeServer.ts +61 -0
- package/src/types.ts +3 -0
- package/src/utils.ts +8 -0
- package/tests/generateUnPublishPackageMetadata.ts.spec.ts +98 -0
- package/tests/getDeprecatedPackageMetadata.spec.ts +40 -0
- package/tests/metadata.spec.ts +119 -0
- package/tests/utils.spec.ts +19 -0
- package/tsconfig.build.json +10 -0
- package/tsconfig.json +27 -0
- 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,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":[]}
|
package/build/types.d.ts
ADDED
package/build/types.js
ADDED
|
@@ -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":[]}
|
package/build/utils.d.ts
ADDED
|
@@ -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
|
+
}
|