@@ -3,8 +3,7 @@ const path = require('path');
3
3
const fs = require ( 'fs-extra' ) ;
4
4
const opta = require ( 'opta' ) ;
5
5
const 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' ) ;
8
7
const { Loggerr } = require ( 'loggerr' ) ;
9
8
const packageName = require ( './lib/package-name' ) ;
10
9
const git = require ( './lib/git' ) ;
@@ -215,7 +214,7 @@ async function main (input, _opts = {}) {
215
214
} ) ;
216
215
217
216
// 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 } ) ;
219
218
220
219
await options . prompt ( {
221
220
promptor : _opts . promptor
@@ -235,13 +234,17 @@ module.exports.cli = function () {
235
234
module . exports . readPackageJson = readPackageJson ;
236
235
async function readPackageJson ( options , { log } = { } ) {
237
236
const opts = options . values ( ) ;
237
+ let packageInstance ;
238
238
let pkg = { } ;
239
239
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 ;
241
244
log . debug ( 'Read existing package.json' , pkg ) ;
242
245
} catch ( e ) {
243
- // @TODO log this?
244
246
// ignore if missing or unreadable
247
+ log . error ( e ) ;
245
248
}
246
249
247
250
let author ;
@@ -256,17 +259,7 @@ async function readPackageJson (options, { log } = {}) {
256
259
author = `${ pkg . author . name } ${ pkg . author . email ? ` <${ pkg . author . email } >` : '' } ` ;
257
260
}
258
261
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 ) ;
270
263
271
264
// Remove some of the extras that don't make sense here
272
265
delete pkg . gitHead ;
@@ -286,11 +279,12 @@ async function readPackageJson (options, { log } = {}) {
286
279
license : pkg . license
287
280
} ) ;
288
281
289
- return pkg ;
282
+ return packageInstance . update ( pkg ) ;
290
283
}
291
284
292
285
module . exports . format = format ;
293
- async function format ( opts , pkg = { } ) {
286
+ async function format ( opts , packageInstance ) {
287
+ const pkg = packageInstance . content ;
294
288
// The order here matters
295
289
pkg . name = opts . name ;
296
290
pkg . version = opts . version ;
@@ -349,7 +343,7 @@ async function format (opts, pkg = {}) {
349
343
pkg . peerDependencies [ spec . name ] = ver ;
350
344
} ) ) ;
351
345
}
352
- return pkg ;
346
+ return packageInstance . update ( pkg ) ;
353
347
}
354
348
355
349
module . exports . write = write ;
@@ -358,9 +352,7 @@ async function write (opts, pkg, { log } = {}) {
358
352
const pkgPath = path . resolve ( opts . cwd , 'package.json' ) ;
359
353
// Write package json
360
354
log . info ( `Writing package.json\n${ pkgPath } ` ) ;
361
- await fs . outputJSON ( pkgPath , pkg , {
362
- spaces : opts . spacer || 2
363
- } ) ;
355
+ await pkg . save ( ) ;
364
356
365
357
// Run installs
366
358
if ( opts . dependencies && opts . dependencies . length ) {
0 commit comments