diff --git a/debugger/app.js b/debugger/app.js index 9981fbb9f5..370120c6fc 100644 --- a/debugger/app.js +++ b/debugger/app.js @@ -13,17 +13,17 @@ * limitations under the License. */ -// [START app] +// [START debugger_app] 'use strict'; -// [START setup] +// [START debugger_setup_implicit] require('@google-cloud/debug-agent').start(); +// [END debugger_setup_implicit] const express = require('express'); const app = express(); app.enable('trust proxy'); -// [END setup] app.get('/', (req, res) => { // Try using the StackDriver Debugger dashboard to inspect the "req" object @@ -38,6 +38,6 @@ if (module === require.main) { console.log('Press Ctrl+C to quit.'); }); } -// [END app] +// [END debugger_app] module.exports = app; diff --git a/debugger/package.json b/debugger/package.json index 98f8bd6f42..0e54bd94c0 100644 --- a/debugger/package.json +++ b/debugger/package.json @@ -22,7 +22,7 @@ "e2e-test": "samples test deploy" }, "dependencies": { - "@google-cloud/debug-agent": "2.1.0", + "@google-cloud/debug-agent": "2.1.1", "express": "4.15.3" }, "devDependencies": { diff --git a/debugger/snippets.js b/debugger/snippets.js new file mode 100644 index 0000000000..4abda897c6 --- /dev/null +++ b/debugger/snippets.js @@ -0,0 +1,23 @@ +/** + * 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'; + +// [START debugger_setup_explicit] +require('@google-cloud/debug-agent').start({ + projectId: 'your-project-id', + keyFilename: '/path/to/key.json' +}); +// [END debugger_setup_explicity] diff --git a/debugger/yarn.lock b/debugger/yarn.lock index e2aa7f655a..3c6234f97e 100644 --- a/debugger/yarn.lock +++ b/debugger/yarn.lock @@ -60,9 +60,9 @@ string-format-obj "^1.1.0" through2 "^2.0.3" -"@google-cloud/debug-agent@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@google-cloud/debug-agent/-/debug-agent-2.1.0.tgz#7c0622456bde975a2b80292a07827324e857b63a" +"@google-cloud/debug-agent@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@google-cloud/debug-agent/-/debug-agent-2.1.1.tgz#2015364bf6ac3e25f10f059b6bff8ad49106a22a" dependencies: "@google-cloud/common" "^0.13.3" acorn "^5.0.3" @@ -2373,7 +2373,7 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: +minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -2381,10 +2381,6 @@ minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - "mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" diff --git a/logging/logs.js b/logging/logs.js index d7915d4ff0..c9a77d96c9 100644 --- a/logging/logs.js +++ b/logging/logs.js @@ -15,30 +15,31 @@ 'use strict'; -// [START setup] -// By default, the client will authenticate using the service account file -// specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use -// the project specified by the GCLOUD_PROJECT environment variable. See -// https://googlecloudplatform.github.io/google-cloud-node/#/docs/google-cloud/latest/guides/authentication -var Logging = require('@google-cloud/logging'); -// [END setup] - -function writeLogEntry (logName, callback) { - var logging = Logging(); - var log = logging.log(logName); +function writeLogEntry (logName) { + // [START logging_write_log_entry] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); + + // The log to write to, e.g. "my-log" + // const logName = "my-log"; + + const log = logging.log(logName); // Modify this resource to match a resource in your project // See https://cloud.google.com/logging/docs/api/ref_v2beta1/rest/v2beta1/MonitoredResource - var resource = { + const resource = { // This example targets the "global" resource for simplicity type: 'global' }; // A text log entry - var entry = log.entry({ resource: resource }, 'Hello, world!'); + const entry = log.entry({ resource: resource }, 'Hello, world!'); // A structured log entry - var secondEntry = log.entry({ resource: resource }, { + const secondEntry = log.entry({ resource: resource }, { name: 'King Arthur', quest: 'Find the Holy Grail', favorite_color: 'Blue' @@ -46,110 +47,190 @@ function writeLogEntry (logName, callback) { // Save the two log entries. You can write entries one at a time, but it is // best to write multiple entires together in a batch. - log.write([ - entry, - secondEntry - ], function (err, apiResponse) { - if (err) { - return callback(err); - } + log.write([entry, secondEntry]) + .then(() => { + console.log(`Wrote to ${logName}`); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_write_log_entry] +} + +function loggingBunyan () { + // [START logging_bunyan] + const bunyan = require('bunyan'); - console.log('Wrote to %s', logName); - return callback(null, apiResponse); + // Imports the Google Cloud client library for Bunyan + const LoggingBunyan = require('@google-cloud/logging-bunyan'); + + // Instantiates a client + const loggingBunyan = LoggingBunyan(); + + // Create a Bunyan logger that streams to Stackdriver Logging + const logger = bunyan.createLogger({ + name: 'my-service', + streams: [ + loggingBunyan.stream('info') + ] }); + + // Writes some log entries + logger.error('warp nacelles offline'); + logger.info('shields at 99%'); + // [END logging_bunyan] } -function writeLogEntryAdvanced (logName, options, callback) { - var logging = Logging(); - var log = logging.log(logName); +function loggingWinston () { + // [START logging_winston] + const winston = require('winston'); + + // Imports the Google Cloud client library for Winston + const LoggingWinston = require('@google-cloud/logging-winston'); + + // Adds a transport that streams to Stackdriver Logging + winston.add(LoggingWinston, { + level: 'info' // log at 'warn' and above + }); + + // Writes some log entries + winston.error('warp nacelles offline'); + winston.info('shields at 99%'); + // [END logging_winston] +} + +function writeLogEntryAdvanced (logName, options) { + // [START logging_write_log_entry_advanced] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); + + // The log to write to, e.g. "my-log" + // const logName = "my-log"; + + // The request options + // const options = { + // resource: {...}, + // entry: 'Hello, world!' + // }; + + const log = logging.log(logName); // Prepare the entry - var entry = log.entry({ resource: options.resource }, options.entry); + const entry = log.entry({ resource: options.resource }, options.entry); // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging/log?method=write - log.write(entry, function (err, apiResponse) { - if (err) { - return callback(err); - } - - console.log('Wrote entry to log: %s', logName); - return callback(null, apiResponse); - }); + log.write(entry) + .then(() => { + console.log(`Wrote to ${logName}`); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_write_log_entry_advanced] } -function listLogEntries (logName, callback) { - var logging = Logging(); - var log = logging.log(logName); +function listLogEntries (logName) { + // [START logging_list_log_entries] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); + + // The log from which to list entries, e.g. "my-log" + // const logName = "my-log"; + + const log = logging.log(logName); // List the most recent entries for a given log // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging?method=getEntries - log.getEntries(function (err, entries) { - if (err) { - return callback(err); - } + log.getEntries() + .then((results) => { + const entries = results[0]; - console.log('Found %d entries!', entries.length); - return callback(null, entries); - }); + console.log('Logs:'); + entries.forEach((entry) => { + const metadata = entry.metadata; + console.log(`${metadata.timestamp}:`, metadata[metadata.payload]); + }); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_list_log_entries] } function listLogEntriesAdvanced (filter, pageSize, orderBy) { - var logging = Logging(); - var options = {}; - - if (filter) { - // See https://cloud.google.com/logging/docs/view/advanced_filters for more filter information. - options.filter = filter; - } - if (pageSize) { - options.pageSize = pageSize; - } - if (orderBy) { - options.orderBy = orderBy; - } + // [START logging_list_log_entries_advanced] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); + + // Filter results, e.g. "severity=ERROR" + // See https://cloud.google.com/logging/docs/view/advanced_filters for more filter information. + // const filter = 'severity=ERROR'; + + // const pageSize = 5; + + // Sort results + // const orderBy = 'timestamp'; + + const options = { + filter: filter, + pageSize: pageSize, + orderBy: orderBy + }; // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging?method=getEntries - return logging.getEntries(options) + logging.getEntries(options) .then((results) => { const entries = results[0]; - console.log('Found %d entries!', entries.length); - return entries; + + console.log('Logs:'); + entries.forEach((entry) => { + const metadata = entry.metadata; + console.log(`${metadata.timestamp}:`, metadata[metadata.payload]); + }); + }) + .catch((err) => { + console.error('ERROR:', err); }); + // [START logging_list_log_entries_advanced] } -function deleteLog (logName, callback) { - var logging = Logging(); - var log = logging.log(logName); +function deleteLog (logName) { + // [START logging_delete_log] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); + + // The log to delete, e.g. "my-log" + // const logName = "my-log"; + + const log = logging.log(logName); // Deletes a logger and all its entries. // Note that a deletion can take several minutes to take effect. // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging/log?method=delete - log.delete(function (err, apiResponse) { - if (err) { - return callback(err); - } - - console.log('Deleted log: %s', logName); - return callback(null, apiResponse); - }); + log.delete() + .then(() => { + console.log(`Deleted log: ${logName}`); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_delete_log] } // The command-line program -var cli = require('yargs'); - -var program = module.exports = { - writeLogEntry: writeLogEntry, - writeLogEntryAdvanced: writeLogEntryAdvanced, - listLogEntries: listLogEntries, - listLogEntriesAdvanced: listLogEntriesAdvanced, - deleteLog: deleteLog, - main: (args) => { - // Run the command-line program - cli.help().strict().parse(args).argv; // eslint-disable-line - } -}; - -cli +const cli = require(`yargs`) .demand(1) .command('list', 'Lists log entries, optionally filtering, limiting, and sorting results.', { filter: { @@ -171,34 +252,47 @@ cli description: 'Sort results.' } }, (opts) => { - program.listLogEntriesAdvanced(opts.filter, opts.limit, opts.sort); + listLogEntriesAdvanced(opts.filter, opts.limit, opts.sort); }) + .command('list-simple ', 'Lists log entries.', {}, (opts) => listLogEntries(opts.logName)) .command('write ', 'Writes a log entry to the specified log.', {}, (opts) => { try { opts.resource = JSON.parse(opts.resource); } catch (err) { - return console.error('"resource" must be a valid JSON string!'); + console.error('"resource" must be a valid JSON string!'); + return; } try { opts.entry = JSON.parse(opts.entry); } catch (err) {} - program.writeLogEntryAdvanced(opts.logName, opts, console.log); + writeLogEntryAdvanced(opts.logName, opts); + }) + .command('write-simple ', 'Writes a basic log entry to the specified log.', {}, (opts) => { + writeLogEntry(opts.logName); + }) + .command('bunyan', 'Writes some logs entries to Stackdriver Logging via Winston.', {}, () => { + loggingBunyan(); + }) + .command('winston', 'Writes some logs entries to Stackdriver Logging via Winston.', {}, () => { + loggingWinston(); }) .command('delete ', 'Deletes the specified Log.', {}, (opts) => { - program.deleteLog(opts.logName, console.log); + deleteLog(opts.logName); }) .example('node $0 list', 'List all log entries.') .example('node $0 list -f "severity=ERROR" -s "timestamp" -l 2', 'List up to 2 error entries, sorted by timestamp ascending.') - .example('node $0 list -f \'logName="my-log"\' -l 2', 'List up to 2 log entries from the "my-log" log.') + .example(`node $0 list -f 'logName="my-log"' -l 2`, 'List up to 2 log entries from the "my-log" log.') .example('node $0 write my-log \'{"type":"gae_app","labels":{"module_id":"default"}}\' \'"Hello World!"\'', 'Write a string log entry.') .example('node $0 write my-log \'{"type":"global"}\' \'{"message":"Hello World!"}\'', 'Write a JSON log entry.') .example('node $0 delete my-log', 'Delete "my-log".') .wrap(120) .recommendCommands() - .epilogue('For more information, see https://cloud.google.com/logging/docs'); + .epilogue(`For more information, see https://cloud.google.com/logging/docs`) + .help() + .strict(); if (module === require.main) { - program.main(process.argv.slice(2)); + cli.parse(process.argv.slice(2)); } diff --git a/logging/package.json b/logging/package.json index 56fccf4434..5bedf0d1c1 100644 --- a/logging/package.json +++ b/logging/package.json @@ -20,18 +20,22 @@ }, "dependencies": { "@google-cloud/logging": "1.0.2", + "@google-cloud/logging-bunyan": "0.4.2", + "@google-cloud/logging-winston": "0.4.1", "@google-cloud/storage": "1.1.1", + "bunyan": "1.8.10", "express": "4.15.3", "fluent-logger": "2.4.0", + "winston": "2.3.1", "yargs": "8.0.2" }, "devDependencies": { "@google-cloud/nodejs-repo-tools": "1.4.15", "ava": "0.19.1", "proxyquire": "1.8.0", - "sinon": "2.3.4", + "sinon": "2.3.5", "supertest": "3.0.0", - "uuid": "3.0.1" + "uuid": "3.1.0" }, "cloud-repo-tools": { "requiresKeyFile": true, diff --git a/logging/quickstart.js b/logging/quickstart.js index 04feb45798..99d91c038b 100644 --- a/logging/quickstart.js +++ b/logging/quickstart.js @@ -23,14 +23,14 @@ const Logging = require('@google-cloud/logging'); const projectId = 'YOUR_PROJECT_ID'; // Instantiates a client -const loggingClient = Logging({ +const logging = Logging({ projectId: projectId }); // The name of the log to write to const logName = 'my-log'; // Selects the log to write to -const log = loggingClient.log(logName); +const log = logging.log(logName); // The data to write to the log const text = 'Hello, world!'; diff --git a/logging/sinks.js b/logging/sinks.js index 4c7b0e98b7..eadacb36b9 100644 --- a/logging/sinks.js +++ b/logging/sinks.js @@ -15,27 +15,31 @@ 'use strict'; -// [START setup] -// By default, the client will authenticate using the service account file -// specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use -// the project specified by the GCLOUD_PROJECT environment variable. See -// https://googlecloudplatform.github.io/google-cloud-node/#/docs/google-cloud/latest/guides/authentication -var Logging = require('@google-cloud/logging'); -// [END setup] +function createSink (sinkName, bucketName, filter) { + // [START logging_create_sink] + // Imports the Google Cloud client libraries + const Logging = require('@google-cloud/logging'); + const Storage = require('@google-cloud/storage'); -// [START create_sink] -var Storage = require('@google-cloud/storage'); + // Instantiates clients + const logging = Logging(); + const storage = Storage(); -function createSink (sinkName, bucketName, filter, callback) { - var logging = Logging(); - var storage = Storage(); + // The name of the sink, e.g. "my-sink" + // const sinkName = "my-sink"; + + // The destination bucket, e.g. "my-bucket" + // const bucketName = "my-bucket"; + + // An option log filter, e.g. "severity=ERROR" + // const filter = "severity=ERROR"; // The destination can be a Cloud Storage bucket, a Cloud Pub/Sub topic, // or a BigQuery dataset. In this case, it is a Cloud Storage Bucket. // See https://cloud.google.com/logging/docs/api/tasks/exporting-logs for // information on the destination format. - var destination = storage.bucket(bucketName); - var sink = logging.sink(sinkName); + const destination = storage.bucket(bucketName); + const sink = logging.sink(sinkName); /** * The filter determines which logs this sink matches and will be exported @@ -44,55 +48,91 @@ function createSink (sinkName, bucketName, filter, callback) { * See https://cloud.google.com/logging/docs/view/advanced_filters for more * filter information. */ - var config = { + const config = { destination: destination, filter: filter }; // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging/sink?method=create - sink.create(config, function (err, sink, apiResponse) { - if (err) { - return callback(err); - } - - console.log('Created sink %s to %s', sinkName, bucketName); - return callback(null, sink, apiResponse); - }); + sink.create(config) + .then(() => { + console.log(`Created sink ${sinkName} to ${bucketName}`); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_create_sink] } -// [END create_sink] -function getSinkMetadata (sinkName, callback) { - var logging = Logging(); - var sink = logging.sink(sinkName); +function getSinkMetadata (sinkName) { + // [START logging_get_sink] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); + + // The sink to retrieve, e.g. "my-sink" + // const sinkName = "my-sink"; + + const sink = logging.sink(sinkName); // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging/sink?method=getMetadata - sink.getMetadata(function (err, metadata) { - if (err) { - return callback(err); - } - - console.log('Got metadata for sink: %s', sinkName); - return callback(null, metadata); - }); + sink.getMetadata() + .then((results) => { + const metadata = results[0]; + + console.log(`Name: ${metadata.name}`); + console.log(`Destination: ${metadata.destination}`); + console.log(`Filter: ${metadata.filter}`); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_get_sink] } -function listSinks (callback) { - var logging = Logging(); +function listSinks () { + // [START logging_list_sinks] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging?method=getSinks - logging.getSinks(function (err, sinks) { - if (err) { - return callback(err); - } - - console.log('Found %d sink(s)!', sinks.length); - return callback(null, sinks); - }); + logging.getSinks() + .then((results) => { + const sinks = results[0]; + + console.log('Sinks:'); + sinks.forEach((sink) => { + console.log(sink.name); + console.log(` Destination: ${sink.metadata.destination}`); + console.log(` Filter: ${sink.metadata.filter}`); + }); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_list_sinks] } -function updateSink (sinkName, filter, callback) { - var logging = Logging(); - var sink = logging.sink(sinkName); +function updateSink (sinkName, filter) { + // [START logging_update_sink] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); + + // The sink to update, e.g. "my-sink" + // const sinkName = "my-sink"; + + // The the filter for the sink, e.g. "severity >= WARNING" + // const filter = "severity >= WARNING"; + + const sink = logging.sink(sinkName); /** * The filter determines which logs this sink matches and will be exported @@ -101,67 +141,60 @@ function updateSink (sinkName, filter, callback) { * See https://cloud.google.com/logging/docs/view/advanced_filters for more * filter information. */ - var metadata = { + const metadata = { filter: filter }; // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging/sink?method=setMetadata - sink.setMetadata(metadata, function (err, apiResponse) { - if (err) { - return callback(err); - } - - console.log('Updated sink: %s', sinkName); - return callback(null, apiResponse); - }); + sink.setMetadata(metadata) + .then((results) => { + console.log(`Sink ${sinkName} updated.`); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_update_sink] } -function deleteSink (sinkName, callback) { - var logging = Logging(); - var sink = logging.sink(sinkName); +function deleteSink (sinkName) { + // [START logging_update_sink] + // Imports the Google Cloud client library + const Logging = require('@google-cloud/logging'); + + // Instantiates a client + const logging = Logging(); + + // The sink to delete, e.g. "my-sink" + // const sinkName = "my-sink"; + + const sink = logging.sink(sinkName); // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging/sink?method=delete - sink.delete(function (err, apiResponse) { - if (err) { - return callback(err); - } - - console.log('Deleted sink: %s', sinkName); - return callback(null, apiResponse); - }); + sink.delete() + .then((results) => { + console.log(`Sink ${sinkName} deleted.`); + }) + .catch((err) => { + console.error('ERROR:', err); + }); + // [END logging_update_sink] } // The command-line program -var cli = require('yargs'); - -var program = module.exports = { - createSink: createSink, - getSinkMetadata: getSinkMetadata, - listSinks: listSinks, - updateSink: updateSink, - deleteSink: deleteSink, - main: function (args) { - // Run the command-line program - cli.help().strict().parse(args).argv; // eslint-disable-line - } -}; - -cli +const cli = require(`yargs`) .demand(1) .command('create [filter]', 'Creates a new sink with the given name to the specified bucket with an optional filter.', {}, (opts) => { - program.createSink(opts.sinkName, opts.bucketName, opts.filter, console.log); + createSink(opts.sinkName, opts.bucketName, opts.filter); }) .command('get ', 'Gets the metadata for the specified sink.', {}, (opts) => { - program.getSinkMetadata(opts.sinkName, console.log); - }) - .command('list', 'Lists all sinks.', {}, () => { - program.listSinks(console.log); + getSinkMetadata(opts.sinkName); }) + .command('list', 'Lists all sinks.', {}, listSinks) .command('update ', 'Updates the filter for the specified sink.', {}, (opts) => { - program.updateSink(opts.sinkName, opts.filter, console.log); + updateSink(opts.sinkName, opts.filter); }) .command('delete ', 'Deletes the specified sink.', {}, (opts) => { - program.deleteSink(opts.sinkName, console.log); + deleteSink(opts.sinkName); }) .example('node $0 create export-errors app-error-logs', 'Create a new sink named "export-errors" that exports logs to a bucket named "app-error-logs".') .example('node $0 get export-errors', 'Get the metadata for a sink name "export-errors".') @@ -170,8 +203,10 @@ cli .example('node $0 delete export-errors', 'Delete a sink named "export-errors".') .wrap(120) .recommendCommands() - .epilogue('For more information, see https://cloud.google.com/logging/docs'); + .epilogue(`For more information, see https://cloud.google.com/logging/docs`) + .help() + .strict(); if (module === require.main) { - program.main(process.argv.slice(2)); + cli.parse(process.argv.slice(2)); } diff --git a/logging/system-test/logs.test.js b/logging/system-test/logs.test.js index 31ca0c0c69..691eba341b 100644 --- a/logging/system-test/logs.test.js +++ b/logging/system-test/logs.test.js @@ -15,53 +15,25 @@ 'use strict'; +const path = require(`path`); const test = require(`ava`); const tools = require(`@google-cloud/nodejs-repo-tools`); const uuid = require(`uuid`); -const program = require(`../logs`); +const cwd = path.join(__dirname, `..`); +const cmd = `node logs.js`; const logName = `nodejs-docs-samples-test-${uuid.v4()}`; -const projectId = process.env.GCLOUD_PROJECT; -const filter = `resource.type="global" AND logName="projects/${projectId}/logs/${logName}"`; const message = `Hello world!`; test.before(tools.checkCredentials); -test.beforeEach(tools.stubConsole); -test.afterEach.always(tools.restoreConsole); -test.cb.serial(`should write a log entry`, (t) => { - const options = { - resource: { - type: `global` - }, - entry: { - message: message - } - }; - - program.writeLogEntryAdvanced(logName, options, (err, apiResponse) => { - t.ifError(err); - t.not(apiResponse, undefined); - t.end(); - }); -}); - -test.serial(`should list log entries`, async (t) => { - t.plan(0); - await tools.tryTest(async (assert) => { - const entries = await program.listLogEntriesAdvanced(filter, 5, null); - assert(entries.some((entry) => entry.data && entry.data.message === message)); - }).start(); +test.serial(`should write a log entry`, async (t) => { + const output = await tools.runAsync(`${cmd} write ${logName} '{"type":"global"}' '{"message":"${message}"}'`, cwd); + t.is(output, `Wrote to ${logName}`); }); -test.cb.serial(`should delete a log`, (t) => { - program.deleteLog(logName, (err, apiResponse) => { - // Ignore "Not Found" error - if (err && err.code !== 5) { - t.ifError(err); - t.not(apiResponse, undefined); - } - t.end(); - }); +test.serial(`should write a simple log entry`, async (t) => { + const output = await tools.runAsync(`${cmd} write-simple ${logName}`, cwd); + t.is(output, `Wrote to ${logName}`); }); diff --git a/logging/system-test/sinks.test.js b/logging/system-test/sinks.test.js index 288c523528..3b91eee1d5 100644 --- a/logging/system-test/sinks.test.js +++ b/logging/system-test/sinks.test.js @@ -15,13 +15,15 @@ 'use strict'; -const logging = require(`@google-cloud/logging`)(); -const storage = require(`@google-cloud/storage`)(); +const logging = require('@google-cloud/logging')(); +const path = require(`path`); +const storage = require('@google-cloud/storage')(); const test = require(`ava`); const tools = require(`@google-cloud/nodejs-repo-tools`); const uuid = require(`uuid`); -const program = require(`../sinks`); +const cwd = path.join(__dirname, `..`); +const cmd = `node sinks.js`; const bucketName = `nodejs-docs-samples-test-${uuid.v4()}`; const sinkName = `nodejs-docs-samples-test-${uuid.v4()}`; @@ -41,87 +43,41 @@ test.after.always(async (t) => { } catch (err) {} // ignore error }); -test.beforeEach(tools.stubConsole); -test.afterEach.always(tools.restoreConsole); - -test.cb.serial(`should create a new sink`, (t) => { - program.createSink(sinkName, bucketName, filter, (err, sink, apiResponse) => { - t.ifError(err); - t.truthy(sink); - t.is(sink.name, sinkName); - t.not(apiResponse, undefined); - t.end(); - }); +test.serial(`should create a sink`, async (t) => { + const output = await tools.runAsync(`${cmd} create ${sinkName} ${bucketName} "${filter}"`, cwd); + t.is(output, `Created sink ${sinkName} to ${bucketName}`); + const [metadata] = await logging.sink(sinkName).getMetadata(); + t.is(metadata.name, sinkName); + t.is(metadata.destination.includes(bucketName), true); + t.is(metadata.filter, filter); }); -test.cb.serial(`should get the metadata for a sink`, (t) => { - const expected = { - name: sinkName, - destination: `storage.googleapis.com/${bucketName}`, - filter: filter, - outputVersionFormat: `V2`, - writerIdentity: `serviceAccount:cloud-logs@system.gserviceaccount.com` - }; - - program.getSinkMetadata(sinkName, (err, metadata) => { - t.ifError(err); - for (let key in expected) { - t.is(metadata[key], expected[key]); - } - t.end(); - }); +test.serial(`should get a sink`, async (t) => { + const output = await tools.runAsync(`${cmd} get ${sinkName}`, cwd); + t.is(output.includes(sinkName), true); }); test.serial(`should list sinks`, async (t) => { - await tools.tryTest(async () => { - await new Promise((resolve, reject) => { - program.listSinks((err, sinks) => { - try { - t.ifError(err); - t.true(Array.isArray(sinks)); - t.true(sinks.some((sink) => sink.name === sinkName)); - resolve(); - } catch (err) { - reject(err); - } - }); - }); + t.plan(0); + await tools.tryTest(async (assert) => { + const output = await tools.runAsync(`${cmd} list`, cwd); + assert(output.includes(`Sinks:`)); + assert(output.includes(sinkName)); }).start(); }); -test.cb.serial(`should update metdata for a sink`, (t) => { - const newFilter = `severity > ALERT`; - const expected = { - name: sinkName, - destination: `storage.googleapis.com/${bucketName}`, - filter: newFilter, - outputVersionFormat: `V2`, - writerIdentity: `serviceAccount:cloud-logs@system.gserviceaccount.com` - }; - - program.updateSink(sinkName, newFilter, (err, apiResponse) => { - t.ifError(err); - t.not(apiResponse, undefined); - - program.getSinkMetadata(sinkName, (err, metadata) => { - t.ifError(err); - for (let key in expected) { - t.is(metadata[key], expected[key]); - } - t.end(); - }); - }); +test.serial(`should update a sink`, async (t) => { + const newFilter = 'severity >= WARNING'; + const output = await tools.runAsync(`${cmd} update ${sinkName} "${newFilter}"`, cwd); + t.is(output, `Sink ${sinkName} updated.`); + const [metadata] = await logging.sink(sinkName).getMetadata(); + t.is(metadata.name, sinkName); + t.is(metadata.destination.includes(bucketName), true); + t.is(metadata.filter, newFilter); }); -test.cb.serial(`should delete a sink`, (t) => { - program.deleteSink(sinkName, (err, apiResponse) => { - t.ifError(err); - t.not(apiResponse, undefined); - - program.getSinkMetadata(sinkName, (err) => { - t.truthy(err); - t.true(err.code === 404 || err.code === 5); - t.end(); - }); - }); +test.serial(`should delete a sink`, async (t) => { + const output = await tools.runAsync(`${cmd} delete ${sinkName}`, cwd); + t.is(output, `Sink ${sinkName} deleted.`); + await t.throws(logging.sink(sinkName).getMetadata()); }); diff --git a/logging/yarn.lock b/logging/yarn.lock index 544b0b3ea8..9967ddd540 100644 --- a/logging/yarn.lock +++ b/logging/yarn.lock @@ -75,7 +75,24 @@ string-format-obj "^1.1.0" through2 "^2.0.3" -"@google-cloud/logging@1.0.2": +"@google-cloud/logging-bunyan@0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@google-cloud/logging-bunyan/-/logging-bunyan-0.4.2.tgz#47454f6e9d14acf95cf180793b84a7eb6195d1ce" + dependencies: + "@google-cloud/logging" "^1.0.0" + extend "^3.0.0" + +"@google-cloud/logging-winston@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@google-cloud/logging-winston/-/logging-winston-0.4.1.tgz#91dcca11b0465df739925e1ac2ad2a8825738287" + dependencies: + "@google-cloud/common" "^0.13.0" + "@google-cloud/logging" "^1.0.0" + extend "^3.0.0" + is "^3.2.0" + winston "^2.2.0" + +"@google-cloud/logging@1.0.2", "@google-cloud/logging@^1.0.0": version "1.0.2" resolved "https://registry.yarnpkg.com/@google-cloud/logging/-/logging-1.0.2.tgz#b6177257d0391e2e1b4f36ed6ef42cfb2bc84e62" dependencies: @@ -289,6 +306,10 @@ async@^2.0.1, async@^2.1.2, async@^2.3.0, async@^2.4.0: dependencies: lodash "^4.14.0" +async@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -765,6 +786,15 @@ builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +bunyan@1.8.10: + version "1.8.10" + resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.10.tgz#201fedd26c7080b632f416072f53a90b9a52981c" + optionalDependencies: + dtrace-provider "~0.8" + moment "^2.10.6" + mv "~2" + safe-json-stringify "~1" + bytebuffer@~5: version "5.0.1" resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" @@ -942,6 +972,10 @@ color-name@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" +colors@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + colors@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1080,6 +1114,10 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + d64@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/d64/-/d64-1.0.0.tgz#4002a87e850cbfc9f9d9706b60fca613a3336e90" @@ -1094,18 +1132,12 @@ date-time@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/date-time/-/date-time-0.1.1.tgz#ed2f6d93d9790ce2fd66d5b5ff3edd5bbcbf3b07" -debug@2.6.7: +debug@2.6.7, debug@^2.1.1, debug@^2.2.0: version "2.6.7" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" dependencies: ms "2.0.0" -debug@^2.1.1, debug@^2.2.0: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" - dependencies: - ms "2.0.0" - decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1170,6 +1202,12 @@ dot-prop@^4.1.0: dependencies: is-obj "^1.0.0" +dtrace-provider@~0.8: + version "0.8.3" + resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.3.tgz#ba1bfc6493285ccfcfc6ab69cd5c61d74c2a43bf" + dependencies: + nan "^2.3.3" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -1373,6 +1411,10 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -1618,6 +1660,16 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.0.3, glob@^7.0.5: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -2137,7 +2189,7 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" -isstream@~0.1.2: +isstream@0.1.x, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -2534,14 +2586,10 @@ mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, m dependencies: mime-db "~1.27.0" -mime@1.3.4: +mime@1.3.4, mime@^1.2.11, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -mime@^1.2.11, mime@^1.3.4: - version "1.3.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" - mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -2550,7 +2598,7 @@ mimic-response@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -2564,7 +2612,7 @@ minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -"mkdirp@>=0.5 0", mkdirp@^0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -2578,6 +2626,10 @@ module-not-found-error@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0" +moment@^2.10.6: + version "2.18.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2604,7 +2656,15 @@ multimatch@^2.1.0: arrify "^1.0.0" minimatch "^3.0.0" -nan@^2.0.0, nan@^2.3.0: +mv@~2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +nan@^2.0.0, nan@^2.3.0, nan@^2.3.3: version "2.6.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" @@ -2616,6 +2676,10 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -3309,6 +3373,12 @@ rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: dependencies: glob "^7.0.5" +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + dependencies: + glob "^6.0.1" + safe-buffer@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223" @@ -3317,6 +3387,10 @@ safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" +safe-json-stringify@~1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.0.4.tgz#81a098f447e4bbc3ff3312a243521bc060ef5911" + samsam@1.x, samsam@^1.1.3: version "1.2.1" resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.2.1.tgz#edd39093a3184370cb859243b2bdf255e7d8ea67" @@ -3387,9 +3461,9 @@ sinon@2.3.2: text-encoding "0.6.4" type-detect "^4.0.0" -sinon@2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.3.4.tgz#466ad8d1bae86d6db51aa218b92e997bc3e5db88" +sinon@2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.3.5.tgz#9a2fc0ff8d526da716f30953aa2c65d518917f6c" dependencies: diff "^3.1.0" formatio "1.2.0" @@ -3479,6 +3553,10 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + stack-utils@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" @@ -3790,9 +3868,9 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@3.0.1, uuid@^3.0.0, uuid@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +uuid@3.1.0, uuid@^3.0.0, uuid@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" validate-npm-package-license@^3.0.1: version "3.0.1" @@ -3837,6 +3915,17 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" +winston@2.3.1, winston@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119" + dependencies: + async "~1.0.0" + colors "1.0.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + stack-trace "0.0.x" + wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" diff --git a/trace/app.js b/trace/app.js index 89ca9888a5..2f4866e0ef 100644 --- a/trace/app.js +++ b/trace/app.js @@ -15,9 +15,11 @@ 'use strict'; -// [START app] +// [START trace_app] if (process.env.NODE_ENV === 'production') { + // [START trace_setup_implicit] require('@google-cloud/trace-agent').start(); + // [END trace_setup_implicit] } const express = require('express'); @@ -52,4 +54,4 @@ app.listen(PORT, () => { console.log(`App listening on port ${PORT}`); console.log('Press Ctrl+C to quit.'); }); -// [END app] +// [END trace_app] diff --git a/trace/snippets.js b/trace/snippets.js new file mode 100644 index 0000000000..43993e0ece --- /dev/null +++ b/trace/snippets.js @@ -0,0 +1,23 @@ +/** + * 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'; + +// [START trace_setup_explicit] +require('@google-cloud/trace-agent').start({ + projectId: 'your-project-id', + keyFilename: '/path/to/key.json' +}); +// [END trace_setup_explicity] diff --git a/trace/yarn.lock b/trace/yarn.lock index 0bf2c34b03..c1035933fb 100644 --- a/trace/yarn.lock +++ b/trace/yarn.lock @@ -37,9 +37,9 @@ ansi-styles "^2.2.1" esutils "^2.0.2" -"@google-cloud/common@^0.12.0": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.12.2.tgz#78c344288c4605a29f4c2899391759d7dc817c43" +"@google-cloud/common@^0.13.2": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.13.3.tgz#d73ee3fa511f29ffbcc44667898685709e9fec8c" dependencies: array-uniq "^1.0.3" arrify "^1.0.1" @@ -48,43 +48,42 @@ duplexify "^3.5.0" ent "^2.2.0" extend "^3.0.0" - google-auto-auth "^0.5.2" + google-auto-auth "^0.6.0" is "^3.2.0" log-driver "^1.2.5" methmeth "^1.1.0" modelo "^4.2.0" request "^2.79.0" - retry-request "^1.3.2" + retry-request "^2.0.0" split-array-stream "^1.0.0" stream-events "^1.0.1" string-format-obj "^1.1.0" through2 "^2.0.3" -"@google-cloud/nodejs-repo-tools@1.4.5": - version "1.4.5" - resolved "https://registry.yarnpkg.com/@google-cloud/nodejs-repo-tools/-/nodejs-repo-tools-1.4.5.tgz#fa2f8fcf29969e05de184fa4b8f03363903566e3" +"@google-cloud/nodejs-repo-tools@1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@google-cloud/nodejs-repo-tools/-/nodejs-repo-tools-1.4.15.tgz#b047dd70b4829a6037b71452843ef80b06c55a0f" dependencies: ava "0.19.1" colors "1.1.2" - fs-extra "3.0.0" - got "6.7.1" - handlebars "4.0.6" + fs-extra "3.0.1" + got "7.0.0" + handlebars "4.0.10" lodash "4.17.4" - proxyquire "1.7.11" - sinon "2.1.0" + proxyquire "1.8.0" + sinon "2.3.2" string "3.3.3" supertest "3.0.0" - yargs "7.1.0" + yargs "8.0.1" -"@google-cloud/trace-agent@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@google-cloud/trace-agent/-/trace-agent-1.1.0.tgz#19084669270d64566906102e2bb0e7957d7f05fd" +"@google-cloud/trace-agent@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@google-cloud/trace-agent/-/trace-agent-2.1.0.tgz#d3185115fd1089b3b0aa6a73d90204ed483a8a0f" dependencies: - "@google-cloud/common" "^0.12.0" + "@google-cloud/common" "^0.13.2" continuation-local-storage "^3.1.4" - counter_google-cloud_trace-agent "^0.1.0" extend "^3.0.0" - gcp-metadata "^0.1.0" + gcp-metadata "^0.2.0" is "^3.2.0" lodash.findindex "^4.4.0" lodash.isequal "^4.0.0" @@ -761,11 +760,7 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -camelcase@^4.0.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -1005,10 +1000,6 @@ core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -counter_google-cloud_trace-agent@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/counter_google-cloud_trace-agent/-/counter_google-cloud_trace-agent-0.1.0.tgz#06fbbc2f4c7ceb8aee6472de33f0c15995e790e7" - create-error-class@^3.0.0, create-error-class@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" @@ -1055,17 +1046,11 @@ date-time@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/date-time/-/date-time-0.1.1.tgz#ed2f6d93d9790ce2fd66d5b5ff3edd5bbcbf3b07" -debug@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" - dependencies: - ms "0.7.2" - -debug@2.6.3, debug@^2.1.1, debug@^2.2.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" +debug@2.6.7, debug@^2.1.1, debug@^2.2.0: + version "2.6.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" dependencies: - ms "0.7.2" + ms "2.0.0" debug@~2.2.0: version "2.2.0" @@ -1077,6 +1062,12 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decompress-response@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + deep-equal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -1266,9 +1257,9 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -express@4.15.2: - version "4.15.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" +express@4.15.3: + version "4.15.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662" dependencies: accepts "~1.3.3" array-flatten "1.1.1" @@ -1276,28 +1267,28 @@ express@4.15.2: content-type "~1.0.2" cookie "0.3.1" cookie-signature "1.0.6" - debug "2.6.1" + debug "2.6.7" depd "~1.1.0" encodeurl "~1.0.1" escape-html "~1.0.3" etag "~1.8.0" - finalhandler "~1.0.0" + finalhandler "~1.0.3" fresh "0.5.0" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.1" path-to-regexp "0.1.7" - proxy-addr "~1.1.3" + proxy-addr "~1.1.4" qs "6.4.0" range-parser "~1.2.0" - send "0.15.1" - serve-static "1.12.1" + send "0.15.3" + serve-static "1.12.3" setprototypeof "1.0.3" statuses "~1.3.1" - type-is "~1.6.14" + type-is "~1.6.15" utils-merge "1.0.0" - vary "~1.1.0" + vary "~1.1.1" extend@^3.0.0, extend@~3.0.0: version "3.0.0" @@ -1340,11 +1331,11 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" +finalhandler@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" dependencies: - debug "2.6.3" + debug "2.6.7" encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" @@ -1417,9 +1408,9 @@ fresh@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" -fs-extra@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.0.tgz#244e0c4b0b8818f54040ec049d8a2bddc1202861" +fs-extra@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" dependencies: graceful-fs "^4.1.2" jsonfile "^3.0.0" @@ -1474,6 +1465,13 @@ gcp-metadata@^0.1.0: extend "^3.0.0" retry-request "^1.3.2" +gcp-metadata@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.2.0.tgz#62dafca65f3a631bc8ce2ec3b77661f5f9387a0a" + dependencies: + extend "^3.0.0" + retry-request "^2.0.0" + generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" @@ -1560,11 +1558,12 @@ google-auth-library@^0.10.0: lodash.noop "^3.0.1" request "^2.74.0" -google-auto-auth@^0.5.2: - version "0.5.4" - resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.5.4.tgz#1d86c7928d633e75a9c1ab034a527efcce4a40b1" +google-auto-auth@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.6.1.tgz#c05d820e9454739ecf28a8892eeab3d1624f2cb3" dependencies: async "^2.1.2" + gcp-metadata "^0.1.0" google-auth-library "^0.10.0" object-assign "^3.0.0" request "^2.79.0" @@ -1575,7 +1574,25 @@ google-p12-pem@^0.1.0: dependencies: node-forge "^0.7.1" -got@6.7.1, got@^6.7.1: +got@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.0.0.tgz#82d439f6763cdb1c8821b7a3aae2784c88c3b8d3" + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.2.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + +got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" dependencies: @@ -1608,9 +1625,9 @@ gtoken@^1.2.1: mime "^1.2.11" request "^2.72.0" -handlebars@4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" +handlebars@4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -1656,6 +1673,16 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-symbol-support-x@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.2.0.tgz#e624ead5190c35b34e4e299344dff6437db02ce2" + +has-to-string-tag-x@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.2.0.tgz#c536dc4dbbebe1be9d28f624fd320f793129fd53" + dependencies: + has-symbol-support-x "^1.2.0" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1766,9 +1793,9 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ipaddr.js@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" +ipaddr.js@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" irregular-plurals@^1.0.0: version "1.2.0" @@ -1871,7 +1898,7 @@ is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" -is-object@~1.0.1: +is-object@^1.0.1, is-object@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" @@ -1881,7 +1908,7 @@ is-observable@^0.2.0: dependencies: symbol-observable "^0.2.2" -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -1955,6 +1982,13 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +isurl@^1.0.0-alpha5: + version "1.0.0-alpha6" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0-alpha6.tgz#9df0b8477866aa425d046be8fbb429e64b5b8915" + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + jest-diff@19.0.0, jest-diff@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c" @@ -2278,6 +2312,12 @@ media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -2327,12 +2367,22 @@ mime-db@~1.25.0: version "1.25.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.7: version "2.1.13" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" dependencies: mime-db "~1.25.0" +mime-types@~2.1.15: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + mime@1.3.4, mime@^1.2.11, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" @@ -2341,6 +2391,10 @@ mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" +mimic-response@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + minimatch@^3.0.0, minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -2373,7 +2427,11 @@ ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" -ms@0.7.2, ms@^0.7.1: +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@^0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" @@ -2531,16 +2589,22 @@ os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" +os-locale@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.0.0.tgz#15918ded510522b81ee7ae5a309d54f639fc39a4" dependencies: + execa "^0.5.0" lcid "^1.0.0" + mem "^1.1.0" os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +p-cancelable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.2.0.tgz#3152f4f30be7606b60ebfe8bb93b3fdf69085e46" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -2555,6 +2619,10 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-timeout@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.1.1.tgz#d28e9fdf96e328886fbff078f886ad158c53bf6d" + package-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-1.2.0.tgz#003e56cd57b736a6ed6114cc2b81542672770e44" @@ -2739,16 +2807,16 @@ process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" -proxy-addr@~1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" +proxy-addr@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" dependencies: forwarded "~0.1.0" - ipaddr.js "1.2.0" + ipaddr.js "1.3.0" -proxyquire@1.7.11: - version "1.7.11" - resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-1.7.11.tgz#13b494eb1e71fb21cc3ebe3699e637d3bec1af9e" +proxyquire@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-1.8.0.tgz#02d514a5bed986f04cbb2093af16741535f79edc" dependencies: fill-keys "^1.0.2" module-not-found-error "^1.0.0" @@ -2954,7 +3022,7 @@ request@2.76.0: tough-cookie "~2.3.0" tunnel-agent "~0.4.1" -request@^2.72.0, request@^2.74.0, request@^2.79.0: +request@^2.72.0, request@^2.74.0, request@^2.79.0, request@^2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -3021,6 +3089,13 @@ retry-request@^1.3.2: request "2.76.0" through2 "^2.0.0" +retry-request@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-2.0.5.tgz#d089a14a15db9ed60685b8602b40f4dcc0d3fb3c" + dependencies: + request "^2.81.0" + through2 "^2.0.0" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -3051,11 +3126,11 @@ semver-diff@^2.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -send@0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" +send@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" dependencies: - debug "2.6.1" + debug "2.6.7" depd "~1.1.0" destroy "~1.0.4" encodeurl "~1.0.1" @@ -3064,19 +3139,19 @@ send@0.15.1: fresh "0.5.0" http-errors "~1.6.1" mime "1.3.4" - ms "0.7.2" + ms "2.0.0" on-finished "~2.3.0" range-parser "~1.2.0" statuses "~1.3.1" -serve-static@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" +serve-static@1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" parseurl "~1.3.1" - send "0.15.1" + send "0.15.3" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -3102,9 +3177,9 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -sinon@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.1.0.tgz#e057a9d2bf1b32f5d6dd62628ca9ee3961b0cafb" +sinon@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.3.2.tgz#c43a9c570f32baac1159505cfeed19108855df89" dependencies: diff "^3.1.0" formatio "1.2.0" @@ -3217,7 +3292,7 @@ string-format-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/string-format-obj/-/string-format-obj-1.1.0.tgz#7635610b1ef397013e8478be98a170e04983d068" -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -3423,12 +3498,12 @@ type-detect@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.1.tgz#c2473c08dc6f975232ca7e3317570f187bf7f3e2" -type-is@~1.6.14: - version "1.6.14" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" +type-is@~1.6.15: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" dependencies: media-typer "0.3.0" - mime-types "~2.1.13" + mime-types "~2.1.15" typedarray@^0.0.6: version "0.0.6" @@ -3519,9 +3594,9 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -vary@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" +vary@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" verror@1.3.6: version "1.3.6" @@ -3529,9 +3604,9 @@ verror@1.3.6: dependencies: extsprintf "1.0.2" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" which@^1.2.8, which@^1.2.9: version "1.2.14" @@ -3615,29 +3690,29 @@ yallist@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" dependencies: - camelcase "^3.0.0" + camelcase "^4.1.0" -yargs@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" +yargs@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.1.tgz#420ef75e840c1457a80adcca9bc6fa3849de51aa" dependencies: - camelcase "^3.0.0" + camelcase "^4.1.0" cliui "^3.2.0" decamelize "^1.1.1" get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^5.0.0" + yargs-parser "^7.0.0" yargs@~3.10.0: version "3.10.0"