0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2025-03-04 02:02:39 -05:00
verdaccio/packages/tools/helpers/src/addNewVersion.ts
2022-10-01 00:14:20 +02:00

60 lines
1.9 KiB
TypeScript

import { Manifest } from '@verdaccio/types';
import { getTarball } from './utils';
export function addNewVersion(
manifest: Manifest,
version: string,
isRemote: boolean = true,
domain: string = 'http://localhost:5555'
): Manifest {
const currentVersions = Object.keys(manifest.versions);
if (currentVersions.includes(version)) {
throw new Error(`Version ${version} already exists`);
}
const newManifest = { ...manifest };
newManifest.versions[version] = {
name: manifest.name,
version,
description: manifest.description ?? '',
readme: '',
main: 'index.js',
scripts: { test: 'echo "Error: no test specified" && exit 1' },
keywords: [],
author: { name: 'User NPM', email: 'user@domain.com' },
license: 'ISC',
dependencies: { verdaccio: '^2.7.2' },
readmeFilename: 'README.md',
_id: `${manifest.name}@${version}`,
_npmVersion: '5.5.1',
_npmUser: { name: 'foo' },
dist: {
integrity: 'sha512-6gHiERpiDgtb3hjqpQHoPoH4g==',
shasum: '2c03764f651a9f016ca0b7620421457b619151b9',
tarball: `${domain}/${manifest.name}/-/${getTarball(manifest.name)}-${version}.tgz`,
},
contributors: [],
};
// update the latest with the new version
newManifest['dist-tags'] = { latest: version };
// add new version does not need attachments
if (isRemote) {
newManifest._distfiles = {
...newManifest._distfiles,
[`${getTarball(manifest.name)}-${version}.tgz`]: {
sha: '2c03764f651a9f016ca0b7620421457b619151b9',
url: `${domain}/${manifest.name}/-/${getTarball(manifest.name)}-${version}.tgz`,
},
};
} else {
newManifest._attachments = {
...newManifest._attachments,
[`${getTarball(manifest.name)}-${version}.tgz`]: {
shasum: '2c03764f651a9f016ca0b7620421457b619151b9', // pragma: allowlist secret
version: version,
},
};
}
return newManifest;
}