#!/usr/bin/env node /** * Copyright 2017, 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. */ 'use strict'; const fs = require(`fs`); const path = require(`path`); const PROJECT_ROOT = path.join(__dirname, `..`); // Dedupe package.json dependencies // WARNING: This will fail if two different versions of the same package are required. const pkgSet = {}; function getDeps (directory) { // Get subdirectories with a `package.json` file const directories = fs.readdirSync(directory) .filter((dir) => fs.existsSync(path.join(directory, dir, `package.json`))); let pkgJson; directories.forEach((dir) => { pkgJson = JSON.parse(fs.readFileSync(path.join(directory, dir, `package.json`))); Object.assign(pkgSet, pkgJson.dependencies); }); } getDeps(PROJECT_ROOT); getDeps(path.join(PROJECT_ROOT, 'endpoints/getting-started')); getDeps(path.join(PROJECT_ROOT, 'functions')); getDeps(path.join(PROJECT_ROOT, 'language/slackbot')); console.log(JSON.stringify(pkgSet, null, 2)); // Update root-level package.json (by shelling to npm) const spawn = require('child_process').spawn; const args = [`add`, `-D`].concat(Object.keys(pkgSet).map(pkg => `${pkg}@${pkgSet[pkg]}`)); console.log(`yarn ${args.join(' ')}`); spawn(`yarn`, args, { cwd: PROJECT_ROOT });