From 0aaf04f9c11775c60b1be63554958412a5997294 Mon Sep 17 00:00:00 2001 From: Jesse Stuart Date: Mon, 22 Apr 2019 04:59:38 -0400 Subject: [PATCH] ref(build): Use babel instead of tsc for transpiling. Signed-off-by: Jesse Stuart --- .babelrc | 3 - .gitignore | 4 +- README.md | 92 +++++--- babel.config.js | 17 ++ jest.config.js | 2 +- package.json | 15 +- src/__tests__/source-nodes.spec.ts | 74 ++++--- src/source-nodes.ts | 62 ++++-- src/types/constants.ts | 0 tsconfig.json | 22 +- tslint.json | 19 -- yarn.lock | 335 ++++++++++++++++++++++++++--- 12 files changed, 495 insertions(+), 150 deletions(-) delete mode 100644 .babelrc create mode 100644 babel.config.js delete mode 100644 src/types/constants.ts delete mode 100644 tslint.json diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 0a2b5d68..00000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["babel-preset-gatsby-package", "@babel/preset-typescript"] -} diff --git a/.gitignore b/.gitignore index 4aeda380..59a01b56 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -!*.config.js +# vim set ft=gitignore **/*.d.ts **/*.map *.tgz @@ -11,3 +11,5 @@ /types/ report* tags* +# ========================================== +!*.config.js diff --git a/README.md b/README.md index a7de3b8d..7566fb22 100644 --- a/README.md +++ b/README.md @@ -7,18 +7,37 @@ gatsby-source-s3-image -[![CircleCI][circleci-badge]][circleci-link] -[![npm][npm-badge]][npm-link] +[![CircleCI][circleci-badge]][circleci-link] [![npm][npm-badge]][npm-link] [![Maintainability][codeclimate]][codeclimate 2] [![codecov][codecov]][codecov 2] -GatsbyJS Source plugin for **converting images from an S3-compliant API[1] into -GatsbyJS nodes** (with full support for hooking into all of the powerful -features the `GatsbyImage` API has to offer). +## What is this? -Additionally, `gatsby-source-s3-image` will **automatically detect and extract -image EXIF metadata from your photos**, and expose this data at the GraphQL -layer as node fields. Currently supported EXIF fields include: +`gatsby-source-s3-image` is a [GatsbyJS][github] _Source_ plugin for +**converting images from any S3-compliant API[1] into GatsbyJS nodes**. + +[1] This includes AWS S3, of course, as well as third-party solutions like +Digital Ocean Spaces, or open source / self-hosted products like [MinIO][min]. + +### But I can just query S3 manually client-side... + +Sure, knock yourself out. But there are a few benefits you get out-of-the-box +with this package: + +- Native integration with Gatsby's GraphQL data ontology, of course. You just + provide the bucket details (and IAM credentials, if not public, which is + recommended). +- Several other benefits come with this tight integration with Gatsby API's, + such as intelligent caching (nobody wants to wind up with an unexpected S3 + bill as your CI server happily churns out builds, amiright?); automatic image + asset optimization thanks to `gatsby-image`, etc. +- And to top things off — `gatsby-source-s3-image` will **automatically detect + and extract image EXIF metadata from your photos**, and expose this data at + +### Tell me more about this EXIF stuff. + +Currently supported EXIF fields that are automatically extracted when available +include: - `DateCreatedISO` (`string`) - `DateTimeOriginal` (`number`) @@ -34,7 +53,8 @@ These fields are properties of the "wrapper" node, `S3ImageAsset`. This type composes the `ImageSharp` node, the `File` node representing the cached image on disk (fetched via the `RemoteFileNode` API), and lastly the extracted EXIF data. As a result, you can easily retrieve both a set of images as well as any subset -of their associated metadata in a single request. For example: +of their associated metadata in a single request — or just the metadata by +itself, if that's all you need. For example: ```es6 export const pageQuery = graphql` @@ -55,13 +75,13 @@ export const pageQuery = graphql` height width } - thumbnailSizes: fluid(maxWidth: 512) { + thumbnailSizes: fluid(maxWidth: 256) { aspectRatio src srcSet sizes } - largeSizes: fluid(maxWidth: 1536) { + largeSizes: fluid(maxWidth: 1024) { aspectRatio src srcSet @@ -76,13 +96,11 @@ export const pageQuery = graphql` ` ``` -[1] This includes AWS S3, of course, as well as third-party solutions like -Digital Ocean Spaces, or open source / self-hosted products like -[MinIO][min]. +## Usage ### Setup -1. Add the dependency to your `package.json`: +Add the dependency to your `package.json`: ```console $ yarn add gatsby-source-s3-image @@ -90,9 +108,9 @@ $ # Or: $ npm install --save gatsby-source-s3-image ``` -1. Next, register the plugin with the GatsbyJS runtime in the `plugins` exported - from your `gatsby-config.js` file, filling in the values to point to wherever - your bucket is hosted: +Next, register the plugin with the GatsbyJS runtime in the `plugins` field +exported from your `gatsby-config.js` file, filling in the values to point to +wherever your bucket is hosted: ```es6 const sourceS3 = { @@ -112,10 +130,10 @@ const plugins = [ module.exports = { plugins } ``` -### Querying +## Querying -1. As mentioned above, `gatsby-source-s3-image` exposes nodes of type - `S3ImageAsset`: +As mentioned above, `gatsby-source-s3-image` exposes nodes of type +`S3ImageAsset`: ```typescript interface S3ImageAssetNode { @@ -146,13 +164,13 @@ interface ExifData { ``` Not only can this be used to populate page data, I've found it useful in -bootstrapping the pages themselves, e.g., to dynamically create dynamic photo -gallery pages at build time depending on the contents of a bucket, something -like: +bootstrapping the pages themselves, e.g., to programmatically create dynamic +Photo Gallery pages at build time depending on the contents of a bucket. For +example: ```es6 // In `gatsby-node.js` -- using a query like this: -const photographyQuery = `{ +const photographyQuery = graphql`{ allS3ImageAsset { edges { node { @@ -191,12 +209,28 @@ const createPages = ({ actions }) => { } ``` -[circleci-badge]: https://circleci.com/gh/jessestuart/gatsby-source-s3-image.svg?style=shield +## _Nota Bene:_ Gatsby Version Compatibility + +`gatsby-source-s3-image` was recently [updated][github 2] to support Gatsby V2, +which required some breaking changes. The Gatsby V1-compatible version of the +plugin is still fully functional, and will continue to receive maintenance +updates as necessary. The last release compatible with Gatsby V1 can be found +[here][github 3] + +[circleci-badge]: + https://circleci.com/gh/jessestuart/gatsby-source-s3-image.svg?style=shield [circleci-link]: https://circleci.com/gh/jessestuart/gatsby-source-s3-image -[codeclimate 2]: https://codeclimate.com/github/jessestuart/gatsby-source-s3-image/maintainability -[codeclimate]: https://api.codeclimate.com/v1/badges/4488634e45e84d3cbdbe/maintainability +[codeclimate]: + https://api.codeclimate.com/v1/badges/4488634e45e84d3cbdbe/maintainability +[codeclimate 2]: + https://codeclimate.com/github/jessestuart/gatsby-source-s3-image/maintainability +[codecov]: + https://codecov.io/gh/jessestuart/gatsby-source-s3-image/branch/master/graph/badge.svg [codecov 2]: https://codecov.io/gh/jessestuart/gatsby-source-s3-image -[codecov]: https://codecov.io/gh/jessestuart/gatsby-source-s3-image/branch/master/graph/badge.svg +[github]: https://github.com/gatsbyjs/gatsby +[github 2]: https://github.com/jessestuart/gatsby-source-s3-image/pull/238 +[github 3]: + https://github.com/jessestuart/gatsby-source-s3-image/releases/tag/v0.2.133 [min]: https://min.io [npm-badge]: https://img.shields.io/npm/v/gatsby-source-s3-image.svg [npm-link]: https://www.npmjs.com/package/gatsby-source-s3-image diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..d1ac5f2d --- /dev/null +++ b/babel.config.js @@ -0,0 +1,17 @@ +module.exports = { + sourceRoot: 'src/', + ignore: ['./src/__tests__/*'], + presets: [ + [ + '@babel/preset-env', + { + // For more info on babel + core-js v3, + // @see https://babeljs.io/blog/2019/03/19/7.4.0 + useBuiltIns: 'usage', + corejs: 3, + }, + ], + '@babel/preset-typescript', + 'minify', + ], +} diff --git a/jest.config.js b/jest.config.js index 7070d19f..86d1f3c6 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,6 +1,6 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', - testRegex: '(/__tests__/.*\\.([tj]sx?)|(\\.|/)(test|spec))\\.([tj]sx?)$', + testRegex: '(/__tests__/.*\\.([t]sx?)|(\\.|/)(test|spec))\\.([t]sx?)$', transform: { '^.+\\.tsx?$': 'ts-jest' }, } diff --git a/package.json b/package.json index 58bf8d04..1d325ed9 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "version": "1.1.1", "author": "Jesse Stuart ", "dependencies": { - "@babel/runtime": "7.4.3", "aws-sdk": "2.441.0", "bluebird": "3.5.4", "exif-parser": "0.1.12", @@ -16,18 +15,24 @@ "@babel/cli": "7.4.3", "@babel/core": "7.4.3", "@babel/preset-typescript": "7.3.3", + "@babel/runtime": "7.4.3", "@semantic-release/git": "7.0.8", "@types/bluebird": "3.5.26", "@types/jest": "24.0.11", "@types/lodash": "4.14.123", - "@types/node": "11.13.7", + "@types/mitm": "1.3.2", + "@types/node": "11.13.6", + "@types/redux-mock-store": "1.0.0", "@typescript-eslint/eslint-plugin": "1.7.0", "@typescript-eslint/parser": "1.7.0", "babel-jest": "24.7.1", "babel-plugin-add-module-exports": "1.0.2", "babel-plugin-lodash": "3.3.4", "babel-preset-gatsby-package": "0.1.4", + "babel-preset-minify": "0.5.0", "codecov": "3.3.0", + "concurrently": "4.1.0", + "core-js": "3", "eslint": "5.16.0", "eslint-config-prettier": "4.1.0", "eslint-config-standard": "12.0.0", @@ -75,11 +80,13 @@ "url": "git+https://github.com/jessestuart/gatsby-source-s3-image" }, "scripts": { - "build": "tsc", + "build": "babel --extensions '.ts' src/ --out-dir .", + "check-types": "tsc", "lint": "eslint src/** --ext ts,tsx", "prepublishOnly": "yarn build", "semantic-release": "yarn build && semantic-release", - "test": "jest", + "test": "concurrently 'yarn check-types' 'yarn jest'", + "test:watch": "concurrently 'yarn tsc --watch' 'yarn jest --watch'", "update": "ncu -ua && yarn -s", "watch": "yarn build -w" }, diff --git a/src/__tests__/source-nodes.spec.ts b/src/__tests__/source-nodes.spec.ts index 202be7ba..1c916177 100644 --- a/src/__tests__/source-nodes.spec.ts +++ b/src/__tests__/source-nodes.spec.ts @@ -1,55 +1,59 @@ -import sourceFilesystem from 'gatsby-source-filesystem' - -import Mitm from 'mitm' -import configureMockStore from 'redux-mock-store' - -import { sourceNodes } from '../source-nodes' -import fixtures from './fixtures.json' - -const mockStore = configureMockStore() +import sourceFilesystem from 'gatsby-source-filesystem'; +import _ from 'lodash'; +import Mitm from 'mitm'; +import configureMockStore from 'redux-mock-store'; +import { sourceNodes } from '../source-nodes'; +import fixtures from './fixtures.json'; // Mock out Gatby's source-filesystem API. sourceFilesystem.createRemoteFileNode = jest.fn() -// Mock out `aws-sdk` module to prevent unnecessary calls to S3 during testing. jest.mock('aws-sdk', () => ({ S3: class { - public listObjectsV2() { - return { - promise: () => fixtures, - } - } + public listObjectsV2 = (..._: any[]) => ({ promise: () => fixtures }) }, })) -describe('source S3ImageAsset nodes', () => { - let args +describe('Source S3ImageAsset nodes.', () => { let nodes = {} - - beforeEach(() => { - args = { - actions: { - createNode: jest.fn(node => (nodes[node.id] = node)), - }, - cache: { - get: jest.fn(), - set: jest.fn(), - }, - createContentDigest: jest.fn(), - createNodeId: jest.fn(), - store: mockStore, - } - Mitm().on('request', () => { - throw new Error('Network requests forbidden in offline mode.') + let mockStore = {} + + const sourceNodeArgs = { + actions: { + createNode: jest.fn(node => (nodes[node.id] = node)), + }, + cache: { + get: jest.fn(), + set: jest.fn(), + }, + createContentDigest: jest.fn(), + createNodeId: jest.fn(), + store: mockStore, + } + + beforeAll(() => { + mockStore = configureMockStore() + + Mitm().on('request', req => { + const host = _.get(req, 'headers.host') + const url = _.get(req, 'url') + throw new Error( + `Network requests forbidden in offline mode. Tried to call URL "${host}${url}"` + ) }) }) - test('sourceNodes', async () => { + test('Verify sourceNodes creates the correct # of nodes, given our fixtures.', async () => { // NB: pulls from fixtures defined above, not S3 API. - const entityNodes = await sourceNodes(args, { bucketName: 'fake-bucket' }) + const entityNodes = await sourceNodes(sourceNodeArgs, { + bucketName: 'fake-bucket', + }) // `createRemoteFileNode` called once for each of the five images in fixtures. expect(sourceFilesystem.createRemoteFileNode).toHaveBeenCalledTimes(5) // 5 images + 2 directories = 7 nodes expect(entityNodes).toHaveLength(7) }) + + // TODO + test('Verify getNodeEntityFields utils func.', () => {}) }) diff --git a/src/source-nodes.ts b/src/source-nodes.ts index 5377603a..e55c4de3 100644 --- a/src/source-nodes.ts +++ b/src/source-nodes.ts @@ -1,9 +1,8 @@ -import { createRemoteFileNode } from 'gatsby-source-filesystem' -import AWS from 'aws-sdk' -import _ from 'lodash' -import mime from 'mime-types' - -import { constructS3UrlForAsset, isImage } from './utils' +import AWS from 'aws-sdk'; +import { createRemoteFileNode } from 'gatsby-source-filesystem'; +import _ from 'lodash'; +import mime from 'mime-types'; +import { constructS3UrlForAsset, isImage } from './utils'; // ================= // AWS config setup. @@ -24,14 +23,13 @@ export interface SourceS3Options { // overridden to e.g., support CDN's (such as CloudFront), // or any other S3-compliant API (such as DigitalOcean // Spaces.) - domain?: string - // Defaults to HTTPS. + domain?: string // Defaults to HTTP. protocol?: string } export const sourceNodes = async ( { actions, cache, createNodeId, store }, - { bucketName, domain, protocol = 'https' }: SourceS3Options + { bucketName, domain, protocol = 'http' }: SourceS3Options ): Promise => { const { createNode } = actions @@ -97,7 +95,7 @@ export const createS3ImageAssetNode = async ({ url, }: { createNode: Function - createNodeId: (any) => string + createNodeId: (node: any) => string entity: AWS.S3.Object fileNode: { absolutePath: string; id: string } url: string @@ -106,17 +104,14 @@ export const createS3ImageAssetNode = async ({ return Promise.reject() } - const { ETag, Key } = entity - // TODO: Use the `mime-types` lib to populate this dynamically. - // const ContentType = 'image/jpeg' - const mediaType = mime.lookup(entity.Key) - // Remove obnoxious escaped double quotes in S3 object's ETag. For reference: - // > The entity tag is a hash of the object. The ETag reflects changes only - // > to the contents of an object, not its metadata. - // @see https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html - const objectHash: string = ETag!.replace(/"/g, '') - const fileNodeId: string = _.get(fileNode, 'id') - const absolutePath: string = _.get(fileNode, 'absolutePath') + const { + absolutePath, + fileNodeId, + Key, + mediaType, + objectHash, + } = getEntityNodeFields({ entity, fileNode }) + return await createNode({ ...entity, absolutePath: absolutePath, @@ -133,3 +128,28 @@ export const createS3ImageAssetNode = async ({ }, }) } + +export const getEntityNodeFields = ({ + entity, + fileNode, +}: { + entity: any + fileNode: any +}) => { + const { ETag, Key } = entity + const mediaType = mime.lookup(entity.Key) + // Remove obnoxious escaped double quotes in S3 object's ETag. For reference: + // > The entity tag is a hash of the object. The ETag reflects changes only + // > to the contents of an object, not its metadata. + // @see https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html + const objectHash: string = ETag!.replace(/"/g, '') + const fileNodeId: string = _.get(fileNode, 'id') + const absolutePath: string = _.get(fileNode, 'absolutePath') + return { + absolutePath, + fileNodeId, + Key, + mediaType, + objectHash, + } +} diff --git a/src/types/constants.ts b/src/types/constants.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/tsconfig.json b/tsconfig.json index d387ece4..562ea77f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,24 @@ { "compilerOptions": { + // Target latest version of ECMAScript. + "target": "esnext", + // Search under node_modules for non-relative imports. + "moduleResolution": "node", + // Process & infer types from .js files. + "allowJs": true, + // Don't emit; allow Babel to transform files. + "noEmit": true, + // Enable strictest settings like strictNullChecks & noImplicitAny. + "strict": true, + // Disallow features that require cross-file information for emit. + "isolatedModules": true, + // Import non-ES modules as default imports. + "esModuleInterop": true, "allowSyntheticDefaultImports": true, "declaration": false, - "esModuleInterop": true, + "inlineSourceMap": true, "inlineSources": true, "lib": ["esnext", "es2015"], - "module": "commonjs", - "moduleResolution": "node", "noImplicitAny": false, "noImplicitReturns": true, "noUnusedLocals": true, @@ -14,11 +26,9 @@ "outDir": ".", "resolveJsonModule": true, "rootDir": "src", - "sourceMap": true, "strictNullChecks": true, - "target": "es6", "types": ["node", "jest"] }, "include": ["src/**/*"], - "exclude": ["node_modules/**", "**/__tests__/*", "**/__mocks__/*"] + "exclude": ["node_modules/**"] } diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 1eecf4d8..00000000 --- a/tslint.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": [ - "tslint:recommended", - "tslint-config-standard", - "tslint-config-prettier" - ], - "plugins": ["tslint-plugin-prettier"], - "defaultSeverity": "error", - "linterOptions": { - "include": ["src/**/*.{ts,tsx}"], - "exclude": ["node_modules"] - }, - "rules": { - "semicolon": [true, "never", "ignore-interfaces"], - "interface-name": false, - "no-use-before-declare": false, - "trailing-comma": [true, "es5"] - } -} diff --git a/yarn.lock b/yarn.lock index 23fedb4a..685ce764 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1170,15 +1170,29 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== +"@types/mitm@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mitm/-/mitm-1.3.2.tgz#a26910aa0ce746b60a58ad7ca27dceb18119e6ec" + integrity sha1-omkQqgznRrYKWK18on3OsYEZ5uw= + dependencies: + "@types/node" "*" + "@types/node@*": + version "11.13.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.7.tgz#85dbb71c510442d00c0631f99dae957ce44fd104" + integrity sha512-suFHr6hcA9mp8vFrZTgrmqW2ZU3mbWsryQtQlY/QvwTISCw7nw/j+bCQPPohqmskhmqa5wLNuMHTTsc+xf1MQg== + +"@types/node@11.13.6": version "11.13.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.6.tgz#37ec75690830acb0d74ce3c6c43caab787081e85" integrity sha512-Xoo/EBzEe8HxTSwaZNLZjaW6M6tA/+GmD3/DZ6uo8qSaolE/9Oarko0oV1fVfrLqOz0tx0nXJB4rdD5c+vixLw== -"@types/node@11.13.7": - version "11.13.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.7.tgz#85dbb71c510442d00c0631f99dae957ce44fd104" - integrity sha512-suFHr6hcA9mp8vFrZTgrmqW2ZU3mbWsryQtQlY/QvwTISCw7nw/j+bCQPPohqmskhmqa5wLNuMHTTsc+xf1MQg== +"@types/redux-mock-store@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/redux-mock-store/-/redux-mock-store-1.0.0.tgz#e06bad2b4ca004bdd371f432c3e48a92c1857ed9" + integrity sha512-7+H3+O8VX4Mx2HNdDLP1MSNoWp+FXfq3HDGc08kY5vxyuml7OAudO4CAQFsKsDvbU5spApJMZ6buEi/c3hKjtQ== + dependencies: + redux "^4.0.0" "@types/stack-utils@^1.0.1": version "1.0.1" @@ -1238,9 +1252,9 @@ abbrev@1, abbrev@~1.1.1: integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== acorn-globals@^4.1.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.1.tgz#deb149c59276657ebd40ba2ba849ddd529763ccf" - integrity sha512-gJSiKY8dBIjV/0jagZIFBdVMtfQyA5QHCvAT48H2q8REQoW8Fs5AOjqBql1LgSXgrMWdevcE+8cdZ33NtVbIBA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" + integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" @@ -1586,6 +1600,41 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-helper-evaluate-path@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" + integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA== + +babel-helper-flip-expressions@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd" + integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0= + +babel-helper-is-nodes-equiv@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" + integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= + +babel-helper-is-void-0@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e" + integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4= + +babel-helper-mark-eval-scopes@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" + integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI= + +babel-helper-remove-or-void@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" + integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA= + +babel-helper-to-multiple-sequence-expressions@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" + integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== + babel-jest@24.7.1, babel-jest@^24.7.1: version "24.7.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178" @@ -1633,6 +1682,139 @@ babel-plugin-lodash@3.3.4: lodash "^4.17.10" require-package-name "^2.0.1" +babel-plugin-minify-builtins@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b" + integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag== + +babel-plugin-minify-constant-folding@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e" + integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-minify-dead-code-elimination@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.0.tgz#d23ef5445238ad06e8addf5c1cf6aec835bcda87" + integrity sha512-XQteBGXlgEoAKc/BhO6oafUdT4LBa7ARi55mxoyhLHNuA+RlzRmeMAfc31pb/UqU01wBzRc36YqHQzopnkd/6Q== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-mark-eval-scopes "^0.4.3" + babel-helper-remove-or-void "^0.4.3" + lodash.some "^4.6.0" + +babel-plugin-minify-flip-comparisons@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a" + integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo= + dependencies: + babel-helper-is-void-0 "^0.4.3" + +babel-plugin-minify-guarded-expressions@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.3.tgz#cc709b4453fd21b1f302877444c89f88427ce397" + integrity sha1-zHCbRFP9IbHzAod0RMifiEJ845c= + dependencies: + babel-helper-flip-expressions "^0.4.3" + +babel-plugin-minify-infinity@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca" + integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco= + +babel-plugin-minify-mangle-names@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3" + integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw== + dependencies: + babel-helper-mark-eval-scopes "^0.4.3" + +babel-plugin-minify-numeric-literals@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc" + integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw= + +babel-plugin-minify-replace@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c" + integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q== + +babel-plugin-minify-simplify@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.0.tgz#1f090018afb90d8b54d3d027fd8a4927f243da6f" + integrity sha512-TM01J/YcKZ8XIQd1Z3nF2AdWHoDsarjtZ5fWPDksYZNsoOjQ2UO2EWm824Ym6sp127m44gPlLFiO5KFxU8pA5Q== + dependencies: + babel-helper-flip-expressions "^0.4.3" + babel-helper-is-nodes-equiv "^0.0.1" + babel-helper-to-multiple-sequence-expressions "^0.5.0" + +babel-plugin-minify-type-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500" + integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA= + dependencies: + babel-helper-is-void-0 "^0.4.3" + +babel-plugin-transform-inline-consecutive-adds@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" + integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE= + +babel-plugin-transform-member-expression-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" + integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= + +babel-plugin-transform-merge-sibling-variables@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" + integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= + +babel-plugin-transform-minify-booleans@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" + integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= + +babel-plugin-transform-property-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" + integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= + dependencies: + esutils "^2.0.2" + +babel-plugin-transform-regexp-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965" + integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU= + +babel-plugin-transform-remove-console@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" + integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= + +babel-plugin-transform-remove-debugger@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" + integrity sha1-QrcnYxyXl44estGZp67IShgznvI= + +babel-plugin-transform-remove-undefined@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd" + integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-transform-simplify-comparison-operators@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" + integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= + +babel-plugin-transform-undefined-to-void@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" + integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= + babel-preset-gatsby-package@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/babel-preset-gatsby-package/-/babel-preset-gatsby-package-0.1.4.tgz#3a55db06171377199b6f184b3192ec79595312b0" @@ -1654,6 +1836,35 @@ babel-preset-jest@^24.6.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.6.0" +babel-preset-minify@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.0.tgz#e25bb8d3590087af02b650967159a77c19bfb96b" + integrity sha512-xj1s9Mon+RFubH569vrGCayA9Fm2GMsCgDRm1Jb8SgctOB7KFcrVc2o8K3YHUyMz+SWP8aea75BoS8YfsXXuiA== + dependencies: + babel-plugin-minify-builtins "^0.5.0" + babel-plugin-minify-constant-folding "^0.5.0" + babel-plugin-minify-dead-code-elimination "^0.5.0" + babel-plugin-minify-flip-comparisons "^0.4.3" + babel-plugin-minify-guarded-expressions "^0.4.3" + babel-plugin-minify-infinity "^0.4.3" + babel-plugin-minify-mangle-names "^0.5.0" + babel-plugin-minify-numeric-literals "^0.4.3" + babel-plugin-minify-replace "^0.5.0" + babel-plugin-minify-simplify "^0.5.0" + babel-plugin-minify-type-constructors "^0.4.3" + babel-plugin-transform-inline-consecutive-adds "^0.4.3" + babel-plugin-transform-member-expression-literals "^6.9.4" + babel-plugin-transform-merge-sibling-variables "^6.9.4" + babel-plugin-transform-minify-booleans "^6.9.4" + babel-plugin-transform-property-literals "^6.9.4" + babel-plugin-transform-regexp-constructors "^0.4.3" + babel-plugin-transform-remove-console "^6.9.4" + babel-plugin-transform-remove-debugger "^6.9.4" + babel-plugin-transform-remove-undefined "^0.5.0" + babel-plugin-transform-simplify-comparison-operators "^6.9.4" + babel-plugin-transform-undefined-to-void "^6.9.4" + lodash.isplainobject "^4.0.6" + babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -2325,6 +2536,21 @@ concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concurrently@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.0.tgz#17fdf067da71210685d9ea554423ef239da30d33" + integrity sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg== + dependencies: + chalk "^2.4.1" + date-fns "^1.23.0" + lodash "^4.17.10" + read-pkg "^4.0.1" + rxjs "^6.3.3" + spawn-command "^0.0.2-1" + supports-color "^4.5.0" + tree-kill "^1.1.0" + yargs "^12.0.1" + config-chain@^1.1.12: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" @@ -2439,7 +2665,7 @@ core-js-pure@3.0.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.0.1.tgz#37358fb0d024e6b86d443d794f4e37e949098cbe" integrity sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g== -core-js@3.0.1: +core-js@3, core-js@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.1.tgz#1343182634298f7f38622f95e73f54e48ddf4738" integrity sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew== @@ -2536,6 +2762,11 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" +date-fns@^1.23.0: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -2569,7 +2800,7 @@ debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -debuglog@^1.0.1: +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -4052,7 +4283,7 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -5262,6 +5493,11 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= + lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -5270,11 +5506,33 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= + dependencies: + lodash._getnative "^3.0.0" + lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -5315,11 +5573,21 @@ lodash.merge@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= + lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= +lodash.some@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -5604,25 +5872,13 @@ mime-db@1.40.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== -mime-db@~1.39.0: - version "1.39.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.39.0.tgz#f95a20275742f7d2ad0429acfe40f4233543780e" - integrity sha512-DTsrw/iWVvwHH+9Otxccdyy0Tgiil6TWK/xhfARJZF/QFhwOgZgOIvA2/VIGpM8U7Q8z5nDmdDWC6tuVMJNibw== - -mime-types@2.1.24: +mime-types@2.1.24, mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== dependencies: mime-db "1.40.0" -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.23" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.23.tgz#d4eacd87de99348a6858fe1e479aad877388d977" - integrity sha512-ROk/m+gMVSrRxTkMlaQOvFmFmYDc7sZgrjjM76abqmd2Cc5fCV7jAMA5XUccEtJ3cYiYdgixUVI+fApc2LkXlw== - dependencies: - mime-db "~1.39.0" - mime@^2.0.3, mime@^2.2.0: version "2.4.2" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78" @@ -7079,7 +7335,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^4.0.0: +read-pkg@^4.0.0, read-pkg@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= @@ -7118,7 +7374,7 @@ readable-stream@~1.1.10: isarray "0.0.1" string_decoder "~0.10.x" -readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= @@ -7166,7 +7422,7 @@ redux-mock-store@1.5.3: dependencies: lodash.isplainobject "^4.0.6" -redux@4.0.1: +redux@4.0.1, redux@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== @@ -7460,7 +7716,7 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= -rxjs@^6.4.0: +rxjs@^6.3.3, rxjs@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== @@ -7792,6 +8048,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= + spawn-error-forwarder@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" @@ -8039,6 +8300,13 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.0.0, supports-color@^5.2.0, supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8256,6 +8524,11 @@ traverse@~0.6.6: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= +tree-kill@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" + integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== + trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" @@ -8341,9 +8614,9 @@ typescript@^2.5.1: integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== uglify-js@^3.1.4: - version "3.5.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.5.tgz#9c5aaaf3a7586fbf559df31fa6d3bca1b3ba7e9b" - integrity sha512-e58FqZzPwaLODQetDQKlvErZaGkh1UmzP8YwU0aG65NLourKNtwVyDG8tkIyUU0vqWzxaikSvTaxrCSscmvqvQ== + version "3.5.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.6.tgz#8a5f8a06ee7415ac1fa302f4623bc7344b553da4" + integrity sha512-YDKRX8F0Y+Jr7LhoVk0n4G7ltR3Y7qFAj+DtVBthlOgCcIj1hyMigCfousVfn9HKmvJ+qiFlLDwaHx44/e5ZKw== dependencies: commander "~2.20.0" source-map "~0.6.1" @@ -8856,7 +9129,7 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^12.0.0, yargs@^12.0.2: +yargs@^12.0.0, yargs@^12.0.1, yargs@^12.0.2: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==