Skip to content

Commit ce51568

Browse files
committed
feat: migrate to @npmcli/package-json
1 parent 2f13c0c commit ce51568

File tree

3 files changed

+32
-24
lines changed

3 files changed

+32
-24
lines changed

index.js

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ const path = require('path');
33
const fs = require('fs-extra');
44
const opta = require('opta');
55
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');
87
const { Loggerr } = require('loggerr');
98
const packageName = require('./lib/package-name');
109
const 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 () {
235234
module.exports.readPackageJson = readPackageJson;
236235
async 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

292285
module.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

355349
module.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) {

lib/git.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module.exports.author = async function author (opts = {}) {
2121
};
2222

2323
// Taken from npm: https://github.com/npm/init-package-json/blob/latest/default-input.js#L188-L208
24-
module.exports.remote = async function remote (opts = {}) {
24+
async function gitRemote (opts = {}) {
2525
try {
2626
const cwd = opts.cwd || process.cwd();
2727
let conf = await fs.readFile(path.join(cwd, '.git', 'config'), 'utf8');
@@ -51,4 +51,20 @@ module.exports.remote = async function remote (opts = {}) {
5151
} catch (e) {
5252
// ignore error
5353
}
54+
}
55+
module.exports.remote = gitRemote;
56+
57+
module.exports.repository = async function (cwd, pkg) {
58+
if (!pkg || !pkg.repository) {
59+
const remote = await gitRemote({ cwd });
60+
if (remote) {
61+
return remote;
62+
}
63+
}
64+
if (pkg && typeof pkg.repository === 'string') {
65+
return pkg.repository;
66+
}
67+
if (pkg && typeof pkg.repository !== 'undefined' && pkg.repository.url) {
68+
return pkg.repository.url;
69+
}
5470
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@
3535
"license": "MIT",
3636
"dependencies": {
3737
"@npmcli/name-from-folder": "^2.0.0",
38+
"@npmcli/package-json": "^5.0.0",
3839
"fs-extra": "^11.1.1",
3940
"loggerr": "^3.0.0",
4041
"npm-package-arg": "^11.0.1",
4142
"opta": "^1.0.0",
42-
"read-package-json": "^7.0.0",
4343
"safe-parse-list": "^0.1.1",
4444
"validate-npm-package-name": "^5.0.0"
4545
},

0 commit comments

Comments
 (0)