diff --git a/README.md b/README.md index f021ef27de..94676641c9 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,8 @@ Writes the current shrinkwrap file only. Fails if there is no `node_modules` dir Prunes a shrinkwrap file. Prunning means removing packages that are not referenced. +### `nameVerFromPkgSnapshot(relDepPath, pkgSnapshot): {name: string, version: string}` + ## License [MIT](LICENSE) diff --git a/src/index.ts b/src/index.ts index 93a0635e59..d69bdfdcf3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,6 +3,7 @@ export * from './read' export * from './types' import existsWanted from './existsWanted' +import nameVerFromPkgSnapshot from './nameVerFromPkgSnapshot' import prune from './prune' import write, { writeCurrentOnly, @@ -11,6 +12,7 @@ import write, { export { existsWanted, + nameVerFromPkgSnapshot, prune, write, writeWantedOnly, diff --git a/src/nameVerFromPkgSnapshot.ts b/src/nameVerFromPkgSnapshot.ts new file mode 100644 index 0000000000..8425e3c036 --- /dev/null +++ b/src/nameVerFromPkgSnapshot.ts @@ -0,0 +1,21 @@ +import * as dp from 'dependency-path' +import {PackageSnapshot} from './types' + +export default ( + relDepPath: string, + pkgSnapshot: PackageSnapshot, +) => { + if (!pkgSnapshot.name) { + const pkgInfo = dp.parse(relDepPath) + return { + // tslint:disable:no-string-literal + name: pkgInfo['name'], + version: pkgInfo['version'], + // tslint:enable:no-string-literal + } + } + return { + name: pkgSnapshot.name, + version: pkgSnapshot.version, + } +} diff --git a/test/index.ts b/test/index.ts index b7985f4592..094562f406 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,2 +1,3 @@ import './prune' import './read' +import './nameVerFromPkgSnapshot' diff --git a/test/nameVerFromPkgSnapshot.ts b/test/nameVerFromPkgSnapshot.ts new file mode 100644 index 0000000000..148bf7a9f4 --- /dev/null +++ b/test/nameVerFromPkgSnapshot.ts @@ -0,0 +1,19 @@ +import {nameVerFromPkgSnapshot} from 'pnpm-shrinkwrap' +import test = require('tape') + +test('nameVerFromPkgSnapshot()', (t) => { + t.deepEqual(nameVerFromPkgSnapshot('/some-weird-path', { + name: 'foo', + version: '1.0.0', + }), { + name: 'foo', + version: '1.0.0', + }) + + t.deepEqual(nameVerFromPkgSnapshot('/foo/1.0.0', {}), { + name: 'foo', + version: '1.0.0', + }) + + t.end() +})