@@ -3,8 +3,7 @@ const path = require('path');
33const fs = require ( 'fs-extra' ) ;
44const opta = require ( 'opta' ) ;
55const parseList = require ( 'safe-parse-list' ) ;
6- const { promisify } = require ( 'util' ) ;
7- const readPkg = promisify ( require ( 'read-package-json' ) ) ;
6+ const { create, load } = require ( '@npmcli/package-json' ) ;
87const { Loggerr } = require ( 'loggerr' ) ;
98const packageName = require ( './lib/package-name' ) ;
109const git = require ( './lib/git' ) ;
@@ -215,7 +214,7 @@ async function main (input, _opts = {}) {
215214 } ) ;
216215
217216 // Read current state and set defaults
218- const pkg = opts . ignoreExisting ? { } : await readPackageJson ( options , { log } ) ;
217+ const pkg = opts . ignoreExisting ? await create ( opts . cwd ) : await readPackageJson ( options , { log } ) ;
219218
220219 await options . prompt ( {
221220 promptor : _opts . promptor
@@ -235,13 +234,17 @@ module.exports.cli = function () {
235234module . exports . readPackageJson = readPackageJson ;
236235async function readPackageJson ( options , { log } = { } ) {
237236 const opts = options . values ( ) ;
237+ let packageInstance ;
238238 let pkg = { } ;
239239 try {
240- pkg = await readPkg ( path . resolve ( opts . cwd , 'package.json' ) ) ;
240+ packageInstance = await load ( opts . cwd , {
241+ create : true
242+ } ) ;
243+ pkg = packageInstance . content ;
241244 log . debug ( 'Read existing package.json' , pkg ) ;
242245 } catch ( e ) {
243- // @TODO log this?
244246 // ignore if missing or unreadable
247+ log . error ( e ) ;
245248 }
246249
247250 let author ;
@@ -256,17 +259,7 @@ async function readPackageJson (options, { log } = {}) {
256259 author = `${ pkg . author . name } ${ pkg . author . email ? ` <${ pkg . author . email } >` : '' } ` ;
257260 }
258261
259- let repo ;
260- if ( ! pkg || ! pkg . repository ) {
261- const gitRemote = await git . remote ( { cwd : opts . cwd } ) ;
262- if ( gitRemote ) {
263- repo = gitRemote ;
264- }
265- } else if ( pkg && typeof pkg . repository === 'string' ) {
266- repo = pkg . repository ;
267- } else if ( pkg && typeof pkg . repository !== 'undefined' && pkg . repository . url ) {
268- repo = pkg . repository . url ;
269- }
262+ const repo = await git . repository ( opts . cwd , pkg ) ;
270263
271264 // Remove some of the extras that don't make sense here
272265 delete pkg . gitHead ;
@@ -286,11 +279,12 @@ async function readPackageJson (options, { log } = {}) {
286279 license : pkg . license
287280 } ) ;
288281
289- return pkg ;
282+ return packageInstance . update ( pkg ) ;
290283}
291284
292285module . exports . format = format ;
293- async function format ( opts , pkg = { } ) {
286+ async function format ( opts , packageInstance ) {
287+ const pkg = packageInstance . content ;
294288 // The order here matters
295289 pkg . name = opts . name ;
296290 pkg . version = opts . version ;
@@ -349,7 +343,7 @@ async function format (opts, pkg = {}) {
349343 pkg . peerDependencies [ spec . name ] = ver ;
350344 } ) ) ;
351345 }
352- return pkg ;
346+ return packageInstance . update ( pkg ) ;
353347}
354348
355349module . exports . write = write ;
@@ -358,9 +352,7 @@ async function write (opts, pkg, { log } = {}) {
358352 const pkgPath = path . resolve ( opts . cwd , 'package.json' ) ;
359353 // Write package json
360354 log . info ( `Writing package.json\n${ pkgPath } ` ) ;
361- await fs . outputJSON ( pkgPath , pkg , {
362- spaces : opts . spacer || 2
363- } ) ;
355+ await pkg . save ( ) ;
364356
365357 // Run installs
366358 if ( opts . dependencies && opts . dependencies . length ) {
0 commit comments