-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
Feat/implement improved graceful degradation ripple #282
Feat/implement improved graceful degradation ripple #282
Conversation
How exactly should the "enhanced" states look when tabbing through a document? Currently there is no indication of what button has focus which is extremely inaccessible. |
@cristobalchao not sure that this branch was cleanly rebased from master since it looks like there's a bunch of extemporaneous commits prior to 64b9db3. You may want to try and |
demos/button.html
Outdated
@@ -75,6 +75,42 @@ | |||
</div> | |||
</fieldset> | |||
<fieldset> | |||
<legend>Graceful degraded buttons</legend> | |||
<button class="mdc-button" no-js> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we make those attributes data-demo-no-js
instead of no-js
so that they are valid HTML attrs? I also think having the demo
in there is useful since it signals to users that the data attribute is not part of the component's API and exists for demo purposes only
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
demos/ripple.html
Outdated
</div> | ||
</div> | ||
<div> | ||
<h2>Bounded - Graceful degraded</h2> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: How about "CSS Only" instead of "Gracefully degraded"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
demos/button.html
Outdated
@@ -75,6 +75,42 @@ | |||
</div> | |||
</fieldset> | |||
<fieldset> | |||
<legend>Graceful degraded buttons</legend> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about "CSS Only" instead of "Gracefully degraded"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
|
||
section > div { | ||
margin: 48px 0; | ||
width: 400px; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should we add a media query here that sets it to 100%
width if the viewport is smaller than 400px
? I'm thinking of how this would appear on v. small screens
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or just max-width: 400px;
so on small screens it just gets smaller as-needed. But doesn't grow above that.
demos/ripple.html
Outdated
</div> | ||
<div> | ||
<h2>Bounded - Graceful degraded</h2> | ||
<div class="mdc-ripple-surface demo-surface mdc-elevation--z2" no-js tabindex="0"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same comment regarding no-js
--> data-demo-no-js
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
packages/mdc-button/mdc-button.scss
Outdated
|
||
overflow: hidden; | ||
|
||
@include mdc-theme-dark(".mdc-button", true) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this can just be @include mdc-theme-dark {
here. We use the first argument in the case where we need to style an BEM element class to adhere to a dark theme treatment
.mdc-component__element {
@include mdc-theme-dark(".mdc-component") {
// ...
}
}
And we usually use the second argument when we're styling a modifier class for dark theme treatment, e.g.
.mdc-component--mod {
@include mdc-theme-dark(".mdc-component", true) {
// ...
}
}
The mdc-theme README has more info on this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
packages/mdc-button/mdc-button.scss
Outdated
.mdc-button--raised { | ||
@each $theme-style in (primary, accent) { | ||
&.mdc-button--#{$theme-style} { | ||
@include mdc-ripple-base; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we put a TODO
here and in other components containing elevation that we want to disable ink wash on hover and alter elevation instead as part of #194?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
packages/mdc-ripple/README.md
Outdated
@@ -30,6 +30,9 @@ to provide components (or any element at all) with a | |||
material "ink ripple" interaction effect. It is designed to be efficient, un-invasive, and usable | |||
without adding any extra DOM to your elements. | |||
|
|||
and includes a gracefully degraded version that can be used |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This paragraph looks a bit broken...
Maybe we should say:
MDC Ripple also works without javascript, where it gracefully degrades to a simpler CSS-Only implementation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Much better!
packages/mdc-ripple/README.md
Outdated
``` | ||
|
||
#### Adding the ripple Sass | ||
|
||
When a ripple is successfully initialized on an element, it dynamically adds a `mdc-ripple-upgraded` class to that element. Therefore, to add a ripple to our surface, first we include the proper Sass mixins within our surface's styles when it contains this class. We also add a few additional properties that ensure the ripple's UX is correct. | ||
To add a ripple to our surface, first we include the proper Sass mixins within our surface's styles when it contains this class. We also add a few additional properties that ensure the ripple's UX is correct. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we can remove the portion of text that says "when it contains this class", since I'm pretty sure "this class" refers to mdc-ripple-upgraded
, which we now take care of automatically.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
packages/mdc-ripple/README.md
Outdated
@@ -121,6 +98,8 @@ When a ripple is successfully initialized on an element, it dynamically adds a ` | |||
|
|||
This code sets up `.surface` with the correct css variables as well as `will-change` properties to support the ripple. It then dynamically generates the correct selectors such that the surface's `::before` element functions as a background ripple, and the surface's `::after` element functions as a foreground ripple. | |||
|
|||
When a ripple is successfully initialized on an element, it dynamically adds a `mdc-ripple-upgraded` class to that element. If ripple is not initialized but Sass misins are included within our surface, the ripple would be on a graceful degraded state. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Change "the ripple would be on a graceful degraded state" to "the ripple will still work, but it would use a simpler, CSS-Only implementation which relies on :hover
, :active
, and :focus
".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SGTM
dfde1bc
to
fd06f07
Compare
packages/mdc-button/mdc-button.scss
Outdated
|
||
overflow: hidden; | ||
|
||
@include mdc-theme-dark(".mdc-button") { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this should just be @include mdc-theme-dark {
with no argument
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yup!
packages/mdc-button/mdc-button.scss
Outdated
} | ||
} | ||
|
||
/* TODO(cristobalchao): Disable ink wash on hover and alter elevation instead for raised surfaces. */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we switch this to a // Sass style comment
? This way it's not output in the built CSS
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sgtm
packages/mdc-ripple/README.md
Outdated
@@ -121,6 +95,8 @@ When a ripple is successfully initialized on an element, it dynamically adds a ` | |||
|
|||
This code sets up `.surface` with the correct css variables as well as `will-change` properties to support the ripple. It then dynamically generates the correct selectors such that the surface's `::before` element functions as a background ripple, and the surface's `::after` element functions as a foreground ripple. | |||
|
|||
When a ripple is successfully initialized on an element, it dynamically adds a `mdc-ripple-upgraded` class to that element. If ripple is not initialized but Sass misins are included within our surface, the ripple will still work, but it would use a simpler, CSS-Only implementation which relies on `::hover`, `::active`, and `::focus`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: :hover
, :active
, and :focus
, not double-colon. Double-colons are for pseudo-elements, whereas single-colons are for pseudo-classes
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ups, my bad!
packages/mdc-ripple/_mixins.scss
Outdated
@@ -101,6 +109,26 @@ | |||
} | |||
// stylelint-enable at-rule-empty-line-before, block-closing-brace-newline-after | |||
|
|||
&.mdc-ripple-upgraded { | |||
&#{$pseudo} { | |||
transition-duration: 0ms; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this just be transition: none;
instead?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Much better!
Don't we have to remove the manual graceful degredation styles components that have ripples as well? λ for f in $(grep -l '@material/ripple' $(find packages -name "package.json")); do echo $(dirname $f); done;
packages/material-components-web
packages/mdc-button
packages/mdc-checkbox
packages/mdc-fab
packages/mdc-icon-toggle
packages/mdc-list
packages/mdc-radio
packages/mdc-ripple |
packages/mdc-ripple/_mixins.scss
Outdated
@@ -42,6 +42,13 @@ | |||
|
|||
will-change: transition, opacity; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eek! This should be transform
, not transition
😝 by bad! Mind fixing this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lol! I totally missed that too. Fixed!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Generally LGTM, left a few comments.
</div> | ||
</div> | ||
<div> | ||
<h2>Unbounded - CSS Only</h2> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The fallback ripple seems larger than the JS-enabled one. Is this intentional?
packages/mdc-ripple/README.md
Outdated
material "ink ripple" interaction effect. It is designed to be efficient, un-invasive, and usable | ||
without adding any extra DOM to your elements. | ||
MDC Ripple provides the Javascript and CSS required to provide components (or any element at all) with a | ||
material "ink ripple" interaction effect. It is designed to be efficient, un-invasive, and usable without adding any extra DOM to your elements. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: no need for hyphen in "un-invasive".
packages/mdc-ripple/_mixins.scss
Outdated
left: calc(50% - #{$radius}); | ||
width: $radius * 2; | ||
height: $radius * 2; | ||
transform: scale(var(--mdc-ripple-fg-scale)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In order to make var()
as bulletproof as possible, consider following the pattern:
transform: scale(0);
transform: scale(var(--mdc-ripple-fg-scale, 0));
(replace 0 with whatever default value you deem fit)
The first line gives you a fallback for browsers that don't understand custom properties, whereas the second value in the var()
function gives you a fallback in case --mdc-ripple-fg-scale
isn't defined.
Another option is to stick a big a big @supports
around everything (which to be fair, you may already be doing in JavaScript), but you should at least keep the second parameter to var()
.
packages/mdc-ripple/_mixins.scss
Outdated
&#{$pseudo} { | ||
top: 0; | ||
left: 0; | ||
width: var(--mdc-ripple-fg-size); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same comment as above, and everywhere else var()
is used in the file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need to use the dual-property method for .mdc-ripple-upgraded
? I think we left that off initially b/c we don't even upgrade the ripple if Custom Vars aren't supported by the browser. Or, should we just do it for consistency?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, if we're checking in JS, there's no need for the first fallback. Still might be useful to do var(--mdc-ripple-fg-size, 16px)
(or whatever sensible default), in case --mdc-ripple-fg-size
isn't defined.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
True, the second arg fallback is always a good call
All issues addressed PTAL |
packages/mdc-button/mdc-button.scss
Outdated
@@ -22,6 +22,40 @@ | |||
@import "@material/typography/mixins"; | |||
|
|||
// postcss-bem-linter: define button | |||
|
|||
.mdc-button { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These style rules should be put within the .mdc-button
declaration below, which is the top-level declaration for mdc-button
. Having an extra one seems redundant, no?
packages/mdc-radio/mdc-radio.scss
Outdated
@@ -58,8 +62,8 @@ $mdc-radio-transition-duration: 120ms; | |||
left: 0; | |||
width: 100%; | |||
height: 100%; | |||
transform: scale(0, 0); | |||
transition: mdc-radio-exit(opacity), mdc-radio-exit(transform); | |||
// transform: scale(0, 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
forgot to remove?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ups...my bad!
packages/mdc-ripple/_mixins.scss
Outdated
left: var(--mdc-ripple-left); | ||
width: var(--mdc-ripple-fg-size); | ||
height: var(--mdc-ripple-fg-size); | ||
top: calc(50% - #{$radius / 2}); // fallback for browsers that don't support custom properties |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we need the fallback here, since this gets styled by using mdc-ripple-upgraded--unbounded
. Since the JS checks for CSS Var support before attaching any of the mdc-ripple-upgraded
classes, we can guarantee here that CSS variables are supported and thus you can remove this.
packages/mdc-ripple/_mixins.scss
Outdated
left: calc(50% - #{$radius}); | ||
width: $radius * 2; | ||
height: $radius * 2; | ||
transform: scale(0); // fallback for browsers that don't support custom properties |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can remove the inline comment; this is a convention in our codebase which we talk about in our mdc-theme package.
packages/mdc-ripple/_mixins.scss
Outdated
&#{$pseudo} { | ||
top: 0; | ||
left: 0; | ||
width: $radius; // fallback for browsers that don't support custom properties |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same comment here regarding not needing fallback for mdc-ripple-upgraded
packages/mdc-ripple/foundation.js
Outdated
@@ -272,7 +273,8 @@ export default class MDCRippleFoundation extends MDCFoundation { | |||
let approxCurScale = 0; | |||
if (msElapsed > FG_TRANSFORM_DELAY_MS) { | |||
const percentComplete = Math.min((msElapsed - FG_TRANSFORM_DELAY_MS) / this.xfDuration_, 1); | |||
approxCurScale = percentComplete * this.fgScale_; | |||
// approxCurScale = percentComplete * this.fgScale_; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
forgot to remove?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My bad again!
All issues addressed PTAL |
packages/mdc-ripple/_mixins.scss
Outdated
@@ -115,7 +115,7 @@ | |||
left: calc(50% - #{$radius}); | |||
width: $radius * 2; | |||
height: $radius * 2; | |||
transform: scale(0); // fallback for browsers that don't support custom properties | |||
transform: scale(0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this fallback is not needed, since the property is under .mdc-ripple-upgraded
Couple of issues I noticed in the demo:
|
All issues addressed PTAL |
409aef4
to
bc73a22
Compare
Excellent work @cristobalchao! |
Does this address elements retaining the "ripple" on focus? E.g. the radio buttons keep a "halo" after clicking them: http://i.imgur.com/NoP7SsU.png I though I would verify since this seemed like it addresses that before opening a new issue. Also, related: are there any plans to allow users from disabling the ripple effects altogether? |
@omtinez That seems like intended functionality. That is focus state for accessibility purposes and is highly required. Ripple effects are added via JavaScript instantiation. Otherwise there should be a CSS-only effect for these states that looks like a ripple but doesn't function like the actual ripples. If you use the JS though for these form controls, Ripples are basically bundled-in since they are a specification detail. |
I commend your focus on accessibility, but I think that the current look is a bit over the top (in my opinion, hideous) by making a radio button appear twice as big. Specially considering that the Javascript-enabled behavior is a ripple for a fraction of a second; I'm not sure that the Javascript-enabled behavior is much more accessible e.g. to someone visually impaired. I'm happy to open a separate issue if you are willing to discuss the idea there (or want it just for tracking purposes, even if it's going to be immediately closed). For the sake of documenting, even though it breaks the accessibility argument, this is the CSS workaround that I'm using and disables the enormous halo around radio buttons:
|
These states are explicitly defined in the spec. So it adheres to MD guidance as-is and is accessible. Disabling this is discouraged unless you replace it with some other focus indicator for people who need this. However unless the MD team provides us with alternative measures to implement for a11y in this case it shouldn't be changed. I believe the focus state is shown initially then removed with JS since that is a part of the ripple effect specification somewhere else. IMO it isn't as useful for a11y but that is purely subjective conjecture and I have no data to back it up to influence any changes. |
## The devDependency [@google-cloud/datastore](https://github.com/googleapis/nodejs-datastore) was updated from `2.0.0` to `3.0.1`. This version is **not covered** by your **current version range**. If you don’t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update. --- <details> <summary>Release Notes for v3.0.1</summary> <p>01-15-2019 13:20 PST</p> <h3>Bug fixes</h3> <ul> <li>fix: ship the build directory (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/300" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/300/hovercard">#300</a>)</li> </ul> <h3>Internal / Testing Changes</h3> <ul> <li>build: check broken links in generated docs (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/292" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/292/hovercard">#292</a>)</li> </ul> </details> <details> <summary>Commits</summary> <p>The new version differs by 3 commits.</p> <ul> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/401b2e1c03c1cb1340d1c7249a1f435dc17d74cb"><code>401b2e1</code></a> <code>Release v3.0.1 (#301)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/177b11b3819b98debcf157b040d282c2b9b8d9ca"><code>177b11b</code></a> <code>fix: ship the build directory (#300)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/70ea500726d7a48a768433703c94e9fbb7c53f9d"><code>70ea500</code></a> <code>build: check broken links in generated docs (#292)</code></li> </ul> <p>See the <a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/compare/f839e581b0396b830cc3bae31d107f57414394d4...401b2e1c03c1cb1340d1c7249a1f435dc17d74cb">full diff</a></p> </details> --- <details> <summary>Release Notes for v3.0.0</summary> <p>01-14-2019 20:31 PST</p> <p><strong>This release has breaking changes!</strong> The import style of this library has changed to be consistent with <a href="https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/" rel="nofollow">es modules</a>.</p> <h4>Old busted code</h4> <div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> <span class="pl-c1">Datastore</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>)(); <span class="pl-c"><span class="pl-c">//</span> or...</span> <span class="pl-k">const</span> <span class="pl-c1">Datastore</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>); <span class="pl-k">const</span> <span class="pl-c1">ds</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Datastore</span>();</pre></div> <h4>New hot code</h4> <div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> {<span class="pl-c1">Datastore</span>} <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>); <span class="pl-k">const</span> <span class="pl-c1">ds</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Datastore</span>();</pre></div> <p>Please take care to update your imports accordingly!</p> <h3>Dependencies</h3> <ul> <li>fix(deps): update dependency google-gax to ^0.23.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/296" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/296/hovercard">#296</a>)</li> <li>fix(deps): update dependency google-gax to ^0.22.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/248" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/248/hovercard">#248</a>)</li> <li>fix(deps): update dependency concat-stream to v2 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/290" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/290/hovercard">#290</a>)</li> <li>refactor: remove async module usage (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/272" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/272/hovercard">#272</a>)</li> <li>fix(deps): update dependency through2 to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/237" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/237/hovercard">#237</a>)</li> <li>chore: remove unused dependencies (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/226" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/226/hovercard">#226</a>)</li> <li>fix(deps): update dependency google-proto-files to ^0.17.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/210" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/210/hovercard">#210</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>fix(docs): fix namespace causing 404s (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/294" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/294/hovercard">#294</a>)</li> <li>fix(docs): remove unused long running operations types</li> <li>docs: Update doc comment showing structure of entity (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/276" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/276/hovercard">#276</a>)</li> <li>docs: update readme badges (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/269" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/269/hovercard">#269</a>)</li> <li>refactor(samples): Samples to use async/await</li> <li>docs: update auto-generated jsdoc comments (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/245" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/245/hovercard">#245</a>)</li> </ul> <h3>Internal / Testing Changes</h3> <ul> <li>refactor: sprinkle some types about (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/291" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/291/hovercard">#291</a>)</li> <li>chore(deps): update dependency @types/sinon to v7.0.2 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/289" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/289/hovercard">#289</a>)</li> <li>chore(deps): update dependency @types/sinon to v7 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/286" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/286/hovercard">#286</a>)</li> <li>refactor(ts): enable lint and fix (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/287" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/287/hovercard">#287</a>)</li> <li>chore(build): inject yoshi automation key (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/285" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/285/hovercard">#285</a>)</li> <li>chore: update nyc and eslint configs (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/284" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/284/hovercard">#284</a>)</li> <li>chore: fix publish.sh permission +x (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/282" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/282/hovercard">#282</a>)</li> <li>fix(build): fix Kokoro release script (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/281" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/281/hovercard">#281</a>)</li> <li>build: add Kokoro configs for autorelease (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/280" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/280/hovercard">#280</a>)</li> <li>chore: always nyc report before calling codecov (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/275" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/275/hovercard">#275</a>)</li> <li>chore: nyc ignore build/test by default (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/274" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/274/hovercard">#274</a>)</li> <li>chore: update license file (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/271" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/271/hovercard">#271</a>)</li> <li>refactor: run gts fix (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/265" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/265/hovercard">#265</a>)</li> <li>chore(deps): update dependency typescript to ~3.2.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/264" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/264/hovercard">#264</a>)</li> <li>fix(build): fix system key decryption (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/266" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/266/hovercard">#266</a>)</li> <li>refactor(samples): convert sample tests from ava to mocha (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/259" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/259/hovercard">#259</a>)</li> <li>fix: Pin @types/sinon to last compatible version (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/256" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/256/hovercard">#256</a>)</li> <li>chore: add synth.metadata (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/254" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/254/hovercard">#254</a>)</li> <li>refactor(ts): enable noImplicitThis (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/250" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/250/hovercard">#250</a>)</li> <li>chore(deps): update dependency gts to ^0.9.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/247" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/247/hovercard">#247</a>)</li> <li>chore: update eslintignore config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/246" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/246/hovercard">#246</a>)</li> <li>refactor(ts): use es module imports (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/244" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/244/hovercard">#244</a>)</li> <li>chore(deps): update dependency @google-cloud/nodejs-repo-tools to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/243" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/243/hovercard">#243</a>)</li> <li>chore: drop contributors from multiple places (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/241" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/241/hovercard">#241</a>)</li> <li>chore(deps): update dependency @types/is to v0.0.21 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/240" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/240/hovercard">#240</a>)</li> <li>chore: use latest npm on Windows (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/239" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/239/hovercard">#239</a>)</li> <li>refactor(ts): convert to typescript (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/236" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/236/hovercard">#236</a>)</li> <li>chore: update CircleCI config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/235" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/235/hovercard">#235</a>)</li> <li>chore: include build in eslintignore (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/232" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/232/hovercard">#232</a>)</li> <li>chore(deps): update dependency eslint-plugin-node to v8 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/227" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/227/hovercard">#227</a>)</li> <li>chore: update issue templates (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/225" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/225/hovercard">#225</a>)</li> <li>chore: remove old issue template (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/223" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/223/hovercard">#223</a>)</li> <li>build: run tests on node11 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/222" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/222/hovercard">#222</a>)</li> <li>chores(build): do not collect sponge.xml from windows builds (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/221" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/221/hovercard">#221</a>)</li> <li>chores(build): run codecov on continuous builds (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/220" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/220/hovercard">#220</a>)</li> <li>chore: update new issue template (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/219" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/219/hovercard">#219</a>)</li> <li>build: fix codecov uploading on Kokoro (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/213" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/213/hovercard">#213</a>)</li> <li>fix(deps): update dependency sinon to v7 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/212" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/212/hovercard">#212</a>)</li> <li>Update kokoro config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/207" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/207/hovercard">#207</a>)</li> <li>chore(deps): update dependency eslint-plugin-prettier to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/206" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/206/hovercard">#206</a>)</li> </ul> </details> <details> <summary>Commits</summary> <p>The new version differs by 54 commits.</p> <ul> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f839e581b0396b830cc3bae31d107f57414394d4"><code>f839e58</code></a> <code>Release v3.0.0 (#298)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f0b665c0c2c8c2241af2c321212574fb78d63f4a"><code>f0b665c</code></a> <code>fix(deps): update dependency google-gax to ^0.23.0 (#296)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f4e4410fa1f930ce196ee809d150c07c1e86875d"><code>f4e4410</code></a> <code>fix(docs): fix namespace causing 404s (#294)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/8608c7ee73b80a6e55f05cb3d687a9b32b1b2bd9"><code>8608c7e</code></a> <code>fix(docs): remove unused long running operations types</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/4bbe64ff09e28ffac063714def174860388f136c"><code>4bbe64f</code></a> <code>refactor: sprinkle some types about (#291)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/78d776f68cef67471a318a37dba08e6ad2e535a7"><code>78d776f</code></a> <code>fix(deps): update dependency concat-stream to v2 (#290)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/b3db31e4ca17684012efe47e0745d6927a587d5e"><code>b3db31e</code></a> <code>chore(deps): update dependency @types/sinon to v7.0.2 (#289)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/42d6f705b3ed39d25574c820dc92efc935fd92b1"><code>42d6f70</code></a> <code>refactor: remove async module usage (#272)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/97d847df17ff45947e495bc5e54f466106003186"><code>97d847d</code></a> <code>chore(deps): update dependency @types/sinon to v7 (#286)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/717b818e25f1b7bb014b614d0be234102804ed37"><code>717b818</code></a> <code>refactor(ts): enable lint and fix (#287)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/dcb7f651a4d9d3298f44eeb45f735b1713c073ff"><code>dcb7f65</code></a> <code>chore(build): inject yoshi automation key (#285)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/35a081d6e8bd146d05d04a1ea47ca7fd2dfc1c4b"><code>35a081d</code></a> <code>chore: update nyc and eslint configs (#284)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/4f91d8f7c91cc1d0360c84a5d4d7a0ede978addb"><code>4f91d8f</code></a> <code>chore: fix publish.sh permission +x (#282)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/1072247740128ae04380d2ca3cc57895a52e5208"><code>1072247</code></a> <code>fix(build): fix Kokoro release script (#281)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/b5579c28ab0c938f65e61be667ea65a8cacf4cf2"><code>b5579c2</code></a> <code>build: add Kokoro configs for autorelease (#280)</code></li> </ul> <p>There are 54 commits in total.</p> <p>See the <a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/compare/a0406f2e897e59944d9f82d9997955aa32f7df13...f839e581b0396b830cc3bae31d107f57414394d4">full diff</a></p> </details> <details> <summary>FAQ and help</summary> There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html). If those don’t help, you can always [ask the humans behind Greenkeeper](https://github.com/greenkeeperio/greenkeeper/issues/new). </details> --- Your [Greenkeeper](https://greenkeeper.io) bot 🌴
…onents#4251) ## The devDependency [@google-cloud/datastore](https://github.com/googleapis/nodejs-datastore) was updated from `2.0.0` to `3.0.1`. This version is **not covered** by your **current version range**. If you don’t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update. --- <details> <summary>Release Notes for v3.0.1</summary> <p>01-15-2019 13:20 PST</p> <h3>Bug fixes</h3> <ul> <li>fix: ship the build directory (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/300" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/300/hovercard">material-components#300</a>)</li> </ul> <h3>Internal / Testing Changes</h3> <ul> <li>build: check broken links in generated docs (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/292" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/292/hovercard">material-components#292</a>)</li> </ul> </details> <details> <summary>Commits</summary> <p>The new version differs by 3 commits.</p> <ul> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/401b2e1c03c1cb1340d1c7249a1f435dc17d74cb"><code>401b2e1</code></a> <code>Release v3.0.1 (material-components#301)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/177b11b3819b98debcf157b040d282c2b9b8d9ca"><code>177b11b</code></a> <code>fix: ship the build directory (material-components#300)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/70ea500726d7a48a768433703c94e9fbb7c53f9d"><code>70ea500</code></a> <code>build: check broken links in generated docs (material-components#292)</code></li> </ul> <p>See the <a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/compare/f839e581b0396b830cc3bae31d107f57414394d4...401b2e1c03c1cb1340d1c7249a1f435dc17d74cb">full diff</a></p> </details> --- <details> <summary>Release Notes for v3.0.0</summary> <p>01-14-2019 20:31 PST</p> <p><strong>This release has breaking changes!</strong> The import style of this library has changed to be consistent with <a href="https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/" rel="nofollow">es modules</a>.</p> <h4>Old busted code</h4> <div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> <span class="pl-c1">Datastore</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>)(); <span class="pl-c"><span class="pl-c">//</span> or...</span> <span class="pl-k">const</span> <span class="pl-c1">Datastore</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>); <span class="pl-k">const</span> <span class="pl-c1">ds</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Datastore</span>();</pre></div> <h4>New hot code</h4> <div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> {<span class="pl-c1">Datastore</span>} <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>); <span class="pl-k">const</span> <span class="pl-c1">ds</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Datastore</span>();</pre></div> <p>Please take care to update your imports accordingly!</p> <h3>Dependencies</h3> <ul> <li>fix(deps): update dependency google-gax to ^0.23.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/296" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/296/hovercard">material-components#296</a>)</li> <li>fix(deps): update dependency google-gax to ^0.22.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/248" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/248/hovercard">material-components#248</a>)</li> <li>fix(deps): update dependency concat-stream to v2 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/290" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/290/hovercard">material-components#290</a>)</li> <li>refactor: remove async module usage (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/272" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/272/hovercard">material-components#272</a>)</li> <li>fix(deps): update dependency through2 to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/237" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/237/hovercard">material-components#237</a>)</li> <li>chore: remove unused dependencies (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/226" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/226/hovercard">material-components#226</a>)</li> <li>fix(deps): update dependency google-proto-files to ^0.17.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/210" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/210/hovercard">material-components#210</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>fix(docs): fix namespace causing 404s (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/294" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/294/hovercard">material-components#294</a>)</li> <li>fix(docs): remove unused long running operations types</li> <li>docs: Update doc comment showing structure of entity (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/276" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/276/hovercard">material-components#276</a>)</li> <li>docs: update readme badges (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/269" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/269/hovercard">material-components#269</a>)</li> <li>refactor(samples): Samples to use async/await</li> <li>docs: update auto-generated jsdoc comments (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/245" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/245/hovercard">material-components#245</a>)</li> </ul> <h3>Internal / Testing Changes</h3> <ul> <li>refactor: sprinkle some types about (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/291" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/291/hovercard">material-components#291</a>)</li> <li>chore(deps): update dependency @types/sinon to v7.0.2 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/289" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/289/hovercard">material-components#289</a>)</li> <li>chore(deps): update dependency @types/sinon to v7 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/286" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/286/hovercard">material-components#286</a>)</li> <li>refactor(ts): enable lint and fix (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/287" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/287/hovercard">material-components#287</a>)</li> <li>chore(build): inject yoshi automation key (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/285" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/285/hovercard">material-components#285</a>)</li> <li>chore: update nyc and eslint configs (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/284" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/284/hovercard">material-components#284</a>)</li> <li>chore: fix publish.sh permission +x (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/282" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/282/hovercard">material-components#282</a>)</li> <li>fix(build): fix Kokoro release script (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/281" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/281/hovercard">material-components#281</a>)</li> <li>build: add Kokoro configs for autorelease (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/280" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/280/hovercard">material-components#280</a>)</li> <li>chore: always nyc report before calling codecov (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/275" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/275/hovercard">material-components#275</a>)</li> <li>chore: nyc ignore build/test by default (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/274" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/274/hovercard">material-components#274</a>)</li> <li>chore: update license file (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/271" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/271/hovercard">material-components#271</a>)</li> <li>refactor: run gts fix (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/265" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/265/hovercard">material-components#265</a>)</li> <li>chore(deps): update dependency typescript to ~3.2.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/264" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/264/hovercard">material-components#264</a>)</li> <li>fix(build): fix system key decryption (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/266" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/266/hovercard">material-components#266</a>)</li> <li>refactor(samples): convert sample tests from ava to mocha (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/259" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/259/hovercard">material-components#259</a>)</li> <li>fix: Pin @types/sinon to last compatible version (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/256" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/256/hovercard">material-components#256</a>)</li> <li>chore: add synth.metadata (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/254" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/254/hovercard">material-components#254</a>)</li> <li>refactor(ts): enable noImplicitThis (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/250" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/250/hovercard">material-components#250</a>)</li> <li>chore(deps): update dependency gts to ^0.9.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/247" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/247/hovercard">material-components#247</a>)</li> <li>chore: update eslintignore config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/246" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/246/hovercard">material-components#246</a>)</li> <li>refactor(ts): use es module imports (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/244" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/244/hovercard">material-components#244</a>)</li> <li>chore(deps): update dependency @google-cloud/nodejs-repo-tools to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/243" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/243/hovercard">material-components#243</a>)</li> <li>chore: drop contributors from multiple places (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/241" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/241/hovercard">material-components#241</a>)</li> <li>chore(deps): update dependency @types/is to v0.0.21 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/240" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/240/hovercard">material-components#240</a>)</li> <li>chore: use latest npm on Windows (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/239" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/239/hovercard">material-components#239</a>)</li> <li>refactor(ts): convert to typescript (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/236" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/236/hovercard">material-components#236</a>)</li> <li>chore: update CircleCI config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/235" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/235/hovercard">material-components#235</a>)</li> <li>chore: include build in eslintignore (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/232" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/232/hovercard">material-components#232</a>)</li> <li>chore(deps): update dependency eslint-plugin-node to v8 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/227" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/227/hovercard">material-components#227</a>)</li> <li>chore: update issue templates (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/225" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/225/hovercard">material-components#225</a>)</li> <li>chore: remove old issue template (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/223" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/223/hovercard">material-components#223</a>)</li> <li>build: run tests on node11 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/222" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/222/hovercard">material-components#222</a>)</li> <li>chores(build): do not collect sponge.xml from windows builds (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/221" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/221/hovercard">material-components#221</a>)</li> <li>chores(build): run codecov on continuous builds (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/220" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/220/hovercard">material-components#220</a>)</li> <li>chore: update new issue template (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/219" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/219/hovercard">material-components#219</a>)</li> <li>build: fix codecov uploading on Kokoro (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/213" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/213/hovercard">material-components#213</a>)</li> <li>fix(deps): update dependency sinon to v7 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/212" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/212/hovercard">material-components#212</a>)</li> <li>Update kokoro config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/207" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/207/hovercard">material-components#207</a>)</li> <li>chore(deps): update dependency eslint-plugin-prettier to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/206" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/206/hovercard">material-components#206</a>)</li> </ul> </details> <details> <summary>Commits</summary> <p>The new version differs by 54 commits.</p> <ul> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f839e581b0396b830cc3bae31d107f57414394d4"><code>f839e58</code></a> <code>Release v3.0.0 (material-components#298)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f0b665c0c2c8c2241af2c321212574fb78d63f4a"><code>f0b665c</code></a> <code>fix(deps): update dependency google-gax to ^0.23.0 (material-components#296)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f4e4410fa1f930ce196ee809d150c07c1e86875d"><code>f4e4410</code></a> <code>fix(docs): fix namespace causing 404s (material-components#294)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/8608c7ee73b80a6e55f05cb3d687a9b32b1b2bd9"><code>8608c7e</code></a> <code>fix(docs): remove unused long running operations types</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/4bbe64ff09e28ffac063714def174860388f136c"><code>4bbe64f</code></a> <code>refactor: sprinkle some types about (material-components#291)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/78d776f68cef67471a318a37dba08e6ad2e535a7"><code>78d776f</code></a> <code>fix(deps): update dependency concat-stream to v2 (material-components#290)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/b3db31e4ca17684012efe47e0745d6927a587d5e"><code>b3db31e</code></a> <code>chore(deps): update dependency @types/sinon to v7.0.2 (material-components#289)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/42d6f705b3ed39d25574c820dc92efc935fd92b1"><code>42d6f70</code></a> <code>refactor: remove async module usage (material-components#272)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/97d847df17ff45947e495bc5e54f466106003186"><code>97d847d</code></a> <code>chore(deps): update dependency @types/sinon to v7 (material-components#286)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/717b818e25f1b7bb014b614d0be234102804ed37"><code>717b818</code></a> <code>refactor(ts): enable lint and fix (material-components#287)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/dcb7f651a4d9d3298f44eeb45f735b1713c073ff"><code>dcb7f65</code></a> <code>chore(build): inject yoshi automation key (material-components#285)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/35a081d6e8bd146d05d04a1ea47ca7fd2dfc1c4b"><code>35a081d</code></a> <code>chore: update nyc and eslint configs (material-components#284)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/4f91d8f7c91cc1d0360c84a5d4d7a0ede978addb"><code>4f91d8f</code></a> <code>chore: fix publish.sh permission +x (material-components#282)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/1072247740128ae04380d2ca3cc57895a52e5208"><code>1072247</code></a> <code>fix(build): fix Kokoro release script (material-components#281)</code></li> <li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/b5579c28ab0c938f65e61be667ea65a8cacf4cf2"><code>b5579c2</code></a> <code>build: add Kokoro configs for autorelease (material-components#280)</code></li> </ul> <p>There are 54 commits in total.</p> <p>See the <a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/compare/a0406f2e897e59944d9f82d9997955aa32f7df13...f839e581b0396b830cc3bae31d107f57414394d4">full diff</a></p> </details> <details> <summary>FAQ and help</summary> There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html). If those don’t help, you can always [ask the humans behind Greenkeeper](https://github.com/greenkeeperio/greenkeeper/issues/new). </details> --- Your [Greenkeeper](https://greenkeeper.io) bot 🌴 (cherry picked from commit 9d46c20)
Resolves #189