From a4106dfb84177e79bb17dfbf841d544ab2eb8bec Mon Sep 17 00:00:00 2001 From: zkochan Date: Sat, 1 Oct 2016 22:30:04 +0300 Subject: [PATCH] refactor: moving the store saving functions out of context --- src/api/getContext.ts | 14 +++----------- src/api/install.ts | 3 ++- src/api/uninstall.ts | 3 ++- src/fs/storeJsonController.ts | 31 ++++++++++++++----------------- 4 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/api/getContext.ts b/src/api/getContext.ts index 1e79f4c419..c09d4f0704 100644 --- a/src/api/getContext.ts +++ b/src/api/getContext.ts @@ -7,16 +7,14 @@ import writeJson from '../fs/writeJson' import expandTilde from '../fs/expandTilde' import {StrictPnpmOptions} from '../types' import initLogger from '../logger' -import storeJsonController, {StoreJsonCtrl} from '../fs/storeJsonController' +import {read as readStoreJson} from '../fs/storeJsonController' import mkdirp from '../fs/mkdirp' import {Package} from '../types' import {StoreJson} from '../fs/storeJsonController' -import pnpmPkgJson from '../pnpmPkgJson' import normalizePath = require('normalize-path') export type PnpmContext = { pkg?: Package, - storeJsonCtrl: StoreJsonCtrl, store: string, root: string, storeJson: StoreJson @@ -26,8 +24,7 @@ export default async function (opts: StrictPnpmOptions): Promise { const pkg = await (opts.global ? readGlobalPkg(opts.globalPath) : readPkgUp({ cwd: opts.cwd })) const root = normalizePath(pkg.path ? path.dirname(pkg.path) : opts.cwd) const store = resolveStorePath(opts.storePath, root) - const storeJsonCtrl = storeJsonController(store) - const storeJson = storeJsonCtrl.read() + const storeJson = readStoreJson(store) if (storeJson) { failIfNotCompatible(storeJson.pnpm) } @@ -35,12 +32,7 @@ export default async function (opts: StrictPnpmOptions): Promise { pkg: pkg.pkg, root, store, - storeJson: storeJson || { - pnpm: pnpmPkgJson.version, - dependents: {}, - dependencies: {} - }, - storeJsonCtrl + storeJson } if (!opts.quiet) initLogger(opts.logger) diff --git a/src/api/install.ts b/src/api/install.ts index ef7d6b2e45..cc94c2745a 100644 --- a/src/api/install.ts +++ b/src/api/install.ts @@ -21,6 +21,7 @@ import {Got} from '../network/got' import pnpmPkgJson from '../pnpmPkgJson' import lock from './lock' import {StoreJson} from '../fs/storeJsonController' +import {save as saveStoreJson} from '../fs/storeJsonController' export type PackageInstallationResult = { path: string, @@ -100,7 +101,7 @@ async function installInContext (installType: string, packagesToInstall: Depende } } - ctx.storeJsonCtrl.save(Object.assign(ctx.storeJson, { + saveStoreJson(ctx.store, Object.assign(ctx.storeJson, { pnpm: pnpmPkgJson.version })) diff --git a/src/api/uninstall.ts b/src/api/uninstall.ts index a7a37fb49b..2ea7bba1f6 100644 --- a/src/api/uninstall.ts +++ b/src/api/uninstall.ts @@ -10,6 +10,7 @@ import requireJson from '../fs/requireJson' import {PnpmOptions, StrictPnpmOptions, Package} from '../types' import {StoreJson} from '../fs/storeJsonController' import lock from './lock' +import {save as saveStoreJson} from '../fs/storeJsonController' export default async function uninstallCmd (pkgsToUninstall: string[], maybeOpts?: PnpmOptions) { const opts = extendOptions(maybeOpts) @@ -47,7 +48,7 @@ export async function uninstallInContext (pkgsToUninstall: string[], pkg: Packag } await Promise.all(uninstalledPkgs.map(pkgId => removePkgFromStore(pkgId, ctx.store))) - ctx.storeJsonCtrl.save(ctx.storeJson) + saveStoreJson(ctx.store, ctx.storeJson) await Promise.all(pkgsToUninstall.map(dep => rimraf(path.join(ctx.root, 'node_modules', dep)))) const saveType = getSaveType(opts) diff --git a/src/fs/storeJsonController.ts b/src/fs/storeJsonController.ts index df52ff3b1e..c1fa7204be 100644 --- a/src/fs/storeJsonController.ts +++ b/src/fs/storeJsonController.ts @@ -1,5 +1,6 @@ import path = require('path') import fs = require('fs') +import pnpmPkgJson from '../pnpmPkgJson' export type StoreDependents = { [name: string]: string[] @@ -17,24 +18,20 @@ export type StoreJson = { dependencies: StoreDependencies } -export type StoreJsonCtrl = { - read(): StoreJson, - save(storeJson: StoreJson): void -} - -export default function storeJsonController (storePath: string): StoreJsonCtrl { +export function read (storePath: string) { const storeJsonPath = path.join(storePath, 'store.json') - - return { - read () { - try { - return JSON.parse(fs.readFileSync(storeJsonPath, 'utf8')) - } catch (err) { - return null - } - }, - save (storeJson: StoreJson) { - fs.writeFileSync(storeJsonPath, JSON.stringify(storeJson, null, 2), 'utf8') + try { + return JSON.parse(fs.readFileSync(storeJsonPath, 'utf8')) + } catch (err) { + return { + pnpm: pnpmPkgJson.version, + dependents: {}, + dependencies: {} } } } + +export function save (storePath: string, storeJson: StoreJson) { + const storeJsonPath = path.join(storePath, 'store.json') + fs.writeFileSync(storeJsonPath, JSON.stringify(storeJson, null, 2), 'utf8') +}