From 76f6f425e7253c4590ac45557b267919f7f4317c Mon Sep 17 00:00:00 2001 From: isaacs Date: Wed, 31 Jul 2019 11:57:10 -0700 Subject: [PATCH] feat: support bundleDependencies: true What ends up in the parsed output is still an array of names, but we generate that name from the keys if it's set to true. Also, avoid the footgun of people not realizing that bundleDependencies should be an array of names, rather than a {name:version} object. If bundleDependencies is something other than a boolean or array, it is removed from the manifest. --- read-json.js | 18 +++++++++ test/bundle.js | 68 +++++++++++++++++++++++++++++++++ test/fixtures/bundle-array.json | 18 +++++++++ test/fixtures/bundle-false.json | 15 ++++++++ test/fixtures/bundle-null.json | 15 ++++++++ test/fixtures/bundle-true.json | 14 +++++++ 6 files changed, 148 insertions(+) create mode 100644 test/bundle.js create mode 100644 test/fixtures/bundle-array.json create mode 100644 test/fixtures/bundle-false.json create mode 100644 test/fixtures/bundle-null.json create mode 100644 test/fixtures/bundle-true.json diff --git a/read-json.js b/read-json.js index 243af8e..f50d5cf 100644 --- a/read-json.js +++ b/read-json.js @@ -17,6 +17,7 @@ module.exports = readJson // put more stuff on here to customize. readJson.extraSet = [ + bundleDependencies, gypfile, serverjs, scriptpath, @@ -324,6 +325,23 @@ function bins_ (file, data, bins, cb) { return cb(null, data) } +function bundleDependencies (file, data, cb) { + var bd = 'bundleDependencies' + var bdd = 'bundledDependencies' + // normalize key name + if (data[bdd] !== undefined) { + if (data[bd] === undefined) data[bd] = data[bdd] + delete data[bdd] + } + if (data[bd] === false) delete data[bd] + else if (data[bd] === true) { + data[bd] = Object.keys(data.dependencies || {}) + } else if (data[bd] !== undefined && !Array.isArray(data[bd])) { + delete data[bd] + } + return cb(null, data) +} + function githead (file, data, cb) { if (data.gitHead) return cb(null, data) var dir = path.dirname(file) diff --git a/test/bundle.js b/test/bundle.js new file mode 100644 index 0000000..afc9109 --- /dev/null +++ b/test/bundle.js @@ -0,0 +1,68 @@ +const t = require('tap') +const read = require('../') +const { resolve } = require('path') + +t.test('bundle-true', t => { + const fixture = resolve(__dirname, 'fixtures/bundle-true.json') + read(fixture, (er, data) => { + if (er) { + throw er + } + t.match(data, { + name: 'bundletrue', + version: '1.2.3', + dependencies: { a: '', b: '' }, + optionalDependencies: { b: '' }, + devDependencies: { c: '' }, + bundleDependencies: [ 'a' ], + readme: 'ERROR: No README data found!', + _id: 'bundletrue@1.2.3' + }) + t.end() + }) +}) + +t.test('bundle-null', t => { + const fixture = resolve(__dirname, 'fixtures/bundle-null.json') + read(fixture, (er, data) => { + if (er) { + throw er + } + t.notOk(data.bundleDependencies, 'no bundleDependencies') + t.notOk(data.bundledDependencies, 'no bundledDependencies') + t.end() + }) +}) + +t.test('bundle-array', t => { + const fixture = resolve(__dirname, 'fixtures/bundle-array.json') + read(fixture, (er, data) => { + t.match(data, { + name: 'bundlearray', + version: '1.2.3', + dependencies: { a: '', b: '', c: '*' }, + optionalDependencies: { b: '' }, + devDependencies: { c: '' }, + bundleDependencies: [ 'a', 'b', 'c' ], + readme: 'ERROR: No README data found!', + _id: 'bundlearray@1.2.3' + }) + t.end() + }) +}) + +t.test('bundle-false', t => { + const fixture = resolve(__dirname, 'fixtures/bundle-false.json') + read(fixture, (er, data) => { + t.match(data, { + name: 'bundlefalse', + version: '1.2.3', + dependencies: { a: '', b: '' }, + optionalDependencies: { b: '' }, + devDependencies: { c: '' }, + readme: 'ERROR: No README data found!', + _id: 'bundlefalse@1.2.3' + }) + t.end() + }) +}) diff --git a/test/fixtures/bundle-array.json b/test/fixtures/bundle-array.json new file mode 100644 index 0000000..460b7a5 --- /dev/null +++ b/test/fixtures/bundle-array.json @@ -0,0 +1,18 @@ +{ + "name": "bundlearray", + "version": "1.2.3", + "dependencies": { + "a": "" + }, + "optionalDependencies": { + "b": "" + }, + "devDependencies": { + "c": "" + }, + "bundledDependencies": [ + "a", + "b", + "c" + ] +} diff --git a/test/fixtures/bundle-false.json b/test/fixtures/bundle-false.json new file mode 100644 index 0000000..cc97fc7 --- /dev/null +++ b/test/fixtures/bundle-false.json @@ -0,0 +1,15 @@ +{ + "name": "bundlefalse", + "version": "1.2.3", + "dependencies": { + "a": "" + }, + "optionalDependencies": { + "b": "" + }, + "devDependencies": { + "c": "" + }, + "bundleDependencies": false, + "bundledDependencies": true +} diff --git a/test/fixtures/bundle-null.json b/test/fixtures/bundle-null.json new file mode 100644 index 0000000..b6f7cb7 --- /dev/null +++ b/test/fixtures/bundle-null.json @@ -0,0 +1,15 @@ +{ + "name": "bundlenull", + "version": "1.2.3", + "dependencies": { + "a": "" + }, + "optionalDependencies": { + "b": "" + }, + "devDependencies": { + "c": "" + }, + "bundleDependencies": null, + "bundledDependencies": true +} diff --git a/test/fixtures/bundle-true.json b/test/fixtures/bundle-true.json new file mode 100644 index 0000000..9a5223f --- /dev/null +++ b/test/fixtures/bundle-true.json @@ -0,0 +1,14 @@ +{ + "name": "bundletrue", + "version": "1.2.3", + "dependencies": { + "a": "" + }, + "optionalDependencies": { + "b": "" + }, + "devDependencies": { + "c": "" + }, + "bundledDependencies": true +}