Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(ts): enable lint and fix #287

Merged
merged 1 commit into from
Dec 14, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@
"scripts": {
"docs": "jsdoc -c .jsdoc.js",
"generate-scaffolding": "repo-tools generate all && repo-tools generate lib_samples_readme -l samples/ --config ../.cloud-repo-tools.json",
"lint": "eslint 'samples/*.js' 'samples/**/*.js'",
"lint": "gts check && eslint '**/*.js'",
"cover": "nyc --reporter=lcov mocha build/test && nyc report",
"samples-test": "cd samples/ && npm link ../ && npm test && cd ../",
"test-no-cover": "mocha build/test",
"test": "npm run cover",
"presystem-test": "npm run compile",
"system-test": "mocha build/system-test --timeout 600000",
"fix": "eslint 'samples/*.js' 'samples/**/*.js' --fix",
"fix": "gts fix && eslint '**/*.js' --fix",
"clean": "gts clean",
"compile": "tsc -p . && cp -r src/v1/ build/src/v1/ && cp -r protos build/ && cp test/*.js build/test",
"prepare": "npm run compile",
Expand Down
4 changes: 4 additions & 0 deletions src/.eslintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
rules:
node/no-unpublished-require: off
node/no-missing-require: off
48 changes: 23 additions & 25 deletions src/entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,6 @@ entity.isDsGeoPoint = isDsGeoPoint;
* });
*/
class Key {

namespace: string;
id?: string;
name?: string;
Expand Down Expand Up @@ -294,7 +293,7 @@ function decodeValueProto(valueProto) {
}

case 'integerValue': {
return parseInt(value, 10);
return Number(value);
}

case 'entityValue': {
Expand All @@ -306,13 +305,11 @@ function decodeValueProto(valueProto) {
}

case 'timestampValue': {
const milliseconds = parseInt(value.nanos, 10) / 1e6;
return new Date(parseInt(value.seconds, 10) * 1000 + milliseconds);
const milliseconds = Number(value.nanos) / 1e6;
return new Date(Number(value.seconds) * 1000 + milliseconds);
}

default: {
return value;
}
default: { return value; }
}
}

Expand Down Expand Up @@ -455,6 +452,7 @@ function entityFromEntityProto(entityProto) {

const properties = entityProto.properties || {};

// tslint:disable-next-line forin
for (const property in properties) {
const value = properties[property];
entityObject[property] = entity.decodeValueProto(value);
Expand Down Expand Up @@ -502,10 +500,13 @@ function entityToEntityProto(entityObject) {
const entityProto = {
key: null,

properties: Object.keys(properties).reduce((encoded, key) => {
encoded[key] = entity.encodeValue(properties[key]);
return encoded;
}, {}),
properties: Object.keys(properties)
.reduce(
(encoded, key) => {
encoded[key] = entity.encodeValue(properties[key]);
return encoded;
},
{}),
};

if (excludeFromIndexes && excludeFromIndexes.length > 0) {
Expand All @@ -526,11 +527,9 @@ function entityToEntityProto(entityObject) {
if (!hasArrayPath && !hasEntityPath) {
// This is the path end node. Traversal ends here in either case.
if (entity.properties) {
if (
entity.properties[path] &&
// array properties should be excluded with [] syntax:
!entity.properties[path].arrayValue
) {
if (entity.properties[path] &&
// array properties should be excluded with [] syntax:
!entity.properties[path].arrayValue) {
// This is the property to exclude!
entity.properties[path].excludeFromIndexes = true;
}
Expand Down Expand Up @@ -561,27 +560,25 @@ function entityToEntityProto(entityObject) {
return;
}

if (
firstPathPartIsArray &&
// check also if the property in question is actually an array value.
entity.properties[firstPathPart].arrayValue
) {
if (firstPathPartIsArray &&
// check also if the property in question is actually an array value.
entity.properties[firstPathPart].arrayValue) {
const array = entity.properties[firstPathPart].arrayValue;
array.values.forEach(value => {
if (remainderPath === '') {
// We want to exclude *this* array property, which is
// equivalent with excluding all its values
// (including entity values at their roots):
excludePathFromEntity(
value,
remainderPath // === ''
value,
remainderPath // === ''
);
} else {
// Path traversal continues at value.entityValue,
// if it is an entity, or must end at value.
excludePathFromEntity(
value.entityValue || value,
remainderPath // !== ''
value.entityValue || value,
remainderPath // !== ''
);
}
});
Expand Down Expand Up @@ -758,6 +755,7 @@ function keyToKeyProto(key) {
}

keyProto.path.unshift(pathElement);
// tslint:disable-next-line no-conditional-assignment
} while ((key = key.parent) && ++numKeysWalked);

return keyProto;
Expand Down
106 changes: 54 additions & 52 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@
*/

import * as arrify from 'arrify';
import {GrpcClient, GrpcClientOptions} from 'google-gax';
import {GoogleAuth} from 'google-auth-library';
import {GrpcClient, GrpcClientOptions} from 'google-gax';
import * as is from 'is';

import {DatastoreRequest} from './request';
import {entity} from './entity';
import {Query} from './query';
import {DatastoreRequest} from './request';
import {Transaction} from './transaction';

const {grpc} = new GrpcClient({} as GrpcClientOptions);
Expand Down Expand Up @@ -88,7 +88,7 @@ const gapic = Object.freeze({
*
* Additionally, `DATASTORE_PROJECT_ID` is recognized. If you have this set,
* you don't need to provide a `projectId`.
*-
*
*
* @class
* @extends {DatastoreRequest}
Expand All @@ -104,13 +104,14 @@ const gapic = Object.freeze({
* @example <caption>Import the client library</caption>
* const {Datastore} = require('@google-cloud/datastore');
*
* @example <caption>Create a client that uses <a href="https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application">Application Default Credentials (ADC)</a>:</caption>
* const datastore = new Datastore();
* @example <caption>Create a client that uses <a
* href="https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application">Application
* Default Credentials (ADC)</a>:</caption> const datastore = new Datastore();
*
* @example <caption>Create a client with <a href="https://cloud.google.com/docs/authentication/production#obtaining_and_providing_service_account_credentials_manually">explicit credentials</a>:</caption>
* const datastore = new Datastore({
* projectId: 'your-project-id',
* keyFilename: '/path/to/keyfile.json'
* @example <caption>Create a client with <a
* href="https://cloud.google.com/docs/authentication/production#obtaining_and_providing_service_account_credentials_manually">explicit
* credentials</a>:</caption> const datastore = new Datastore({ projectId:
* 'your-project-id', keyFilename: '/path/to/keyfile.json'
* });
*
* @example <caption>Retrieving Records</caption>
Expand Down Expand Up @@ -312,9 +313,11 @@ const gapic = Object.freeze({
* const customerId2 = 4993882;
* const customerKey1 = datastore.key(['Customer', customerId1]);
* const customerKey2 = datastore.key(['Customer', customerId2]);
* const cookieKey1 = datastore.key(['Customer', customerId1, 'Cookie', 'cookie28839']); // child entity
* const cookieKey2 = datastore.key(['Customer', customerId1, 'Cookie', 'cookie78984']); // child entity
* const cookieKey3 = datastore.key(['Customer', customerId2, 'Cookie', 'cookie93911']); // child entity
* const cookieKey1 = datastore.key(['Customer', customerId1, 'Cookie',
* 'cookie28839']); // child entity const cookieKey2 =
* datastore.key(['Customer', customerId1, 'Cookie', 'cookie78984']); // child
* entity const cookieKey3 = datastore.key(['Customer', customerId2, 'Cookie',
* 'cookie93911']); // child entity
*
* const entities = [];
*
Expand Down Expand Up @@ -400,7 +403,7 @@ class Datastore extends DatastoreRequest {
this.namespace = options.namespace;

const userProvidedProjectId =
options.projectId || process.env.DATASTORE_PROJECT_ID;
options.projectId || process.env.DATASTORE_PROJECT_ID;
const defaultProjectId = '{{projectId}}';

/**
Expand All @@ -413,16 +416,15 @@ class Datastore extends DatastoreRequest {
this.determineBaseUrl_(options.apiEndpoint);

this.options = Object.assign(
{
libName: 'gccl',
libVersion: require('../../package.json').version,
scopes: gapic.v1.DatastoreClient.scopes,
servicePath: this.baseUrl_,
port: is.number(this.port_) ? this.port_ : 443,
projectId: userProvidedProjectId,
},
options
);
{
libName: 'gccl',
libVersion: require('../../package.json').version,
scopes: gapic.v1.DatastoreClient.scopes,
servicePath: this.baseUrl_,
port: is.number(this.port_) ? this.port_ : 443,
projectId: userProvidedProjectId,
},
options);
if (this.customEndpoint_) {
this.options.sslCreds = grpc.credentials.createInsecure();
}
Expand Down Expand Up @@ -647,7 +649,8 @@ class Datastore extends DatastoreRequest {
}

/**
* Helper to create a Key object, scoped to the instance's namespace by default.
* Helper to create a Key object, scoped to the instance's namespace by
* default.
*
* You may also specify a configuration object to define a namespace and path.
*
Expand All @@ -664,15 +667,15 @@ class Datastore extends DatastoreRequest {
* const key = datastore.key('Company');
*
* @example
* <caption>Create a complete key with a kind value of `Company` and id `123`.</caption>
* const {Datastore} = require('@google-cloud/datastore');
* <caption>Create a complete key with a kind value of `Company` and id
* `123`.</caption> const {Datastore} = require('@google-cloud/datastore');
* const datastore = new Datastore();
* const key = datastore.key(['Company', 123]);
*
* @example
* <caption>If the ID integer is outside the bounds of a JavaScript Number object, create an Int.</caption>
* const {Datastore} = require('@google-cloud/datastore');
* const datastore = new Datastore();
* <caption>If the ID integer is outside the bounds of a JavaScript Number
* object, create an Int.</caption> const {Datastore} =
* require('@google-cloud/datastore'); const datastore = new Datastore();
* const key = datastore.key([
* 'Company',
* datastore.int('100000000000001234')
Expand All @@ -686,21 +689,19 @@ class Datastore extends DatastoreRequest {
* const key = datastore.key(['Company', 'Google']);
*
* @example
* <caption>Create a complete key from a provided namespace and path.</caption>
* const {Datastore} = require('@google-cloud/datastore');
* <caption>Create a complete key from a provided namespace and
* path.</caption> const {Datastore} = require('@google-cloud/datastore');
* const datastore = new Datastore();
* const key = datastore.key({
* namespace: 'My-NS',
* path: ['Company', 123]
* });
*/
key(options) {
options = is.object(options)
? options
: {
namespace: this.namespace,
path: arrify(options),
};
options = is.object(options) ? options : {
namespace: this.namespace,
path: arrify(options),
};
return new entity.Key(options);
}

Expand Down Expand Up @@ -742,9 +743,9 @@ class Datastore extends DatastoreRequest {
}

/**
* Determine the appropriate endpoint to use for API requests. If not explicitly
* defined, check for the "DATASTORE_EMULATOR_HOST" environment variable, used
* to connect to a local Datastore server.
* Determine the appropriate endpoint to use for API requests. If not
* explicitly defined, check for the "DATASTORE_EMULATOR_HOST" environment
* variable, used to connect to a local Datastore server.
*
* @private
*
Expand All @@ -768,10 +769,9 @@ class Datastore extends DatastoreRequest {
this.port_ = Number(baseUrl.match(port)![1]);
}

this.baseUrl_ = baseUrl
.replace(leadingProtocol, '')
.replace(port, '')
.replace(trailingSlashes, '');
this.baseUrl_ = baseUrl.replace(leadingProtocol, '')
.replace(port, '')
.replace(trailingSlashes, '');
}

/**
Expand Down Expand Up @@ -813,19 +813,21 @@ export {Datastore};
* @module {Datastore} @google-cloud/datastore
* @alias nodejs-datastore
*
* @example <caption>Install the client library with <a href="https://www.npmjs.com/">npm</a>:</caption>
* npm install --save @google-cloud/datastore
* @example <caption>Install the client library with <a
* href="https://www.npmjs.com/">npm</a>:</caption> npm install --save
* @google-cloud/datastore
*
* @example <caption>Import the client library</caption>
* const {Datastore} = require('@google-cloud/datastore');
*
* @example <caption>Create a client that uses <a href="https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application">Application Default Credentials (ADC)</a>:</caption>
* const datastore = new Datastore();
* @example <caption>Create a client that uses <a
* href="https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application">Application
* Default Credentials (ADC)</a>:</caption> const datastore = new Datastore();
*
* @example <caption>Create a client with <a href="https://cloud.google.com/docs/authentication/production#obtaining_and_providing_service_account_credentials_manually">explicit credentials</a>:</caption>
* const datastore = new Datastore({
* projectId: 'your-project-id',
* keyFilename: '/path/to/keyfile.json'
* @example <caption>Create a client with <a
* href="https://cloud.google.com/docs/authentication/production#obtaining_and_providing_service_account_credentials_manually">explicit
* credentials</a>:</caption> const datastore = new Datastore({ projectId:
* 'your-project-id', keyFilename: '/path/to/keyfile.json'
* });
*
* @example <caption>include:samples/quickstart.js</caption>
Expand Down
3 changes: 2 additions & 1 deletion src/query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,8 @@ class Query {
* });
*
* //-
* // A keys-only query returns just the keys of the result entities instead of
* // A keys-only query returns just the keys of the result entities instead
* of
* // the entities themselves, at lower latency and cost.
* //-
* query.select('__key__');
Expand Down
Loading