diff --git a/CHANGELOG.md b/CHANGELOG.md
index 036b104d..fe309471 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,13 +1,41 @@
# Changelog
-## Unreleased
+## 4.0.0 - 2020-08-02
+
+### Added
+
+- `helmet.contentSecurityPolicy`:
+ - If no `default-src` directive is supplied, an error is thrown
+ - Directive lists can be any iterable, not just arrays
### Changed
-- `helmet.hidePoweredBy` is no longer a separate package. This should have no effect on end users.
-- `helmet.noSniff` is no longer a separate package. This should have no effect on end users.
-- `helmet.permittedCrossDomainPolicies` is no longer a separate package. This should have no effect on end users.
-- `helmet.referrerPolicy` is no longer a separate package. This should have no effect on end users.
+- This package no longer has dependencies. This should have no effect on end users, other than speeding up installation time.
+- `helmet.contentSecurityPolicy`:
+ - There is now a default set of directives if none are supplied
+ - Duplicate keys now throw an error. See [helmetjs/csp#73](https://github.com/helmetjs/csp/issues/73)
+ - This middleware is more lenient, allowing more directive names or values
+- `helmet.xssFilter` now disables the buggy XSS filter by default. See [#230](https://github.com/helmetjs/helmet/issues/230)
+
+### Removed
+
+- Dropped support for old Node versions. Node 10+ is now required
+- `helmet.featurePolicy`. If you still need it, use the `feature-policy` package on npm.
+- `helmet.hpkp`. If you still need it, use the `hpkp` package on npm.
+- `helmet.noCache`. If you still need it, use the `nocache` package on npm.
+- `helmet.contentSecurityPolicy`:
+ - Removed browser sniffing (including the `browserSniff` and `disableAndroid` parameters). See See [helmetjs/csp#97](https://github.com/helmetjs/csp/issues/97)
+ - Removed conditional support. This includes directive functions and support for a function as the `reportOnly`. [Read this if you need help.](https://github.com/helmetjs/helmet/wiki/Conditionally-using-middleware)
+ - Removed a lot of checks—you should be checking your CSP with a different tool
+ - Removed support for legacy headers (and therefore the `setAllHeaders` parameter). [Read this if you need help.](https://github.com/helmetjs/helmet/wiki/Setting-legacy-Content-Security-Policy-headers-in-Helmet-4)
+ - Removed the `loose` option
+- `helmet.frameguard`:
+ - Dropped support for the `ALLOW-FROM` action. [Read more here.](https://github.com/helmetjs/helmet/wiki/How-to-use-X%E2%80%93Frame%E2%80%93Options's-%60ALLOW%E2%80%93FROM%60-directive)
+- `helmet.hidePoweredBy` no longer accepts arguments. See [this article](https://github.com/helmetjs/helmet/wiki/How-to-set-a-custom-X%E2%80%93Powered%E2%80%93By-header) to see how to replicate the removed behavior. See [#224](https://github.com/helmetjs/helmet/issues/224).
+- `helmet.hsts`:
+ - Dropped support for `includeSubdomains` with a lowercase D. See [#231](https://github.com/helmetjs/helmet/issues/231)
+ - Dropped support for `setIf`. [Read this if you need help.](https://github.com/helmetjs/helmet/wiki/Conditionally-using-middleware). See [#232](https://github.com/helmetjs/helmet/issues/232)
+- `helmet.xssFilter` no longer accepts options. Read ["How to disable blocking with X–XSS–Protection"](https://github.com/helmetjs/helmet/wiki/How-to-disable-blocking-with-X%E2%80%93XSS%E2%80%93Protection) and ["How to enable the `report` directive with X–XSS–Protection"](https://github.com/helmetjs/helmet/wiki/How-to-enable-the-%60report%60-directive-with-X%E2%80%93XSS%E2%80%93Protection) if you need the legacy behavior.
## 3.23.3 - 2020-06-26
diff --git a/README.md b/README.md
index f187b5a8..87360472 100644
--- a/README.md
+++ b/README.md
@@ -7,11 +7,9 @@
Helmet helps you secure your Express apps by setting various HTTP headers. _It's not a silver bullet_, but it can help!
-[Looking for a version of Helmet that supports the Koa framework?](https://github.com/venables/koa-helmet)
-
## Quick start
-First, run `npm install helmet --save` for your app. Then, in an Express (or Connect) app:
+First, run `npm install helmet --save` for your app. Then, in an Express app:
```js
const express = require("express");
@@ -24,18 +22,50 @@ app.use(helmet());
// ...
```
-It's best to `use` Helmet early in your middleware stack so that its headers are sure to be set.
+## How it works
+
+Helmet is [Connect](https://github.com/senchalabs/connect)-style middleware, which is compatible with frameworks like [Express](https://expressjs.com/). (If you need support for Koa, see [`koa-helmet`](https://github.com/venables/koa-helmet).)
-You can also use its pieces individually:
+The top-level `helmet` function is a wrapper around 11 smaller middlewares.
+
+In other words, these two things are equivalent:
```js
-app.use(helmet.xssFilter());
+// This...
+app.use(helmet());
+
+// ...is equivalent to this:
+app.use(helmet.contentSecurityPolicy());
+app.use(helmet.dnsPrefetchControl());
+app.use(helmet.expectCt());
app.use(helmet.frameguard());
+app.use(helmet.hidePoweredBy());
+app.use(helmet.hsts());
+app.use(helmet.ieNoOpen());
+app.use(helmet.noSniff());
+app.use(helmet.permittedCrossDomainPolicies());
+app.use(helmet.referrerPolicy());
+app.use(helmet.xssFilter());
+```
+
+## Reference
+
+
+helmet(options)
+
+Helmet is the top-level middleware for this module, including all 11 others.
+
+All 11 middlewares are enabled by default.
+
+```js
+// Includes all 11 middlewares
+app.use(helmet());
```
-You can disable a middleware that's normally enabled by default. This will disable `frameguard` but include the other defaults.
+If you want to disable one, pass options to `helmet`. For example, to disable `frameguard`:
```js
+// Includes 10 middlewares, skipping `helmet.frameguard`
app.use(
helmet({
frameguard: false,
@@ -43,9 +73,10 @@ app.use(
);
```
-You can also set options for a middleware. Setting options like this will _always_ include the middleware, whether or not it's a default.
+Most of the middlewares have options, which are documented in more detail below. For example, to pass `{ action: "deny" }` to `frameguard`:
```js
+// Includes all 11 middlewares, setting an option for `helmet.frameguard`
app.use(
helmet({
frameguard: {
@@ -55,24 +86,341 @@ app.use(
);
```
-_If you're using Express 3, make sure these middlewares are listed before `app.router`._
+Each middleware's name is listed below.
-## How it works
+
+
+
+helmet.contentSecurityPolicy(options)
+
+`helmet.contentSecurityPolicy` sets the `Content-Security-Policy` header which helps mitigate cross-site scripting attacks, among other things. See [MDN's introductory article on Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP).
+
+This middleware performs very little validation. You should rely on CSP checkers like [CSP Evaluator](https://csp-evaluator.withgoogle.com/) instead.
+
+`options.directives` is an object. Each key is a directive name in camel case (such as `defaultSrc`) or kebab case (such as `default-src`). Each value is an iterable (usually an array) of strings for that directive.
+
+`options.reportOnly` is a boolean, defaulting to `false`. If `true`, [the `Content-Security-Policy-Report-Only` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only) will be set instead.
+
+If no directives are supplied, the following policy is set (whitespace added for readability):
+
+ default-src 'self';
+ base-uri 'self';
+ block-all-mixed-content;
+ font-src 'self' https: data:;
+ frame-ancestors 'self';
+ img-src 'self' data:;
+ object-src 'none';
+ script-src 'self';
+ script-src-attr 'none';
+ style-src 'self' https: 'unsafe-inline';
+ upgrade-insecure-requests
+
+Examples:
+
+```js
+// Sets "Content-Security-Policy: default-src 'self';script-src 'self' example.com;object-src 'none';upgrade-insecure-requests"
+app.use(
+ helmet.contentSecurityPolicy({
+ directives: {
+ defaultSrc: ["'self'"],
+ scriptSrc: ["'self'", "example.com"],
+ objectSrc: ["'none'"],
+ upgradeInsecureRequests: [],
+ },
+ })
+);
+
+// Sets "Content-Security-Policy: default-src 'self';script-src 'self' example.com;object-src 'none'"
+app.use(
+ helmet.contentSecurityPolicy({
+ directives: {
+ "default-src": ["'self'"],
+ "script-src": ["'self'", "example.com"],
+ "object-src": ["'none'"],
+ },
+ })
+);
+
+// Sets the "Content-Security-Policy-Report-Only" header instead
+app.use(
+ helmet.contentSecurityPolicy({
+ directives: {
+ /* ... */
+ },
+ reportOnly: true,
+ })
+);
+```
+
+See [this wiki page](https://github.com/helmetjs/helmet/wiki/Conditionally-using-middleware#i-want-to-use-some-middleware-with-different-options) to see how to set directives conditionally (to set per-request nonces, for example).
+
+You can install this module separately as `helmet-csp`.
+
+
+
+
+helmet.expectCt(options)
+
+`helmet.expectCt` sets the `Expect-CT` header which helps mitigate misissued SSL certificates. See [MDN's article on Certificate Transparency](https://developer.mozilla.org/en-US/docs/Web/Security/Certificate_Transparency) and the [`Expect-CT` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect-CT) for more.
+
+`options.maxAge` is the number of seconds to expect Certificate Transparency. It defaults to `0`.
+
+`options.enforce` is a boolean. If `true`, the user agent (usually a browser) should refuse future connections that violate its Certificate Transparency policy. Defaults to `false`.
+
+`options.reportUri` is a string. If set, complying user agents will report Certificate Transparency failures to this URL. Unset by default.
+
+Examples:
+
+```js
+// Sets "Expect-CT: max-age=86400"
+app.use(
+ helmet.expectCt({
+ maxAge: 86400,
+ })
+);
+
+// Sets "Expect-CT: max-age=86400, enforce, report-uri="https://example.com/report"
+app.use(
+ helmet.expectCt({
+ maxAge: 86400,
+ enforce: true,
+ reportUri: "https://example.com/report",
+ })
+);
+```
+
+You can install this module separately as `expect-ct`.
+
+
+
+
+helmet.referrerPolicy(options)
+
+`helmet.referrerPolicy` sets the `Referrer-Policy` header which controls what information is set in [the `Referer` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer). See ["Referer header: privacy and security concerns"](https://developer.mozilla.org/en-US/docs/Web/Security/Referer_header:_privacy_and_security_concerns) and [the header's documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) on MDN for more.
+
+`options.policy` is a string or array of strings representing the policy. If passed as an array, it will be joined with commas, which is useful when setting [a fallback policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#Specifying_a_fallback_policy). It defaults to `no-referrer`.
+
+Examples:
+
+```js
+// Sets "Referrer-Policy: no-referrer"
+app.use(
+ helmet.referrerPolicy({
+ policy: "no-referrer",
+ })
+);
+
+// Sets "Referrer-Policy: origin,unsafe-url"
+app.use(
+ helmet.referrerPolicy({
+ policy: ["origin", "unsafe-url"],
+ })
+);
+```
+
+You can install this module separately as `referrer-policy`.
+
+
+
+
+helmet.hsts(options)
+
+`helmet.hsts` sets the `Strict-Transport-Security` header which tells browsers to prefer HTTPS over insecure HTTP. See [the documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) for more.
+
+`options.maxAge` is the number of seconds browsers should remember to prefer HTTPS. If passed a non-integer, the value is rounded down. It defaults to `15552000`, which is 180 days.
+
+`options.includeSubDomains` is a boolean which dictates whether to include the `includeSubDomains` directive, which makes this policy extend to subdomains. It defaults to `true`.
+
+`options.preload` is a boolean. If true, it adds the `preload` directive, expressing intent to add your HSTS policy to browsers. See [the "Preloading Strict Transport Security" section on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security#Preloading_Strict_Transport_Security) for more. It defaults to `false`.
+
+Examples:
+
+```js
+// Sets "Strict-Transport-Security: max-age=123456; includeSubDomains"
+app.use(
+ helmet.strictTransportSecurity({
+ maxAge: 123456,
+ })
+);
+
+// Sets "Strict-Transport-Security: max-age=123456"
+app.use(
+ helmet.strictTransportSecurity({
+ maxAge: 123456,
+ includeSubDomains: false,
+ })
+);
+
+// Sets "Strict-Transport-Security: max-age=123456; includeSubDomains; preload"
+app.use(
+ helmet.strictTransportSecurity({
+ maxAge: 63072000,
+ preload: true,
+ })
+);
+```
+
+You can install this module separately as `hsts`.
+
+
+
+
+helmet.noSniff()
+
+`helmet.noSniff` sets the `X-Content-Type-Options` header to `nosniff`. This mitigates [MIME type sniffing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#MIME_sniffing) which can cause security vulnerabilities. See [documentation for this header on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) for more.
+
+This middleware takes no options.
+
+Example:
+
+```js
+// Sets "X-Content-Type-Options: nosniff"
+app.use(helmet.noSniff());
+```
+
+You can install this module separately as `dont-sniff-mimetype`.
+
+
+
+
+helmet.dnsPrefetchControl(options)
+
+`helmet.dnsPrefetchControl` sets the `X-DNS-Prefetch-Control` header to help control DNS prefetching, which can improve user privacy at the expense of performance. See [documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control) for more.
+
+`options.allow` is a boolean dictating whether to enable DNS prefetching. It defaults to `false`.
+
+Examples:
+
+```js
+// Sets "X-DNS-Prefetch-Control: off"
+app.use(
+ helmet.dnsPrefetchControl({
+ allow: false,
+ })
+);
+
+// Sets "X-DNS-Prefetch-Control: on"
+app.use(
+ helmet.dnsPrefetchControl({
+ allow: true,
+ })
+);
+```
+
+You can install this module separately as `dns-prefetch-control`.
+
+
+
+
+helmet.ieNoOpen()
+
+`helmet.ieNoOpen` sets the `X-Download-Options` header, which is specific to Internet Explorer 8. It forces potentially-unsafe downloads to be saved, mitigating execution of HTML in your site's context. For more, see [this old post on MSDN](https://docs.microsoft.com/en-us/archive/blogs/ie/ie8-security-part-v-comprehensive-protection).
+
+This middleware takes no options.
+
+Examples:
+
+```js
+// Sets "X-Download-Options: noopen"
+app.use(helmet.ieNoOpen());
+```
+
+You can install this module separately as `ienoopen`.
+
+
+
+
+helmet.frameguard(options)
+
+`helmet.frameguard` sets the `X-Frame-Options` header to help you mitigate [clickjacking attacks](https://en.wikipedia.org/wiki/Clickjacking). This header is superseded by [the `frame-ancestors` Content Security Policy directive](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) but is still useful on old browsers. For more, see [the documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options).
+
+`options.action` is a string that specifies which directive to use—either `DENY` or `SAMEORIGIN`. (A legacy directive, `ALLOW-FROM`, is not supported by this middleware. [Read more here.](https://github.com/helmetjs/helmet/wiki/How-to-use-X%E2%80%93Frame%E2%80%93Options's-%60ALLOW%E2%80%93FROM%60-directive)) It defaults to `SAMEORIGIN`.
+
+Examples:
+
+```js
+// Sets "X-Frame-Options: DENY"
+app.use(
+ helmet.frameguard({
+ action: "deny",
+ })
+);
+
+// Sets "X-Frame-Options: SAMEORIGIN"
+app.use(
+ helmet.frameguard({
+ action: "sameorigin",
+ })
+);
+```
+
+You can install this module separately as `frameguard`.
+
+
+
+
+helmet.permittedCrossDomainPolicies(options)
+
+`helmet.permittedCrossDomainPolicies` sets the `X-Permitted-Cross-Domain-Policies` header, which tells some clients (mostly Adobe products) your domain's policy for loading cross-domain content. See [the description on OWASP](https://owasp.org/www-project-secure-headers/) for more.
+
+`options.permittedPolicies` is a string that must be `"none"`, `"master-only"`, `"by-content-type"`, or `"all"`. It defaults to `"none"`.
+
+Examples:
+
+```js
+// Sets "X-Permitted-Cross-Domain-Policies: none"
+app.use(
+ helmet.permittedCrossDomainPolicies({
+ permittedPolicies: "none",
+ })
+);
+
+// Sets "X-Permitted-Cross-Domain-Policies: by-content-type"
+app.use(
+ helmet.permittedCrossDomainPolicies({
+ permittedPolicies: "by-content-type",
+ })
+);
+```
+
+You can install this module separately as `helmet-crossdomain`.
+
+
+
+
+helmet.hidePoweredBy(options)
+
+`helmet.hidePoweredBy` removes the `X-Powered-By` header, which is set by default in some frameworks (like Express). Removing the header offers very limited security benefits (see [this discussion](https://github.com/expressjs/express/pull/2813#issuecomment-159270428)) and is mostly removed to save bandwidth.
+
+This middleware takes no options.
+
+If you're using Express, this middleware will work, but you should use `app.disable("x-powered-by")` instead.
+
+Examples:
+
+```js
+// Removes the X-Powered-By header if it was set.
+app.use(helmet.hidePoweredBy());
+```
+
+You can install this module separately as `hide-powered-by`.
+
+
+
+
+helmet.xssFilter(options)
+
+`helmet.xssFilter` disables browsers' buggy cross-site scripting filter by setting the `X-XSS-Protection` header to `0`. See [discussion about disabling the header here](https://github.com/helmetjs/helmet/issues/230) and [documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection).
+
+This middleware takes no options.
+
+Examples:
+
+```js
+// Sets "X-XSS-Protection: 0"
+app.use(helmet.xssFilter());
+```
+
+You can install this module separately as `x-xss-protection`.
-Helmet is a collection of 11 smaller middleware functions that set HTTP response headers. Running `app.use(helmet())` will not include all of these middleware functions by default.
-
-| Module | Default? |
-| ------------------------------------------------------------------------------------------------------------- | -------- |
-| [contentSecurityPolicy](https://helmetjs.github.io/docs/csp/) for setting Content Security Policy | |
-| [crossdomain](https://helmetjs.github.io/docs/crossdomain/) for handling Adobe products' crossdomain requests | |
-| [dnsPrefetchControl](https://helmetjs.github.io/docs/dns-prefetch-control) controls browser DNS prefetching | ✓ |
-| [expectCt](https://helmetjs.github.io/docs/expect-ct/) for handling Certificate Transparency | |
-| [frameguard](https://helmetjs.github.io/docs/frameguard/) to prevent clickjacking | ✓ |
-| [hidePoweredBy](https://helmetjs.github.io/docs/hide-powered-by) to remove the X-Powered-By header | ✓ |
-| [hsts](https://helmetjs.github.io/docs/hsts/) for HTTP Strict Transport Security | ✓ |
-| [ieNoOpen](https://helmetjs.github.io/docs/ienoopen) sets X-Download-Options for IE8+ | ✓ |
-| [noSniff](https://helmetjs.github.io/docs/dont-sniff-mimetype) to keep clients from sniffing the MIME type | ✓ |
-| [referrerPolicy](https://helmetjs.github.io/docs/referrer-policy) to hide the Referer header | |
-| [xssFilter](https://helmetjs.github.io/docs/xss-filter) adds some small XSS protections | ✓ |
-
-You can see more in [the documentation](https://helmetjs.github.io/docs/).
+
diff --git a/bin/build-middleware-package.js b/bin/build-middleware-package.js
index 8fd5a6df..86bfa0a4 100755
--- a/bin/build-middleware-package.js
+++ b/bin/build-middleware-package.js
@@ -42,7 +42,7 @@ async function main(argv) {
url: "git://github.com/helmetjs/helmet.git",
},
engines: {
- node: ">=4.0.0",
+ node: ">=10.0.0",
},
files: ["CHANGELOG.md", "LICENSE", "README.md", ...packageFiles],
main: "index.js",
diff --git a/index.ts b/index.ts
index a1c971b4..81d94e6d 100644
--- a/index.ts
+++ b/index.ts
@@ -1,79 +1,51 @@
import { IncomingMessage, ServerResponse } from "http";
-import expectCt from "./middlewares/expect-ct";
-import referrerPolicy from "./middlewares/referrer-policy";
+import contentSecurityPolicy, {
+ ContentSecurityPolicyOptions,
+} from "./middlewares/content-security-policy";
+import expectCt, { ExpectCtOptions } from "./middlewares/expect-ct";
+import referrerPolicy, {
+ ReferrerPolicyOptions,
+} from "./middlewares/referrer-policy";
+import strictTransportSecurity, {
+ StrictTransportSecurityOptions,
+} from "./middlewares/strict-transport-security";
import xContentTypeOptions from "./middlewares/x-content-type-options";
-import xDnsPrefetchControl from "./middlewares/x-dns-prefetch-control";
+import xDnsPrefetchControl, {
+ XDnsPrefetchControlOptions,
+} from "./middlewares/x-dns-prefetch-control";
import xDownloadOptions from "./middlewares/x-download-options";
-import xFrameOptions from "./middlewares/x-frame-options";
-import xPermittedCrossDomainPolicies from "./middlewares/x-permitted-cross-domain-policies";
+import xFrameOptions, {
+ XFrameOptionsOptions,
+} from "./middlewares/x-frame-options";
+import xPermittedCrossDomainPolicies, {
+ XPermittedCrossDomainPoliciesOptions,
+} from "./middlewares/x-permitted-cross-domain-policies";
import xPoweredBy from "./middlewares/x-powered-by";
-import depd = require("depd");
-
-interface HelmetOptions {
- contentSecurityPolicy?: any;
- dnsPrefetchControl?: any;
- expectCt?: any;
- featurePolicy?: any;
- frameguard?: any;
- hidePoweredBy?: any;
- hsts?: any;
- ieNoOpen?: any;
- noSniff?: any;
- permittedCrossDomainPolicies?: any;
- referrerPolicy?: any;
- xssFilter?: any;
- hpkp?: any;
- noCache?: any;
+import xXssProtection from "./middlewares/x-xss-protection";
+
+export interface HelmetOptions {
+ contentSecurityPolicy?: MiddlewareOption;
+ dnsPrefetchControl?: MiddlewareOption;
+ expectCt?: MiddlewareOption;
+ frameguard?: MiddlewareOption;
+ hidePoweredBy?: MiddlewareOption;
+ hsts?: MiddlewareOption;
+ ieNoOpen?: MiddlewareOption;
+ noSniff?: MiddlewareOption;
+ permittedCrossDomainPolicies?: MiddlewareOption<
+ XPermittedCrossDomainPoliciesOptions
+ >;
+ referrerPolicy?: MiddlewareOption;
+ xssFilter?: MiddlewareOption;
}
+type MiddlewareOption = false | T;
+
interface MiddlewareFunction {
(req: IncomingMessage, res: ServerResponse, next: () => void): void;
}
-const deprecate = depd("helmet");
-
-const DEFAULT_MIDDLEWARE = [
- "dnsPrefetchControl",
- "frameguard",
- "hidePoweredBy",
- "hsts",
- "ieNoOpen",
- "noSniff",
- "xssFilter",
-];
-
-type MiddlewareName =
- | "contentSecurityPolicy"
- | "dnsPrefetchControl"
- | "expectCt"
- | "featurePolicy"
- | "frameguard"
- | "hidePoweredBy"
- | "hsts"
- | "ieNoOpen"
- | "noSniff"
- | "permittedCrossDomainPolicies"
- | "referrerPolicy"
- | "xssFilter"
- | "hpkp"
- | "noCache";
-
-const middlewares: MiddlewareName[] = [
- "contentSecurityPolicy",
- "dnsPrefetchControl",
- "expectCt",
- "featurePolicy",
- "frameguard",
- "hidePoweredBy",
- "hsts",
- "ieNoOpen",
- "noSniff",
- "permittedCrossDomainPolicies",
- "referrerPolicy",
- "xssFilter",
- "hpkp",
- "noCache",
-];
+function noop() {}
function helmet(options: Readonly = {}) {
if (options.constructor.name === "IncomingMessage") {
@@ -82,79 +54,141 @@ function helmet(options: Readonly = {}) {
);
}
- const stack: MiddlewareFunction[] = middlewares.reduce(function (
- result,
- middlewareName
- ) {
- const middleware = helmet[middlewareName];
- let middlewareOptions = options[middlewareName];
- const isDefault = DEFAULT_MIDDLEWARE.indexOf(middlewareName) !== -1;
-
- if (middlewareOptions === false) {
- return result;
- } else if (middlewareOptions === true) {
- middlewareOptions = {};
- }
+ // This is overly verbose. It'd be nice to condense this while still being type-safe.
+
+ if (Object.values(options).some((option) => option === true)) {
+ throw new Error(
+ "Helmet no longer supports `true` as a middleware option. Remove the property from your options to fix this error."
+ );
+ }
+
+ const middlewareFunctions: MiddlewareFunction[] = [];
+
+ if (options.contentSecurityPolicy === undefined) {
+ middlewareFunctions.push(contentSecurityPolicy());
+ } else if (options.contentSecurityPolicy !== false) {
+ middlewareFunctions.push(
+ contentSecurityPolicy(options.contentSecurityPolicy)
+ );
+ }
+
+ if (options.dnsPrefetchControl === undefined) {
+ middlewareFunctions.push(xDnsPrefetchControl());
+ } else if (options.dnsPrefetchControl !== false) {
+ middlewareFunctions.push(xDnsPrefetchControl(options.dnsPrefetchControl));
+ }
+
+ if (options.expectCt === undefined) {
+ middlewareFunctions.push(expectCt());
+ } else if (options.expectCt !== false) {
+ middlewareFunctions.push(expectCt(options.expectCt));
+ }
+
+ if (options.frameguard === undefined) {
+ middlewareFunctions.push(xFrameOptions());
+ } else if (options.frameguard !== false) {
+ middlewareFunctions.push(xFrameOptions(options.frameguard));
+ }
- if (middlewareOptions != null) {
- return result.concat(middleware(middlewareOptions));
- } else if (isDefault) {
- return result.concat(middleware({}));
+ if (options.hidePoweredBy !== false) {
+ if (options.hidePoweredBy !== undefined) {
+ console.warn(
+ "hidePoweredBy does not take options. Remove the property to silence this warning."
+ );
}
- return result;
- },
- []);
+ middlewareFunctions.push(xPoweredBy());
+ }
- return function helmet(
- req: IncomingMessage,
- res: ServerResponse,
- next: (...args: unknown[]) => void
- ) {
- let index = 0;
+ if (options.hsts === undefined || options.hsts === true) {
+ middlewareFunctions.push(strictTransportSecurity());
+ } else if (options.hsts !== false) {
+ middlewareFunctions.push(strictTransportSecurity(options.hsts));
+ }
- function internalNext(...args: unknown[]) {
- if (args.length > 0) {
- next(...args);
- return;
- }
+ if (options.ieNoOpen !== false) {
+ if (options.ieNoOpen !== undefined) {
+ console.warn(
+ "ieNoOpen does not take options. Remove the property to silence this warning."
+ );
+ }
+ middlewareFunctions.push(xDownloadOptions());
+ }
+
+ if (options.noSniff !== false) {
+ if (options.noSniff !== undefined) {
+ console.warn(
+ "noSniff does not take options. Remove the property to silence this warning."
+ );
+ }
+ middlewareFunctions.push(xContentTypeOptions());
+ }
- const middleware = stack[index];
- if (!middleware) {
- return next();
- }
+ if (options.permittedCrossDomainPolicies === undefined) {
+ middlewareFunctions.push(xPermittedCrossDomainPolicies());
+ } else if (options.permittedCrossDomainPolicies !== false) {
+ middlewareFunctions.push(
+ xPermittedCrossDomainPolicies(options.permittedCrossDomainPolicies)
+ );
+ }
- index++;
+ if (options.referrerPolicy === undefined) {
+ middlewareFunctions.push(referrerPolicy());
+ } else if (options.referrerPolicy !== false) {
+ middlewareFunctions.push(referrerPolicy(options.referrerPolicy));
+ }
- middleware(req, res, internalNext);
+ if (options.xssFilter !== false) {
+ if (options.xssFilter !== undefined) {
+ console.warn(
+ "xssFilter does not take options. Remove the property to silence this warning."
+ );
}
+ middlewareFunctions.push(xXssProtection());
+ }
- internalNext();
+ return function helmetMiddleware(
+ req: IncomingMessage,
+ res: ServerResponse,
+ next: () => void
+ ): void {
+ // All of Helmet's middleware is synchronous today, so we can get away with this.
+ // If that changes, we'll need to do something smarter here.
+ for (const middlewareFunction of middlewareFunctions) {
+ middlewareFunction(req, res, noop);
+ }
+ next();
};
}
-helmet.contentSecurityPolicy = require("helmet-csp");
+helmet.contentSecurityPolicy = contentSecurityPolicy;
helmet.dnsPrefetchControl = xDnsPrefetchControl;
helmet.expectCt = expectCt;
helmet.frameguard = xFrameOptions;
helmet.hidePoweredBy = xPoweredBy;
-helmet.hsts = require("hsts");
+helmet.hsts = strictTransportSecurity;
helmet.ieNoOpen = xDownloadOptions;
helmet.noSniff = xContentTypeOptions;
helmet.permittedCrossDomainPolicies = xPermittedCrossDomainPolicies;
helmet.referrerPolicy = referrerPolicy;
-helmet.xssFilter = require("x-xss-protection");
-
-helmet.featurePolicy = deprecate.function(
- require("feature-policy"),
- "helmet.featurePolicy is deprecated (along with the HTTP header) and will be removed in helmet@4. You can use the `feature-policy` module instead."
-);
-helmet.hpkp = deprecate.function(
- require("hpkp"),
- "helmet.hpkp is deprecated and will be removed in helmet@4. You can use the `hpkp` module instead. For more, see https://github.com/helmetjs/helmet/issues/180."
-);
-helmet.noCache = deprecate.function(
- require("nocache"),
- "helmet.noCache is deprecated and will be removed in helmet@4. You can use the `nocache` module instead. For more, see https://github.com/helmetjs/helmet/issues/215."
-);
-
-export = helmet;
+helmet.xssFilter = xXssProtection;
+
+helmet.featurePolicy = () => {
+ throw new Error(
+ "helmet.featurePolicy was removed because the Feature-Policy header is deprecated. If you still need this header, you can use the `feature-policy` module."
+ );
+};
+
+helmet.hpkp = () => {
+ throw new Error(
+ "helmet.hpkp was removed because the header has been deprecated. If you still need this header, you can use the `hpkp` module. For more, see ."
+ );
+};
+
+helmet.noCache = () => {
+ throw new Error(
+ "helmet.noCache was removed. You can use the `nocache` module instead. For more, see ."
+ );
+};
+
+module.exports = helmet;
+export default helmet;
diff --git a/middlewares/content-security-policy/CHANGELOG.md b/middlewares/content-security-policy/CHANGELOG.md
new file mode 100644
index 00000000..ed131690
--- /dev/null
+++ b/middlewares/content-security-policy/CHANGELOG.md
@@ -0,0 +1,91 @@
+# Changelog
+
+## 3.0.0 - Unreleased
+
+### Added
+
+- If no `default-src` directive is supplied, an error is thrown
+- Directive lists can be any iterable, not just arrays
+
+### Changed
+
+- There is now a default set of directives if none are supplied
+- Duplicate keys now throw an error. See [helmetjs/csp#73](https://github.com/helmetjs/csp/issues/73)
+- This middleware is more lenient, allowing more directive names or values
+
+### Removed
+
+- Removed browser sniffing (including the `browserSniff` parameter). See [#97](https://github.com/helmetjs/csp/issues/97)
+- Removed conditional support. This includes directive functions and support for a function as the `reportOnly`. [Read this if you need help.](https://github.com/helmetjs/helmet/wiki/Conditionally-using-middleware)
+- Removed a lot of checks—you should be checking your CSP with a different tool
+- Removed support for legacy headers (and therefore the `setAllHeaders` parameter). [Read this if you need help.](https://github.com/helmetjs/helmet/wiki/Setting-legacy-Content-Security-Policy-headers-in-Helmet-4)
+- Dropped support for old Node versions. Node 10+ is now required
+- Removed the `loose` option
+- Removed the `disableAndroid` option
+
+## 2.9.5 - 2020-02-22
+
+### Changed
+
+- Updated `bowser` subdependency from 2.7.0 to 2.9.0
+
+### Fixed
+
+- Fixed an issue some people were having when importing the `bowser` subdependency. See [#96](https://github.com/helmetjs/csp/issues/96) and [#101](https://github.com/helmetjs/csp/pull/101)
+- Fixed a link in the readme. See [#100](https://github.com/helmetjs/csp/pull/100)
+
+## 2.9.4 - 2019-10-21
+
+### Changed
+
+- Updated `bowser` subdependency from 2.6.1 to 2.7.0. See [#94](https://github.com/helmetjs/csp/pull/94)
+
+## 2.9.3 - 2019-09-30
+
+### Fixed
+
+- Published a missing TypeScript type definition file. See [#90](https://github.com/helmetjs/csp/issues/90)
+
+## 2.9.2 - 2019-09-20
+
+### Fixed
+
+- Fixed a bug where a request from Firefox 4 could delete `default-src` from future responses
+- Fixed tablet PC detection by updating `bowser` subdependency to latest version
+
+## 2.9.1 - 2019-09-04
+
+### Changed
+
+- Updated `bowser` subdependency from 2.5.3 to 2.5.4. See [#88](https://github.com/helmetjs/csp/pull/88)
+
+### Fixed
+
+- The "security" keyword was declared twice in package metadata. See [#87](https://github.com/helmetjs/csp/pull/87)
+
+## 2.9.0 - 2019-08-28
+
+### Added
+
+- Added TypeScript type definitions. See [#86](https://github.com/helmetjs/csp/pull/86)
+
+### Fixed
+
+- Switched from `platform` to `bowser` to quiet a security vulnerability warning. See [#80](https://github.com/helmetjs/csp/issues/80)
+
+## 2.8.0 - 2019-07-24
+
+### Added
+
+- Added a new `sandbox` directive, `allow-downloads-without-user-activation` (see [#85](https://github.com/helmetjs/csp/pull/85))
+- Created a changelog
+- Added some package metadata
+
+### Changed
+
+- Updated documentation to use ES2015
+- Updated documentation to remove dependency on UUID package
+- Updated `content-security-policy-builder` to 2.1.0
+- Excluded some files from the npm package
+
+Changes in versions 2.7.1 and below can be found in [Helmet's changelog](https://github.com/helmetjs/helmet/blob/master/CHANGELOG.md).
diff --git a/middlewares/content-security-policy/README.md b/middlewares/content-security-policy/README.md
new file mode 100644
index 00000000..c14eee6b
--- /dev/null
+++ b/middlewares/content-security-policy/README.md
@@ -0,0 +1,63 @@
+# Content Security Policy middleware
+
+Content Security Policy helps prevent unwanted content being injected into your webpages. This can mitigate cross-site scripting (XSS) vulnerabilities, malicious frames, unwanted trackers, and much more.
+
+If you want to learn how CSP works, check out the fantastic [HTML5 Rocks guide](http://www.html5rocks.com/en/tutorials/security/content-security-policy/), the [Content Security Policy Reference](http://content-security-policy.com/), and the [Content Security Policy specification](http://www.w3.org/TR/CSP/).
+
+This middleware helps set Content Security Policies.
+
+Basic usage:
+
+```javascript
+const csp = require("helmet-csp");
+
+app.use(
+ csp({
+ directives: {
+ defaultSrc: ["'self'", "default.example"],
+ scriptSrc: ["'self'", "'unsafe-inline'"],
+ objectSrc: ["'none'"],
+ upgradeInsecureRequests: [],
+ },
+ reportOnly: false,
+ })
+);
+```
+
+You can set any directives you wish. `defaultSrc` is required. Directives can be kebab-cased (like `script-src`) or camel-cased (like `scriptSrc`). They are equivalent, but duplicates are not allowed.
+
+The `reportOnly` option, if set to `true`, sets the `Content-Security-Policy-Report-Only` header instead.
+
+This middleware does minimal validation. You should use a more sophisticated CSP validator, like [Google's CSP Evaluator](https://csp-evaluator.withgoogle.com/), to make sure your CSP looks good.
+
+## Recipe: generating nonces
+
+You can dynamically generate nonces to allow inline ``);
+});
+```
+
+## See also
+
+- [Google's CSP Evaluator tool](https://csp-evaluator.withgoogle.com/)
+- [GitHub's CSP journey](http://githubengineering.com/githubs-csp-journey/)
+- [Content Security Policy for Single Page Web Apps](https://developer.squareup.com/blog/content-security-policy-for-single-page-web-apps/)
diff --git a/middlewares/content-security-policy/index.ts b/middlewares/content-security-policy/index.ts
new file mode 100644
index 00000000..5c002171
--- /dev/null
+++ b/middlewares/content-security-policy/index.ts
@@ -0,0 +1,136 @@
+import { IncomingMessage, ServerResponse } from "http";
+
+export interface ContentSecurityPolicyOptions {
+ directives?: {
+ [directiveName: string]: Iterable;
+ };
+ reportOnly?: boolean;
+}
+
+const isRawPolicyDirectiveNameInvalid = (rawDirectiveName: string): boolean =>
+ rawDirectiveName.length === 0 || /[^a-zA-Z0-9-]/.test(rawDirectiveName);
+
+const dashify = (str: string): string =>
+ str.replace(/[A-Z]/g, (capitalLetter) => "-" + capitalLetter.toLowerCase());
+
+function getHeaderNameFromOptions({
+ reportOnly,
+}: ContentSecurityPolicyOptions): string {
+ if (reportOnly) {
+ return "Content-Security-Policy-Report-Only";
+ } else {
+ return "Content-Security-Policy";
+ }
+}
+
+function getHeaderValueFromOptions(
+ options: ContentSecurityPolicyOptions
+): string {
+ if ("loose" in options) {
+ console.warn(
+ "Content-Security-Policy middleware no longer needs the `loose` parameter. You should remove it."
+ );
+ }
+ if ("setAllHeaders" in options) {
+ console.warn(
+ "Content-Security-Policy middleware no longer supports the `setAllHeaders` parameter. See ."
+ );
+ }
+ ["disableAndroid", "browserSniff"].forEach((deprecatedOption) => {
+ if (deprecatedOption in options) {
+ console.warn(
+ `Content-Security-Policy middleware no longer does browser sniffing, so you can remove the \`${deprecatedOption}\` option. See for discussion.`
+ );
+ }
+ });
+
+ const {
+ directives = {
+ "default-src": ["'self'"],
+ "base-uri": ["'self'"],
+ "block-all-mixed-content": [],
+ "font-src": ["'self'", "https:", "data:"],
+ "frame-ancestors": ["'self'"],
+ "img-src": ["'self'", "data:"],
+ "object-src": ["'none'"],
+ "script-src": ["'self'"],
+ "script-src-attr": ["'none'"],
+ "style-src": ["'self'", "https:", "'unsafe-inline'"],
+ "upgrade-insecure-requests": [],
+ },
+ } = options;
+
+ const directiveNamesUsed = new Set();
+
+ const result = Object.entries(directives)
+ .map(([rawDirectiveName, rawDirectiveValue]) => {
+ if (isRawPolicyDirectiveNameInvalid(rawDirectiveName)) {
+ throw new Error(
+ `Content-Security-Policy received an invalid directive name ${JSON.stringify(
+ rawDirectiveName
+ )}`
+ );
+ }
+ const directiveName = dashify(rawDirectiveName);
+ if (directiveNamesUsed.has(directiveName)) {
+ throw new Error(
+ `Content-Security-Policy received a duplicate directive ${JSON.stringify(
+ directiveName
+ )}`
+ );
+ }
+ directiveNamesUsed.add(directiveName);
+
+ let directiveValue: string;
+ if (typeof rawDirectiveValue === "string") {
+ directiveValue = " " + rawDirectiveValue;
+ } else {
+ directiveValue = "";
+ for (const element of rawDirectiveValue) {
+ directiveValue += " " + element;
+ }
+ }
+
+ if (!directiveValue) {
+ return directiveName;
+ }
+
+ if (/;|,/.test(directiveValue)) {
+ throw new Error(
+ `Content-Security-Policy received an invalid directive value for ${JSON.stringify(
+ directiveName
+ )}`
+ );
+ }
+
+ return `${directiveName}${directiveValue}`;
+ })
+ .join(";");
+
+ if (!directiveNamesUsed.has("default-src")) {
+ throw new Error(
+ "Content-Security-Policy needs a default-src but none was provided"
+ );
+ }
+
+ return result;
+}
+
+function contentSecurityPolicy(
+ options: Readonly = {}
+) {
+ const headerName = getHeaderNameFromOptions(options);
+ const headerValue = getHeaderValueFromOptions(options);
+
+ return function contentSecurityPolicyMiddleware(
+ _req: IncomingMessage,
+ res: ServerResponse,
+ next: () => void
+ ) {
+ res.setHeader(headerName, headerValue);
+ next();
+ };
+}
+
+module.exports = contentSecurityPolicy;
+export default contentSecurityPolicy;
diff --git a/middlewares/content-security-policy/package-files.json b/middlewares/content-security-policy/package-files.json
new file mode 100644
index 00000000..962389e9
--- /dev/null
+++ b/middlewares/content-security-policy/package-files.json
@@ -0,0 +1 @@
+["index.js", "index.d.ts"]
diff --git a/middlewares/content-security-policy/package-overrides.json b/middlewares/content-security-policy/package-overrides.json
new file mode 100644
index 00000000..50bcd63d
--- /dev/null
+++ b/middlewares/content-security-policy/package-overrides.json
@@ -0,0 +1,11 @@
+{
+ "name": "helmet-csp",
+ "author": "Adam Baldwin (https://evilpacket.net)",
+ "contributors": [
+ "Evan Hahn (https://evanhahn.com)",
+ "Ryan Cannon (https://ryancannon.com)"
+ ],
+ "description": "Content Security Policy middleware",
+ "version": "2.9.5",
+ "keywords": ["express", "security", "content-security-policy", "csp", "xss"]
+}
diff --git a/middlewares/expect-ct/CHANGELOG.md b/middlewares/expect-ct/CHANGELOG.md
index 1f6bc863..2bfc0f29 100644
--- a/middlewares/expect-ct/CHANGELOG.md
+++ b/middlewares/expect-ct/CHANGELOG.md
@@ -7,6 +7,10 @@
- If `maxAge` is `undefined`, it will be set to `0`
- If `maxAge` is not an integer, it will be rounded down
+### Removed
+
+- Dropped support for old Node versions. Node 10+ is now required
+
## 0.3.0 - 2019-09-01
### Changed
diff --git a/middlewares/expect-ct/index.ts b/middlewares/expect-ct/index.ts
index 28bdcc73..f4a35b8d 100644
--- a/middlewares/expect-ct/index.ts
+++ b/middlewares/expect-ct/index.ts
@@ -9,11 +9,17 @@ export interface ExpectCtOptions {
function parseMaxAge(value: void | number): number {
if (value === undefined) {
return 0;
- } else if (typeof value === "number" && value >= 0) {
+ } else if (
+ typeof value === "number" &&
+ value >= 0 &&
+ Number.isFinite(value)
+ ) {
return Math.floor(value);
} else {
throw new Error(
- `${value} is not a valid value for maxAge. Please choose a positive integer.`
+ `Expect-CT: ${JSON.stringify(
+ value
+ )} is not a valid value for maxAge. Please choose a positive integer.`
);
}
}
diff --git a/middlewares/expect-ct/package-overrides.json b/middlewares/expect-ct/package-overrides.json
index 8b79014d..16d54a5e 100644
--- a/middlewares/expect-ct/package-overrides.json
+++ b/middlewares/expect-ct/package-overrides.json
@@ -4,6 +4,5 @@
"contributors": [],
"description": "Middleware to set the Expect-CT header",
"version": "0.3.0",
- "keywords": ["express", "security", "expect-ct"],
- "homepage": "https://helmetjs.github.io/docs/expect-ct/"
+ "keywords": ["express", "security", "expect-ct"]
}
diff --git a/middlewares/referrer-policy/CHANGELOG.md b/middlewares/referrer-policy/CHANGELOG.md
index 88b2924f..0e4f2a08 100644
--- a/middlewares/referrer-policy/CHANGELOG.md
+++ b/middlewares/referrer-policy/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2.0.0 - Unreleased
+
+### Removed
+
+- Dropped support for old Node versions. Node 10+ is now required
+
## 1.2.0 - 2019-05-03
### Added
diff --git a/middlewares/referrer-policy/package-overrides.json b/middlewares/referrer-policy/package-overrides.json
index ed77dca2..dcb9426b 100644
--- a/middlewares/referrer-policy/package-overrides.json
+++ b/middlewares/referrer-policy/package-overrides.json
@@ -11,6 +11,5 @@
"referrer",
"referrer-policy",
"privacy"
- ],
- "homepage": "https://helmetjs.github.io/docs/referrer-policy/"
+ ]
}
diff --git a/middlewares/strict-transport-security/CHANGELOG.md b/middlewares/strict-transport-security/CHANGELOG.md
new file mode 100644
index 00000000..86e74599
--- /dev/null
+++ b/middlewares/strict-transport-security/CHANGELOG.md
@@ -0,0 +1,34 @@
+# Changelog
+
+## 3.0.0 - Unreleased
+
+### Added
+
+- TypeScript type definitions. See [#25](https://github.com/helmetjs/hsts/pull/25)
+
+### Removed
+
+- Dropped support for `includeSubdomains` with a lowercase D. See [#231](https://github.com/helmetjs/helmet/issues/231)
+- Dropped support for `setIf`. [Read this if you need help.](https://github.com/helmetjs/helmet/wiki/Conditionally-using-middleware). See [#232](https://github.com/helmetjs/helmet/issues/232)
+- Dropped support for old Node versions. Node 10+ is now required
+
+## 2.2.0 - 2019-03-10
+
+### Added
+
+- Created a changelog
+
+### Changed
+
+- Mark the module as Node 4+ in the `engines` field of `package.json`
+- Add a `homepage` in `package.json`
+- Add an email to `package.json`'s `bugs` field
+- Updated documentation
+- Updated Adam Baldwin's contact info. See [helmetjs/helmet#189](https://github.com/helmetjs/helmet/issues/189)
+
+### Deprecated
+
+- The `setIf` option has been deprecated and will be removed in `hsts@3`. Refer to the documentation to see how to do without it. See [#22](https://github.com/helmetjs/hsts/issues/22) for more
+- The `includeSubdomains` option (with a lowercase `d`) has been deprecated and will be removed in `hsts@3`. Use the uppercase-D `includeSubDomains` option instead. See [#21](https://github.com/helmetjs/hsts/issues/21) for more
+
+Changes in versions 2.1.0 and below can be found in [Helmet's changelog](https://github.com/helmetjs/helmet/blob/master/CHANGELOG.md).
diff --git a/middlewares/strict-transport-security/README.md b/middlewares/strict-transport-security/README.md
new file mode 100644
index 00000000..0e6ca454
--- /dev/null
+++ b/middlewares/strict-transport-security/README.md
@@ -0,0 +1,45 @@
+# HTTP Strict Transport Security middleware
+
+This middleware adds the `Strict-Transport-Security` header to the response. This tells browsers, "hey, only use HTTPS for the next period of time". ([See the spec](http://tools.ietf.org/html/rfc6797) for more.) Note that the header won't tell users on HTTP to _switch_ to HTTPS, it will just tell HTTPS users to stick around. You can enforce HTTPS with the [express-enforces-ssl](https://github.com/aredo/express-enforces-ssl) module.
+
+This will set the Strict Transport Security header, telling browsers to visit by HTTPS for the next 180 days:
+
+```javascript
+const strictTransportSecurity = require("hsts");
+
+// Sets "Strict-Transport-Security: max-age=15552000; includeSubDomains"
+app.use(
+ strictTransportSecurity({
+ maxAge: 15552000, // 180 days in seconds
+ })
+);
+```
+
+Note that the max age must be in seconds.
+
+The `includeSubDomains` directive is present by default. If this header is set on _example.com_, supported browsers will also use HTTPS on _my-subdomain.example.com_. You can disable this:
+
+```javascript
+app.use(
+ strictTransportSecurity({
+ maxAge: 15552000,
+ includeSubDomains: false,
+ })
+);
+```
+
+Some browsers let you submit your site's HSTS to be baked into the browser. You can add `preload` to the header with the following code. You can check your eligibility and submit your site at [hstspreload.org](https://hstspreload.org/).
+
+```javascript
+app.use(
+ strictTransportSecurity({
+ maxAge: 31536000, // Must be at least 1 year to be approved
+ includeSubDomains: true, // Must be enabled to be approved
+ preload: true,
+ })
+);
+```
+
+[The header is ignored in insecure HTTP](https://tools.ietf.org/html/rfc6797#section-8.1), so it's safe to set in development.
+
+This header is [somewhat well-supported by browsers](https://caniuse.com/#feat=stricttransportsecurity).
diff --git a/middlewares/strict-transport-security/index.ts b/middlewares/strict-transport-security/index.ts
new file mode 100644
index 00000000..083a8675
--- /dev/null
+++ b/middlewares/strict-transport-security/index.ts
@@ -0,0 +1,77 @@
+import { IncomingMessage, ServerResponse } from "http";
+
+const DEFAULT_MAX_AGE = 180 * 24 * 60 * 60;
+
+export interface StrictTransportSecurityOptions {
+ maxAge?: number;
+ includeSubDomains?: boolean;
+ preload?: boolean;
+}
+
+function parseMaxAge(value: void | number): number {
+ if (value === undefined) {
+ return DEFAULT_MAX_AGE;
+ } else if (
+ typeof value === "number" &&
+ value >= 0 &&
+ Number.isFinite(value)
+ ) {
+ return Math.floor(value);
+ } else {
+ throw new Error(
+ `Strict-Transport-Security: ${JSON.stringify(
+ value
+ )} is not a valid value for maxAge. Please choose a positive integer.`
+ );
+ }
+}
+
+function getHeaderValueFromOptions(
+ options: Readonly
+): string {
+ if ("maxage" in options) {
+ throw new Error(
+ "Strict-Transport-Security received an unsupported property, `maxage`. Did you mean to pass `maxAge`?"
+ );
+ }
+ if ("includeSubdomains" in options) {
+ console.warn(
+ 'Strict-Transport-Security middleware should use `includeSubDomains` instead of `includeSubdomains`. (The correct one has an uppercase "D".)'
+ );
+ }
+ if ("setIf" in options) {
+ console.warn(
+ "Strict-Transport-Security middleware no longer supports the `setIf` parameter. See the documentation and if you need help replicating this behavior."
+ );
+ }
+
+ const directives: string[] = [`max-age=${parseMaxAge(options.maxAge)}`];
+
+ if (options.includeSubDomains === undefined || options.includeSubDomains) {
+ directives.push("includeSubDomains");
+ }
+
+ if (options.preload) {
+ directives.push("preload");
+ }
+
+ return directives.join("; ");
+}
+
+function strictTransportSecurity(
+ options: Readonly = {}
+) {
+ const headerValue = getHeaderValueFromOptions(options);
+
+ return function strictTransportSecurityMiddleware(
+ _req: IncomingMessage,
+ res: ServerResponse,
+ next: () => void
+ ) {
+ res.setHeader("Strict-Transport-Security", headerValue);
+ next();
+ };
+}
+
+module.exports = strictTransportSecurity;
+export default strictTransportSecurity;
diff --git a/middlewares/strict-transport-security/package-files.json b/middlewares/strict-transport-security/package-files.json
new file mode 100644
index 00000000..962389e9
--- /dev/null
+++ b/middlewares/strict-transport-security/package-files.json
@@ -0,0 +1 @@
+["index.js", "index.d.ts"]
diff --git a/middlewares/strict-transport-security/package-overrides.json b/middlewares/strict-transport-security/package-overrides.json
new file mode 100644
index 00000000..c52b5b9a
--- /dev/null
+++ b/middlewares/strict-transport-security/package-overrides.json
@@ -0,0 +1,12 @@
+{
+ "name": "hsts",
+ "description": "HTTP Strict Transport Security middleware",
+ "version": "2.2.0",
+ "keywords": [
+ "express",
+ "security",
+ "hsts",
+ "strict-transport-security",
+ "https"
+ ]
+}
diff --git a/middlewares/x-content-type-options/CHANGELOG.md b/middlewares/x-content-type-options/CHANGELOG.md
index b9ef0204..ef478606 100644
--- a/middlewares/x-content-type-options/CHANGELOG.md
+++ b/middlewares/x-content-type-options/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## 2.0.0 - Unreleased
+
+### Removed
+
+- Dropped support for old Node versions. Node 10+ is now required
+
## 1.1.0 - 2019-05-11
### Added
diff --git a/middlewares/x-content-type-options/package-overrides.json b/middlewares/x-content-type-options/package-overrides.json
index 7a4e0a86..e4217710 100644
--- a/middlewares/x-content-type-options/package-overrides.json
+++ b/middlewares/x-content-type-options/package-overrides.json
@@ -2,6 +2,5 @@
"name": "dont-sniff-mimetype",
"description": "Middleware to prevent mimetype from being sniffed",
"version": "1.1.0",
- "keywords": ["express", "security", "mimetype", "x-content-type-options"],
- "homepage": "https://helmetjs.github.io/docs/dont-sniff-mimetype"
+ "keywords": ["express", "security", "mimetype", "x-content-type-options"]
}
diff --git a/middlewares/x-dns-prefetch-control/CHANGELOG.md b/middlewares/x-dns-prefetch-control/CHANGELOG.md
index 0e491b0f..4c14aa4a 100644
--- a/middlewares/x-dns-prefetch-control/CHANGELOG.md
+++ b/middlewares/x-dns-prefetch-control/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## Unreleased
+
+### Removed
+
+- Dropped support for old Node versions. Node 10+ is now required
+
## 0.3.0 - 2019-09-01
### Changed
diff --git a/middlewares/x-dns-prefetch-control/package-overrides.json b/middlewares/x-dns-prefetch-control/package-overrides.json
index 9270e6bc..e28aed96 100644
--- a/middlewares/x-dns-prefetch-control/package-overrides.json
+++ b/middlewares/x-dns-prefetch-control/package-overrides.json
@@ -4,6 +4,5 @@
"contributors": [],
"description": "Middleware to set X-DNS-Prefetch-Control header.",
"version": "0.3.0",
- "keywords": ["express", "security", "x-dns-prefetch-control", "prefetch"],
- "homepage": "https://helmetjs.github.io/docs/dns-prefetch-control"
+ "keywords": ["express", "security", "x-dns-prefetch-control", "prefetch"]
}
diff --git a/middlewares/x-download-options/CHANGELOG.md b/middlewares/x-download-options/CHANGELOG.md
index 986ae2f6..d08a2373 100644
--- a/middlewares/x-download-options/CHANGELOG.md
+++ b/middlewares/x-download-options/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## 2.0.0 - Unreleased
+
+- Dropped support for old Node versions. Node 10+ is now required
+
## 1.1.1 - 2020-06-16
### Changed
diff --git a/middlewares/x-download-options/README.md b/middlewares/x-download-options/README.md
index 6dc0512f..66db7128 100644
--- a/middlewares/x-download-options/README.md
+++ b/middlewares/x-download-options/README.md
@@ -7,6 +7,6 @@ const ienoopen = require("ienoopen");
app.use(ienoopen());
```
-Some web applications will serve untrusted HTML for download. By default, some versions of IE will allow you to open those HTML files _in the context of your site_, which means that an untrusted HTML page could start doing bad things in the context of your pages. For more, see [this MSDN blog post](http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx).
+Some web applications will serve untrusted HTML for download. By default, some versions of IE will allow you to open those HTML files _in the context of your site_, which means that an untrusted HTML page could start doing bad things in the context of your pages. For more, see [this MSDN blog post](https://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx).
This is pretty obscure, fixing a small bug on IE only. No real drawbacks other than performance/bandwidth of setting the headers, though.
diff --git a/middlewares/x-download-options/index.ts b/middlewares/x-download-options/index.ts
index f3a9d1fa..6f841d01 100644
--- a/middlewares/x-download-options/index.ts
+++ b/middlewares/x-download-options/index.ts
@@ -1,16 +1,14 @@
import { IncomingMessage, ServerResponse } from "http";
-function xDownloadOptionsMiddleware(
- _req: IncomingMessage,
- res: ServerResponse,
- next: () => void
-): void {
- res.setHeader("X-Download-Options", "noopen");
- next();
-}
-
function xDownloadOptions() {
- return xDownloadOptionsMiddleware;
+ return function xDownloadOptionsMiddleware(
+ _req: IncomingMessage,
+ res: ServerResponse,
+ next: () => void
+ ): void {
+ res.setHeader("X-Download-Options", "noopen");
+ next();
+ };
}
module.exports = xDownloadOptions;
diff --git a/middlewares/x-download-options/package-overrides.json b/middlewares/x-download-options/package-overrides.json
index 93ba570a..4900ec52 100644
--- a/middlewares/x-download-options/package-overrides.json
+++ b/middlewares/x-download-options/package-overrides.json
@@ -6,6 +6,5 @@
],
"description": "Middleware to set `X-Download-Options` header for IE8 security",
"version": "1.1.1",
- "keywords": ["express", "security", "x-download-options"],
- "homepage": "https://helmetjs.github.io/docs/ienoopen/"
+ "keywords": ["express", "security", "x-download-options"]
}
diff --git a/middlewares/x-frame-options/CHANGELOG.md b/middlewares/x-frame-options/CHANGELOG.md
index 561c6573..520a2769 100644
--- a/middlewares/x-frame-options/CHANGELOG.md
+++ b/middlewares/x-frame-options/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## 4.0.0 - Unreleased
+
+### Removed
+
+- Dropped support for the `ALLOW-FROM` action. [Read more here.](https://github.com/helmetjs/helmet/wiki/How-to-use-X%E2%80%93Frame%E2%80%93Options's-%60ALLOW%E2%80%93FROM%60-directive)
+- Dropped support for old Node versions. Node 10+ is now required
+
## 3.1.0 - 2019-05-04
### Added
diff --git a/middlewares/x-frame-options/README.md b/middlewares/x-frame-options/README.md
index 7f27698a..4f546851 100644
--- a/middlewares/x-frame-options/README.md
+++ b/middlewares/x-frame-options/README.md
@@ -1,6 +1,10 @@
# X-Frame-Options middleware
-The `X-Frame-Options` HTTP header restricts who can put your site in a frame which can help mitigate things like [clickjacking attacks](https://en.wikipedia.org/wiki/Clickjacking). It has three modes: `DENY`, `SAMEORIGIN`, and `ALLOW-FROM`, defaulting to `SAMEORIGIN`. If your app does not need to be framed (and most don't) you can use `DENY`. If your site can be in frames from the same origin, you can set it to `SAMEORIGIN`. If you want to allow it from a specific URL, you can allow that with `ALLOW-FROM` and a URL (but this has poor browser support).
+The `X-Frame-Options` HTTP header restricts who can put your site in a frame which can help mitigate things like [clickjacking attacks](https://en.wikipedia.org/wiki/Clickjacking). The header has two modes: `DENY` and `SAMEORIGIN`.
+
+This header is superseded by [the `frame-ancestors` Content Security Policy directive](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) but is still useful on old browsers.
+
+If your app does not need to be framed (and most don't) you can use `DENY`. If your site can be in frames from the same origin, you can set it to `SAMEORIGIN`.
Usage:
@@ -13,16 +17,6 @@ app.use(frameguard({ action: "deny" }));
// Only let me be framed by people of the same origin:
app.use(frameguard({ action: "sameorigin" }));
app.use(frameguard()); // defaults to sameorigin
-
-// Allow from a specific host (warning: poor browser support):
-app.use(
- frameguard({
- action: "allow-from",
- domain: "https://example.com",
- })
-);
```
-This has pretty good (but not 100%) browser support: IE8+, Opera 10.50+, Safari 4+, Chrome 4.1+, and Firefox 3.6.9+.
-
-The `ALLOW-FROM` header option is [not supported in Chrome, Firefox, Safari], and others(https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options#Browser_compatibility). Those browsers will ignore the entire header, [and the frame _will_ be displayed](https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet#Limitations_2), so you probably want to avoid using that option.
+A legacy action, `ALLOW-FROM`, is not supported by this middleware. [Read more here.](https://github.com/helmetjs/helmet/wiki/How-to-use-X%E2%80%93Frame%E2%80%93Options's-%60ALLOW%E2%80%93FROM%60-directive)
diff --git a/middlewares/x-frame-options/index.ts b/middlewares/x-frame-options/index.ts
index b1c19716..a42d6c52 100644
--- a/middlewares/x-frame-options/index.ts
+++ b/middlewares/x-frame-options/index.ts
@@ -2,64 +2,25 @@ import { IncomingMessage, ServerResponse } from "http";
export interface XFrameOptionsOptions {
action?: string;
- domain?: string;
}
-function parseActionOption(actionOption: unknown): string {
- const invalidActionErr = new Error(
- 'action must be undefined, "DENY", "ALLOW-FROM", or "SAMEORIGIN".'
- );
+function getHeaderValueFromOptions({
+ action = "SAMEORIGIN",
+}: Readonly): string {
+ action = String(action).toUpperCase();
- if (actionOption === undefined) {
- actionOption = "SAMEORIGIN";
- } else if (actionOption instanceof String) {
- actionOption = actionOption.valueOf();
- }
-
- let result: string;
- if (typeof actionOption === "string") {
- result = actionOption.toUpperCase();
- } else {
- throw invalidActionErr;
- }
-
- if (result === "ALLOWFROM") {
- result = "ALLOW-FROM";
- } else if (result === "SAME-ORIGIN") {
- result = "SAMEORIGIN";
- }
-
- if (["DENY", "ALLOW-FROM", "SAMEORIGIN"].indexOf(result) === -1) {
- throw invalidActionErr;
- }
-
- return result;
-}
-
-function parseDomainOption(domainOption: unknown): string {
- if (domainOption instanceof String) {
- domainOption = domainOption.valueOf();
- }
-
- if (typeof domainOption !== "string") {
- throw new Error("ALLOW-FROM action requires a string domain parameter.");
- } else if (!domainOption.length) {
- throw new Error("domain parameter must not be empty.");
- }
-
- return domainOption;
-}
-
-function getHeaderValueFromOptions(
- options: Readonly
-): string {
- const action = parseActionOption(options.action);
-
- if (action === "ALLOW-FROM") {
- const domain = parseDomainOption(options.domain);
- return `${action} ${domain}`;
- } else {
+ if (action === "SAME-ORIGIN") {
+ return "SAMEORIGIN";
+ } else if (action === "DENY" || action === "SAMEORIGIN") {
return action;
+ } else if (action === "ALLOW-FROM") {
+ throw new Error(
+ "X-Frame-Options no longer supports `ALLOW-FROM` due to poor browser support. See for more info."
+ );
+ } else {
+ throw new Error(
+ `X-Frame-Options received an invalid action ${JSON.stringify(action)}`
+ );
}
}
diff --git a/middlewares/x-frame-options/package-overrides.json b/middlewares/x-frame-options/package-overrides.json
index 78c168a5..04c86a18 100644
--- a/middlewares/x-frame-options/package-overrides.json
+++ b/middlewares/x-frame-options/package-overrides.json
@@ -2,6 +2,5 @@
"name": "frameguard",
"description": "Middleware to set X-Frame-Options headers",
"version": "3.1.0",
- "keywords": ["express", "security", "x-frame-options", "clickjack"],
- "homepage": "https://helmetjs.github.io/docs/frameguard/"
+ "keywords": ["express", "security", "x-frame-options", "clickjack"]
}
diff --git a/middlewares/x-permitted-cross-domain-policies/CHANGELOG.md b/middlewares/x-permitted-cross-domain-policies/CHANGELOG.md
index eb3d518a..94be14c8 100644
--- a/middlewares/x-permitted-cross-domain-policies/CHANGELOG.md
+++ b/middlewares/x-permitted-cross-domain-policies/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## Unreleased
+
+### Removed
+
+- Dropped support for old Node versions. Node 10+ is now required
+
## 0.5.0 - 2019-09-01
## Changed
diff --git a/middlewares/x-permitted-cross-domain-policies/README.md b/middlewares/x-permitted-cross-domain-policies/README.md
index 1118e7b7..a601f00f 100644
--- a/middlewares/x-permitted-cross-domain-policies/README.md
+++ b/middlewares/x-permitted-cross-domain-policies/README.md
@@ -1,6 +1,6 @@
# X-Permitted-Cross-Domain-Policies middleware
-The `X-Permitted-Cross-Domain-Policies` header tells some web clients (like Adobe Flash or Adobe Acrobat) your domain's policy for loading cross-domain content. See the description on [OWASP](https://www.owasp.org/index.php/OWASP_Secure_Headers_Project#X-Permitted-Cross-Domain-Policies) for more.
+The `X-Permitted-Cross-Domain-Policies` header tells some web clients (like Adobe Flash or Adobe Acrobat) your domain's policy for loading cross-domain content. See the description on [OWASP](https://owasp.org/www-project-secure-headers/) for more.
Usage:
diff --git a/middlewares/x-permitted-cross-domain-policies/index.ts b/middlewares/x-permitted-cross-domain-policies/index.ts
index bcb6d391..f8e99890 100644
--- a/middlewares/x-permitted-cross-domain-policies/index.ts
+++ b/middlewares/x-permitted-cross-domain-policies/index.ts
@@ -1,6 +1,6 @@
import { IncomingMessage, ServerResponse } from "http";
-interface XPermittedCrossDomainPoliciesOptions {
+export interface XPermittedCrossDomainPoliciesOptions {
permittedPolicies?: string;
}
@@ -20,7 +20,7 @@ function getHeaderValueFromOptions({
throw new Error(
`X-Permitted-Cross-Domain-Policies does not support ${JSON.stringify(
permittedPolicies
- )} as a permitted policy`
+ )}`
);
}
}
diff --git a/middlewares/x-permitted-cross-domain-policies/package-overrides.json b/middlewares/x-permitted-cross-domain-policies/package-overrides.json
index fa2ec916..45d84d5a 100644
--- a/middlewares/x-permitted-cross-domain-policies/package-overrides.json
+++ b/middlewares/x-permitted-cross-domain-policies/package-overrides.json
@@ -9,6 +9,5 @@
"security",
"crossdomain.xml",
"x-permitted-cross-domain-policies"
- ],
- "homepage": "https://helmetjs.github.io/docs/crossdomain/"
+ ]
}
diff --git a/middlewares/x-powered-by/CHANGELOG.md b/middlewares/x-powered-by/CHANGELOG.md
index c26536bb..0d7ecb42 100644
--- a/middlewares/x-powered-by/CHANGELOG.md
+++ b/middlewares/x-powered-by/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## 2.0.0 - Unreleased
+
+### Removed
+
+- Removed `setTo` option. See [this article](https://github.com/helmetjs/helmet/wiki/How-to-set-a-custom-X%E2%80%93Powered%E2%80%93By-header) to see how to replicate the removed behavior. See [#224](https://github.com/helmetjs/helmet/issues/224).
+- Dropped support for old Node versions. Node 10+ is now required
+
## 1.1.0 - 2019-05-26
### Added
diff --git a/middlewares/x-powered-by/README.md b/middlewares/x-powered-by/README.md
index e9137992..7bb26577 100644
--- a/middlewares/x-powered-by/README.md
+++ b/middlewares/x-powered-by/README.md
@@ -9,12 +9,6 @@ const hidePoweredBy = require("hide-powered-by");
app.use(hidePoweredBy());
```
-You can also explicitly set the header to something else, if you want. This could throw people off:
-
-```javascript
-app.use(hidePoweredBy({ setTo: "PHP 4.2.0" }));
-```
-
Note: if you're using Express, you don't need this middleware and can just do this:
```javascript
diff --git a/middlewares/x-powered-by/index.ts b/middlewares/x-powered-by/index.ts
index 8262f305..ef6a165c 100644
--- a/middlewares/x-powered-by/index.ts
+++ b/middlewares/x-powered-by/index.ts
@@ -1,32 +1,12 @@
import { IncomingMessage, ServerResponse } from "http";
-export interface XPoweredByOptions {
- setTo?: string;
-}
-
-function getUpdaterFn(
- value: string | undefined
-): (res: ServerResponse) => void {
- if (value) {
- return (res) => {
- res.setHeader("X-Powered-By", value);
- };
- } else {
- return (res) => {
- res.removeHeader("X-Powered-By");
- };
- }
-}
-
-function xPoweredBy(options: Readonly = {}) {
- const updateResponse = getUpdaterFn(options.setTo);
-
+function xPoweredBy() {
return function xPoweredByMiddleware(
_req: IncomingMessage,
res: ServerResponse,
next: () => void
) {
- updateResponse(res);
+ res.removeHeader("X-Powered-By");
next();
};
}
diff --git a/middlewares/x-powered-by/package-overrides.json b/middlewares/x-powered-by/package-overrides.json
index cc7ea8a9..9b7f054d 100644
--- a/middlewares/x-powered-by/package-overrides.json
+++ b/middlewares/x-powered-by/package-overrides.json
@@ -1,7 +1,10 @@
{
"name": "hide-powered-by",
+ "contributors": [
+ "Evan Hahn (https://evanhahn.com)",
+ "Ameen Abdeen "
+ ],
"description": "Middleware to remove the X-Powered-By header",
"version": "1.1.0",
- "keywords": ["express", "security", "x-powered-by", "powered-by"],
- "homepage": "https://helmetjs.github.io/docs/hide-powered-by/"
+ "keywords": ["express", "security", "x-powered-by", "powered-by"]
}
diff --git a/middlewares/x-xss-protection/CHANGELOG.md b/middlewares/x-xss-protection/CHANGELOG.md
new file mode 100644
index 00000000..ba3b7784
--- /dev/null
+++ b/middlewares/x-xss-protection/CHANGELOG.md
@@ -0,0 +1,37 @@
+# Changelog
+
+## 2.0.0 - Unreleased
+
+### Changed
+
+- XSS filtering is now disabled by default. See [#230](https://github.com/helmetjs/helmet/issues/230)
+
+### Removed
+
+- No longer accepts options. Read ["How to disable blocking with X–XSS–Protection"](https://github.com/helmetjs/helmet/wiki/How-to-disable-blocking-with-X%E2%80%93XSS%E2%80%93Protection) and ["How to enable the `report` directive with X–XSS–Protection"](https://github.com/helmetjs/helmet/wiki/How-to-enable-the-%60report%60-directive-with-X%E2%80%93XSS%E2%80%93Protection) if you need the legacy behavior.
+- Dropped support for old Node versions. Node 10+ is now required
+
+## 1.3.0 - 2019-09-01
+
+### Added
+
+- Added `mode: null` to disable `mode=block`
+
+### Changed
+
+- Minor performance improvements with Internet Explorer <9 detection
+
+## 1.2.0 - 2019-06-15
+
+### Added
+
+- Added TypeScript type definitions. See [#8](https://github.com/helmetjs/x-xss-protection/pull/8)
+- Created a changelog
+- Added some additional package metadata
+
+### Changed
+
+- Updated documentation
+- Excluded some files from npm package
+
+Changes in versions 1.1.0 and below can be found in [Helmet's changelog](https://github.com/helmetjs/helmet/blob/master/CHANGELOG.md).
diff --git a/middlewares/x-xss-protection/README.md b/middlewares/x-xss-protection/README.md
new file mode 100644
index 00000000..8a363c37
--- /dev/null
+++ b/middlewares/x-xss-protection/README.md
@@ -0,0 +1,24 @@
+# X-XSS-Protection middleware
+
+The `X-XSS-Protection` HTTP header aimed to offer a basic protection against cross-site scripting (XSS) attacks. _However, you probably should disable it_, which is what this middleware does.
+
+Many browsers have chosen to remove it because of the unintended security issues it creates. Generally, you should protect against XSS with sanitization and a Content Security Policy. For more, read [this GitHub issue](https://github.com/helmetjs/helmet/issues/230).
+
+This middleware sets the `X-XSS-Protection` header to `0`. For example:
+
+```javascript
+const xXssProtection = require("x-xss-protection");
+
+// Set "X-XSS-Protection: 0"
+app.use(xXssProtection());
+```
+
+If you truly need the legacy behavior, you can write your own simple middleware and avoid installing this module. For example:
+
+```javascript
+// NOTE: This is probably insecure!
+app.use((req, res, next) => {
+ res.setHeader("X-XSS-Protection", "1; mode=block");
+ next();
+});
+```
diff --git a/middlewares/x-xss-protection/index.ts b/middlewares/x-xss-protection/index.ts
new file mode 100644
index 00000000..672ae52d
--- /dev/null
+++ b/middlewares/x-xss-protection/index.ts
@@ -0,0 +1,15 @@
+import { IncomingMessage, ServerResponse } from "http";
+
+function xXssProtection() {
+ return function xXssProtectionMiddleware(
+ _req: IncomingMessage,
+ res: ServerResponse,
+ next: () => void
+ ) {
+ res.setHeader("X-XSS-Protection", "0");
+ next();
+ };
+}
+
+module.exports = xXssProtection;
+export default xXssProtection;
diff --git a/middlewares/x-xss-protection/package-files.json b/middlewares/x-xss-protection/package-files.json
new file mode 100644
index 00000000..962389e9
--- /dev/null
+++ b/middlewares/x-xss-protection/package-files.json
@@ -0,0 +1 @@
+["index.js", "index.d.ts"]
diff --git a/middlewares/x-xss-protection/package-overrides.json b/middlewares/x-xss-protection/package-overrides.json
new file mode 100644
index 00000000..e9845b83
--- /dev/null
+++ b/middlewares/x-xss-protection/package-overrides.json
@@ -0,0 +1,6 @@
+{
+ "name": "x-xss-protection",
+ "description": "Middleware to disable the X-XSS-Protection header",
+ "version": "1.3.0",
+ "keywords": ["express", "security", "x-xss-protection"]
+}
diff --git a/package-lock.json b/package-lock.json
index 7ebfb700..f9bdaa79 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,81 +1,46 @@
{
"name": "helmet",
- "version": "3.23.3",
+ "version": "4.0.0-rc.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
+ "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.4"
}
},
"@babel/core": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz",
- "integrity": "sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.10.3",
- "@babel/generator": "^7.10.3",
- "@babel/helper-module-transforms": "^7.10.1",
- "@babel/helpers": "^7.10.1",
- "@babel/parser": "^7.10.3",
- "@babel/template": "^7.10.3",
- "@babel/traverse": "^7.10.3",
- "@babel/types": "^7.10.3",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.0.tgz",
+ "integrity": "sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.11.0",
+ "@babel/helper-module-transforms": "^7.11.0",
+ "@babel/helpers": "^7.10.4",
+ "@babel/parser": "^7.11.0",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.11.0",
+ "@babel/types": "^7.11.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.1",
"json5": "^2.1.2",
- "lodash": "^4.17.13",
+ "lodash": "^4.17.19",
"resolve": "^1.3.2",
"semver": "^5.4.1",
"source-map": "^0.5.0"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
- "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.3"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
- "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==",
- "dev": true
- },
- "@babel/highlight": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
- "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.3",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"source-map": {
@@ -87,14 +52,13 @@
}
},
"@babel/generator": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
- "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz",
+ "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.10.3",
+ "@babel/types": "^7.11.0",
"jsesc": "^2.5.1",
- "lodash": "^4.17.13",
"source-map": "^0.5.0"
},
"dependencies": {
@@ -107,136 +71,188 @@
}
},
"@babel/helper-function-name": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
- "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
+ "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.10.3",
- "@babel/template": "^7.10.3",
- "@babel/types": "^7.10.3"
+ "@babel/helper-get-function-arity": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
- "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
+ "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
"dev": true,
"requires": {
- "@babel/types": "^7.10.3"
+ "@babel/types": "^7.10.4"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz",
- "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz",
+ "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==",
"dev": true,
"requires": {
- "@babel/types": "^7.10.3"
+ "@babel/types": "^7.11.0"
}
},
"@babel/helper-module-imports": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz",
- "integrity": "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
+ "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
"dev": true,
"requires": {
- "@babel/types": "^7.10.3"
+ "@babel/types": "^7.10.4"
}
},
"@babel/helper-module-transforms": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz",
- "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz",
+ "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.10.1",
- "@babel/helper-replace-supers": "^7.10.1",
- "@babel/helper-simple-access": "^7.10.1",
- "@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1",
- "lodash": "^4.17.13"
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-simple-access": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.11.0",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.11.0",
+ "lodash": "^4.17.19"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz",
- "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
+ "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
"dev": true,
"requires": {
- "@babel/types": "^7.10.3"
+ "@babel/types": "^7.10.4"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
- "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
"dev": true
},
"@babel/helper-replace-supers": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz",
- "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz",
+ "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==",
"dev": true,
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.10.1",
- "@babel/helper-optimise-call-expression": "^7.10.1",
- "@babel/traverse": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-member-expression-to-functions": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
}
},
"@babel/helper-simple-access": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz",
- "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz",
+ "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==",
"dev": true,
"requires": {
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz",
- "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
+ "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
"dev": true,
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.11.0"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
+ "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
"dev": true
},
"@babel/helpers": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz",
- "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz",
+ "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==",
"dev": true,
"requires": {
- "@babel/template": "^7.10.1",
- "@babel/traverse": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
}
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
+ "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.4",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"@babel/parser": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
- "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz",
+ "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==",
"dev": true
},
"@babel/plugin-syntax-async-generators": {
@@ -258,21 +274,21 @@
}
},
"@babel/plugin-syntax-class-properties": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz",
- "integrity": "sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz",
+ "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.10.1"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-syntax-import-meta": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.1.tgz",
- "integrity": "sha512-ypC4jwfIVF72og0dgvEcFRdOM2V9Qm1tu7RGmdZOlhsccyK0wisXmMObGuWEOd5jQ+K9wcIgSNftCpk2vkjUfQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.10.1"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-syntax-json-strings": {
@@ -285,12 +301,12 @@
}
},
"@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.1.tgz",
- "integrity": "sha512-XyHIFa9kdrgJS91CUH+ccPVTnJShr8nLGc5bG2IhGXv5p1Rd+8BleGE5yzIg2Nc1QZAdHDa0Qp4m6066OL96Iw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.10.1"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-syntax-nullish-coalescing-operator": {
@@ -303,12 +319,12 @@
}
},
"@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz",
- "integrity": "sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.10.1"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-syntax-object-rest-spread": {
@@ -339,127 +355,50 @@
}
},
"@babel/template": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
- "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.10.3",
- "@babel/parser": "^7.10.3",
- "@babel/types": "^7.10.3"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
- "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.3"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
- "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==",
- "dev": true
- },
- "@babel/highlight": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
- "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.3",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- }
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
}
},
"@babel/traverse": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
- "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz",
+ "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.10.3",
- "@babel/generator": "^7.10.3",
- "@babel/helper-function-name": "^7.10.3",
- "@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.3",
- "@babel/types": "^7.10.3",
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.11.0",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.11.0",
+ "@babel/parser": "^7.11.0",
+ "@babel/types": "^7.11.0",
"debug": "^4.1.0",
"globals": "^11.1.0",
- "lodash": "^4.17.13"
+ "lodash": "^4.17.19"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
- "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.3"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
- "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==",
- "dev": true
- },
- "@babel/highlight": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
- "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.3",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
}
}
},
"@babel/types": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
- "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz",
+ "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.10.3",
- "lodash": "^4.17.13",
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
- },
- "dependencies": {
- "@babel/helper-validator-identifier": {
- "version": "7.10.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
- "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==",
- "dev": true
- }
}
},
"@bcoe/v8-coverage": {
@@ -506,40 +445,32 @@
"dev": true
},
"@jest/console": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.1.0.tgz",
- "integrity": "sha512-+0lpTHMd/8pJp+Nd4lyip+/Iyf2dZJvcCqrlkeZQoQid+JlThA4M9vxHtheyrQ99jJTMQam+es4BcvZ5W5cC3A==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.2.0.tgz",
+ "integrity": "sha512-mXQfx3nSLwiHm1i7jbu+uvi+vvpVjNGzIQYLCfsat9rapC+MJkS4zBseNrgJE0vU921b3P67bQzhduphjY3Tig==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^26.1.0",
- "jest-util": "^26.1.0",
+ "jest-message-util": "^26.2.0",
+ "jest-util": "^26.2.0",
"slash": "^3.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -549,52 +480,38 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"@jest/core": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.1.0.tgz",
- "integrity": "sha512-zyizYmDJOOVke4OO/De//aiv8b07OwZzL2cfsvWF3q9YssfpcKfcnZAwDY8f+A76xXSMMYe8i/f/LPocLlByfw==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.2.2.tgz",
+ "integrity": "sha512-UwA8gNI8aeV4FHGfGAUfO/DHjrFVvlBravF1Tm9Kt6qFE+6YHR47kFhgdepOFpADEKstyO+MVdPvkV6/dyt9sA==",
"dev": true,
"requires": {
- "@jest/console": "^26.1.0",
- "@jest/reporters": "^26.1.0",
- "@jest/test-result": "^26.1.0",
- "@jest/transform": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/console": "^26.2.0",
+ "@jest/reporters": "^26.2.2",
+ "@jest/test-result": "^26.2.0",
+ "@jest/transform": "^26.2.2",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
- "jest-changed-files": "^26.1.0",
- "jest-config": "^26.1.0",
- "jest-haste-map": "^26.1.0",
- "jest-message-util": "^26.1.0",
+ "jest-changed-files": "^26.2.0",
+ "jest-config": "^26.2.2",
+ "jest-haste-map": "^26.2.2",
+ "jest-message-util": "^26.2.0",
"jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.1.0",
- "jest-resolve-dependencies": "^26.1.0",
- "jest-runner": "^26.1.0",
- "jest-runtime": "^26.1.0",
- "jest-snapshot": "^26.1.0",
- "jest-util": "^26.1.0",
- "jest-validate": "^26.1.0",
- "jest-watcher": "^26.1.0",
+ "jest-resolve": "^26.2.2",
+ "jest-resolve-dependencies": "^26.2.2",
+ "jest-runner": "^26.2.2",
+ "jest-runtime": "^26.2.2",
+ "jest-snapshot": "^26.2.2",
+ "jest-util": "^26.2.0",
+ "jest-validate": "^26.2.0",
+ "jest-watcher": "^26.2.0",
"micromatch": "^4.0.2",
"p-each-series": "^2.1.0",
"rimraf": "^3.0.0",
@@ -603,27 +520,18 @@
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -634,21 +542,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -661,38 +554,30 @@
}
},
"@jest/environment": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.1.0.tgz",
- "integrity": "sha512-86+DNcGongbX7ai/KE/S3/NcUVZfrwvFzOOWX/W+OOTvTds7j07LtC+MgGydH5c8Ri3uIrvdmVgd1xFD5zt/xA==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.2.0.tgz",
+ "integrity": "sha512-oCgp9NmEiJ5rbq9VI/v/yYLDpladAAVvFxZgNsnJxOETuzPZ0ZcKKHYjKYwCtPOP1WCrM5nmyuOhMStXFGHn+g==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^26.1.0",
- "@jest/types": "^26.1.0",
- "jest-mock": "^26.1.0"
+ "@jest/fake-timers": "^26.2.0",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
+ "jest-mock": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -702,59 +587,36 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"@jest/fake-timers": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.1.0.tgz",
- "integrity": "sha512-Y5F3kBVWxhau3TJ825iuWy++BAuQzK/xEa+wD9vDH3RytW9f2DbMVodfUQC54rZDX3POqdxCgcKdgcOL0rYUpA==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.2.0.tgz",
+ "integrity": "sha512-45Gfe7YzYTKqTayBrEdAF0qYyAsNRBzfkV0IyVUm3cx7AsCWlnjilBM4T40w7IXT5VspOgMPikQlV0M6gHwy/g==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"@sinonjs/fake-timers": "^6.0.1",
- "jest-message-util": "^26.1.0",
- "jest-mock": "^26.1.0",
- "jest-util": "^26.1.0"
+ "@types/node": "*",
+ "jest-message-util": "^26.2.0",
+ "jest-mock": "^26.2.0",
+ "jest-util": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -764,57 +626,33 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"@jest/globals": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.1.0.tgz",
- "integrity": "sha512-MKiHPNaT+ZoG85oMaYUmGHEqu98y3WO2yeIDJrs2sJqHhYOy3Z6F7F/luzFomRQ8SQ1wEkmahFAz2291Iv8EAw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.2.0.tgz",
+ "integrity": "sha512-Hoc6ScEIPaym7RNytIL2ILSUWIGKlwEv+JNFof9dGYOdvPjb2evEURSslvCMkNuNg1ECEClTE8PH7ULlMJntYA==",
"dev": true,
"requires": {
- "@jest/environment": "^26.1.0",
- "@jest/types": "^26.1.0",
- "expect": "^26.1.0"
+ "@jest/environment": "^26.2.0",
+ "@jest/types": "^26.2.0",
+ "expect": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -824,35 +662,20 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"@jest/reporters": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.1.0.tgz",
- "integrity": "sha512-SVAysur9FOIojJbF4wLP0TybmqwDkdnFxHSPzHMMIYyBtldCW9gG+Q5xWjpMFyErDiwlRuPyMSJSU64A67Pazg==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.2.2.tgz",
+ "integrity": "sha512-7854GPbdFTAorWVh+RNHyPO9waRIN6TcvCezKVxI1khvFq9YjINTW7J3WU+tbR038Ynn6WjYred6vtT0YmIWVQ==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^26.1.0",
- "@jest/test-result": "^26.1.0",
- "@jest/transform": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/console": "^26.2.0",
+ "@jest/test-result": "^26.2.0",
+ "@jest/transform": "^26.2.2",
+ "@jest/types": "^26.2.0",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
@@ -863,10 +686,10 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^26.1.0",
- "jest-resolve": "^26.1.0",
- "jest-util": "^26.1.0",
- "jest-worker": "^26.1.0",
+ "jest-haste-map": "^26.2.2",
+ "jest-resolve": "^26.2.2",
+ "jest-util": "^26.2.0",
+ "jest-worker": "^26.2.1",
"node-notifier": "^7.0.0",
"slash": "^3.0.0",
"source-map": "^0.6.0",
@@ -876,27 +699,18 @@
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -906,21 +720,6 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
@@ -936,39 +735,30 @@
}
},
"@jest/test-result": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.1.0.tgz",
- "integrity": "sha512-Xz44mhXph93EYMA8aYDz+75mFbarTV/d/x0yMdI3tfSRs/vh4CqSxgzVmCps1fPkHDCtn0tU8IH9iCKgGeGpfw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.2.0.tgz",
+ "integrity": "sha512-kgPlmcVafpmfyQEu36HClK+CWI6wIaAWDHNxfQtGuKsgoa2uQAYdlxjMDBEa3CvI40+2U3v36gQF6oZBkoKatw==",
"dev": true,
"requires": {
- "@jest/console": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/console": "^26.2.0",
+ "@jest/types": "^26.2.0",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -978,53 +768,38 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"@jest/test-sequencer": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.1.0.tgz",
- "integrity": "sha512-Z/hcK+rTq56E6sBwMoQhSRDVjqrGtj1y14e2bIgcowARaIE1SgOanwx6gvY4Q9gTKMoZQXbXvptji+q5GYxa6Q==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.2.2.tgz",
+ "integrity": "sha512-SliZWon5LNqV/lVXkeowSU6L8++FGOu3f43T01L1Gv6wnFDP00ER0utV9jyK9dVNdXqfMNCN66sfcyar/o7BNw==",
"dev": true,
"requires": {
- "@jest/test-result": "^26.1.0",
+ "@jest/test-result": "^26.2.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.1.0",
- "jest-runner": "^26.1.0",
- "jest-runtime": "^26.1.0"
+ "jest-haste-map": "^26.2.2",
+ "jest-runner": "^26.2.2",
+ "jest-runtime": "^26.2.2"
}
},
"@jest/transform": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.1.0.tgz",
- "integrity": "sha512-ICPm6sUXmZJieq45ix28k0s+d/z2E8CHDsq+WwtWI6kW8m7I8kPqarSEcUN86entHQ570ZBRci5OWaKL0wlAWw==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.2.2.tgz",
+ "integrity": "sha512-c1snhvi5wRVre1XyoO3Eef5SEWpuBCH/cEbntBUd9tI5sNYiBDmO0My/lc5IuuGYKp/HFIHV1eZpSx5yjdkhKw==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"babel-plugin-istanbul": "^6.0.0",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.1.0",
+ "jest-haste-map": "^26.2.2",
"jest-regex-util": "^26.0.0",
- "jest-util": "^26.1.0",
+ "jest-util": "^26.2.0",
"micromatch": "^4.0.2",
"pirates": "^4.0.1",
"slash": "^3.0.0",
@@ -1033,27 +808,18 @@
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -1063,21 +829,6 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
@@ -1091,49 +842,12 @@
"@types/istanbul-reports": "^1.1.1",
"@types/yargs": "^15.0.0",
"chalk": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
}
},
"@sinonjs/commons": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.0.tgz",
- "integrity": "sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz",
+ "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
@@ -1181,9 +895,9 @@
}
},
"@types/babel__traverse": {
- "version": "7.0.12",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.12.tgz",
- "integrity": "sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA==",
+ "version": "7.0.13",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.13.tgz",
+ "integrity": "sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==",
"dev": true,
"requires": {
"@babel/types": "^7.3.0"
@@ -1210,15 +924,6 @@
"integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw==",
"dev": true
},
- "@types/depd": {
- "version": "1.1.32",
- "resolved": "https://registry.npmjs.org/@types/depd/-/depd-1.1.32.tgz",
- "integrity": "sha512-kB2cpXs3A0TGWl4a4h74yIwvclYZUTW6Irpee/3Dc1s4Cr5rGPHtpGPpBBpEV1MaKH5z/oul+57oDkEkeRXRnw==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
"@types/eslint-visitor-keys": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
@@ -1260,9 +965,9 @@
}
},
"@types/jest": {
- "version": "26.0.3",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.3.tgz",
- "integrity": "sha512-v89ga1clpVL/Y1+YI0eIu1VMW+KU7Xl8PhylVtDKVWaSUHBHYPLXMQGBdrpHewaKoTvlXkksbYqPgz8b4cmRZg==",
+ "version": "26.0.8",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.8.tgz",
+ "integrity": "sha512-eo3VX9jGASSuv680D4VQ89UmuLZneNxv2MCZjfwlInav05zXVJTzfc//lavdV0GPwSxsXJTy2jALscB7Acqg0g==",
"dev": true,
"requires": {
"jest-diff": "^25.2.1",
@@ -1276,9 +981,9 @@
"dev": true
},
"@types/node": {
- "version": "14.0.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz",
- "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==",
+ "version": "14.0.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.23.tgz",
+ "integrity": "sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw==",
"dev": true
},
"@types/normalize-package-data": {
@@ -1288,9 +993,9 @@
"dev": true
},
"@types/prettier": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.0.1.tgz",
- "integrity": "sha512-boy4xPNEtiw6N3abRhBi/e7hNvy3Tt8E9ZRAQrwAGzoCGZS/1wjo9KY7JHhnfnEsG5wSjDbymCozUM9a3ea7OQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.0.2.tgz",
+ "integrity": "sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA==",
"dev": true
},
"@types/stack-utils": {
@@ -1334,128 +1039,86 @@
"dev": true
},
"@typescript-eslint/eslint-plugin": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.4.0.tgz",
- "integrity": "sha512-wfkpiqaEVhZIuQRmudDszc01jC/YR7gMSxa6ulhggAe/Hs0KVIuo9wzvFiDbG3JD5pRFQoqnf4m7REDsUvBnMQ==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.7.1.tgz",
+ "integrity": "sha512-3DB9JDYkMrc8Au00rGFiJLK2Ja9CoMP6Ut0sHsXp3ZtSugjNxvSSHTnKLfo4o+QmjYBJqEznDqsG1zj4F2xnsg==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "3.4.0",
+ "@typescript-eslint/experimental-utils": "3.7.1",
"debug": "^4.1.1",
"functional-red-black-tree": "^1.0.1",
"regexpp": "^3.0.0",
"semver": "^7.3.2",
"tsutils": "^3.17.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
- }
}
},
"@typescript-eslint/experimental-utils": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.4.0.tgz",
- "integrity": "sha512-rHPOjL43lOH1Opte4+dhC0a/+ks+8gOBwxXnyrZ/K4OTAChpSjP76fbI8Cglj7V5GouwVAGaK+xVwzqTyE/TPw==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.7.1.tgz",
+ "integrity": "sha512-TqE97pv7HrqWcGJbLbZt1v59tcqsSVpWTOf1AqrWK7n8nok2sGgVtYRuGXeNeLw3wXlLEbY1MKP3saB2HsO/Ng==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.3",
- "@typescript-eslint/typescript-estree": "3.4.0",
+ "@typescript-eslint/types": "3.7.1",
+ "@typescript-eslint/typescript-estree": "3.7.1",
"eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0"
}
},
"@typescript-eslint/parser": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.4.0.tgz",
- "integrity": "sha512-ZUGI/de44L5x87uX5zM14UYcbn79HSXUR+kzcqU42gH0AgpdB/TjuJy3m4ezI7Q/jk3wTQd755mxSDLhQP79KA==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.7.1.tgz",
+ "integrity": "sha512-W4QV/gXvfIsccN8225784LNOorcm7ch68Fi3V4Wg7gmkWSQRKevO4RrRqWo6N/Z/myK1QAiGgeaXN57m+R/8iQ==",
"dev": true,
"requires": {
"@types/eslint-visitor-keys": "^1.0.0",
- "@typescript-eslint/experimental-utils": "3.4.0",
- "@typescript-eslint/typescript-estree": "3.4.0",
+ "@typescript-eslint/experimental-utils": "3.7.1",
+ "@typescript-eslint/types": "3.7.1",
+ "@typescript-eslint/typescript-estree": "3.7.1",
"eslint-visitor-keys": "^1.1.0"
}
},
+ "@typescript-eslint/types": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.7.1.tgz",
+ "integrity": "sha512-PZe8twm5Z4b61jt7GAQDor6KiMhgPgf4XmUb9zdrwTbgtC/Sj29gXP1dws9yEn4+aJeyXrjsD9XN7AWFhmnUfg==",
+ "dev": true
+ },
"@typescript-eslint/typescript-estree": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.4.0.tgz",
- "integrity": "sha512-zKwLiybtt4uJb4mkG5q2t6+W7BuYx2IISiDNV+IY68VfoGwErDx/RfVI7SWL4gnZ2t1A1ytQQwZ+YOJbHHJ2rw==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.7.1.tgz",
+ "integrity": "sha512-m97vNZkI08dunYOr2lVZOHoyfpqRs0KDpd6qkGaIcLGhQ2WPtgHOd/eVbsJZ0VYCQvupKrObAGTOvk3tfpybYA==",
"dev": true,
"requires": {
+ "@typescript-eslint/types": "3.7.1",
+ "@typescript-eslint/visitor-keys": "3.7.1",
"debug": "^4.1.1",
- "eslint-visitor-keys": "^1.1.0",
"glob": "^7.1.6",
"is-glob": "^4.0.1",
"lodash": "^4.17.15",
"semver": "^7.3.2",
"tsutils": "^3.17.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
- }
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.7.1.tgz",
+ "integrity": "sha512-xn22sQbEya+Utj2IqJHGLA3i1jDzR43RzWupxojbSWnj3nnPLavaQmWe5utw03CwYao3r00qzXfgJMGNkrzrAA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
}
},
"abab": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
- "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz",
+ "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==",
"dev": true
},
"acorn": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz",
- "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
+ "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
"dev": true
},
"acorn-globals": {
@@ -1481,9 +1144,9 @@
"dev": true
},
"ajv": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
- "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+ "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
@@ -1493,9 +1156,9 @@
}
},
"ansi-colors": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
- "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true
},
"ansi-escapes": {
@@ -1522,12 +1185,13 @@
"dev": true
},
"ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
}
},
"anymatch": {
@@ -1625,43 +1289,34 @@
"dev": true
},
"babel-jest": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.1.0.tgz",
- "integrity": "sha512-Nkqgtfe7j6PxLO6TnCQQlkMm8wdTdnIF8xrdpooHCuD5hXRzVEPbPneTJKknH5Dsv3L8ip9unHDAp48YQ54Dkg==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.2.2.tgz",
+ "integrity": "sha512-JmLuePHgA+DSOdOL8lPxCgD2LhPPm+rdw1vnxR73PpIrnmKCS2/aBhtkAcxQWuUcW2hBrH8MJ3LKXE7aWpNZyA==",
"dev": true,
"requires": {
- "@jest/transform": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/transform": "^26.2.2",
+ "@jest/types": "^26.2.0",
"@types/babel__core": "^7.1.7",
"babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^26.1.0",
+ "babel-preset-jest": "^26.2.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"slash": "^3.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -1671,21 +1326,6 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
@@ -1703,9 +1343,9 @@
}
},
"babel-plugin-jest-hoist": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.1.0.tgz",
- "integrity": "sha512-qhqLVkkSlqmC83bdMhM8WW4Z9tB+JkjqAqlbbohS9sJLT5Ha2vfzuKqg5yenXrAjOPG2YC0WiXdH3a9PvB+YYw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz",
+ "integrity": "sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA==",
"dev": true,
"requires": {
"@babel/template": "^7.3.3",
@@ -1734,12 +1374,12 @@
}
},
"babel-preset-jest": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.1.0.tgz",
- "integrity": "sha512-na9qCqFksknlEj5iSdw1ehMVR06LCCTkZLGKeEtxDDdhg8xpUF09m29Kvh1pRbZ07h7AQ5ttLYUwpXL4tO6w7w==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.2.0.tgz",
+ "integrity": "sha512-R1k8kdP3R9phYQugXeNnK/nvCGlBzG4m3EoIIukC80GXb6wCv2XiwPhK6K9MAkQcMszWBYvl2Wm+yigyXFQqXg==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^26.1.0",
+ "babel-plugin-jest-hoist": "^26.2.0",
"babel-preset-current-node-syntax": "^0.1.2"
}
},
@@ -1813,11 +1453,6 @@
"tweetnacl": "^0.14.3"
}
},
- "bowser": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz",
- "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA=="
- },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1896,11 +1531,6 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
- "camelize": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
- "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
- },
"capture-exit": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
@@ -1917,25 +1547,13 @@
"dev": true
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
}
},
"char-regex": {
@@ -2032,18 +1650,18 @@
}
},
"color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
- "color-name": "1.1.3"
+ "color-name": "~1.1.4"
}
},
"color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"combined-stream": {
@@ -2077,13 +1695,25 @@
"finalhandler": "1.1.2",
"parseurl": "~1.3.3",
"utils-merge": "1.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
}
},
- "content-security-policy-builder": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz",
- "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ=="
- },
"convert-source-map": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
@@ -2120,17 +1750,6 @@
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
- },
- "dependencies": {
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
}
},
"cssom": {
@@ -2165,11 +1784,6 @@
"assert-plus": "^1.0.0"
}
},
- "dasherize": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz",
- "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg="
- },
"data-urls": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
@@ -2182,12 +1796,12 @@
}
},
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
"decamelize": {
@@ -2267,11 +1881,6 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
- },
"detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -2326,6 +1935,12 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
"dev": true
},
+ "emittery": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.1.tgz",
+ "integrity": "sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ==",
+ "dev": true
+ },
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
@@ -2348,12 +1963,12 @@
}
},
"enquirer": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz",
- "integrity": "sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
"dev": true,
"requires": {
- "ansi-colors": "^3.2.1"
+ "ansi-colors": "^4.1.1"
}
},
"error-ex": {
@@ -2432,9 +2047,9 @@
}
},
"eslint": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz",
- "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz",
+ "integrity": "sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@@ -2445,9 +2060,9 @@
"doctrine": "^3.0.0",
"enquirer": "^2.3.5",
"eslint-scope": "^5.1.0",
- "eslint-utils": "^2.0.0",
- "eslint-visitor-keys": "^1.2.0",
- "espree": "^7.1.0",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^1.3.0",
+ "espree": "^7.2.0",
"esquery": "^1.2.0",
"esutils": "^2.0.2",
"file-entry-cache": "^5.0.1",
@@ -2461,7 +2076,7 @@
"js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
- "lodash": "^4.17.14",
+ "lodash": "^4.17.19",
"minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
@@ -2475,16 +2090,6 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -2494,42 +2099,6 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
}
}
},
@@ -2559,14 +2128,14 @@
"dev": true
},
"espree": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz",
- "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz",
+ "integrity": "sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==",
"dev": true,
"requires": {
- "acorn": "^7.2.0",
+ "acorn": "^7.3.1",
"acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.2.0"
+ "eslint-visitor-keys": "^1.3.0"
}
},
"esprima": {
@@ -2653,6 +2222,12 @@
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -2700,6 +2275,15 @@
"to-regex": "^3.0.1"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
@@ -2717,45 +2301,42 @@
"requires": {
"is-extendable": "^0.1.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
}
}
},
"expect": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-26.1.0.tgz",
- "integrity": "sha512-QbH4LZXDsno9AACrN9eM0zfnby9G+OsdNgZUohjg/P0mLy1O+/bzTAJGT6VSIjVCe8yKM6SzEl/ckEOFBT7Vnw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-26.2.0.tgz",
+ "integrity": "sha512-8AMBQ9UVcoUXt0B7v+5/U5H6yiUR87L6eKCfjE3spx7Ya5lF+ebUo37MCFBML2OiLfkX1sxmQOZhIDonyVTkcw==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"ansi-styles": "^4.0.0",
"jest-get-type": "^26.0.0",
- "jest-matcher-utils": "^26.1.0",
- "jest-message-util": "^26.1.0",
+ "jest-matcher-utils": "^26.2.0",
+ "jest-message-util": "^26.2.0",
"jest-regex-util": "^26.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -2766,21 +2347,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"jest-get-type": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz",
@@ -2914,11 +2480,6 @@
"bser": "2.1.1"
}
},
- "feature-policy": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz",
- "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ=="
- },
"file-entry-cache": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
@@ -2950,6 +2511,23 @@
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
}
},
"find-up": {
@@ -2992,9 +2570,9 @@
"dev": true
},
"form-data": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
@@ -3079,9 +2657,9 @@
}
},
"glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -3130,19 +2708,19 @@
"dev": true
},
"har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"dev": true,
"requires": {
- "ajv": "^6.5.5",
+ "ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
"has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"has-value": {
@@ -3197,36 +2775,12 @@
}
}
},
- "helmet-csp": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.10.0.tgz",
- "integrity": "sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w==",
- "requires": {
- "bowser": "2.9.0",
- "camelize": "1.0.0",
- "content-security-policy-builder": "2.1.0",
- "dasherize": "2.0.0"
- }
- },
"hosted-git-info": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
"dev": true
},
- "hpkp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz",
- "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI="
- },
- "hsts": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz",
- "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==",
- "requires": {
- "depd": "2.0.0"
- }
- },
"html-encoding-sniffer": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
@@ -3561,23 +3115,6 @@
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
}
},
"istanbul-reports": {
@@ -3591,38 +3128,29 @@
}
},
"jest": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-26.1.0.tgz",
- "integrity": "sha512-LIti8jppw5BcQvmNJe4w2g1N/3V68HUfAv9zDVm7v+VAtQulGhH0LnmmiVkbNE4M4I43Bj2fXPiBGKt26k9tHw==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-26.2.2.tgz",
+ "integrity": "sha512-EkJNyHiAG1+A8pqSz7cXttoVa34hOEzN/MrnJhYnfp5VHxflVcf2pu3oJSrhiy6LfIutLdWo+n6q63tjcoIeig==",
"dev": true,
"requires": {
- "@jest/core": "^26.1.0",
+ "@jest/core": "^26.2.2",
"import-local": "^3.0.2",
- "jest-cli": "^26.1.0"
+ "jest-cli": "^26.2.2"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -3633,38 +3161,23 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"jest-cli": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.1.0.tgz",
- "integrity": "sha512-Imumvjgi3rU7stq6SJ1JUEMaV5aAgJYXIs0jPqdUnF47N/Tk83EXfmtvNKQ+SnFVI6t6mDOvfM3aA9Sg6kQPSw==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.2.2.tgz",
+ "integrity": "sha512-vVcly0n/ijZvdy6gPQiQt0YANwX2hLTPQZHtW7Vi3gcFdKTtif7YpI85F8R8JYy5DFSWz4x1OW0arnxlziu5Lw==",
"dev": true,
"requires": {
- "@jest/core": "^26.1.0",
- "@jest/test-result": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/core": "^26.2.2",
+ "@jest/test-result": "^26.2.0",
+ "@jest/types": "^26.2.0",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
"is-ci": "^2.0.0",
- "jest-config": "^26.1.0",
- "jest-util": "^26.1.0",
- "jest-validate": "^26.1.0",
+ "jest-config": "^26.2.2",
+ "jest-util": "^26.2.0",
+ "jest-validate": "^26.2.0",
"prompts": "^2.0.1",
"yargs": "^15.3.1"
}
@@ -3672,38 +3185,29 @@
}
},
"jest-changed-files": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.1.0.tgz",
- "integrity": "sha512-HS5MIJp3B8t0NRKGMCZkcDUZo36mVRvrDETl81aqljT1S9tqiHRSpyoOvWg9ZilzZG9TDisDNaN1IXm54fLRZw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.2.0.tgz",
+ "integrity": "sha512-+RyJb+F1K/XBLIYiL449vo5D+CvlHv29QveJUWNPXuUicyZcq+tf1wNxmmFeRvAU1+TzhwqczSjxnCCFt7+8iA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"execa": "^4.0.0",
"throat": "^5.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -3714,25 +3218,10 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"execa": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz",
- "integrity": "sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz",
+ "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==",
"dev": true,
"requires": {
"cross-spawn": "^7.0.0",
@@ -3773,53 +3262,44 @@
}
},
"jest-config": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.1.0.tgz",
- "integrity": "sha512-ONTGeoMbAwGCdq4WuKkMcdMoyfs5CLzHEkzFOlVvcDXufZSaIWh/OXMLa2fwKXiOaFcqEw8qFr4VOKJQfn4CVw==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.2.2.tgz",
+ "integrity": "sha512-2lhxH0y4YFOijMJ65usuf78m7+9/8+hAb1PZQtdRdgnQpAb4zP6KcVDDktpHEkspBKnc2lmFu+RQdHukUUbiTg==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^26.1.0",
- "@jest/types": "^26.1.0",
- "babel-jest": "^26.1.0",
+ "@jest/test-sequencer": "^26.2.2",
+ "@jest/types": "^26.2.0",
+ "babel-jest": "^26.2.2",
"chalk": "^4.0.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
- "jest-environment-jsdom": "^26.1.0",
- "jest-environment-node": "^26.1.0",
+ "jest-environment-jsdom": "^26.2.0",
+ "jest-environment-node": "^26.2.0",
"jest-get-type": "^26.0.0",
- "jest-jasmine2": "^26.1.0",
+ "jest-jasmine2": "^26.2.2",
"jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.1.0",
- "jest-util": "^26.1.0",
- "jest-validate": "^26.1.0",
+ "jest-resolve": "^26.2.2",
+ "jest-util": "^26.2.0",
+ "jest-validate": "^26.2.0",
"micromatch": "^4.0.2",
- "pretty-format": "^26.1.0"
+ "pretty-format": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -3830,21 +3310,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"jest-get-type": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz",
@@ -3852,12 +3317,12 @@
"dev": true
},
"pretty-format": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz",
- "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.2.0.tgz",
+ "integrity": "sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
@@ -3875,43 +3340,6 @@
"diff-sequences": "^25.2.6",
"jest-get-type": "^25.2.6",
"pretty-format": "^25.5.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
}
},
"jest-docblock": {
@@ -3924,40 +3352,31 @@
}
},
"jest-each": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.1.0.tgz",
- "integrity": "sha512-lYiSo4Igr81q6QRsVQq9LIkJW0hZcKxkIkHzNeTMPENYYDw/W/Raq28iJ0sLlNFYz2qxxeLnc5K2gQoFYlu2bA==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.2.0.tgz",
+ "integrity": "sha512-gHPCaho1twWHB5bpcfnozlc6mrMi+VAewVPNgmwf81x2Gzr6XO4dl+eOrwPWxbkYlgjgrYjWK2xgKnixbzH3Ew==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"chalk": "^4.0.0",
"jest-get-type": "^26.0.0",
- "jest-util": "^26.1.0",
- "pretty-format": "^26.1.0"
+ "jest-util": "^26.2.0",
+ "pretty-format": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -3968,21 +3387,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"jest-get-type": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz",
@@ -3990,12 +3394,12 @@
"dev": true
},
"pretty-format": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz",
- "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.2.0.tgz",
+ "integrity": "sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
@@ -4004,41 +3408,33 @@
}
},
"jest-environment-jsdom": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.1.0.tgz",
- "integrity": "sha512-dWfiJ+spunVAwzXbdVqPH1LbuJW/kDL+FyqgA5YzquisHqTi0g9hquKif9xKm7c1bKBj6wbmJuDkeMCnxZEpUw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.2.0.tgz",
+ "integrity": "sha512-sDG24+5M4NuIGzkI3rJW8XUlrpkvIdE9Zz4jhD8OBnVxAw+Y1jUk9X+lAOD48nlfUTlnt3lbAI3k2Ox+WF3S0g==",
"dev": true,
"requires": {
- "@jest/environment": "^26.1.0",
- "@jest/fake-timers": "^26.1.0",
- "@jest/types": "^26.1.0",
- "jest-mock": "^26.1.0",
- "jest-util": "^26.1.0",
+ "@jest/environment": "^26.2.0",
+ "@jest/fake-timers": "^26.2.0",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
+ "jest-mock": "^26.2.0",
+ "jest-util": "^26.2.0",
"jsdom": "^16.2.2"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4048,59 +3444,36 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-environment-node": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.1.0.tgz",
- "integrity": "sha512-DNm5x1aQH0iRAe9UYAkZenuzuJ69VKzDCAYISFHQ5i9e+2Tbeu2ONGY7YStubCLH8a1wdKBgqScYw85+ySxqxg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.2.0.tgz",
+ "integrity": "sha512-4M5ExTYkJ19efBzkiXtBi74JqKLDciEk4CEsp5tTjWGYMrlKFQFtwIVG3tW1OGE0AlXhZjuHPwubuRYY4j4uOw==",
"dev": true,
"requires": {
- "@jest/environment": "^26.1.0",
- "@jest/fake-timers": "^26.1.0",
- "@jest/types": "^26.1.0",
- "jest-mock": "^26.1.0",
- "jest-util": "^26.1.0"
+ "@jest/environment": "^26.2.0",
+ "@jest/fake-timers": "^26.2.0",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
+ "jest-mock": "^26.2.0",
+ "jest-util": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4110,21 +3483,6 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
@@ -4135,48 +3493,40 @@
"dev": true
},
"jest-haste-map": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.1.0.tgz",
- "integrity": "sha512-WeBS54xCIz9twzkEdm6+vJBXgRBQfdbbXD0dk8lJh7gLihopABlJmIQFdWSDDtuDe4PRiObsjZSUjbJ1uhWEpA==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.2.2.tgz",
+ "integrity": "sha512-3sJlMSt+NHnzCB+0KhJ1Ut4zKJBiJOlbrqEYNdRQGlXTv8kqzZWjUKQRY3pkjmlf+7rYjAV++MQ4D6g4DhAyOg==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"@types/graceful-fs": "^4.1.2",
+ "@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"fsevents": "^2.1.2",
"graceful-fs": "^4.2.4",
- "jest-serializer": "^26.1.0",
- "jest-util": "^26.1.0",
- "jest-worker": "^26.1.0",
+ "jest-regex-util": "^26.0.0",
+ "jest-serializer": "^26.2.0",
+ "jest-util": "^26.2.0",
+ "jest-worker": "^26.2.1",
"micromatch": "^4.0.2",
"sane": "^4.0.3",
- "walker": "^1.0.7",
- "which": "^2.0.2"
+ "walker": "^1.0.7"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4186,71 +3536,48 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-jasmine2": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.1.0.tgz",
- "integrity": "sha512-1IPtoDKOAG+MeBrKvvuxxGPJb35MTTRSDglNdWWCndCB3TIVzbLThRBkwH9P081vXLgiJHZY8Bz3yzFS803xqQ==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.2.2.tgz",
+ "integrity": "sha512-Q8AAHpbiZMVMy4Hz9j1j1bg2yUmPa1W9StBvcHqRaKa9PHaDUMwds8LwaDyzP/2fkybcTQE4+pTMDOG9826tEw==",
"dev": true,
"requires": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^26.1.0",
+ "@jest/environment": "^26.2.0",
"@jest/source-map": "^26.1.0",
- "@jest/test-result": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/test-result": "^26.2.0",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "expect": "^26.1.0",
+ "expect": "^26.2.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^26.1.0",
- "jest-matcher-utils": "^26.1.0",
- "jest-message-util": "^26.1.0",
- "jest-runtime": "^26.1.0",
- "jest-snapshot": "^26.1.0",
- "jest-util": "^26.1.0",
- "pretty-format": "^26.1.0",
+ "jest-each": "^26.2.0",
+ "jest-matcher-utils": "^26.2.0",
+ "jest-message-util": "^26.2.0",
+ "jest-runtime": "^26.2.2",
+ "jest-snapshot": "^26.2.2",
+ "jest-util": "^26.2.0",
+ "pretty-format": "^26.2.0",
"throat": "^5.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4261,28 +3588,13 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"pretty-format": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz",
- "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.2.0.tgz",
+ "integrity": "sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
@@ -4291,37 +3603,28 @@
}
},
"jest-leak-detector": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.1.0.tgz",
- "integrity": "sha512-dsMnKF+4BVOZwvQDlgn3MG+Ns4JuLv8jNvXH56bgqrrboyCbI1rQg6EI5rs+8IYagVcfVP2yZFKfWNZy0rK0Hw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.2.0.tgz",
+ "integrity": "sha512-aQdzTX1YiufkXA1teXZu5xXOJgy7wZQw6OJ0iH5CtQlOETe6gTSocaYKUNui1SzQ91xmqEUZ/WRavg9FD82rtQ==",
"dev": true,
"requires": {
"jest-get-type": "^26.0.0",
- "pretty-format": "^26.1.0"
+ "pretty-format": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4332,21 +3635,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"jest-get-type": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz",
@@ -4354,12 +3642,12 @@
"dev": true
},
"pretty-format": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz",
- "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.2.0.tgz",
+ "integrity": "sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
@@ -4368,39 +3656,30 @@
}
},
"jest-matcher-utils": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.1.0.tgz",
- "integrity": "sha512-PW9JtItbYvES/xLn5mYxjMd+Rk+/kIt88EfH3N7w9KeOrHWaHrdYPnVHndGbsFGRJ2d5gKtwggCvkqbFDoouQA==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.2.0.tgz",
+ "integrity": "sha512-2cf/LW2VFb3ayPHrH36ZDjp9+CAeAe/pWBAwsV8t3dKcrINzXPVxq8qMWOxwt5BaeBCx4ZupVGH7VIgB8v66vQ==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^26.1.0",
+ "jest-diff": "^26.2.0",
"jest-get-type": "^26.0.0",
- "pretty-format": "^26.1.0"
+ "pretty-format": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4411,21 +3690,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"diff-sequences": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.0.0.tgz",
@@ -4433,15 +3697,15 @@
"dev": true
},
"jest-diff": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.1.0.tgz",
- "integrity": "sha512-GZpIcom339y0OXznsEKjtkfKxNdg7bVbEofK8Q6MnevTIiR1jNhDWKhRX6X0SDXJlwn3dy59nZ1z55fLkAqPWg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.2.0.tgz",
+ "integrity": "sha512-Wu4Aopi2nzCsHWLBlD48TgRy3Z7OsxlwvHNd1YSnHc7q1NJfrmyCPoUXrTIrydQOG5ApaYpsAsdfnMbJqV1/wQ==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"diff-sequences": "^26.0.0",
"jest-get-type": "^26.0.0",
- "pretty-format": "^26.1.0"
+ "pretty-format": "^26.2.0"
}
},
"jest-get-type": {
@@ -4451,12 +3715,12 @@
"dev": true
},
"pretty-format": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz",
- "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.2.0.tgz",
+ "integrity": "sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
@@ -4465,13 +3729,13 @@
}
},
"jest-message-util": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.1.0.tgz",
- "integrity": "sha512-dY0+UlldiAJwNDJ08SF0HdF32g9PkbF2NRK/+2iMPU40O6q+iSn1lgog/u0UH8ksWoPv0+gNq8cjhYO2MFtT0g==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.2.0.tgz",
+ "integrity": "sha512-g362RhZaJuqeqG108n1sthz5vNpzTNy926eNDszo4ncRbmmcMRIUAZibnd6s5v2XSBCChAxQtCoN25gnzp7JbQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"@types/stack-utils": "^1.0.1",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
@@ -4481,27 +3745,18 @@
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4511,53 +3766,30 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-mock": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.1.0.tgz",
- "integrity": "sha512-1Rm8EIJ3ZFA8yCIie92UbxZWj9SuVmUGcyhLHyAhY6WI3NIct38nVcfOPWhJteqSn8V8e3xOMha9Ojfazfpovw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.2.0.tgz",
+ "integrity": "sha512-XeC7yWtWmWByoyVOHSsE7NYsbXJLtJNgmhD7z4MKumKm6ET0si81bsSLbQ64L5saK3TgsHo2B/UqG5KNZ1Sp/Q==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0"
+ "@jest/types": "^26.2.0",
+ "@types/node": "*"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^1.1.1",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
- }
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^4.0.0"
}
},
"chalk": {
@@ -4569,21 +3801,6 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
@@ -4600,43 +3817,34 @@
"dev": true
},
"jest-resolve": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.1.0.tgz",
- "integrity": "sha512-KsY1JV9FeVgEmwIISbZZN83RNGJ1CC+XUCikf/ZWJBX/tO4a4NvA21YixokhdR9UnmPKKAC4LafVixJBrwlmfg==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.2.2.tgz",
+ "integrity": "sha512-ye9Tj/ILn/0OgFPE/3dGpQPUqt4dHwIocxt5qSBkyzxQD8PbL0bVxBogX2FHxsd3zJA7V2H/cHXnBnNyyT9YoQ==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
- "jest-pnp-resolver": "^1.2.1",
- "jest-util": "^26.1.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^26.2.0",
"read-pkg-up": "^7.0.1",
"resolve": "^1.17.0",
"slash": "^3.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4646,57 +3854,33 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-resolve-dependencies": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.1.0.tgz",
- "integrity": "sha512-fQVEPHHQ1JjHRDxzlLU/buuQ9om+hqW6Vo928aa4b4yvq4ZHBtRSDsLdKQLuCqn5CkTVpYZ7ARh2fbA8WkRE6g==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.2.2.tgz",
+ "integrity": "sha512-S5vufDmVbQXnpP7435gr710xeBGUFcKNpNswke7RmFvDQtmqPjPVU/rCeMlEU0p6vfpnjhwMYeaVjKZAy5QYJA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"jest-regex-util": "^26.0.0",
- "jest-snapshot": "^26.1.0"
+ "jest-snapshot": "^26.2.2"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4706,73 +3890,50 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-runner": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.1.0.tgz",
- "integrity": "sha512-elvP7y0fVDREnfqit0zAxiXkDRSw6dgCkzPCf1XvIMnSDZ8yogmSKJf192dpOgnUVykmQXwYYJnCx641uLTgcw==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.2.2.tgz",
+ "integrity": "sha512-/qb6ptgX+KQ+aNMohJf1We695kaAfuu3u3ouh66TWfhTpLd9WbqcF6163d/tMoEY8GqPztXPLuyG0rHRVDLxCA==",
"dev": true,
"requires": {
- "@jest/console": "^26.1.0",
- "@jest/environment": "^26.1.0",
- "@jest/test-result": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/console": "^26.2.0",
+ "@jest/environment": "^26.2.0",
+ "@jest/test-result": "^26.2.0",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
"chalk": "^4.0.0",
+ "emittery": "^0.7.1",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
- "jest-config": "^26.1.0",
+ "jest-config": "^26.2.2",
"jest-docblock": "^26.0.0",
- "jest-haste-map": "^26.1.0",
- "jest-jasmine2": "^26.1.0",
- "jest-leak-detector": "^26.1.0",
- "jest-message-util": "^26.1.0",
- "jest-resolve": "^26.1.0",
- "jest-runtime": "^26.1.0",
- "jest-util": "^26.1.0",
- "jest-worker": "^26.1.0",
+ "jest-haste-map": "^26.2.2",
+ "jest-leak-detector": "^26.2.0",
+ "jest-message-util": "^26.2.0",
+ "jest-resolve": "^26.2.2",
+ "jest-runtime": "^26.2.2",
+ "jest-util": "^26.2.0",
+ "jest-worker": "^26.2.1",
"source-map-support": "^0.5.6",
"throat": "^5.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4782,80 +3943,56 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-runtime": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.1.0.tgz",
- "integrity": "sha512-1qiYN+EZLmG1QV2wdEBRf+Ci8i3VSfIYLF02U18PiUDrMbhfpN/EAMMkJtT02jgJUoaEOpHAIXG6zS3QRMzRmA==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.2.2.tgz",
+ "integrity": "sha512-a8VXM3DxCDnCIdl9+QucWFfQ28KdqmyVFqeKLigHdErtsx56O2ZIdQkhFSuP1XtVrG9nTNHbKxjh5XL1UaFDVQ==",
"dev": true,
"requires": {
- "@jest/console": "^26.1.0",
- "@jest/environment": "^26.1.0",
- "@jest/fake-timers": "^26.1.0",
- "@jest/globals": "^26.1.0",
+ "@jest/console": "^26.2.0",
+ "@jest/environment": "^26.2.0",
+ "@jest/fake-timers": "^26.2.0",
+ "@jest/globals": "^26.2.0",
"@jest/source-map": "^26.1.0",
- "@jest/test-result": "^26.1.0",
- "@jest/transform": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/test-result": "^26.2.0",
+ "@jest/transform": "^26.2.2",
+ "@jest/types": "^26.2.0",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-config": "^26.1.0",
- "jest-haste-map": "^26.1.0",
- "jest-message-util": "^26.1.0",
- "jest-mock": "^26.1.0",
+ "jest-config": "^26.2.2",
+ "jest-haste-map": "^26.2.2",
+ "jest-message-util": "^26.2.0",
+ "jest-mock": "^26.2.0",
"jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.1.0",
- "jest-snapshot": "^26.1.0",
- "jest-util": "^26.1.0",
- "jest-validate": "^26.1.0",
+ "jest-resolve": "^26.2.2",
+ "jest-snapshot": "^26.2.2",
+ "jest-util": "^26.2.0",
+ "jest-validate": "^26.2.0",
"slash": "^3.0.0",
"strip-bom": "^4.0.0",
"yargs": "^15.3.1"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4865,78 +4002,55 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-serializer": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.1.0.tgz",
- "integrity": "sha512-eqZOQG/0+MHmr25b2Z86g7+Kzd5dG9dhCiUoyUNJPgiqi38DqbDEOlHcNijyfZoj74soGBohKBZuJFS18YTJ5w==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.2.0.tgz",
+ "integrity": "sha512-V7snZI9IVmyJEu0Qy0inmuXgnMWDtrsbV2p9CRAcmlmPVwpC2ZM8wXyYpiugDQnwLHx0V4+Pnog9Exb3UO8M6Q==",
"dev": true,
"requires": {
+ "@types/node": "*",
"graceful-fs": "^4.2.4"
}
},
"jest-snapshot": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.1.0.tgz",
- "integrity": "sha512-YhSbU7eMTVQO/iRbNs8j0mKRxGp4plo7sJ3GzOQ0IYjvsBiwg0T1o0zGQAYepza7lYHuPTrG5J2yDd0CE2YxSw==",
+ "version": "26.2.2",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.2.2.tgz",
+ "integrity": "sha512-NdjD8aJS7ePu268Wy/n/aR1TUisG0BOY+QOW4f6h46UHEKOgYmmkvJhh2BqdVZQ0BHSxTMt04WpCf9njzx8KtA==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0",
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"@types/prettier": "^2.0.0",
"chalk": "^4.0.0",
- "expect": "^26.1.0",
+ "expect": "^26.2.0",
"graceful-fs": "^4.2.4",
- "jest-diff": "^26.1.0",
+ "jest-diff": "^26.2.0",
"jest-get-type": "^26.0.0",
- "jest-haste-map": "^26.1.0",
- "jest-matcher-utils": "^26.1.0",
- "jest-message-util": "^26.1.0",
- "jest-resolve": "^26.1.0",
+ "jest-haste-map": "^26.2.2",
+ "jest-matcher-utils": "^26.2.0",
+ "jest-message-util": "^26.2.0",
+ "jest-resolve": "^26.2.2",
"natural-compare": "^1.4.0",
- "pretty-format": "^26.1.0",
+ "pretty-format": "^26.2.0",
"semver": "^7.3.2"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -4947,21 +4061,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"diff-sequences": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.0.0.tgz",
@@ -4969,15 +4068,15 @@
"dev": true
},
"jest-diff": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.1.0.tgz",
- "integrity": "sha512-GZpIcom339y0OXznsEKjtkfKxNdg7bVbEofK8Q6MnevTIiR1jNhDWKhRX6X0SDXJlwn3dy59nZ1z55fLkAqPWg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.2.0.tgz",
+ "integrity": "sha512-Wu4Aopi2nzCsHWLBlD48TgRy3Z7OsxlwvHNd1YSnHc7q1NJfrmyCPoUXrTIrydQOG5ApaYpsAsdfnMbJqV1/wQ==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"diff-sequences": "^26.0.0",
"jest-get-type": "^26.0.0",
- "pretty-format": "^26.1.0"
+ "pretty-format": "^26.2.0"
}
},
"jest-get-type": {
@@ -4987,32 +4086,27 @@
"dev": true
},
"pretty-format": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz",
- "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.2.0.tgz",
+ "integrity": "sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
}
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
}
}
},
"jest-util": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.1.0.tgz",
- "integrity": "sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.2.0.tgz",
+ "integrity": "sha512-YmDwJxLZ1kFxpxPfhSJ0rIkiZOM0PQbRcfH0TzJOhqCisCAsI1WcmoQqO83My9xeVA2k4n+rzg2UuexVKzPpig==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"is-ci": "^2.0.0",
@@ -5020,27 +4114,18 @@
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -5050,60 +4135,36 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-validate": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.1.0.tgz",
- "integrity": "sha512-WPApOOnXsiwhZtmkDsxnpye+XLb/tUISP+H6cHjfUIXvlG+eKwP+isnivsxlHCPaO9Q5wvbhloIBkdF3qUn+Nw==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.2.0.tgz",
+ "integrity": "sha512-8XKn3hM6VIVmLNuyzYLCPsRCT83o8jMZYhbieh4dAyKLc4Ypr36rVKC+c8WMpWkfHHpGnEkvWUjjIAyobEIY/Q==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"camelcase": "^6.0.0",
"chalk": "^4.0.0",
"jest-get-type": "^26.0.0",
"leven": "^3.1.0",
- "pretty-format": "^26.1.0"
+ "pretty-format": "^26.2.0"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"camelcase": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
@@ -5120,21 +4181,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"jest-get-type": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz",
@@ -5142,12 +4188,12 @@
"dev": true
},
"pretty-format": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz",
- "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.2.0.tgz",
+ "integrity": "sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==",
"dev": true,
"requires": {
- "@jest/types": "^26.1.0",
+ "@jest/types": "^26.2.0",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
@@ -5156,41 +4202,33 @@
}
},
"jest-watcher": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.1.0.tgz",
- "integrity": "sha512-ffEOhJl2EvAIki613oPsSG11usqnGUzIiK7MMX6hE4422aXOcVEG3ySCTDFLn1+LZNXGPE8tuJxhp8OBJ1pgzQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.2.0.tgz",
+ "integrity": "sha512-674Boco4Joe0CzgKPL6K4Z9LgyLx+ZvW2GilbpYb8rFEUkmDGgsZdv1Hv5rxsRpb1HLgKUOL/JfbttRCuFdZXQ==",
"dev": true,
"requires": {
- "@jest/test-result": "^26.1.0",
- "@jest/types": "^26.1.0",
+ "@jest/test-result": "^26.2.0",
+ "@jest/types": "^26.2.0",
+ "@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "jest-util": "^26.1.0",
+ "jest-util": "^26.2.0",
"string-length": "^4.0.1"
},
"dependencies": {
"@jest/types": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz",
- "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.2.0.tgz",
+ "integrity": "sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
+ "@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -5200,30 +4238,16 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
"jest-worker": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.1.0.tgz",
- "integrity": "sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==",
+ "version": "26.2.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.2.1.tgz",
+ "integrity": "sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A==",
"dev": true,
"requires": {
+ "@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^7.0.0"
}
@@ -5235,9 +4259,9 @@
"dev": true
},
"js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
+ "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
@@ -5251,9 +4275,9 @@
"dev": true
},
"jsdom": {
- "version": "16.2.2",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.2.2.tgz",
- "integrity": "sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg==",
+ "version": "16.3.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.3.0.tgz",
+ "integrity": "sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg==",
"dev": true,
"requires": {
"abab": "^2.0.3",
@@ -5276,7 +4300,7 @@
"tough-cookie": "^3.0.1",
"w3c-hr-time": "^1.0.2",
"w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.0.0",
+ "webidl-conversions": "^6.1.0",
"whatwg-encoding": "^1.0.5",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.0.0",
@@ -5385,9 +4409,9 @@
}
},
"lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
"dev": true
},
"lodash.memoize": {
@@ -5478,18 +4502,18 @@
"dev": true
},
"mime-db": {
- "version": "1.43.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
- "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
"dev": true
},
"mime-types": {
- "version": "2.1.26",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
- "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
"dev": true,
"requires": {
- "mime-db": "1.43.0"
+ "mime-db": "1.44.0"
}
},
"mimic-fn": {
@@ -5544,9 +4568,9 @@
}
},
"ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"nanomatch": {
@@ -5580,11 +4604,6 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
- "nocache": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
- "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
- },
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -5598,27 +4617,18 @@
"dev": true
},
"node-notifier": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-7.0.1.tgz",
- "integrity": "sha512-VkzhierE7DBmQEElhTGJIoiZa1oqRijOtgOlsXg32KrJRXsPy0NXFBqWGW/wTswnJlDCs5viRYaqWguqzsKcmg==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-7.0.2.tgz",
+ "integrity": "sha512-ux+n4hPVETuTL8+daJXTOC6uKLgMsl1RYfFv7DKRzyvzBapqco0rZZ9g72ZN8VS6V+gvNYHYa/ofcCY8fkJWsA==",
"dev": true,
"optional": true,
"requires": {
"growly": "^1.3.0",
- "is-wsl": "^2.1.1",
- "semver": "^7.2.1",
+ "is-wsl": "^2.2.0",
+ "semver": "^7.3.2",
"shellwords": "^0.1.1",
- "uuid": "^7.0.3",
+ "uuid": "^8.2.0",
"which": "^2.0.2"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true,
- "optional": true
- }
}
},
"normalize-package-data": {
@@ -5631,6 +4641,14 @@
"resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
}
},
"normalize-path": {
@@ -5736,9 +4754,9 @@
}
},
"onetime": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
- "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.1.tgz",
+ "integrity": "sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg==",
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
@@ -5804,9 +4822,9 @@
}
},
"parse-json": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
- "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz",
+ "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@@ -5915,33 +4933,6 @@
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
}
},
"process-nextick-args": {
@@ -5989,9 +4980,9 @@
"dev": true
},
"qs": {
- "version": "6.9.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
- "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
},
"react-is": {
@@ -6044,14 +5035,6 @@
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
}
},
"regex-not": {
@@ -6116,23 +5099,6 @@
"uuid": "^3.3.2"
},
"dependencies": {
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@@ -6152,21 +5118,21 @@
}
},
"request-promise-core": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
- "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
+ "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
"dev": true,
"requires": {
- "lodash": "^4.17.15"
+ "lodash": "^4.17.19"
}
},
"request-promise-native": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
- "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
+ "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
"dev": true,
"requires": {
- "request-promise-core": "1.1.3",
+ "request-promise-core": "1.1.4",
"stealthy-require": "^1.1.1",
"tough-cookie": "^2.3.3"
},
@@ -6426,9 +5392,9 @@
}
},
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
"dev": true
},
"set-blocking": {
@@ -6509,6 +5475,32 @@
"ansi-styles": "^3.2.0",
"astral-regex": "^1.0.0",
"is-fullwidth-code-point": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ }
}
},
"snapdragon": {
@@ -6527,6 +5519,15 @@
"use": "^3.1.0"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
@@ -6545,6 +5546,12 @@
"is-extendable": "^0.1.0"
}
},
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -6848,9 +5855,9 @@
"dev": true
},
"strip-json-comments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
- "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
"superagent": {
@@ -6879,12 +5886,6 @@
"requires": {
"ms": "^2.1.1"
}
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
}
}
},
@@ -6905,14 +5906,6 @@
"dev": true,
"requires": {
"has-flag": "^4.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- }
}
},
"supports-hyperlinks": {
@@ -6923,14 +5916,6 @@
"requires": {
"has-flag": "^4.0.0",
"supports-color": "^7.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- }
}
},
"symbol-tree": {
@@ -6970,22 +5955,6 @@
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
}
},
"text-table": {
@@ -7074,18 +6043,18 @@
}
},
"ts-jest": {
- "version": "26.1.1",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.1.1.tgz",
- "integrity": "sha512-Lk/357quLg5jJFyBQLnSbhycnB3FPe+e9i7ahxokyXxAYoB0q1pPmqxxRPYr4smJic1Rjcf7MXDBhZWgxlli0A==",
+ "version": "26.1.4",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.1.4.tgz",
+ "integrity": "sha512-Nd7diUX6NZWfWq6FYyvcIPR/c7GbEF75fH1R6coOp3fbNzbRJBZZAn0ueVS0r8r9ral1VcrpneAFAwB3TsVS1Q==",
"dev": true,
"requires": {
"bs-logger": "0.x",
"buffer-from": "1.x",
"fast-json-stable-stringify": "2.x",
+ "jest-util": "26.x",
"json5": "2.x",
"lodash.memoize": "4.x",
"make-error": "1.x",
- "micromatch": "4.x",
"mkdirp": "1.x",
"semver": "7.x",
"yargs-parser": "18.x"
@@ -7096,12 +6065,6 @@
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
}
}
},
@@ -7166,9 +6129,9 @@
}
},
"typescript": {
- "version": "3.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz",
- "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==",
+ "version": "3.9.7",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz",
+ "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==",
"dev": true
},
"union-value": {
@@ -7263,9 +6226,9 @@
"dev": true
},
"uuid": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz",
+ "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==",
"dev": true,
"optional": true
},
@@ -7414,31 +6377,6 @@
"strip-ansi": "^6.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -7492,16 +6430,11 @@
}
},
"ws": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz",
- "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
+ "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==",
"dev": true
},
- "x-xss-protection": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz",
- "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg=="
- },
"xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
@@ -7521,9 +6454,9 @@
"dev": true
},
"yargs": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
- "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dev": true,
"requires": {
"cliui": "^6.0.0",
@@ -7536,7 +6469,7 @@
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
- "yargs-parser": "^18.1.1"
+ "yargs-parser": "^18.1.2"
},
"dependencies": {
"emoji-regex": {
diff --git a/package.json b/package.json
index b9343a64..30deb281 100644
--- a/package.json
+++ b/package.json
@@ -2,20 +2,15 @@
"name": "helmet",
"author": "Adam Baldwin (https://evilpacket.net)",
"contributors": [
- "Evan Hahn (https://evanhahn.com)"
+ "Evan Hahn (https://evanhahn.com)",
+ "Ameen Abdeen "
],
"description": "help secure Express/Connect apps with various HTTP headers",
- "version": "3.23.3",
+ "version": "4.0.0-rc.2",
"keywords": [
- "security",
- "headers",
"express",
- "connect",
- "x-frame-options",
- "x-powered-by",
- "csp",
- "hsts",
- "clickjack"
+ "security",
+ "headers"
],
"homepage": "https://helmetjs.github.io/",
"bugs": {
@@ -27,7 +22,7 @@
"url": "git://github.com/helmetjs/helmet.git"
},
"engines": {
- "node": ">=4.0.0"
+ "node": ">=10.0.0"
},
"files": [
"CHANGELOG.md",
@@ -37,38 +32,44 @@
"README.md",
"SECURITY.md",
"dist/index.js",
+ "dist/index.d.ts",
+ "dist/middlewares/content-security-policy/index.js",
+ "dist/middlewares/content-security-policy/index.d.ts",
"dist/middlewares/expect-ct/index.js",
+ "dist/middlewares/expect-ct/index.d.ts",
"dist/middlewares/referrer-policy/index.js",
+ "dist/middlewares/referrer-policy/index.d.ts",
+ "dist/middlewares/strict-transport-security/index.js",
+ "dist/middlewares/strict-transport-security/index.d.ts",
"dist/middlewares/x-content-type-options/index.js",
+ "dist/middlewares/x-content-type-options/index.d.ts",
"dist/middlewares/x-dns-prefetch-control/index.js",
+ "dist/middlewares/x-dns-prefetch-control/index.d.ts",
"dist/middlewares/x-download-options/index.js",
+ "dist/middlewares/x-download-options/index.d.ts",
"dist/middlewares/x-frame-options/index.js",
+ "dist/middlewares/x-frame-options/index.d.ts",
"dist/middlewares/x-permitted-cross-domain-policies/index.js",
- "dist/middlewares/x-powered-by/index.js"
+ "dist/middlewares/x-permitted-cross-domain-policies/index.d.ts",
+ "dist/middlewares/x-powered-by/index.js",
+ "dist/middlewares/x-powered-by/index.d.ts",
+ "dist/middlewares/x-xss-protection/index.js",
+ "dist/middlewares/x-xss-protection/index.d.ts"
],
- "dependencies": {
- "depd": "2.0.0",
- "feature-policy": "0.3.0",
- "helmet-csp": "2.10.0",
- "hpkp": "2.0.0",
- "hsts": "2.2.0",
- "nocache": "2.1.0",
- "x-xss-protection": "1.3.0"
- },
+ "dependencies": {},
"devDependencies": {
"@types/connect": "^3.4.33",
- "@types/depd": "^1.1.32",
- "@types/jest": "^26.0.3",
+ "@types/jest": "^26.0.8",
"@types/supertest": "^2.0.10",
- "@typescript-eslint/eslint-plugin": "^3.4.0",
- "@typescript-eslint/parser": "^3.4.0",
+ "@typescript-eslint/eslint-plugin": "^3.7.1",
+ "@typescript-eslint/parser": "^3.7.1",
"connect": "^3.7.0",
- "eslint": "^7.3.1",
- "jest": "^26.1.0",
+ "eslint": "^7.6.0",
+ "jest": "^26.2.2",
"prettier": "^2.0.5",
"supertest": "^4.0.2",
- "ts-jest": "^26.1.1",
- "typescript": "^3.9.5"
+ "ts-jest": "^26.1.4",
+ "typescript": "^3.9.7"
},
"scripts": {
"pretest": "npm run lint",
diff --git a/test/content-security-policy.test.ts b/test/content-security-policy.test.ts
new file mode 100644
index 00000000..6fb546d1
--- /dev/null
+++ b/test/content-security-policy.test.ts
@@ -0,0 +1,358 @@
+import { check } from "./helpers";
+import contentSecurityPolicy from "../middlewares/content-security-policy";
+
+async function checkCsp({
+ middlewareArgs,
+ expectedHeader = "content-security-policy",
+ expectedDirectives,
+}: Readonly<{
+ middlewareArgs: Parameters;
+ expectedHeader?: string;
+ expectedDirectives: Set;
+}>): Promise {
+ const { header } = await check(contentSecurityPolicy(...middlewareArgs), {});
+ expect(header).toHaveProperty(expectedHeader);
+
+ const actualDirectives = header[expectedHeader].split(";");
+ const actualDirectivesSet = new Set(actualDirectives);
+ expect(actualDirectives).toHaveLength(actualDirectivesSet.size);
+
+ expect(actualDirectivesSet).toEqual(expectedDirectives);
+}
+
+describe("Content-Security-Policy middleware", () => {
+ it("sets a default policy when passed no directives", async () => {
+ const expectedDirectives = new Set([
+ "default-src 'self'",
+ "base-uri 'self'",
+ "block-all-mixed-content",
+ "font-src 'self' https: data:",
+ "frame-ancestors 'self'",
+ "img-src 'self' data:",
+ "object-src 'none'",
+ "script-src 'self'",
+ "script-src-attr 'none'",
+ "style-src 'self' https: 'unsafe-inline'",
+ "upgrade-insecure-requests",
+ ]);
+ await checkCsp({
+ middlewareArgs: [],
+ expectedDirectives,
+ });
+ await checkCsp({
+ middlewareArgs: [{}],
+ expectedDirectives,
+ });
+ await checkCsp({
+ middlewareArgs: [{ directives: undefined }],
+ expectedDirectives,
+ });
+ });
+
+ it("sets directives when named with snake-case", async () => {
+ await checkCsp({
+ middlewareArgs: [
+ {
+ directives: {
+ "default-src": ["'self'"],
+ "script-src": ["example.com"],
+ "style-src": ["'none'"],
+ },
+ },
+ ],
+ expectedDirectives: new Set([
+ "default-src 'self'",
+ "script-src example.com",
+ "style-src 'none'",
+ ]),
+ });
+ });
+
+ it("sets directives when named with camelCase", async () => {
+ await checkCsp({
+ middlewareArgs: [
+ {
+ directives: {
+ defaultSrc: ["'self'"],
+ scriptSrc: ["example.com"],
+ styleSrc: ["'none'"],
+ },
+ },
+ ],
+ expectedDirectives: new Set([
+ "default-src 'self'",
+ "script-src example.com",
+ "style-src 'none'",
+ ]),
+ });
+ });
+
+ it("accepts a mix of snake-case and camelCase directive names", async () => {
+ await checkCsp({
+ middlewareArgs: [
+ {
+ directives: {
+ "default-src": ["'self'"],
+ "script-src": ["example.com"],
+ styleSrc: ["'none'"],
+ objectSrc: ["'none'"],
+ },
+ },
+ ],
+ expectedDirectives: new Set([
+ "default-src 'self'",
+ "script-src example.com",
+ "style-src 'none'",
+ "object-src 'none'",
+ ]),
+ });
+ });
+
+ it("accepts an empty list of directive values", async () => {
+ await checkCsp({
+ middlewareArgs: [
+ {
+ directives: {
+ "default-src": ["'self'"],
+ sandbox: [],
+ },
+ },
+ ],
+ expectedDirectives: new Set(["default-src 'self'", "sandbox"]),
+ });
+ });
+
+ it("accepts non-array iterables for directive values", async () => {
+ await checkCsp({
+ middlewareArgs: [
+ {
+ directives: {
+ "default-src": new Set(["'self'"]),
+ sandbox: {
+ [Symbol.iterator]: () => ({
+ next: () => ({
+ done: true,
+ value: undefined,
+ }),
+ }),
+ },
+ },
+ },
+ ],
+ expectedDirectives: new Set(["default-src 'self'", "sandbox"]),
+ });
+ });
+
+ it("accepts strings as directive values", async () => {
+ await checkCsp({
+ middlewareArgs: [
+ {
+ directives: {
+ "default-src": "'self' example.com",
+ scriptSrc: "'none'",
+ sandbox: "",
+ },
+ },
+ ],
+ expectedDirectives: new Set([
+ "default-src 'self' example.com",
+ "script-src 'none'",
+ "sandbox",
+ ]),
+ });
+ });
+
+ it('can set the "report only" version of the header instead', async () => {
+ await checkCsp({
+ middlewareArgs: [
+ {
+ directives: {
+ "default-src": "'self'",
+ },
+ reportOnly: true,
+ },
+ ],
+ expectedHeader: "content-security-policy-report-only",
+ expectedDirectives: new Set(["default-src 'self'"]),
+ });
+ });
+
+ it("throws if any directive names are invalid", () => {
+ const invalidNames = [
+ "",
+ ";",
+ "á",
+ "default src",
+ "default;src",
+ "default,src",
+ "default!src",
+ "defáult-src",
+ ];
+ for (const name of invalidNames) {
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ "default-src": "'self'",
+ [name]: ["value"],
+ },
+ });
+ }).toThrow(
+ /^Content-Security-Policy received an invalid directive name "/
+ );
+ }
+ });
+
+ it("throws if duplicate directive names are found", () => {
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ defaultSrc: ["foo"],
+ "default-src": ["foo"],
+ },
+ });
+ }).toThrow(
+ /^Content-Security-Policy received a duplicate directive "default-src"$/
+ );
+
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ defaultSrc: ["'self'"],
+ scriptSrc: ["foo"],
+ "script-src": ["foo"],
+ },
+ });
+ }).toThrow(
+ /^Content-Security-Policy received a duplicate directive "script-src"$/
+ );
+ });
+
+ it("throws if any directive values are invalid", () => {
+ const invalidValues = [";", ",", "hello;world", "hello,world"];
+ for (const invalidValue of invalidValues) {
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ "default-src": "'self'",
+ "something-else": [invalidValue],
+ },
+ });
+ }).toThrow(
+ /^Content-Security-Policy received an invalid directive value for "something-else"$/
+ );
+ }
+ });
+
+ it("throws if default-src is missing", () => {
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {},
+ });
+ }).toThrow(
+ /^Content-Security-Policy needs a default-src but none was provided$/
+ );
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ scriptSrc: ["example.com"],
+ },
+ });
+ }).toThrow(
+ /^Content-Security-Policy needs a default-src but none was provided$/
+ );
+
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ defaultSrc: ["foo"],
+ },
+ });
+ }).not.toThrow();
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ "default-src": ["foo"],
+ },
+ });
+ }).not.toThrow();
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ defaultSrc: [],
+ },
+ });
+ }).not.toThrow();
+ expect(() => {
+ contentSecurityPolicy({
+ directives: {
+ defaultSrc: "",
+ },
+ });
+ }).not.toThrow();
+ });
+
+ // This functionality only exists to ease the transition to this major version.
+ // It's safe to remove these warnings (and therefore these tests) without a
+ // breaking change.
+ describe("warnings for legacy usage", () => {
+ beforeEach(() => {
+ jest.spyOn(console, "warn").mockImplementation(() => {});
+ });
+
+ it("logs a warning when using the `loose` parameter", () => {
+ contentSecurityPolicy({
+ directives: {
+ "default-src": ["foo"],
+ },
+ loose: true,
+ } as any);
+
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "Content-Security-Policy middleware no longer needs the `loose` parameter. You should remove it."
+ );
+ });
+
+ it("logs a warning when using the `setAllHeaders` parameter", () => {
+ contentSecurityPolicy({
+ directives: {
+ "default-src": ["foo"],
+ },
+ setAllHeaders: false,
+ } as any);
+
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "Content-Security-Policy middleware no longer supports the `setAllHeaders` parameter. See ."
+ );
+ });
+
+ it("logs a warning when using the `disableAndroid` parameter", () => {
+ contentSecurityPolicy({
+ directives: {
+ "default-src": ["foo"],
+ },
+ disableAndroid: false,
+ } as any);
+
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "Content-Security-Policy middleware no longer does browser sniffing, so you can remove the `disableAndroid` option. See for discussion."
+ );
+ });
+
+ it("logs a warning when using the `browserSniff` parameter", () => {
+ contentSecurityPolicy({
+ directives: {
+ "default-src": ["foo"],
+ },
+ browserSniff: false,
+ } as any);
+
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "Content-Security-Policy middleware no longer does browser sniffing, so you can remove the `browserSniff` option. See for discussion."
+ );
+ });
+ });
+});
diff --git a/test/expect-ct.test.ts b/test/expect-ct.test.ts
index 324b3643..c033c11f 100644
--- a/test/expect-ct.test.ts
+++ b/test/expect-ct.test.ts
@@ -32,9 +32,13 @@ describe("Expect-CT middleware", () => {
});
});
- it("rejects negative max-ages", async () => {
+ it("rejects invalid max-ages", async () => {
expect(() => expectCt({ maxAge: -123 })).toThrow();
expect(() => expectCt({ maxAge: -0.1 })).toThrow();
+ expect(() => expectCt({ maxAge: Infinity })).toThrow();
+ expect(() => expectCt({ maxAge: NaN })).toThrow();
+ expect(() => expectCt({ maxAge: "123" as any })).toThrow();
+ expect(() => expectCt({ maxAge: BigInt(12) as any })).toThrow();
});
it("can enable enforcement", async () => {
diff --git a/test/helpers.ts b/test/helpers.ts
index 6959d13a..c370ea03 100644
--- a/test/helpers.ts
+++ b/test/helpers.ts
@@ -9,20 +9,22 @@ interface MiddlewareFunction {
export async function check(
middleware: MiddlewareFunction,
expectedHeaders: Readonly<{ [headerName: string]: string | null }>
-): Promise {
+) {
const app = connect()
.use(middleware)
.use((_req: IncomingMessage, res: ServerResponse) => {
res.end("Hello world!");
});
- const { header } = await supertest(app).get("/").expect(200, "Hello world!");
+ const response = await supertest(app).get("/").expect(200, "Hello world!");
for (const [headerName, headerValue] of Object.entries(expectedHeaders)) {
if (headerValue === null) {
- expect(header).not.toHaveProperty(headerName);
+ expect(response.header).not.toHaveProperty(headerName);
} else {
- expect(header).toHaveProperty(headerName, headerValue);
+ expect(response.header).toHaveProperty(headerName, headerValue);
}
}
+
+ return response;
}
diff --git a/test/index.test.ts b/test/index.test.ts
index 1694adda..e4ecb1ac 100644
--- a/test/index.test.ts
+++ b/test/index.test.ts
@@ -1,330 +1,194 @@
-import helmet = require("..");
+import { check } from "./helpers";
-import { IncomingMessage, ServerResponse } from "http";
-import connect = require("connect");
-import request = require("supertest");
+import helmet from "..";
+
+import contentSecurityPolicy from "../middlewares/content-security-policy";
import expectCt from "../middlewares/expect-ct";
import referrerPolicy from "../middlewares/referrer-policy";
+import strictTransportSecurity from "../middlewares/strict-transport-security";
import xContentTypeOptions from "../middlewares/x-content-type-options";
import xDnsPrefetchControl from "../middlewares/x-dns-prefetch-control";
import xDowloadOptions from "../middlewares/x-download-options";
import xFrameOptions from "../middlewares/x-frame-options";
import xPermittedCrossDomainPolicies from "../middlewares/x-permitted-cross-domain-policies";
import xPoweredBy from "../middlewares/x-powered-by";
-
-describe("helmet", function () {
- describe("module aliases", function () {
- it("aliases the X-DNS-Prefetch-Control middleware to helmet.dnsPrefetchControl", function () {
- expect(helmet.dnsPrefetchControl.name).toBe(xDnsPrefetchControl.name);
+import xXssProtection from "../middlewares/x-xss-protection";
+
+describe("helmet", () => {
+ it("includes all middleware with their default options", async () => {
+ await check(helmet(), {
+ // NOTE: This test relies on the object being ordered a certain way,
+ // which could change (and be non-breaking). If that becomes a problem,
+ // we should update this test to be more robust.
+ "content-security-policy":
+ "default-src 'self';base-uri 'self';block-all-mixed-content;font-src 'self' https: data:;frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests",
+ "expect-ct": "max-age=0",
+ "referrer-policy": "no-referrer",
+ "strict-transport-security": "max-age=15552000; includeSubDomains",
+ "x-content-type-options": "nosniff",
+ "x-dns-prefetch-control": "off",
+ "x-download-options": "noopen",
+ "x-frame-options": "SAMEORIGIN",
+ "x-permitted-cross-domain-policies": "none",
+ "x-powered-by": null,
+ "x-xss-protection": "0",
});
+ });
- it("aliases the X-Content-Type-Options middleware to helmet.noSniff", () => {
- expect(helmet.noSniff.name).toBe(xContentTypeOptions.name);
+ it("allows individual middlewares to be disabled", async () => {
+ await check(helmet({ contentSecurityPolicy: false }), {
+ "content-security-policy": null,
});
-
- it("aliases the Expect-CT middleware to helmet.expectCt", function () {
- expect(helmet.expectCt.name).toBe(expectCt.name);
+ await check(helmet({ dnsPrefetchControl: false }), {
+ "x-dns-prefetch-control": null,
});
+ });
- // This test will be removed in helmet@4.
- it("calls through to feature-policy but emits a deprecation warning", function () {
- const deprecationPromise = new Promise((resolve) => {
- process.once("deprecation", (deprecationError) => {
- expect(
- deprecationError.message.indexOf(
- "You can use the `feature-policy` module instead."
- ) !== -1
- ).toBeTruthy();
- resolve();
- });
- });
-
- const app = connect();
- app.use(
- helmet.featurePolicy({
- features: { vibrate: ["'none'"] },
- })
- );
- app.use((_req: IncomingMessage, res: ServerResponse) => {
- res.end("Hello world!");
- });
- const supertestPromise = request(app)
- .get("/")
- .expect(200)
- .expect("Feature-Policy", "vibrate 'none'")
- .expect("Hello world!");
+ it("errors when `use`d directly", () => {
+ const fakeRequest = {
+ constructor: {
+ name: "IncomingMessage",
+ },
+ };
- return Promise.all([deprecationPromise, supertestPromise]);
- });
+ expect(() => {
+ helmet(fakeRequest as any);
+ }).toThrow();
+ });
- it("aliases the X-Permitted-Cross-Domain-Policies middleware to helmet.crossdomain", () => {
- expect(helmet.permittedCrossDomainPolicies.name).toBe(
- xPermittedCrossDomainPolicies.name
- );
- });
+ it("errors when passing `true` as a middleware option", () => {
+ expect(() => {
+ helmet({ contentSecurityPolicy: true as any });
+ }).toThrow(
+ "Helmet no longer supports `true` as a middleware option. Remove the property from your options to fix this error."
+ );
+ });
- it("aliases the X-Frame-Options middleware to helmet.frameguard", function () {
- expect(helmet.frameguard.name).toBe(xFrameOptions.name);
+ describe("warnings", () => {
+ beforeEach(() => {
+ jest.spyOn(console, "warn").mockImplementation(() => {});
});
- it('aliases "helmet-csp"', function () {
- const pkg = require("helmet-csp");
- expect(helmet.contentSecurityPolicy).toBe(pkg);
- });
+ it("logs a warning when passing options to hidePoweredBy", () => {
+ helmet({ hidePoweredBy: { setTo: "deprecated option" } as any });
- it("aliases the X-Powered-By middleware to helmet.hidePoweredBy", () => {
- expect(helmet.hidePoweredBy.name).toBe(xPoweredBy.name);
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "hidePoweredBy does not take options. Remove the property to silence this warning."
+ );
});
- // This test will be removed in helmet@4.
- it("calls through to hpkp but emits a deprecation warning", function () {
- const deprecationPromise = new Promise((resolve) => {
- process.once("deprecation", (deprecationError) => {
- expect(
- deprecationError.message.indexOf(
- "You can use the `hpkp` module instead."
- ) !== -1
- ).toBeTruthy();
- resolve();
- });
- });
-
- const app = connect();
- app.use(helmet.hpkp({ maxAge: 10, sha256s: ["abc123", "xyz456"] }));
- app.use((_req: IncomingMessage, res: ServerResponse) => {
- res.end("Hello world!");
- });
- const supertestPromise = request(app)
- .get("/")
- .expect(200)
- .expect(
- "Public-Key-Pins",
- 'pin-sha256="abc123"; pin-sha256="xyz456"; max-age=10'
- )
- .expect("Hello world!");
+ it("logs a warning when passing options to ieNoOpen", () => {
+ helmet({ ieNoOpen: { option: "foo" } as any });
- return Promise.all([deprecationPromise, supertestPromise]);
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "ieNoOpen does not take options. Remove the property to silence this warning."
+ );
});
- it('aliases "hsts"', function () {
- const pkg = require("hsts");
- expect(helmet.hsts).toBe(pkg);
- });
+ it("logs a warning when passing options to noSniff", () => {
+ helmet({ noSniff: { option: "foo" } as any });
- it("aliases the X-Download-Options middleware to helmet.ieNoOpen", () => {
- expect(helmet.ieNoOpen.name).toBe(xDowloadOptions.name);
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "noSniff does not take options. Remove the property to silence this warning."
+ );
});
- // This test will be removed in helmet@4.
- it("calls through to nocache but emits a deprecation warning", function () {
- const deprecationPromise = new Promise((resolve) => {
- process.once("deprecation", (deprecationError) => {
- expect(
- deprecationError.message.indexOf(
- "You can use the `nocache` module instead."
- ) !== -1
- ).toBeTruthy();
- resolve();
- });
- });
+ it("logs a warning when passing options to xssFilter", () => {
+ helmet({ xssFilter: { setOnOldIe: true } as any });
- const app = connect();
- app.use(helmet.noCache());
- app.use((_req: IncomingMessage, res: ServerResponse) => {
- res.end("Hello world!");
- });
- const supertestPromise = request(app)
- .get("/")
- .expect(200)
- .expect("Surrogate-Control", "no-store")
- .expect(
- "Cache-Control",
- "no-store, no-cache, must-revalidate, proxy-revalidate"
- )
- .expect("Pragma", "no-cache")
- .expect("Expires", "0")
- .expect("Hello world!");
-
- return Promise.all([deprecationPromise, supertestPromise]);
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "xssFilter does not take options. Remove the property to silence this warning."
+ );
});
- it("aliases the Referrer-Policy middleware to helmet.referrerPolicy", () => {
- expect(helmet.referrerPolicy.name).toBe(referrerPolicy.name);
- });
+ it("logs a warning when passing options to hidePoweredBy", () => {
+ helmet({ hidePoweredBy: { setTo: "deprecated option" } as any });
- it('aliases "x-xss-protection"', function () {
- const pkg = require("x-xss-protection");
- expect(helmet.xssFilter).toBe(pkg);
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "hidePoweredBy does not take options. Remove the property to silence this warning."
+ );
});
});
- describe("helmet()", function () {
- beforeEach(function () {
- jest.spyOn(helmet, "contentSecurityPolicy");
- jest.spyOn(helmet, "dnsPrefetchControl");
- jest.spyOn(helmet, "expectCt");
- jest.spyOn(helmet, "frameguard");
- jest.spyOn(helmet, "hidePoweredBy");
- jest.spyOn(helmet, "hpkp");
- jest.spyOn(helmet, "hsts");
- jest.spyOn(helmet, "hsts");
- jest.spyOn(helmet, "ieNoOpen");
- jest.spyOn(helmet, "noCache");
- jest.spyOn(helmet, "noSniff");
- jest.spyOn(helmet, "permittedCrossDomainPolicies");
- jest.spyOn(helmet, "referrerPolicy");
- jest.spyOn(helmet, "xssFilter");
+ describe("module aliases", () => {
+ it("aliases the X-DNS-Prefetch-Control middleware to helmet.dnsPrefetchControl", () => {
+ expect(helmet.dnsPrefetchControl.name).toBe(xDnsPrefetchControl.name);
+ expect(helmet.dnsPrefetchControl.name).toBe("xDnsPrefetchControl");
});
- it("chains all default middleware", function () {
- helmet();
-
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledTimes(1);
- expect(helmet.frameguard).toHaveBeenCalledTimes(1);
- expect(helmet.hidePoweredBy).toHaveBeenCalledTimes(1);
- expect(helmet.hsts).toHaveBeenCalledTimes(1);
- expect(helmet.ieNoOpen).toHaveBeenCalledTimes(1);
- expect(helmet.noSniff).toHaveBeenCalledTimes(1);
- expect(helmet.xssFilter).toHaveBeenCalledTimes(1);
-
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledWith({});
- expect(helmet.frameguard).toHaveBeenCalledWith({});
- expect(helmet.hidePoweredBy).toHaveBeenCalledWith({});
- expect(helmet.hsts).toHaveBeenCalledWith({});
- expect(helmet.ieNoOpen).toHaveBeenCalledWith({});
- expect(helmet.noSniff).toHaveBeenCalledWith({});
- expect(helmet.xssFilter).toHaveBeenCalledWith({});
-
- expect(helmet.contentSecurityPolicy).not.toHaveBeenCalled();
- expect(helmet.expectCt).not.toHaveBeenCalled();
- expect(helmet.hpkp).not.toHaveBeenCalled();
- expect(helmet.noCache).not.toHaveBeenCalled();
- expect(helmet.permittedCrossDomainPolicies).not.toHaveBeenCalled();
+ it("aliases the X-Content-Type-Options middleware to helmet.noSniff", () => {
+ expect(helmet.noSniff.name).toBe(xContentTypeOptions.name);
+ expect(helmet.noSniff.name).toBe("xContentTypeOptions");
});
- it("lets you disable a default middleware", function () {
- helmet({ frameguard: false });
-
- expect(helmet.frameguard).not.toHaveBeenCalled();
-
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledTimes(1);
- expect(helmet.hidePoweredBy).toHaveBeenCalledTimes(1);
- expect(helmet.hsts).toHaveBeenCalledTimes(1);
- expect(helmet.ieNoOpen).toHaveBeenCalledTimes(1);
- expect(helmet.noSniff).toHaveBeenCalledTimes(1);
- expect(helmet.xssFilter).toHaveBeenCalledTimes(1);
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledWith({});
- expect(helmet.hidePoweredBy).toHaveBeenCalledWith({});
- expect(helmet.hsts).toHaveBeenCalledWith({});
- expect(helmet.ieNoOpen).toHaveBeenCalledWith({});
- expect(helmet.noSniff).toHaveBeenCalledWith({});
- expect(helmet.xssFilter).toHaveBeenCalledWith({});
- expect(helmet.contentSecurityPolicy).not.toHaveBeenCalled();
- expect(helmet.expectCt).not.toHaveBeenCalled();
- expect(helmet.hpkp).not.toHaveBeenCalled();
- expect(helmet.noCache).not.toHaveBeenCalled();
+ it("aliases the Expect-CT middleware to helmet.expectCt", () => {
+ expect(helmet.expectCt.name).toBe(expectCt.name);
+ expect(helmet.expectCt.name).toBe("expectCt");
});
- it("lets you enable a normally-disabled middleware", function () {
- helmet({ referrerPolicy: true });
-
- expect(helmet.referrerPolicy).toHaveBeenCalledTimes(1);
- expect(helmet.referrerPolicy).toHaveBeenCalledWith({});
-
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledTimes(1);
- expect(helmet.frameguard).toHaveBeenCalledTimes(1);
- expect(helmet.hidePoweredBy).toHaveBeenCalledTimes(1);
- expect(helmet.hsts).toHaveBeenCalledTimes(1);
- expect(helmet.ieNoOpen).toHaveBeenCalledTimes(1);
- expect(helmet.noSniff).toHaveBeenCalledTimes(1);
- expect(helmet.xssFilter).toHaveBeenCalledTimes(1);
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledWith({});
- expect(helmet.frameguard).toHaveBeenCalledWith({});
- expect(helmet.hidePoweredBy).toHaveBeenCalledWith({});
- expect(helmet.hsts).toHaveBeenCalledWith({});
- expect(helmet.ieNoOpen).toHaveBeenCalledWith({});
- expect(helmet.noSniff).toHaveBeenCalledWith({});
- expect(helmet.xssFilter).toHaveBeenCalledWith({});
- expect(helmet.contentSecurityPolicy).not.toHaveBeenCalled();
- expect(helmet.expectCt).not.toHaveBeenCalled();
- expect(helmet.hpkp).not.toHaveBeenCalled();
- expect(helmet.noCache).not.toHaveBeenCalled();
+ it("aliases the X-Permitted-Cross-Domain-Policies middleware to helmet.crossdomain", () => {
+ expect(helmet.permittedCrossDomainPolicies.name).toBe(
+ xPermittedCrossDomainPolicies.name
+ );
+ expect(helmet.permittedCrossDomainPolicies.name).toBe(
+ "xPermittedCrossDomainPolicies"
+ );
});
- it("lets you set options for a default middleware", function () {
- const options = { action: "deny" };
-
- helmet({ frameguard: options });
-
- expect(helmet.frameguard).toHaveBeenCalledTimes(1);
- expect(helmet.frameguard).toHaveBeenCalledWith(options);
-
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledTimes(1);
- expect(helmet.hidePoweredBy).toHaveBeenCalledTimes(1);
- expect(helmet.hsts).toHaveBeenCalledTimes(1);
- expect(helmet.ieNoOpen).toHaveBeenCalledTimes(1);
- expect(helmet.noSniff).toHaveBeenCalledTimes(1);
- expect(helmet.xssFilter).toHaveBeenCalledTimes(1);
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledWith({});
- expect(helmet.hidePoweredBy).toHaveBeenCalledWith({});
- expect(helmet.hsts).toHaveBeenCalledWith({});
- expect(helmet.ieNoOpen).toHaveBeenCalledWith({});
- expect(helmet.noSniff).toHaveBeenCalledWith({});
- expect(helmet.xssFilter).toHaveBeenCalledWith({});
- expect(helmet.contentSecurityPolicy).not.toHaveBeenCalled();
- expect(helmet.expectCt).not.toHaveBeenCalled();
- expect(helmet.hpkp).not.toHaveBeenCalled();
- expect(helmet.noCache).not.toHaveBeenCalled();
- expect(helmet.permittedCrossDomainPolicies).not.toHaveBeenCalled();
+ it("aliases the X-Frame-Options middleware to helmet.frameguard", () => {
+ expect(helmet.frameguard.name).toBe(xFrameOptions.name);
+ expect(helmet.frameguard.name).toBe("xFrameOptions");
});
- it("lets you set options for a non-default middleware", function () {
- const options = {
- directives: {
- defaultSrc: ["*"],
- },
- };
+ it("aliases the Content-Security-Policy middleware to helmet.contentSecurityPolicy", () => {
+ expect(helmet.contentSecurityPolicy.name).toBe(
+ contentSecurityPolicy.name
+ );
+ expect(helmet.contentSecurityPolicy.name).toBe("contentSecurityPolicy");
+ });
- helmet({ contentSecurityPolicy: options });
+ it("aliases the X-Powered-By middleware to helmet.hidePoweredBy", () => {
+ expect(helmet.hidePoweredBy.name).toBe(xPoweredBy.name);
+ expect(helmet.hidePoweredBy.name).toBe("xPoweredBy");
+ });
- expect(helmet.contentSecurityPolicy).toHaveBeenCalledTimes(1);
- expect(helmet.contentSecurityPolicy).toHaveBeenCalledWith(options);
+ it("aliases the Strict-Transport-Security middleware to helmet.hsts", () => {
+ expect(helmet.hsts.name).toBe(strictTransportSecurity.name);
+ expect(helmet.hsts.name).toBe("strictTransportSecurity");
+ });
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledTimes(1);
- expect(helmet.frameguard).toHaveBeenCalledTimes(1);
- expect(helmet.hidePoweredBy).toHaveBeenCalledTimes(1);
- expect(helmet.hsts).toHaveBeenCalledTimes(1);
- expect(helmet.ieNoOpen).toHaveBeenCalledTimes(1);
- expect(helmet.noSniff).toHaveBeenCalledTimes(1);
- expect(helmet.xssFilter).toHaveBeenCalledTimes(1);
- expect(helmet.dnsPrefetchControl).toHaveBeenCalledWith({});
- expect(helmet.frameguard).toHaveBeenCalledWith({});
- expect(helmet.hidePoweredBy).toHaveBeenCalledWith({});
- expect(helmet.hsts).toHaveBeenCalledWith({});
- expect(helmet.ieNoOpen).toHaveBeenCalledWith({});
- expect(helmet.noSniff).toHaveBeenCalledWith({});
- expect(helmet.xssFilter).toHaveBeenCalledWith({});
- expect(helmet.expectCt).not.toHaveBeenCalled();
- expect(helmet.hpkp).not.toHaveBeenCalled();
- expect(helmet.noCache).not.toHaveBeenCalled();
- expect(helmet.permittedCrossDomainPolicies).not.toHaveBeenCalled();
+ it("aliases the X-Download-Options middleware to helmet.ieNoOpen", () => {
+ expect(helmet.ieNoOpen.name).toBe(xDowloadOptions.name);
+ expect(helmet.ieNoOpen.name).toBe("xDownloadOptions");
});
- it("errors when `use`d directly", function () {
- const fakeRequest = {
- constructor: {
- name: "IncomingMessage",
- },
- };
+ it("aliases the Referrer-Policy middleware to helmet.referrerPolicy", () => {
+ expect(helmet.referrerPolicy.name).toBe(referrerPolicy.name);
+ expect(helmet.referrerPolicy.name).toBe("referrerPolicy");
+ });
- expect(() => {
- helmet(fakeRequest as any);
- }).toThrow();
+ it("aliases the X-XSS-Protection middleware to helmet.xssFilter", () => {
+ expect(helmet.xssFilter.name).toBe(xXssProtection.name);
+ expect(helmet.xssFilter.name).toBe("xXssProtection");
});
- it("names its function and middleware", function () {
- expect(helmet.name).toBe("helmet");
- expect(helmet.name).toBe(helmet().name);
+ // These errors exist to ease the major version transition. The code (and these tests)
+ // can safely be removed without a breaking change.
+ it("aliases deprecated middlewares", () => {
+ expect(helmet.featurePolicy).toThrow(
+ /^helmet.featurePolicy was removed because the Feature-Policy header is deprecated. If you still need this header, you can use the `feature-policy` module.$/
+ );
+ expect(helmet.hpkp).toThrow(
+ /^helmet.hpkp was removed because the header has been deprecated. If you still need this header, you can use the `hpkp` module. For more, see .$/
+ );
+ expect(helmet.noCache).toThrow(
+ /^helmet.noCache was removed. You can use the `nocache` module instead. For more, see .$/
+ );
});
});
});
diff --git a/test/integration.test.ts b/test/integration.test.ts
deleted file mode 100644
index a7c0deff..00000000
--- a/test/integration.test.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import helmet = require("..");
-
-import { IncomingMessage, ServerResponse } from "http";
-import connect = require("connect");
-import request = require("supertest");
-
-describe("helmet() integration test", function () {
- it("sets all default headers", function () {
- const app = connect();
- app.use(helmet());
- app.use((_req: IncomingMessage, res: ServerResponse) => {
- res.end("Hello world!");
- });
-
- const nonempty = /./;
- return request(app)
- .get("/")
- .expect("X-DNS-Prefetch-Control", nonempty)
- .expect("X-Frame-Options", nonempty)
- .expect("Strict-Transport-Security", nonempty)
- .expect("X-Download-Options", nonempty)
- .expect("X-Content-Type-Options", nonempty)
- .expect("X-XSS-Protection", nonempty);
- });
-});
diff --git a/test/strict-transport-security.test.ts b/test/strict-transport-security.test.ts
new file mode 100644
index 00000000..4370a922
--- /dev/null
+++ b/test/strict-transport-security.test.ts
@@ -0,0 +1,114 @@
+import { check } from "./helpers";
+import strictTransportSecurity from "../middlewares/strict-transport-security";
+
+describe("Strict-Transport-Security middleware", () => {
+ it('by default, sets max-age to 180 days and adds "includeSubDomains"', async () => {
+ expect(15552000).toStrictEqual(180 * 24 * 60 * 60);
+
+ const expectedHeaders = {
+ "strict-transport-security": "max-age=15552000; includeSubDomains",
+ };
+
+ await check(strictTransportSecurity(), expectedHeaders);
+ await check(strictTransportSecurity({}), expectedHeaders);
+ await check(
+ strictTransportSecurity({ maxAge: undefined }),
+ expectedHeaders
+ );
+ await check(
+ strictTransportSecurity({ includeSubDomains: undefined }),
+ expectedHeaders
+ );
+ });
+
+ it("sets the max-age to a non-negative integer", async () => {
+ await check(strictTransportSecurity({ maxAge: 1234 }), {
+ "strict-transport-security": "max-age=1234; includeSubDomains",
+ });
+ await check(strictTransportSecurity({ maxAge: 0 }), {
+ "strict-transport-security": "max-age=0; includeSubDomains",
+ });
+ await check(strictTransportSecurity({ maxAge: -0 }), {
+ "strict-transport-security": "max-age=0; includeSubDomains",
+ });
+ });
+
+ it("rounds non-integer max-ages down", async () => {
+ await check(strictTransportSecurity({ maxAge: 123.4 }), {
+ "strict-transport-security": "max-age=123; includeSubDomains",
+ });
+ await check(strictTransportSecurity({ maxAge: 123.5 }), {
+ "strict-transport-security": "max-age=123; includeSubDomains",
+ });
+ });
+
+ it("disables subdomains with the includeSubDomains option", async () => {
+ await check(strictTransportSecurity({ includeSubDomains: false }), {
+ "strict-transport-security": "max-age=15552000",
+ });
+ });
+
+ it("can enable preloading", async () => {
+ await check(strictTransportSecurity({ preload: true }), {
+ "strict-transport-security":
+ "max-age=15552000; includeSubDomains; preload",
+ });
+ });
+
+ it("can explicitly disable preloading", async () => {
+ await check(strictTransportSecurity({ preload: false }), {
+ "strict-transport-security": "max-age=15552000; includeSubDomains",
+ });
+ });
+
+ it("throws an error with invalid parameters", () => {
+ expect(() => strictTransportSecurity({ maxAge: -123 })).toThrow();
+ expect(() =>
+ strictTransportSecurity({ maxAge: BigInt(-123) as any })
+ ).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: -0.1 })).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: Infinity })).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: -Infinity })).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: NaN })).toThrow();
+
+ expect(() => strictTransportSecurity({ maxAge: "123" } as any)).toThrow();
+ expect(() =>
+ strictTransportSecurity({ maxAge: BigInt(123) } as any)
+ ).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: true } as any)).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: false } as any)).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: {} } as any)).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: [] } as any)).toThrow();
+ expect(() => strictTransportSecurity({ maxAge: null } as any)).toThrow();
+
+ expect(() => strictTransportSecurity({ maxage: false } as any)).toThrow();
+ expect(() => strictTransportSecurity({ maxage: 1234 } as any)).toThrow();
+ });
+
+ // This functionality only exists to ease the transition to this major version.
+ // It's safe to remove these warnings (and therefore these tests) without a
+ // breaking change.
+ describe("warnings for legacy usage", () => {
+ beforeEach(() => {
+ jest.spyOn(console, "warn").mockImplementation(() => {});
+ });
+
+ it("logs a warning when using the `includeSubdomains` parameter", () => {
+ strictTransportSecurity({ includeSubdomains: false } as any);
+
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ 'Strict-Transport-Security middleware should use `includeSubDomains` instead of `includeSubdomains`. (The correct one has an uppercase "D".)'
+ );
+ });
+
+ it("logs a warning when using the `setIf` parameter", () => {
+ strictTransportSecurity({ setIf: () => false } as any);
+
+ expect(console.warn).toHaveBeenCalledTimes(1);
+ expect(console.warn).toHaveBeenCalledWith(
+ "Strict-Transport-Security middleware no longer supports the `setIf` parameter. See the documentation and if you need help replicating this behavior."
+ );
+ });
+ });
+});
diff --git a/test/x-frame-options.test.ts b/test/x-frame-options.test.ts
index 2d9c2c30..a8491a60 100644
--- a/test/x-frame-options.test.ts
+++ b/test/x-frame-options.test.ts
@@ -2,7 +2,7 @@ import { check } from "./helpers";
import xFrameOptions from "../middlewares/x-frame-options";
describe("X-Frame-Options middleware", () => {
- it("sets header to SAMEORIGIN with no action", async () => {
+ it('sets "X-Frame-Options: SAMEORIGIN" when passed no action', async () => {
await check(xFrameOptions(), {
"x-frame-options": "SAMEORIGIN",
});
@@ -14,11 +14,10 @@ describe("X-Frame-Options middleware", () => {
});
});
- it('can set the header value to "DENY" when passed as a string', async () => {
+ it('can set "X-Frame-Options: DENY"', async () => {
await check(xFrameOptions({ action: "DENY" }), {
"x-frame-options": "DENY",
});
-
await check(xFrameOptions({ action: "deny" }), {
"x-frame-options": "DENY",
});
@@ -27,18 +26,16 @@ describe("X-Frame-Options middleware", () => {
});
});
- it('can set the header value to "SAMEORIGIN"', async () => {
+ it('can set "X-Frame-Options: SAMEORIGIN" when specified', async () => {
await check(xFrameOptions({ action: "SAMEORIGIN" }), {
"x-frame-options": "SAMEORIGIN",
});
-
await check(xFrameOptions({ action: "sameorigin" }), {
"x-frame-options": "SAMEORIGIN",
});
await check(xFrameOptions({ action: "sameORIGIN" }), {
"x-frame-options": "SAMEORIGIN",
});
-
await check(xFrameOptions({ action: "SAME-ORIGIN" }), {
"x-frame-options": "SAMEORIGIN",
});
@@ -47,96 +44,17 @@ describe("X-Frame-Options middleware", () => {
});
});
- it('can set the action to "ALLOW-FROM"', async () => {
- await check(
- xFrameOptions({ action: "ALLOW-FROM", domain: "https://example.com" }),
- {
- "x-frame-options": "ALLOW-FROM https://example.com",
- }
- );
-
- await check(
- xFrameOptions({ action: "allow-FROM", domain: "https://example.com" }),
- {
- "x-frame-options": "ALLOW-FROM https://example.com",
- }
- );
-
- await check(
- xFrameOptions({ action: "ALLOWFROM", domain: "https://example.com" }),
- {
- "x-frame-options": "ALLOW-FROM https://example.com",
- }
- );
- await check(
- xFrameOptions({ action: "allowFROM", domain: "https://example.com" }),
- {
- "x-frame-options": "ALLOW-FROM https://example.com",
- }
- );
- });
-
- it('works with String object set to "SAMEORIGIN" and doesn\'t change them', async () => {
- const str = new String("SAMEORIGIN"); // eslint-disable-line no-new-wrappers
- await check(xFrameOptions({ action: str as any }), {
- "x-frame-options": "SAMEORIGIN",
- });
- expect(str.valueOf()).toBe("SAMEORIGIN");
- });
-
- it("works with ALLOW-FROM with String objects and doesn't change them", async () => {
- const directive = new String("ALLOW-FROM"); // eslint-disable-line no-new-wrappers
- const url = new String("http://example.com"); // eslint-disable-line no-new-wrappers
- await check(
- xFrameOptions({ action: directive as any, domain: url as any }),
- {
- "x-frame-options": "ALLOW-FROM http://example.com",
- }
- );
- expect(directive.valueOf()).toBe("ALLOW-FROM");
- expect(url.valueOf()).toBe("http://example.com");
- });
-
- it("fails with a bad action", () => {
- expect(xFrameOptions.bind(null, { action: " " })).toThrow();
- expect(xFrameOptions.bind(null, { action: "denyy" })).toThrow();
- expect(xFrameOptions.bind(null, { action: "DENNY" })).toThrow();
- expect(xFrameOptions.bind(null, { action: " deny " })).toThrow();
- expect(xFrameOptions.bind(null, { action: " DENY " })).toThrow();
- expect(xFrameOptions.bind(null, { action: 123 as any })).toThrow();
- expect(xFrameOptions.bind(null, { action: false as any })).toThrow();
- expect(xFrameOptions.bind(null, { action: null as any })).toThrow();
- expect(xFrameOptions.bind(null, { action: {} as any })).toThrow();
- expect(xFrameOptions.bind(null, { action: [] as any })).toThrow();
- expect(
- xFrameOptions.bind(null, {
- action: ["ALLOW-FROM", "http://example.com"] as any,
- })
- ).toThrow();
- expect(
- xFrameOptions.bind(null, { action: /cool_regex/g as any })
- ).toThrow();
- });
+ it("throws when passed invalid actions", () => {
+ for (const action of ["allow-from", "ALLOW-FROM"]) {
+ expect(() => xFrameOptions({ action })).toThrow(
+ /^X-Frame-Options no longer supports `ALLOW-FROM` due to poor browser support. See for more info.$/
+ );
+ }
- it('fails with a bad domain if the action is "ALLOW-FROM"', () => {
- expect(xFrameOptions.bind(null, { action: "ALLOW-FROM" })).toThrow();
- expect(
- xFrameOptions.bind(null, { action: "ALLOW-FROM", domain: null as any })
- ).toThrow();
- expect(
- xFrameOptions.bind(null, { action: "ALLOW-FROM", domain: false as any })
- ).toThrow();
- expect(
- xFrameOptions.bind(null, { action: "ALLOW-FROM", domain: 123 as any })
- ).toThrow();
- expect(
- xFrameOptions.bind(null, { action: "ALLOW-FROM", domain: "" })
- ).toThrow();
- expect(
- xFrameOptions.bind(null, {
- action: "ALLOW-FROM",
- domain: ["http://website.com", "http//otherwebsite.com"] as any,
- })
- ).toThrow();
+ for (const action of ["garbage", "", 123 as any, null as any]) {
+ expect(() => xFrameOptions({ action })).toThrow(
+ /^X-Frame-Options received an invalid action /
+ );
+ }
});
});
diff --git a/test/x-powered-by.test.ts b/test/x-powered-by.test.ts
index 4da16cda..78df5c03 100644
--- a/test/x-powered-by.test.ts
+++ b/test/x-powered-by.test.ts
@@ -19,10 +19,4 @@ describe("X-Powered-By middleware", () => {
}
);
});
-
- it("allows you to explicitly set the header", async () => {
- await check(xPoweredBy({ setTo: "steampowered" }), {
- "x-powered-by": "steampowered",
- });
- });
});
diff --git a/test/x-xss-protection.test.ts b/test/x-xss-protection.test.ts
new file mode 100644
index 00000000..82b89001
--- /dev/null
+++ b/test/x-xss-protection.test.ts
@@ -0,0 +1,10 @@
+import { check } from "./helpers";
+import xXssProtection from "../middlewares/x-xss-protection";
+
+describe("X-XSS-Protection middleware", () => {
+ it('sets "X-XSS-Protection: 0"', async () => {
+ await check(xXssProtection(), {
+ "x-xss-protection": "0",
+ });
+ });
+});
diff --git a/tsconfig.json b/tsconfig.json
index b72289c5..77160189 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,6 +9,6 @@
"noUnusedParameters": true,
"outDir": "./dist",
"strict": true,
- "target": "es5"
+ "target": "es6"
}
}