diff --git a/package.json b/package.json
index a82728870e..03e223e808 100644
--- a/package.json
+++ b/package.json
@@ -82,6 +82,7 @@
"@google-cloud/monitoring": "0.1.4",
"@google-cloud/pubsub": "0.8.0",
"@google-cloud/resource": "0.6.0",
+ "@google-cloud/spanner": "0.1.0",
"@google-cloud/speech": "0.6.0",
"@google-cloud/storage": "0.7.0",
"@google-cloud/translate": "0.7.0",
diff --git a/spanner/README.md b/spanner/README.md
new file mode 100644
index 0000000000..27d590e8cd
--- /dev/null
+++ b/spanner/README.md
@@ -0,0 +1,130 @@
+
+
+# Cloud Spanner Node.js Samples
+
+[Cloud Spanner][spanner_docs] is a managed, mission-critical, globally
+consistent and scalable relational database service. Cloud Spanner solves the
+need for a horizontally-scaling database with consistent global transaction and
+SQL semantics.
+
+## Table of Contents
+
+* [Setup](#setup)
+* [Samples](#samples)
+ * [Getting started with Google Cloud Spanner API](#getting-started-with-google-cloud-spanner-api)
+
+## Setup
+
+1. Read [Prerequisites][prereq] and [How to run a sample][run] first.
+1. Install dependencies:
+
+ npm install
+
+[prereq]: ../README.md#prerequisities
+[run]: ../README.md#how-to-run-a-sample
+
+## Samples
+
+### Getting started with Google Cloud Spanner API
+
+View the [Spanner documentation][spanner_docs] or the [samples][spanner_samples].
+
+__Run the samples:__
+
+```sh
+node schema.js --help
+```
+
+```
+Commands:
+ createDatabase Creates an example database with two tables in a Cloud Spanner instance.
+ addColumn Adds an example MarketingBudget column to an example Cloud Spanner
+ table.
+ queryNewColumn Executes a read-only SQL query against an example Cloud Spanner table
+ with an additional column (MarketingBudget) added by addColumn.
+
+Options:
+ --help Show help [boolean]
+
+Examples:
+ node schema.js createDatabase "my-instance" "my-database"
+ node schema.js addColumn "my-instance" "my-database"
+ node schema.js queryNewColumn "my-instance" "my-database"
+
+For more information, see https://cloud.google.com/spanner/docs
+```
+
+```sh
+node crud.js --help
+```
+
+```
+Commands:
+ update Modifies existing rows of data in an example Cloud Spanner table.
+ query Executes a read-only SQL query against an example Cloud Spanner table.
+ insert Inserts new rows of data into an example Cloud Spanner table.
+ read Reads data in an example Cloud Spanner table.
+
+Options:
+ --help Show help [boolean]
+
+Examples:
+ node crud.js update "my-instance" "my-database"
+ node crud.js query "my-instance" "my-database"
+ node crud.js insert "my-instance" "my-database"
+ node crud.js read "my-instance" "my-database"
+
+For more information, see https://cloud.google.com/spanner/docs
+```
+
+```sh
+node indexing.js --help
+```
+
+```
+Commands:
+ createIndex Creates a new index in an example Cloud Spanner table.
+ createStoringIndex Creates a new value-storing index in an example Cloud Spanner table.
+ queryIndex Executes a read-only SQL query against an example Cloud Spanner
+ table using an existing index.
+ readIndex Reads data from an example Cloud Spanner table using an existing
+ index.
+ readStoringIndex Reads data from an example Cloud Spanner table using an existing
+ storing index.
+
+Options:
+ --help Show help [boolean]
+
+Examples:
+ node indexing.js createIndex "my-instance" "my-database"
+ node indexing.js createStoringIndex "my-instance" "my-database"
+ node indexing.js queryIndex "my-instance" "my-database"
+ node indexing.js readIndex "my-instance" "my-database"
+ node indexing.js readStoringIndex "my-instance" "my-database"
+
+For more information, see https://cloud.google.com/spanner/docs
+```
+
+```sh
+node transaction.js --help
+```
+
+```
+Commands:
+ readOnly Execute a read-only transaction on an example Cloud Spanner table.
+ readWrite Execute a read-write transaction on an example Cloud Spanner table.
+
+Options:
+ --help Show help [boolean]
+
+Examples:
+ node transaction.js readOnly "my-instance" "my-database"
+ node transaction.js readWrite "my-instance" "my-database"
+
+For more information, see https://cloud.google.com/spanner/docs
+```
+
+For more information, see [the docs][spanner_docs].
+
+[spanner_samples]: ../
+[spanner_docs]: https://cloud.google.com/spanner/docs/
\ No newline at end of file
diff --git a/spanner/crud.js b/spanner/crud.js
new file mode 100644
index 0000000000..761e22744c
--- /dev/null
+++ b/spanner/crud.js
@@ -0,0 +1,203 @@
+/**
+ * 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';
+
+function updateData (instanceId, databaseId) {
+ // [START update_data]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ // Update a row in the Albums table
+ // Note: Cloud Spanner interprets Node.js numbers as FLOAT64s, so they
+ // must be converted to strings before being inserted as INT64s
+ const albumsTable = database.table('Albums');
+
+ albumsTable.update([
+ { SingerId: '1', AlbumId: '1', MarketingBudget: '100000' },
+ { SingerId: '2', AlbumId: '2', MarketingBudget: '500000' }
+ ])
+ .then(() => {
+ console.log('Updated data.');
+ });
+ // [END update_data]
+}
+
+function insertData (instanceId, databaseId) {
+ // [START insert_data]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ // Instantiate Spanner table objects
+ const singersTable = database.table('Singers');
+ const albumsTable = database.table('Albums');
+
+ Promise.all([
+ // Inserts rows into the Singers table
+ // Note: Cloud Spanner interprets Node.js numbers as FLOAT64s, so
+ // they must be converted to strings before being inserted as INT64s
+ singersTable.insert([
+ { SingerId: '1', FirstName: 'Marc', LastName: 'Richards' },
+ { SingerId: '2', FirstName: 'Catalina', LastName: 'Smith' },
+ { SingerId: '3', FirstName: 'Alice', LastName: 'Trentor' },
+ { SingerId: '4', FirstName: 'Lea', LastName: 'Martin' },
+ { SingerId: '5', FirstName: 'David', LastName: 'Lomond' }
+ ]),
+
+ // Inserts rows into the Albums table
+ albumsTable.insert([
+ { SingerId: '1', AlbumId: '1', AlbumTitle: 'Go, Go, Go' },
+ { SingerId: '1', AlbumId: '2', AlbumTitle: 'Total Junk' },
+ { SingerId: '2', AlbumId: '1', AlbumTitle: 'Green' },
+ { SingerId: '2', AlbumId: '2', AlbumTitle: 'Forever Hold your Peace' },
+ { SingerId: '2', AlbumId: '3', AlbumTitle: 'Terrified' }
+ ])
+ ])
+ .then(() => {
+ console.log('Inserted data.');
+ });
+ // [END insert_data]
+}
+
+function queryData (instanceId, databaseId) {
+ // [START query_data]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ const query = {
+ sql: 'SELECT SingerId, AlbumId, AlbumTitle FROM Albums'
+ };
+
+ // Queries rows from the Albums table
+ database.run(query)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => {
+ const json = row.toJSON();
+ console.log(`SingerId: ${json.SingerId.value}, AlbumId: ${json.AlbumId.value}, AlbumTitle: ${json.AlbumTitle}`);
+ });
+ });
+ // [END query_data]
+}
+
+function readData (instanceId, databaseId) {
+ // [START read_data]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ // Read rows from the Albums table
+ const albumsTable = database.table('Albums');
+
+ const query = {
+ columns: ['SingerId', 'AlbumId', 'AlbumTitle'],
+ keySet: {
+ all: true
+ }
+ };
+
+ albumsTable.read(query)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => {
+ const json = row.toJSON();
+ console.log(`SingerId: ${json.SingerId.value}, AlbumId: ${json.AlbumId.value}, AlbumTitle: ${json.AlbumTitle}`);
+ });
+ });
+ // [END read_data]
+}
+
+const cli = require(`yargs`)
+ .demand(1)
+ .command(
+ `update `,
+ `Modifies existing rows of data in an example Cloud Spanner table.`,
+ {},
+ (opts) => updateData(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `query `,
+ `Executes a read-only SQL query against an example Cloud Spanner table.`,
+ {},
+ (opts) => queryData(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `insert `,
+ `Inserts new rows of data into an example Cloud Spanner table.`,
+ {},
+ (opts) => insertData(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `read `,
+ `Reads data in an example Cloud Spanner table.`,
+ {},
+ (opts) => readData(opts.instanceName, opts.databaseName)
+ )
+ .example(`node $0 update "my-instance" "my-database"`)
+ .example(`node $0 query "my-instance" "my-database"`)
+ .example(`node $0 insert "my-instance" "my-database"`)
+ .example(`node $0 read "my-instance" "my-database"`)
+ .wrap(120)
+ .recommendCommands()
+ .epilogue(`For more information, see https://cloud.google.com/spanner/docs`);
+
+if (module === require.main) {
+ cli.help().strict().argv;
+}
diff --git a/spanner/indexing.js b/spanner/indexing.js
new file mode 100644
index 0000000000..18bf17262d
--- /dev/null
+++ b/spanner/indexing.js
@@ -0,0 +1,252 @@
+/**
+ * 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';
+
+function createIndex (instanceId, databaseId) {
+ // [START create_index]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ const request = [
+ 'CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle)'
+ ];
+
+ // Creates a new index in the database
+ database.updateSchema(request)
+ .then((results) => {
+ const operation = results[0];
+
+ console.log('Waiting for operation to complete...');
+ return operation.promise();
+ })
+ .then(() => {
+ console.log('Added the AlbumsByAlbumTitle index.');
+ });
+ // [END create_index]
+}
+
+function createStoringIndex (instanceId, databaseId) {
+ // [START create_storing_index]
+ // "Storing" indexes store copies of the columns they index
+ // This speeds up queries, but takes more space compared to normal indexes
+ // See the link below for more information:
+ // https://cloud.google.com/spanner/docs/secondary-indexes#storing_clause
+
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ const request = [
+ 'CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget)'
+ ];
+
+ // Creates a new index in the database
+ database.updateSchema(request)
+ .then((results) => {
+ const operation = results[0];
+
+ console.log('Waiting for operation to complete...');
+ return operation.promise();
+ })
+ .then(() => {
+ console.log('Added the AlbumsByAlbumTitle2 index.');
+ });
+ // [END create_storing_index]
+}
+
+function queryDataWithIndex (instanceId, databaseId) {
+ // [START query_data_with_index]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ const query = {
+ sql: `SELECT AlbumId, AlbumTitle, MarketingBudget
+ FROM Albums@{FORCE_INDEX=AlbumsByAlbumTitle}
+ WHERE AlbumTitle >= 'Ardvark' AND AlbumTitle < 'Goo'`
+ };
+
+ // Queries rows from the Albums table
+ database.run(query)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => {
+ const json = row.toJSON();
+ console.log(`AlbumId: ${json.AlbumId.value}, AlbumTitle: ${json.AlbumTitle}, MarketingBudget: ${json.MarketingBudget.value}`);
+ });
+ });
+ // [END query_data_with_index]
+}
+
+function readDataWithIndex (instanceId, databaseId) {
+ // [START read_data_with_index]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ const albumsTable = database.table('Albums');
+
+ const query = {
+ columns: ['AlbumId', 'AlbumTitle'],
+ keySet: {
+ all: true
+ },
+ index: 'AlbumsByAlbumTitle'
+ };
+
+ // Reads the Albums table using an index
+ albumsTable.read(query)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => {
+ const json = row.toJSON();
+ console.log(`AlbumId: ${json.AlbumId.value}, AlbumTitle: ${json.AlbumTitle}`);
+ });
+ });
+ // [END read_data_with_index]
+}
+
+function readDataWithStoringIndex (instanceId, databaseId) {
+ // [START read_data_with_storing_index]
+ // "Storing" indexes store copies of the columns they index
+ // This speeds up queries, but takes more space compared to normal indexes
+ // See the link below for more information:
+ // https://cloud.google.com/spanner/docs/secondary-indexes#storing_clause
+
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ const albumsTable = database.table('Albums');
+
+ const query = {
+ columns: ['AlbumId', 'AlbumTitle', 'MarketingBudget'],
+ keySet: {
+ all: true
+ },
+ index: 'AlbumsByAlbumTitle2'
+ };
+
+ // Reads the Albums table using a storing index
+ albumsTable.read(query)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => {
+ const json = row.toJSON();
+ console.log(`AlbumId: ${json.AlbumId.value}, AlbumTitle: ${json.AlbumTitle}, MarketingBudget: ${json.MarketingBudget.value}`);
+ });
+ });
+ // [END read_data_with_storing_index]
+}
+
+const cli = require(`yargs`)
+ .demand(1)
+ .command(
+ `createIndex `,
+ `Creates a new index in an example Cloud Spanner table.`,
+ {},
+ (opts) => createIndex(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `createStoringIndex `,
+ `Creates a new value-storing index in an example Cloud Spanner table.`,
+ {},
+ (opts) => createStoringIndex(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `queryIndex `,
+ `Executes a read-only SQL query against an example Cloud Spanner table using an existing index.`,
+ {},
+ (opts) => queryDataWithIndex(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `readIndex `,
+ `Reads data from an example Cloud Spanner table using an existing index.`,
+ {},
+ (opts) => readDataWithIndex(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `readStoringIndex `,
+ `Reads data from an example Cloud Spanner table using an existing storing index.`,
+ {},
+ (opts) => readDataWithStoringIndex(opts.instanceName, opts.databaseName)
+ )
+ .example(`node $0 createIndex "my-instance" "my-database"`)
+ .example(`node $0 createStoringIndex "my-instance" "my-database"`)
+ .example(`node $0 queryIndex "my-instance" "my-database"`)
+ .example(`node $0 readIndex "my-instance" "my-database"`)
+ .example(`node $0 readStoringIndex "my-instance" "my-database"`)
+ .wrap(120)
+ .recommendCommands()
+ .epilogue(`For more information, see https://cloud.google.com/spanner/docs`);
+
+if (module === require.main) {
+ cli.help().strict().argv;
+}
diff --git a/spanner/package.json b/spanner/package.json
new file mode 100644
index 0000000000..0a06cb93cd
--- /dev/null
+++ b/spanner/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "nodejs-docs-samples-spanner",
+ "version": "0.0.1",
+ "private": true,
+ "license": "Apache Version 2.0",
+ "author": "Google Inc.",
+ "scripts": {
+ "test": "cd ..; npm run st -- --verbose spanner/system-test/*.test.js"
+ },
+ "dependencies": {
+ "@google-cloud/spanner": "0.1.0",
+ "yargs": "6.6.0"
+ },
+ "engines": {
+ "node": ">=4.3.2"
+ }
+}
diff --git a/spanner/quickstart.js b/spanner/quickstart.js
new file mode 100644
index 0000000000..5e5d744267
--- /dev/null
+++ b/spanner/quickstart.js
@@ -0,0 +1,52 @@
+/**
+ * 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.
+ */
+
+'use strict';
+
+// [START spanner_quickstart]
+// Imports the Google Cloud client library
+const Spanner = require('@google-cloud/spanner');
+
+// Your Google Cloud Platform project ID
+const projectId = 'YOUR_PROJECT_ID';
+
+// Instantiates a client
+const spanner = Spanner({
+ projectId: projectId
+});
+
+// Your Cloud Spanner instance ID
+const instanceId = 'my-instance';
+
+// Your Cloud Spanner database ID
+const databaseId = 'my-database';
+
+// Gets a reference to a Cloud Spanner instance and database
+const instance = spanner.instance(instanceId);
+const database = instance.database(databaseId);
+
+// The query to execute
+const query = {
+ sql: 'SELECT 1'
+};
+
+// Execute a simple SQL statement
+database.run(query)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => console.log(row));
+ });
+// [END spanner_quickstart]
diff --git a/spanner/schema.js b/spanner/schema.js
new file mode 100644
index 0000000000..7ff91d5596
--- /dev/null
+++ b/spanner/schema.js
@@ -0,0 +1,169 @@
+/**
+ * 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';
+
+function createDatabase (instanceId, databaseId) {
+ // [START create_database]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance
+ const instance = spanner.instance(instanceId);
+
+ // Note: Cloud Spanner interprets Node.js numbers as FLOAT64s, so they
+ // must be converted to strings before being inserted as INT64s
+ const request = {
+ schema: [
+ `CREATE TABLE Singers (
+ SingerId INT64 NOT NULL,
+ FirstName STRING(1024),
+ LastName STRING(1024),
+ SingerInfo BYTES(MAX)
+ ) PRIMARY KEY (SingerId)`,
+ `CREATE TABLE Albums (
+ SingerId INT64 NOT NULL,
+ AlbumId INT64 NOT NULL,
+ AlbumTitle STRING(MAX)
+ ) PRIMARY KEY (SingerId, AlbumId),
+ INTERLEAVE IN PARENT Singers ON DELETE CASCADE`
+ ]
+ };
+
+ // Creates a database
+ instance.createDatabase(databaseId, request)
+ .then((results) => {
+ const database = results[0];
+ const operation = results[1];
+
+ console.log(`Waiting for operation on ${database.id} to complete...`);
+ return operation.promise();
+ })
+ .then(() => {
+ console.log(`Created database ${databaseId} on instance ${instanceId}.`);
+ });
+ // [END create_database]
+}
+
+function addColumn (instanceId, databaseId) {
+ // [START add_column]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ const request = [
+ 'ALTER TABLE Albums ADD COLUMN MarketingBudget INT64'
+ ];
+
+ // Creates a new index in the database
+ database.updateSchema(request)
+ .then((results) => {
+ const operation = results[0];
+
+ console.log('Waiting for operation to complete...');
+ return operation.promise();
+ })
+ .then(() => {
+ console.log('Added the MarketingBudget column.');
+ });
+ // [END add_column]
+}
+
+function queryDataWithNewColumn (instanceId, databaseId) {
+ // [START query_data_with_new_column]
+ // This sample uses the `MarketingBudget` column. You can add the column
+ // by running the `add_column` sample or by running this DDL statement against
+ // your database:
+ // ALTER TABLE Albums ADD COLUMN MarketingBudget INT64
+
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ const query = {
+ sql: `SELECT SingerId, AlbumId, MarketingBudget FROM Albums`
+ };
+
+ // Queries rows from the Albums table
+ database.run(query)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => {
+ const json = row.toJSON();
+
+ console.log(`SingerId: ${json.SingerId.value}, AlbumId: ${json.AlbumId.value}, MarketingBudget: ${json.MarketingBudget ? json.MarketingBudget.value : null}`);
+ });
+ });
+ // [END query_data_with_new_column]
+}
+
+const cli = require(`yargs`)
+ .demand(1)
+ .command(
+ `createDatabase `,
+ `Creates an example database with two tables in a Cloud Spanner instance.`,
+ {},
+ (opts) => createDatabase(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `addColumn `,
+ `Adds an example MarketingBudget column to an example Cloud Spanner table.`,
+ {},
+ (opts) => addColumn(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `queryNewColumn `,
+ `Executes a read-only SQL query against an example Cloud Spanner table with an additional column (MarketingBudget) added by addColumn.`,
+ {},
+ (opts) => queryDataWithNewColumn(opts.instanceName, opts.databaseName)
+ )
+ .example(`node $0 createDatabase "my-instance" "my-database"`)
+ .example(`node $0 addColumn "my-instance" "my-database"`)
+ .example(`node $0 queryNewColumn "my-instance" "my-database"`)
+ .wrap(120)
+ .recommendCommands()
+ .epilogue(`For more information, see https://cloud.google.com/spanner/docs`);
+
+if (module === require.main) {
+ cli.help().strict().argv;
+}
diff --git a/spanner/system-test/quickstart.test.js b/spanner/system-test/quickstart.test.js
new file mode 100644
index 0000000000..3523164820
--- /dev/null
+++ b/spanner/system-test/quickstart.test.js
@@ -0,0 +1,55 @@
+/**
+ * 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';
+
+require(`../../system-test/_setup`);
+
+const proxyquire = require(`proxyquire`).noPreserveCache();
+
+test.before(stubConsole);
+test.after.always(restoreConsole);
+
+test.cb(`should query a table`, (t) => {
+ const databaseMock = {
+ run: (_query) => {
+ t.deepEqual(_query, {
+ sql: `SELECT 1`
+ });
+ setTimeout(() => {
+ try {
+ t.deepEqual(console.log.getCall(0).args, [`test`]);
+ t.end();
+ } catch (err) {
+ t.end(err);
+ }
+ }, 200);
+ return Promise.resolve([['test']]);
+ }
+ };
+ const instanceMock = {
+ database: sinon.stub().returns(databaseMock)
+ };
+ const spannerMock = {
+ instance: sinon.stub().returns(instanceMock)
+ };
+
+ proxyquire(`../quickstart`, {
+ '@google-cloud/spanner': sinon.stub().returns(spannerMock)
+ });
+
+ t.deepEqual(spannerMock.instance.getCall(0).args, [`my-instance`]);
+ t.deepEqual(instanceMock.database.getCall(0).args, [`my-database`]);
+});
diff --git a/spanner/system-test/spanner.test.js b/spanner/system-test/spanner.test.js
new file mode 100644
index 0000000000..5c37fe775b
--- /dev/null
+++ b/spanner/system-test/spanner.test.js
@@ -0,0 +1,147 @@
+/**
+ * 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.
+ */
+
+'use strict';
+
+require(`../../system-test/_setup`);
+
+const path = require(`path`);
+const spanner = require(`@google-cloud/spanner`)();
+
+const crudCmd = `node crud.js`;
+const schemaCmd = `node schema.js`;
+const indexingCmd = `node indexing.js`;
+const transactionCmd = `node transaction.js`;
+
+const cwd = path.join(__dirname, `..`);
+
+const INSTANCE_ID = `test-instance`;
+const DATABASE_ID = `test-database-${Date.now()}`;
+
+test.before(async (t) => {
+ const instance = spanner.instance(INSTANCE_ID);
+ const database = instance.database(DATABASE_ID);
+ try {
+ await database.delete();
+ } catch (err) {
+ // Ignore error
+ }
+});
+
+test.after.always(async (t) => {
+ const instance = spanner.instance(INSTANCE_ID);
+ const database = instance.database(DATABASE_ID);
+ try {
+ await database.delete();
+ } catch (err) {
+ // Ignore error
+ }
+});
+
+// create_database
+test.serial(`should create an example database`, async (t) => {
+ const output = await runAsync(`${schemaCmd} createDatabase "${INSTANCE_ID}" "${DATABASE_ID}"`, cwd);
+ t.true(output.includes(`Waiting for operation on ${DATABASE_ID} to complete...`));
+ t.true(output.includes(`Created database ${DATABASE_ID} on instance ${INSTANCE_ID}.`));
+});
+
+// insert_data
+test.serial(`should insert rows into an example table`, async (t) => {
+ let output = await runAsync(`${crudCmd} insert ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`Inserted data.`));
+});
+
+// query_data
+test.serial(`should query an example table and return matching rows`, async (t) => {
+ const output = await runAsync(`${crudCmd} query ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`SingerId: 1, AlbumId: 1, AlbumTitle: Go, Go, Go`));
+});
+
+// read_data
+test.serial(`should read an example table`, async (t) => {
+ const output = await runAsync(`${crudCmd} read ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`SingerId: 1, AlbumId: 1, AlbumTitle: Go, Go, Go`));
+});
+
+// add_column
+test.serial(`should add a column to a table`, async (t) => {
+ const output = await runAsync(`${schemaCmd} addColumn ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`Waiting for operation to complete...`));
+ t.true(output.includes(`Added the MarketingBudget column.`));
+});
+
+// update_data
+test.serial(`should update existing rows in an example table`, async (t) => {
+ let output = await runAsync(`${crudCmd} update ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`Updated data.`));
+});
+
+// query_data_with_new_column
+test.serial(`should query an example table with an additional column and return matching rows`, async (t) => {
+ const output = await runAsync(`${schemaCmd} queryNewColumn ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`SingerId: 1, AlbumId: 1, MarketingBudget: 100000`));
+ t.true(output.includes(`SingerId: 2, AlbumId: 2, MarketingBudget: 500000`));
+});
+
+// create_index
+test.serial(`should create an index in an example table`, async (t) => {
+ let output = await runAsync(`${indexingCmd} createIndex ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`Waiting for operation to complete...`));
+ t.true(output.includes(`Added the AlbumsByAlbumTitle index.`));
+});
+
+// create_storing_index
+test.serial(`should create a storing index in an example table`, async (t) => {
+ const output = await runAsync(`${indexingCmd} createStoringIndex ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`Waiting for operation to complete...`));
+ t.true(output.includes(`Added the AlbumsByAlbumTitle2 index.`));
+});
+
+// query_data_with_index
+test.serial(`should query an example table with an index and return matching rows`, async (t) => {
+ const output = await runAsync(`${indexingCmd} queryIndex ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`AlbumId: 1, AlbumTitle: Go, Go, Go, MarketingBudget:`));
+});
+
+// read_data_with_index
+test.serial(`should read an example table with an index`, async (t) => {
+ const output = await runAsync(`${indexingCmd} readIndex ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`AlbumId: 1, AlbumTitle: Go, Go, Go`));
+});
+
+// read_data_with_storing_index
+test.serial(`should read an example table with a storing index`, async (t) => {
+ const output = await runAsync(`${indexingCmd} readStoringIndex ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`AlbumId: 1, AlbumTitle: Go, Go, Go`));
+});
+
+// read_only_transaction
+test.serial(`should read an example table using transactions`, async (t) => {
+ const output = await runAsync(`${transactionCmd} readOnly ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`SingerId: 1, AlbumId: 1, AlbumTitle: Go, Go, Go`));
+ t.true(output.includes(`Successfully executed read-only transaction.`));
+});
+
+// read_write_transaction
+test.serial(`should read from and write to an example table using transactions`, async (t) => {
+ let output = await runAsync(`${transactionCmd} readWrite ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`The first album's marketing budget: 100000`));
+ t.true(output.includes(`The second album's marketing budget: 500000`));
+ t.true(output.includes(`Successfully executed read-write transaction to transfer 200000 from Album 2 to Album 1.`));
+
+ output = await runAsync(`${schemaCmd} queryNewColumn ${INSTANCE_ID} ${DATABASE_ID}`, cwd);
+ t.true(output.includes(`SingerId: 1, AlbumId: 1, MarketingBudget: 300000`));
+ t.true(output.includes(`SingerId: 2, AlbumId: 2, MarketingBudget: 300000`));
+});
diff --git a/spanner/transaction.js b/spanner/transaction.js
new file mode 100644
index 0000000000..9d59705319
--- /dev/null
+++ b/spanner/transaction.js
@@ -0,0 +1,191 @@
+/**
+ * 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.
+ */
+
+'use strict';
+
+function readOnlyTransaction (instanceId, databaseId) {
+ // [START read_only_transaction]
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ // Gets a transaction object that captures the database state
+ // at a specific point in time
+ database.runTransaction()
+ .then((results) => {
+ const transaction = results[0];
+
+ const queryOne = 'SELECT SingerId, AlbumId, AlbumTitle FROM Albums';
+
+ // Read #1, using SQL
+ transaction.run(queryOne)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => {
+ const json = row.toJSON();
+ console.log(`SingerId: ${json.SingerId.value}, AlbumId: ${json.AlbumId.value}, AlbumTitle: ${json.AlbumTitle}`);
+ });
+ });
+
+ const queryTwo = {
+ columns: ['SingerId', 'AlbumId', 'AlbumTitle'],
+ keySet: {
+ all: true
+ }
+ };
+
+ // Read #2, using the `read` method. Even if changes occur
+ // in-between the reads, the transaction ensures that both
+ // return the same data.
+ transaction.read('Albums', queryTwo)
+ .then((results) => {
+ const rows = results[0];
+
+ rows.forEach((row) => {
+ const json = row.toJSON();
+ console.log(`SingerId: ${json.SingerId.value}, AlbumId: ${json.AlbumId.value}, AlbumTitle: ${json.AlbumTitle}`);
+ });
+ });
+ })
+ .then(() => {
+ console.log('Successfully executed read-only transaction.');
+ });
+ // [END read_only_transaction]
+}
+
+function readWriteTransaction (instanceId, databaseId) {
+ // [START read_write_transaction]
+ // This sample transfers 200,000 from the MarketingBudget field
+ // of the second Album to the first Album. Make sure to run the
+ // addColumn and updateData samples first (in that order).
+
+ // Imports the Google Cloud client library
+ const Spanner = require('@google-cloud/spanner');
+
+ // Instantiates a client
+ const spanner = Spanner();
+
+ // Uncomment these lines to specify the instance and database to use
+ // const instanceId = 'my-instance';
+ // const databaseId = 'my-database';
+
+ // Gets a reference to a Cloud Spanner instance and database
+ const instance = spanner.instance(instanceId);
+ const database = instance.database(databaseId);
+
+ // Gets a transaction object that captures the database state
+ // at a specific point in time
+ let transaction, firstBudget, secondBudget;
+ const transferAmount = 200000;
+
+ database.runTransaction()
+ .then((results) => {
+ transaction = results[0];
+
+ const queryOne = {
+ columns: [`MarketingBudget`],
+ keys: [2, 2] // SingerId: 2, AlbumId: 2
+ };
+
+ const queryTwo = {
+ columns: ['MarketingBudget'],
+ keys: [1, 1] // SingerId: 1, AlbumId: 1
+ };
+
+ return Promise.all([
+ // Reads the second album's budget
+ transaction.read('Albums', queryOne).then((results) => {
+ // Gets second album's budget
+ // Note: MarketingBudget is an INT64, which comes from Cloud Spanner
+ // as a string - so we convert it to a number with parseInt()
+ const rows = results[0].map((row) => row.toJSON());
+ secondBudget = parseInt(rows[0].MarketingBudget.value);
+ console.log(`The second album's marketing budget: ${secondBudget}`);
+
+ // Makes sure the second album's budget is sufficient
+ if (secondBudget < transferAmount) {
+ throw new Error(`The second album's budget (${secondBudget}) is less than the transfer amount (${transferAmount}).`);
+ }
+ }),
+
+ // Reads the first album's budget
+ transaction.read('Albums', queryTwo).then((results) => {
+ // Gets first album's budget
+ // As above, MarketingBudget is an INT64 and comes as a string
+ const rows = results[0].map((row) => row.toJSON());
+ firstBudget = parseInt(rows[0].MarketingBudget.value);
+ console.log(`The first album's marketing budget: ${firstBudget}`);
+ })
+ ]);
+ })
+ .then(() => {
+ // Transfer the budgets between the albums
+ console.log(firstBudget, secondBudget);
+ firstBudget += transferAmount;
+ secondBudget -= transferAmount;
+
+ console.log(firstBudget, secondBudget);
+
+ // Update the database
+ // Note: Cloud Spanner interprets Node.js numbers as FLOAT64s, so they
+ // must be converted (back) to strings before being inserted as INT64s.
+ transaction.update('Albums', [
+ { SingerId: '1', AlbumId: '1', MarketingBudget: firstBudget.toString() },
+ { SingerId: '2', AlbumId: '2', MarketingBudget: secondBudget.toString() }
+ ]);
+ })
+ // Commits the transaction and send the changes to the database
+ .then(() => transaction.commit())
+ .then(() => {
+ // Logs success
+ console.log(`Successfully executed read-write transaction to transfer ${transferAmount} from Album 2 to Album 1.`);
+ });
+ // [END read_write_transaction]
+}
+
+const cli = require(`yargs`)
+ .demand(1)
+ .command(
+ `readOnly `,
+ `Execute a read-only transaction on an example Cloud Spanner table.`,
+ {},
+ (opts) => readOnlyTransaction(opts.instanceName, opts.databaseName)
+ )
+ .command(
+ `readWrite `,
+ `Execute a read-write transaction on an example Cloud Spanner table.`,
+ {},
+ (opts) => readWriteTransaction(opts.instanceName, opts.databaseName)
+ )
+ .example(`node $0 readOnly "my-instance" "my-database"`)
+ .example(`node $0 readWrite "my-instance" "my-database"`)
+ .wrap(120)
+ .recommendCommands()
+ .epilogue(`For more information, see https://cloud.google.com/spanner/docs`);
+
+if (module === require.main) {
+ cli.help().strict().argv;
+}
diff --git a/spanner/yarn.lock b/spanner/yarn.lock
new file mode 100644
index 0000000000..2e6ca1052f
--- /dev/null
+++ b/spanner/yarn.lock
@@ -0,0 +1,1407 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@google-cloud/common@^0.9.0":
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.9.1.tgz#c72249589046fb4dd131b8ae7dbea88bb6bcf88c"
+ dependencies:
+ array-uniq "^1.0.2"
+ arrify "^1.0.0"
+ concat-stream "^1.5.0"
+ create-error-class "^3.0.2"
+ dot-prop "^2.4.0"
+ duplexify "^3.2.0"
+ ent "^2.2.0"
+ extend "^3.0.0"
+ google-auto-auth "^0.5.0"
+ google-proto-files "^0.8.0"
+ grpc "^1.0.0"
+ is "^3.0.1"
+ methmeth "^1.0.0"
+ modelo "^4.2.0"
+ request "^2.70.0"
+ retry-request "^1.3.0"
+ split-array-stream "^1.0.0"
+ stream-events "^1.0.1"
+ string-format-obj "^1.0.0"
+ through2 "^2.0.0"
+
+"@google-cloud/datastore@0.6.0":
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/datastore/-/datastore-0.6.0.tgz#ffaf78ba24efb086315044beb944d818c05bd724"
+ dependencies:
+ "@google-cloud/common" "^0.9.0"
+ arrify "^1.0.0"
+ concat-stream "^1.5.0"
+ create-error-class "^3.0.2"
+ extend "^3.0.0"
+ is "^3.0.1"
+ lodash.flatten "^4.2.0"
+ modelo "^4.2.0"
+ prop-assign "^1.0.0"
+ propprop "^0.3.0"
+ split-array-stream "^1.0.0"
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arguejs@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/arguejs/-/arguejs-0.2.3.tgz#b6f939f5fe0e3cd1f3f93e2aa9262424bf312af7"
+
+array-uniq@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+ascli@~1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc"
+ dependencies:
+ colour "~0.7.1"
+ optjs "~3.2.2"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+async@^1.4.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+async@^2.0.1, async@^2.1.2:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
+ dependencies:
+ lodash "^4.14.0"
+
+async@~1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.4.2.tgz#6c9edcb11ced4f0dd2f2d40db0d49a109c088aab"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+base64url@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
+
+base64url@~0.0.4:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/base64url/-/base64url-0.0.6.tgz#9597b36b330db1c42477322ea87ea8027499b82b"
+
+base64url@~1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/base64url/-/base64url-1.0.6.tgz#d64d375d68a7c640d912e2358d170dca5bb54681"
+ dependencies:
+ concat-stream "~1.4.7"
+ meow "~2.0.0"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+bl@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398"
+ dependencies:
+ readable-stream "~2.0.5"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ dependencies:
+ inherits "~2.0.0"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+buffer-equal-constant-time@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+bytebuffer@~5:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd"
+ dependencies:
+ long "~3"
+
+camelcase-keys@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-1.0.0.tgz#bd1a11bf9b31a1ce493493a930de1a0baf4ad7ec"
+ dependencies:
+ camelcase "^1.0.1"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^2.0.1:
+ 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"
+
+capture-stack-trace@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+
+chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+cliui@^3.0.3, cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+colour@~0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+concat-stream@~1.4.7:
+ version "1.4.10"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.4.10.tgz#acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36"
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "~1.1.9"
+ typedarray "~0.0.5"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+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"
+
+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"
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ dependencies:
+ boom "2.x.x"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
+dot-prop@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-2.4.0.tgz#848e28f7f1d50740c6747ab3cb07670462b6f89c"
+ dependencies:
+ is-obj "^1.0.0"
+
+duplexify@^3.2.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604"
+ dependencies:
+ end-of-stream "1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
+ecdsa-sig-formatter@^1.0.0:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1"
+ dependencies:
+ base64url "^2.0.0"
+ safe-buffer "^5.0.1"
+
+end-of-stream@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
+ dependencies:
+ once "~1.3.0"
+
+ent@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+extend@^3.0.0, extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@~1.0.0-rc4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c"
+ dependencies:
+ async "^2.0.1"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.11"
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^0.2.0"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ dependencies:
+ is-property "^1.0.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob@^5.0.10:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+google-auth-library@^0.9.10:
+ version "0.9.10"
+ resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.9.10.tgz#4993dc07bb4834b8ca0350213a6873a32c6051b9"
+ dependencies:
+ async "~1.4.2"
+ gtoken "^1.1.0"
+ jws "~3.0.0"
+ lodash.noop "~3.0.0"
+ request "~2.74.0"
+ string-template "~0.2.0"
+
+google-auto-auth@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.5.2.tgz#4c9f38574e69fb55a3c516ab0415e9fa33e67602"
+ dependencies:
+ async "^2.1.2"
+ google-auth-library "^0.9.10"
+ object-assign "^3.0.0"
+ request "^2.79.0"
+
+google-p12-pem@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-0.1.1.tgz#66ef8946ee97e8da37f1beb1d8ec5c3be2ba4539"
+ dependencies:
+ node-forge "^0.6.46"
+
+google-proto-files@^0.8.0:
+ version "0.8.6"
+ resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.8.6.tgz#a7c8ddccd2179690d270b0ebfc42994d56da0ee6"
+
+graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+
+grpc@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.0.1.tgz#e965544b5e56c998058102184e2ab1f27f123afd"
+ dependencies:
+ arguejs "^0.2.3"
+ lodash "^4.15.0"
+ nan "^2.0.0"
+ node-pre-gyp "^0.6.0"
+ protobufjs "^5.0.0"
+
+gtoken@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.1.tgz#90153a547c2fc1cd24a4d3d2ab3b5aba0a26897a"
+ dependencies:
+ google-p12-pem "^0.1.0"
+ jws "^3.0.0"
+ mime "^1.2.11"
+ request "^2.72.0"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
+hosted-git-info@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+indent-string@^1.1.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-1.2.2.tgz#db99bcc583eb6abbb1e48dcbb1999a986041cb6b"
+ dependencies:
+ get-stdin "^4.0.1"
+ minimist "^1.1.0"
+ repeating "^1.1.0"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
+is-stream-ended@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.0.tgz#40f058df6b044ee598fee4df7dc1ec2bcdd8df60"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+is@^3.0.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/is/-/is-3.2.0.tgz#a362e3daf7df3fd8b7114115d624c5b7e1cb90f7"
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ dependencies:
+ jsbn "~0.1.0"
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+jwa@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.0.2.tgz#fd79609f1e772e299dce8ddb76d00659dd83511f"
+ dependencies:
+ base64url "~0.0.4"
+ buffer-equal-constant-time "^1.0.1"
+ ecdsa-sig-formatter "^1.0.0"
+
+jws@^3.0.0, jws@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-3.0.0.tgz#da5f267897dd4e9cf8137979db33fc54a3c05418"
+ dependencies:
+ base64url "~1.0.4"
+ jwa "~1.0.0"
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ dependencies:
+ invert-kv "^1.0.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+lodash.flatten@^4.2.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+
+lodash.noop@~3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c"
+
+lodash@^4.14.0, lodash@^4.15.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+long@~3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
+
+map-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+meow@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-2.0.0.tgz#8f530a8ecf5d40d3f4b4df93c3472900fba2a8f1"
+ dependencies:
+ camelcase-keys "^1.0.0"
+ indent-string "^1.1.0"
+ minimist "^1.1.0"
+ object-assign "^1.0.0"
+
+methmeth@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/methmeth/-/methmeth-1.1.0.tgz#e80a26618e52f5c4222861bb748510bd10e29089"
+
+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.11, mime-types@^2.1.12, 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@^1.2.11:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.1.0, 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:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+modelo@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/modelo/-/modelo-4.2.0.tgz#3b4b420023a66ca7e32bdba16e710937e14d1b0b"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
+nan@^2.0.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+
+node-forge@^0.6.46:
+ version "0.6.46"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.46.tgz#04a8a1c336eb72ef6f434ba7c854d608916c328d"
+
+node-pre-gyp@^0.6.0:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+node-uuid@~1.4.7:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-1.0.0.tgz#e65dc8766d3b47b4b8307465c8311da030b070a6"
+
+object-assign@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
+
+object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+
+once@^1.3.0, once@~1.3.0, once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ dependencies:
+ wrappy "1"
+
+optjs@~3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee"
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ dependencies:
+ lcid "^1.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+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"
+
+prop-assign@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/prop-assign/-/prop-assign-1.0.0.tgz#9767a1fbfd7093908647a6e846d31b4feaa70459"
+
+propprop@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/propprop/-/propprop-0.3.1.tgz#a049a3568b896440067d15d8ec9f33735e570178"
+
+protobufjs@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.1.tgz#589ecdda1a555fd69df4699adc142d36f133aa0b"
+ dependencies:
+ ascli "~1"
+ bytebuffer "~5"
+ glob "^5.0.10"
+ yargs "^3.10.0"
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+qs@~6.2.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625"
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.1.5, readable-stream@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~1.1.9:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@~2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+repeating@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac"
+ dependencies:
+ is-finite "^1.0.0"
+
+request@2.76.0:
+ version "2.76.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.76.0.tgz#be44505afef70360a0436955106be3945d95560e"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ node-uuid "~1.4.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+
+request@^2.70.0, request@^2.72.0, request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+request@~2.74.0:
+ version "2.74.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ bl "~1.1.2"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~1.0.0-rc4"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ node-uuid "~1.4.7"
+ oauth-sign "~0.8.1"
+ qs "~6.2.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+retry-request@^1.3.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-1.3.2.tgz#59ad24e71f8ae3f312d5f7b4bcf467a5e5a57bd6"
+ dependencies:
+ request "2.76.0"
+ through2 "^2.0.0"
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ dependencies:
+ glob "^7.0.5"
+
+safe-buffer@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
+
+"semver@2 || 3 || 4 || 5", semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ dependencies:
+ hoek "2.x.x"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+
+split-array-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-1.0.0.tgz#d5e4ffacd306161d69ed5252ff56d57e7762eaa2"
+ dependencies:
+ async "^1.4.0"
+ is-stream-ended "^0.1.0"
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stream-events@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.1.tgz#4fe7b2bbfcc53e6af31087e8c540483f412ce8c6"
+ dependencies:
+ stubs "^1.1.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+
+string-format-obj@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/string-format-obj/-/string-format-obj-1.1.0.tgz#7635610b1ef397013e8478be98a170e04983d068"
+
+string-template@~0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+
+stubs@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/stubs/-/stubs-1.1.2.tgz#945a08975016318762f8f7060731002ab2a0960c"
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+through2@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ dependencies:
+ punycode "^1.4.1"
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+typedarray@^0.0.6, typedarray@~0.0.5:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ 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"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+y18n@^3.2.0, y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+yargs-parser@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
+ dependencies:
+ camelcase "^3.0.0"
+
+yargs@6.6.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+ dependencies:
+ camelcase "^3.0.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"
+ 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"
+ y18n "^3.2.1"
+ yargs-parser "^4.2.0"
+
+yargs@^3.10.0:
+ version "3.32.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
+ dependencies:
+ camelcase "^2.0.1"
+ cliui "^3.0.3"
+ decamelize "^1.1.1"
+ os-locale "^1.4.0"
+ string-width "^1.0.1"
+ window-size "^0.1.4"
+ y18n "^3.2.0"
diff --git a/yarn.lock b/yarn.lock
index 877a40ef4e..00c3995d9b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -59,6 +59,20 @@
retry-request "^1.3.2"
through2 "^2.0.3"
+"@google-cloud/common-grpc@^0.1.4":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/@google-cloud/common-grpc/-/common-grpc-0.1.4.tgz#482cf25dd11fd0b7973b27f7f8d70017281e102b"
+ dependencies:
+ "@google-cloud/common" "^0.12.0"
+ dot-prop "^2.4.0"
+ duplexify "^3.5.0"
+ extend "^3.0.0"
+ google-proto-files "^0.9.1"
+ grpc "^1.1.1"
+ is "^3.2.0"
+ retry-request "^1.3.2"
+ through2 "^2.0.3"
+
"@google-cloud/common@^0.11.0":
version "0.11.0"
resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.11.0.tgz#5c94674a1ea9a4939865e342f0c1b909ca04e980"
@@ -228,6 +242,28 @@
extend "^3.0.0"
is "^3.0.1"
+"@google-cloud/spanner@0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/spanner/-/spanner-0.1.0.tgz#81e8a1b3c637dfece36885639c3f825d97d62429"
+ dependencies:
+ "@google-cloud/common" "^0.12.0"
+ "@google-cloud/common-grpc" "^0.1.4"
+ arrify "^1.0.1"
+ checkpoint-stream "^0.1.0"
+ events-intercept "^2.0.0"
+ extend "^3.0.0"
+ generic-pool "^3.1.4"
+ google-gax "^0.10.0"
+ google-proto-files "^0.9.0"
+ is "^3.1.0"
+ lodash.chunk "^4.2.0"
+ lodash.snakecase "^4.1.1"
+ merge-stream "^1.0.1"
+ split-array-stream "^1.0.0"
+ stream-events "^1.0.1"
+ string-format-obj "^1.1.0"
+ through2 "^2.0.3"
+
"@google-cloud/speech@0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@google-cloud/speech/-/speech-0.6.0.tgz#161e9bb3f3aca4ed7acb65e1fdd8286ac34b41e8"
@@ -794,14 +830,7 @@ babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0:
babel-traverse "^6.18.0"
babel-types "^6.18.0"
-babel-helper-get-function-arity@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-helper-get-function-arity@^6.22.0:
+babel-helper-get-function-arity@^6.18.0, babel-helper-get-function-arity@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce"
dependencies:
@@ -980,21 +1009,21 @@ babel-register@^6.18.0:
mkdirp "^0.5.1"
source-map-support "^0.4.2"
-babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.20.0, babel-runtime@^6.9.0:
- version "6.20.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
+babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.22.0, babel-runtime@^6.9.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611"
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
-babel-runtime@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611"
+babel-runtime@^6.20.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
-babel-template@^6.16.0, babel-template@^6.7.0, babel-template@^6.8.0:
+babel-template@^6.16.0:
version "6.16.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
dependencies:
@@ -1004,7 +1033,7 @@ babel-template@^6.16.0, babel-template@^6.7.0, babel-template@^6.8.0:
babylon "^6.11.0"
lodash "^4.2.0"
-babel-template@^6.22.0:
+babel-template@^6.22.0, babel-template@^6.7.0, babel-template@^6.8.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb"
dependencies:
@@ -1014,21 +1043,7 @@ babel-template@^6.22.0:
babylon "^6.11.0"
lodash "^4.2.0"
-babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.20.0, babel-traverse@^6.21.0:
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad"
- dependencies:
- babel-code-frame "^6.20.0"
- babel-messages "^6.8.0"
- babel-runtime "^6.20.0"
- babel-types "^6.21.0"
- babylon "^6.11.0"
- debug "^2.2.0"
- globals "^9.0.0"
- invariant "^2.2.0"
- lodash "^4.2.0"
-
-babel-traverse@^6.22.0:
+babel-traverse@^6.16.0, babel-traverse@^6.20.0, babel-traverse@^6.22.0:
version "6.22.1"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f"
dependencies:
@@ -1042,16 +1057,21 @@ babel-traverse@^6.22.0:
invariant "^2.2.0"
lodash "^4.2.0"
-babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.20.0, babel-types@^6.21.0, babel-types@^6.7.2, babel-types@^6.9.0:
+babel-traverse@^6.18.0, babel-traverse@^6.21.0:
version "6.21.0"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad"
dependencies:
+ babel-code-frame "^6.20.0"
+ babel-messages "^6.8.0"
babel-runtime "^6.20.0"
- esutils "^2.0.2"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
lodash "^4.2.0"
- to-fast-properties "^1.0.1"
-babel-types@^6.22.0:
+babel-types@^6.16.0, babel-types@^6.20.0, babel-types@^6.22.0, babel-types@^6.7.2:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
dependencies:
@@ -1060,6 +1080,15 @@ babel-types@^6.22.0:
lodash "^4.2.0"
to-fast-properties "^1.0.1"
+babel-types@^6.18.0, babel-types@^6.21.0, babel-types@^6.9.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2"
+ dependencies:
+ babel-runtime "^6.20.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
babylon@^6.1.0, babylon@^6.11.0, babylon@^6.13.0:
version "6.14.1"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
@@ -1125,7 +1154,7 @@ bluebird@^3.0.0, bluebird@^3.4.1:
version "3.4.7"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
-body-parser@1.16.0:
+body-parser@1.16.0, body-parser@^1.14.2:
version "1.16.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.0.tgz#924a5e472c6229fb9d69b85a20d5f2532dec788b"
dependencies:
@@ -1140,21 +1169,6 @@ body-parser@1.16.0:
raw-body "~2.2.0"
type-is "~1.6.14"
-body-parser@^1.14.2:
- version "1.15.2"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.15.2.tgz#d7578cf4f1d11d5f6ea804cef35dc7a7ff6dae67"
- dependencies:
- bytes "2.4.0"
- content-type "~1.0.2"
- debug "~2.2.0"
- depd "~1.1.0"
- http-errors "~1.5.0"
- iconv-lite "0.4.13"
- on-finished "~2.3.0"
- qs "6.2.0"
- raw-body "~2.1.7"
- type-is "~1.6.13"
-
boom@2.x.x:
version "2.10.1"
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
@@ -1363,6 +1377,15 @@ character-parser@^2.1.1:
dependencies:
is-regex "^1.0.3"
+checkpoint-stream@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/checkpoint-stream/-/checkpoint-stream-0.1.1.tgz#59088511fbe23b6d2c1e82eaf02f28459667f637"
+ dependencies:
+ events-intercept "^2.0.0"
+ pumpify "^1.3.5"
+ split-array-stream "^1.0.0"
+ through2 "^2.0.3"
+
chokidar@^1.4.2:
version "1.6.1"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
@@ -2434,6 +2457,10 @@ generate-object-property@^1.1.0:
dependencies:
is-property "^1.0.0"
+generic-pool@^3.1.4:
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.1.7.tgz#dac22b2c7a7a04e41732f7d8d2d25a303c88f662"
+
get-caller-file@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
@@ -2589,6 +2616,10 @@ google-proto-files@^0.8.0, google-proto-files@^0.8.3, google-proto-files@^0.8.5,
version "0.8.6"
resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.8.6.tgz#a7c8ddccd2179690d270b0ebfc42994d56da0ee6"
+google-proto-files@^0.9.0, google-proto-files@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.9.1.tgz#c760c79059bf62ba3ac56e1d1ba7b8d4560803be"
+
googleapis@16.1.0:
version "16.1.0"
resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-16.1.0.tgz#0f19f2d70572d918881a0f626e3b1a2fa8629576"
@@ -2654,6 +2685,16 @@ grpc@^1.0.0, grpc@~1.0, grpc@~1.0.1:
node-pre-gyp "^0.6.0"
protobufjs "^5.0.0"
+grpc@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.1.2.tgz#a6dc02d659fcd802554a210f7906a49f59e1e353"
+ dependencies:
+ arguejs "^0.2.3"
+ lodash "^4.15.0"
+ nan "^2.0.0"
+ node-pre-gyp "^0.6.0"
+ protobufjs "^5.0.0"
+
gtoken@^1.1.0, gtoken@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.1.tgz#90153a547c2fc1cd24a4d3d2ab3b5aba0a26897a"
@@ -2742,7 +2783,7 @@ html-tags@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-1.1.1.tgz#869f43859f12d9bdc3892419e494a628aa1b204e"
-http-errors@~1.5.0, http-errors@~1.5.1:
+http-errors@~1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750"
dependencies:
@@ -2773,10 +2814,6 @@ i@0.3.x:
version "0.3.5"
resolved "https://registry.yarnpkg.com/i/-/i-0.3.5.tgz#1d2b854158ec8169113c6cb7f6b6801e99e211d5"
-iconv-lite@0.4.13:
- version "0.4.13"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
-
iconv-lite@0.4.15:
version "0.4.15"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
@@ -3113,14 +3150,10 @@ isstream@0.1.x, isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.1:
+istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0, istanbul-lib-coverage@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212"
-istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2"
-
istanbul-lib-hook@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0.tgz#fc5367ee27f59268e8f060b0c7aaf051d9c425c5"
@@ -3438,11 +3471,7 @@ lodash.flatten@^4.2.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
-lodash.isequal@^4.0.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.4.0.tgz#6295768e98e14dc15ce8d362ef6340db82852031"
-
-lodash.isequal@^4.5.0:
+lodash.isequal@^4.0.0, lodash.isequal@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
@@ -3450,6 +3479,10 @@ lodash.noop@^3.0.1, lodash.noop@~3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c"
+lodash.snakecase@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
+
lodash@^4.0.0, lodash@^4.12.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.2.0, lodash@^4.3.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -3577,6 +3610,12 @@ merge-source-map@^1.0.2:
dependencies:
source-map "^0.5.3"
+merge-stream@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+ dependencies:
+ readable-stream "^2.0.1"
+
methmeth@^1.0.0, methmeth@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/methmeth/-/methmeth-1.1.0.tgz#e80a26618e52f5c4222861bb748510bd10e29089"
@@ -4277,7 +4316,7 @@ proxy-addr@~1.1.3:
forwarded "~0.1.0"
ipaddr.js "1.2.0"
-proxyquire@1.7.11:
+proxyquire@1.7.11, proxyquire@^1.7.4:
version "1.7.11"
resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-1.7.11.tgz#13b494eb1e71fb21cc3ebe3699e637d3bec1af9e"
dependencies:
@@ -4285,14 +4324,6 @@ proxyquire@1.7.11:
module-not-found-error "^1.0.0"
resolve "~1.1.7"
-proxyquire@^1.7.4:
- version "1.7.10"
- resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-1.7.10.tgz#75be0770a81188f4d08bd01dfc30b767365aa20d"
- dependencies:
- fill-keys "^1.0.2"
- module-not-found-error "^1.0.0"
- resolve "~1.1.7"
-
pseudomap@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
@@ -4417,11 +4448,11 @@ qs@2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404"
-qs@6.2.0, qs@~6.2.0:
+qs@6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
-qs@6.2.1:
+qs@6.2.1, qs@~6.2.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625"
@@ -4440,14 +4471,6 @@ range-parser@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
-raw-body@~2.1.7:
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774"
- dependencies:
- bytes "2.4.0"
- iconv-lite "0.4.13"
- unpipe "1.0.0"
-
raw-body@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96"
@@ -4526,7 +4549,7 @@ readable-stream@1.1.14, readable-stream@1.1.x, readable-stream@^1.1.7, readable-
isarray "0.0.1"
string_decoder "~0.10.x"
-readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2:
+readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
dependencies:
@@ -4956,7 +4979,7 @@ setprototypeof@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08"
-shelljs@0.7.6:
+shelljs@0.7.6, shelljs@^0.7.5:
version "0.7.6"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad"
dependencies:
@@ -4964,14 +4987,6 @@ shelljs@0.7.6:
interpret "^1.0.0"
rechoir "^0.6.2"
-shelljs@^0.7.5:
- version "0.7.5"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675"
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
shimmer@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.0.0.tgz#49c2d71c678360b802be18b278382d1cbb805c39"
@@ -5428,7 +5443,7 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
-type-is@^1.6.4, type-is@~1.6.13, type-is@~1.6.14:
+type-is@^1.6.4, type-is@~1.6.14:
version "1.6.14"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2"
dependencies: