From 9d1d4f433eb294a6773b12c8d0ea1eac25875ef1 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Mon, 9 Oct 2017 00:44:58 +0300 Subject: [PATCH] feat: rename public/private to wanted/current shrinkwrap --- README.md | 16 ++++++++++------ src/constants.ts | 4 ++-- src/read.ts | 16 ++++++++++------ src/write.ts | 33 ++++++++++++++++++--------------- test/read.ts | 27 +++++++++++++++++++-------- 5 files changed, 59 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 8e48e5a730..4eb9696875 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,11 @@ npm i pnpm-shrinkwrap ## API -### `read(pkgPath, opts) => Promise` +### `readWanted(pkgPath, opts) => Promise` -Reads the public `shrinkwrap.yaml` file from the root of the package. +Alias: `read` + +Reads the `shrinkwrap.yaml` file from the root of the package. #### Arguments @@ -26,13 +28,15 @@ Reads the public `shrinkwrap.yaml` file from the root of the package. * `opts.ignoreIncompatible` - *Boolean* - `false` by default. If `true`, throws an error if the shrinkwrap file format is not compatible with the current library. -### `readPrivate(pkgPath, opts) => Promise` +### `readCurrent(pkgPath, opts) => Promise` -Same as `read()` but for the private shrinkwrap file at `node_modules/.shrinkwrap.yaml`. +Alias: `readPrivate` -### `write(pkgPath, shrinkwrap, privateShrinkwrap) => Promise` +Reads the shrinkwrap file from `node_modules/.shrinkwrap.yaml`. -Writes the public private shrinkwrap files. When they are empty, removes them. +### `write(pkgPath, wantedShrinkwrap, currentShrinkwrap) => Promise` + +Writes the wanted/current shrinkwrap files. When they are empty, removes them. ### `prune(shrinkwrap, package) => Promise` diff --git a/src/constants.ts b/src/constants.ts index ed3f9f4473..f104adbdec 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,7 +1,7 @@ import path = require('path') -export const SHRINKWRAP_FILENAME = 'shrinkwrap.yaml' -export const PRIVATE_SHRINKWRAP_FILENAME = path.join('node_modules', '.shrinkwrap.yaml') +export const WANTED_SHRINKWRAP_FILENAME = 'shrinkwrap.yaml' +export const CURRENT_SHRINKWRAP_FILENAME = path.join('node_modules', '.shrinkwrap.yaml') // Although .0 versions are supported, a bump to 3.1 would be a breaking change // because comver version support was added after releasing version 3. diff --git a/src/read.ts b/src/read.ts index f23def0c7d..d5d4f9ad5f 100644 --- a/src/read.ts +++ b/src/read.ts @@ -1,8 +1,8 @@ import path = require('path') import logger from './logger' import { - SHRINKWRAP_FILENAME, - PRIVATE_SHRINKWRAP_FILENAME, + WANTED_SHRINKWRAP_FILENAME, + CURRENT_SHRINKWRAP_FILENAME, } from './constants' import {Shrinkwrap} from './types' import loadYamlFile = require('load-yaml-file') @@ -27,23 +27,27 @@ class ShrinkwrapBreakingChangeError extends PnpmError { filename: string } -export async function readPrivate ( +export const readPrivate = readCurrent + +export async function readCurrent ( pkgPath: string, opts: { ignoreIncompatible: boolean, } ): Promise { - const shrinkwrapPath = path.join(pkgPath, PRIVATE_SHRINKWRAP_FILENAME) + const shrinkwrapPath = path.join(pkgPath, CURRENT_SHRINKWRAP_FILENAME) return await _read(shrinkwrapPath, opts) } -export async function read ( +export const read = readWanted + +export async function readWanted ( pkgPath: string, opts: { ignoreIncompatible: boolean, } ): Promise { - const shrinkwrapPath = path.join(pkgPath, SHRINKWRAP_FILENAME) + const shrinkwrapPath = path.join(pkgPath, WANTED_SHRINKWRAP_FILENAME) return await _read(shrinkwrapPath, opts) } diff --git a/src/write.ts b/src/write.ts index 6fec8a231f..3297030816 100644 --- a/src/write.ts +++ b/src/write.ts @@ -3,7 +3,10 @@ import writeFileAtomicCB = require('write-file-atomic') import thenify = require('thenify') import rimraf = require('rimraf-then') import yaml = require('js-yaml') -import {SHRINKWRAP_FILENAME, PRIVATE_SHRINKWRAP_FILENAME} from './constants' +import { + WANTED_SHRINKWRAP_FILENAME, + CURRENT_SHRINKWRAP_FILENAME, +} from './constants' import {Shrinkwrap} from './types' import mkdirp = require('mkdirp-promise') import logger from './logger' @@ -18,29 +21,29 @@ const SHRINKWRAP_YAML_FORMAT = { export default function write ( pkgPath: string, - shrinkwrap: Shrinkwrap, - privateShrinkwrap: Shrinkwrap + wantedShrinkwrap: Shrinkwrap, + currentShrinkwrap: Shrinkwrap ) { - const shrinkwrapPath = path.join(pkgPath, SHRINKWRAP_FILENAME) - const privateShrinkwrapPath = path.join(pkgPath, PRIVATE_SHRINKWRAP_FILENAME) + const wantedShrinkwrapPath = path.join(pkgPath, WANTED_SHRINKWRAP_FILENAME) + const currentShrinkwrapPath = path.join(pkgPath, CURRENT_SHRINKWRAP_FILENAME) // empty shrinkwrap is not saved - if (Object.keys(shrinkwrap.specifiers).length === 0) { + if (Object.keys(wantedShrinkwrap.specifiers).length === 0) { return Promise.all([ - rimraf(shrinkwrapPath), - rimraf(privateShrinkwrapPath), + rimraf(wantedShrinkwrapPath), + rimraf(currentShrinkwrapPath), ]) } - const yamlDoc = yaml.safeDump(shrinkwrap, SHRINKWRAP_YAML_FORMAT) + const yamlDoc = yaml.safeDump(wantedShrinkwrap, SHRINKWRAP_YAML_FORMAT) // in most cases the `shrinkwrap.yaml` and `node_modules/.shrinkwrap.yaml` are equal // in those cases the YAML document can be stringified only once for both files // which is more efficient - if (shrinkwrap === privateShrinkwrap) { + if (wantedShrinkwrap === currentShrinkwrap) { return Promise.all([ - writeFileAtomic(shrinkwrapPath, yamlDoc), - mkdirp(path.dirname(privateShrinkwrapPath)).then(() => writeFileAtomic(privateShrinkwrapPath, yamlDoc)), + writeFileAtomic(wantedShrinkwrapPath, yamlDoc), + mkdirp(path.dirname(currentShrinkwrapPath)).then(() => writeFileAtomic(currentShrinkwrapPath, yamlDoc)), ]) } @@ -48,10 +51,10 @@ export default function write ( 'To fix this, run `pnpm install`. From pnpm version 2, named installations and uninstallations will fail ' + 'when the content of `node_modules` won\'t match what the `shrinkwrap.yaml` expects.') - const privateYamlDoc = yaml.safeDump(privateShrinkwrap, SHRINKWRAP_YAML_FORMAT) + const currentYamlDoc = yaml.safeDump(currentShrinkwrap, SHRINKWRAP_YAML_FORMAT) return Promise.all([ - writeFileAtomic(shrinkwrapPath, yamlDoc), - mkdirp(path.dirname(privateShrinkwrapPath)).then(() => writeFileAtomic(privateShrinkwrapPath, privateYamlDoc)), + writeFileAtomic(wantedShrinkwrapPath, yamlDoc), + mkdirp(path.dirname(currentShrinkwrapPath)).then(() => writeFileAtomic(currentShrinkwrapPath, currentYamlDoc)), ]) } diff --git a/test/read.ts b/test/read.ts index 281fb37306..e247aa0e7b 100644 --- a/test/read.ts +++ b/test/read.ts @@ -1,25 +1,36 @@ -import {read, readPrivate} from '../src' +import { + readWanted, + readCurrent, + readPrivate, + read, +} from '../src' import test = require('tape') import path = require('path') process.chdir(__dirname) -test('read()', async t => { +test('backward compatibility', t => { + t.equal(readWanted, read) + t.equal(readCurrent, readPrivate) + t.end() +}) + +test('readWanted()', async t => { { - const shr = await read(path.join('fixtures', '1'), { + const shr = await readWanted(path.join('fixtures', '1'), { ignoreIncompatible: false, }) t.equal(shr!.shrinkwrapVersion, 3, 'converted version to shrinkwrapVersion') } { - const shr = await read(path.join('fixtures', '2'), { + const shr = await readWanted(path.join('fixtures', '2'), { ignoreIncompatible: false, }) t.equal(shr!.shrinkwrapVersion, 3) } try { - const shr = await read(path.join('fixtures', '3'), { + const shr = await readWanted(path.join('fixtures', '3'), { ignoreIncompatible: false, }) t.fail() @@ -29,15 +40,15 @@ test('read()', async t => { t.end() }) -test('readPrivate()', async t => { +test('readCurrent()', async t => { { - const shr = await readPrivate(path.join('fixtures', '1'), { + const shr = await readCurrent(path.join('fixtures', '1'), { ignoreIncompatible: false, }) t.equal(shr!.shrinkwrapVersion, 3, 'converted version to shrinkwrapVersion') } { - const shr = await readPrivate(path.join('fixtures', '2'), { + const shr = await readCurrent(path.join('fixtures', '2'), { ignoreIncompatible: false, }) t.equal(shr!.shrinkwrapVersion, 3)