From 4e82315b53a5399cc23f6058f84ba94b1582885d Mon Sep 17 00:00:00 2001 From: Ace Nassri Date: Wed, 11 Jan 2017 15:47:34 -0800 Subject: [PATCH] Add dependency unification script (#293) * Add dependency unification script * Address comments * Add use strict to unify script * Address comments + fix lint --- package.json | 3 ++- scripts/unify | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100755 scripts/unify diff --git a/package.json b/package.json index e8636848d5..c16f80ff3b 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,8 @@ "system-test": "npm run st -- --verbose system-test/**/*.test.js **/system-test/**/*.test.js", "system-cover": "npm run pretest && nyc --cache npm run system-test && nyc report --reporter=html", "all-test": "npm run st -- --no-power-assert bigquery/system-test/*.test.js test/**/*.test.js **/test/**/*.test.js system-test/**/*.test.js **/system-test/**/*.test.js", - "all-cover": "npm run pretest && nyc --cache npm run all-test && nyc report --reporter=html" + "all-cover": "npm run pretest && nyc --cache npm run all-test && nyc report --reporter=html", + "unify": "node scripts/unify" }, "devDependencies": { "@google-cloud/bigquery": "0.6.0", diff --git a/scripts/unify b/scripts/unify new file mode 100755 index 0000000000..54669e0ae2 --- /dev/null +++ b/scripts/unify @@ -0,0 +1,36 @@ +'use strict'; + +// Copyright 2016, Google, Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +const fs = require(`fs`); +const path = require(`path`); + +const PROJECT_ROOT = path.join(__dirname, `..`); + +// Get subdirectories with a `package.json` file +const directories = fs.readdirSync(PROJECT_ROOT) + .filter((dir) => fs.existsSync(path.join(PROJECT_ROOT, dir, `package.json`))); + +// Dedupe package.json dependencies +// WARNING: This will fail if two different versions of the same package are required. +const pkgSet = {}; +let pkgJson; +directories.forEach((dir) => { + pkgJson = JSON.parse(fs.readFileSync(path.join(PROJECT_ROOT, dir, `package.json`))); + Object.assign(pkgSet, pkgJson.dependencies); +}); + +// Update root-level package.json (by shelling to npm) +const spawn = require('child_process').spawn; +spawn(`yarn`, [`add`].concat(Object.keys(pkgSet).map(pkg => `${pkg}@${pkgSet[pkg]}`)));